Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá!
Tenho a intenção de criar um bloco de notas, onde será inserido um título e uma nota.
Para cada nota inserida, será criado um tab.
Eu quero clicar sobre o tab e carregar o título e a nota em um input e área de texto automaticamente.
Para recuperar os valores estou usando o seguinte código:
<?php
$this->db->order_by('id' , 'desc');
$this->db->where('usuario_id' , $this->session->userdata('id'));
$this->db->where('usuario_nome' , $this->session->userdata('usuario_nome'));
$nota = $this->db->get('nota')->result_array();
?>
Porem não estou conseguindo exibir no bloco somente do id clicado(tab selecionada).
Para cada nota, está sendo exibido um bloco(Ver imagem de exemplo).
Abaixo está todo o código que estou utilizando até então:
<?php
$this->db->order_by('id' , 'desc');
$this->db->where('usuario_id' , $this->session->userdata('id'));
$this->db->where('usuario_nome' , $this->session->userdata('usuario_nome'));
$nota = $this->db->get('nota')->result_array();
?>
<div class="row">
<div class="col-sm-4">
<ul class="nav tabs-vertical" style="">
<?php foreach ($nota as $row){?>
<li class="active">
<a href="#<?php echo $row['id'];?>" data-toggle="tab"> <i class=""></i> <?php echo $row['titulo'];?> </a>
</li>
<?php }?>
</ul>
</div>
<div class="col-sm-8">
<div class="tab-content" style="width: 70%;">
<?php
$counter = 0;
foreach ($nota as $row):
$counter++;
?>
<div class="tab-pane active"
" id="<?php echo $row['id'];?>">
<div id="sample" class="ruledpaper ">
<div class="form-group" style="margin: 0px;">
<div class="col-md-12" style="padding:0px; background-color: #FFFCEE; font-size: 5px;">
<input type="text" class="form-control" rows="14" style="padding: 5px; border:0px; background-color: #fff6cc; font-size: 18px;" name="titulo" placeholder="Título" value="<?php echo $row['titulo'];?>">
</div>
</div>
<hr style="margin: 0px;" />
<div class="form-group">
<div class="col-md-12" style="padding:0px;">
<textarea maxlength="60" class="ruledpaper form-control" rows="" cols="" style="padding: 5px; border:0px; min-height: 350px;" name="nota" placeholder="Digite o texto....."><?php echo $row['nota'];?></textarea>
</div>
</div>
</div>
<?php endforeach;?>
</div>
</div>
</div>
Acredito que deve existir algum código para ativar e desativar a class em:
<li class="código para ativar classe">
<a href="#<?php echo $row['id'];?>" data-toggle="tab"> <i class=""></i> <?php echo $row['titulo'];?> </a>
</li>
E outro código para ativar class em:
<div class="tab-pane código para ativar classe" ...
Não sei exatamente o que deve ser feito e nem como fazer.
Podem me ajudar?
Vejam imagem de como está hoje:https://i.stack.imgur.com/4oAgx.png
Vejam como eu desejo: https://i.stack.imgur.com/zivb6.png
O problema é que pelo seu código, você está setando todos como ACTIVE.
Peguei seu código e o otimizei um pouco.
<?php
$this->db->order_by('id', 'desc');
$this->db->where('usuario_id', $this->session->userdata('id'));
$this->db->where('usuario_nome', $this->session->userdata('usuario_nome'));
$nota = $this->db->get('nota')->result_array();
$contador = 0;
foreach ($nota as $row) {
$classActive .= ($contador == 0) ? "active" : "";
$divMenu = "<li class=\"" . $classActive . "\"><a href=\"#" . $row['id'] . "\" data-toggle=\"tab\"><i class=\"\"></i>" . $row['titulo'] . "</a></li>";
$divPanel .= "
<div class=\"tab-pane " . $classActive . "\" id=\"" . $row['id'] . "\">
<div id=\"sample\" class=\"ruledpaper\">
<div class=\"form-group\" style=\"margin: 0px;\">
<div class=\"col-md-12\" style=\"padding:0px; background-color: #FFFCEE; font-size: 5px;\">
<input type=\"text\" class=\"form-control\" rows=\"14\" style=\"padding: 5px; border:0px; background-color: #fff6cc; font-size: 18px;\" name=\"titulo\" placeholder=\"Título\" value=\"" . $row['titulo'] . "\">
</div>
</div>
<hr style=\"margin: 0px;\" />
<div class=\"form-group\">
<div class=\"col-md-12\" style=\"padding:0px;\">
<textarea maxlength=\"60\" class=\"ruledpaper form-control\" rows=\"\" cols=\"\" style=\"padding: 5px; border:0px; min-height: 350px;\" name=\"nota\" placeholder=\"Digite o texto...\">" . $row['nota'] . "</textarea>
</div>
</div>
</div>
</div>";
$contador++;
}
?>
<div class="row">
<div class="col-sm-4">
<ul class="nav tabs-vertical">
<?php echo $divMenu; ?>
</ul>
</div>
<div class="col-sm-8">
<div class="tab-content" style="width: 70%;">
<?php echo $divPanel; ?>
</div>
</div>
</div>>
Você quer exibir a nota 3 só se for clicado no referente a ela?
basta você fazer uma requisição pela URL (get)
Segue a lógica:
Se a URL for igual a ?seenota=2
$id = $this->obterID("seenota") // aqui ele recebe o id
Consulta-> WHERE ... = $id
Acho que apenas isso resolve seu problema :)
Olá, este if eu colocaria onde no código?
>
O problema é que pelo seu código, você está setando todos como ACTIVE.
Peguei seu código e o otimizei um pouco.
<?php
$this->db->order_by('id', 'desc');
$this->db->where('usuario_id', $this->session->userdata('id'));
$this->db->where('usuario_nome', $this->session->userdata('usuario_nome'));
$nota = $this->db->get('nota')->result_array();
$contador = 0;
foreach ($nota as $row) {
$classActive .= ($contador == 0) ? "active" : "";
$divMenu = "<li class=\"" . $classActive . "\"><a href=\"#" . $row['id'] . "\" data-toggle=\"tab\"><i class=\"\"></i>" . $row['titulo'] . "</a></li>";
$divPanel .= "
<div class=\"tab-pane " . $classActive . "\" id=\"" . $row['id'] . "\">
<div id=\"sample\" class=\"ruledpaper\">
<div class=\"form-group\" style=\"margin: 0px;\">
<div class=\"col-md-12\" style=\"padding:0px; background-color: #FFFCEE; font-size: 5px;\">
<input type=\"text\" class=\"form-control\" rows=\"14\" style=\"padding: 5px; border:0px; background-color: #fff6cc; font-size: 18px;\" name=\"titulo\" placeholder=\"Título\" value=\"" . $row['titulo'] . "\">
</div>
</div>
<hr style=\"margin: 0px;\" />
<div class=\"form-group\">
<div class=\"col-md-12\" style=\"padding:0px;\">
<textarea maxlength=\"60\" class=\"ruledpaper form-control\" rows=\"\" cols=\"\" style=\"padding: 5px; border:0px; min-height: 350px;\" name=\"nota\" placeholder=\"Digite o texto...\">" . $row['nota'] . "</textarea>
</div>
</div>
</div>
</div>";
$contador++;
}
?>
<div class="row">
<div class="col-sm-4">
<ul class="nav tabs-vertical">
<?php echo $divMenu; ?>
</ul>
</div>
<div class="col-sm-8">
<div class="tab-content" style="width: 70%;">
<?php echo $divPanel; ?>
</div>
</div>
</div>
Poxa, show de bola.
Mas acho que está faltando alguma coisa na linha 10.
Pois está retornando erro.
>
Parse error: syntax error, unexpected '"></i>"' (T_CONSTANT_ENCAPSED_STRING) in C:\Program Files (x86)\VertrigoServ\www\ci_adminlte\application\views\admin\resources\notas.php on line 10
Eu atualizei o código e acho que você pegou a versão antiga, hehe.
Dá uma olhada no meu post e veja lá o que faltou na linha 10!
:rolleyes:
A PHP Error was encountered
Severity: Notice
Message: Undefined variable: classActive
Filename: resources/notas.php
Line Number: 8
A PHP Error was encountered
Severity: Notice
Message: Undefined variable: divPanel
Filename: resources/notas.php
Line Number: 25
Cara, recomendo você estudar um pouco de PHP. Com o básico do básico você resolve isso...
<?php
$classActive = "";
$divPanel = "";
$this->db->order_by('id', 'desc');
$this->db->where('usuario_id', $this->session->userdata('id'));
$this->db->where('usuario_nome', $this->session->userdata('usuario_nome'));
...Está certo, Maykel.
Algo simples, poderia ter feito e não fiz.
Achei que com teu código, não seria simplesmente isto.
Outro ponto.
Dá forma que está o teu código.
Está mostrando todos os blocos, mas somente um tab.
Veja a imagem como exemplo:
Amigo,
Resolvido da seguinte forma, excluí a linha 14.
$divMenu = "<li class=\"" . $classActive . "\"><a href=\"#" . $row['id'] . "\" data-toggle=\"tab\"><i class=\"\"></i>" . $row['titulo'] . "</a></li>";
E incluí o código na linha 37.
<?php foreach ($nota as $row){?>
<li class="">
<a href="#<?php echo $row['id'];?>" data-toggle="tab"> <i class=""></i> <?php echo $row['titulo'];?> </a>
</li>
<?php }?>
Como ficou:
<?php
$classActive = "";
$divMenu = "";
$divPanel = "";
$this->db->order_by('id', 'asc');
$this->db->where('usuario_id', $this->session->userdata('id'));
$this->db->where('usuario_nome', $this->session->userdata('usuario_nome'));
$nota = $this->db->get('nota')->result_array();
$contador = 0;
foreach ($nota as $row) {
$classActive .= ($contador == 0) ? "active" : "inactive";
//$divMenu = "<li class=\"" . $classActive . "\"><a href=\"#" . $row['id'] . "\" data-toggle=\"tab\"><i class=\"\"></i>" . $row['titulo'] . "</a></li>";
$divPanel .= "
<div class=\"tab-pane " . $classActive . "\" id=\"" . $row['id'] . "\">
<div id=\"sample\" class=\"ruledpaper\">
<div class=\"form-group\" style=\"margin: 0px;\">
<div class=\"col-md-12\" style=\"padding:0px; background-color: #FFFCEE; font-size: 5px;\">
<input type=\"text\" class=\"form-control\" rows=\"14\" style=\"padding: 5px; border:0px; background-color: #fff6cc; font-size: 18px;\" name=\"titulo\" placeholder=\"Título\" value=\"" . $row['titulo'] . "\">
</div>
</div>
<hr style=\"margin: 0px;\" />
<div class=\"form-group\">
<div class=\"col-md-12\" style=\"padding:0px;\">
<textarea maxlength=\"60\" class=\"ruledpaper form-control\" rows=\"\" cols=\"\" style=\"padding: 5px; border:0px; min-height: 350px;\" name=\"nota\" placeholder=\"Digite o texto...\">" . $row['nota'] . "</textarea>
</div>
</div>
</div>
</div>";
$contador++;
}
?>
<div class="row">
<div class="col-sm-4">
<ul class="nav tabs-vertical">
<?php foreach ($nota as $row){?>
<li class="">
<a href="#<?php echo $row['id'];?>" data-toggle="tab"> <i class=""></i> <?php echo $row['titulo'];?> </a>
</li>
<?php }?>
</ul>
</div>
<div class="col-sm-8">
<div class="tab-content" style="width: 70%;">
<?php echo $divPanel; ?>
</div>
</div>
</div>
Resolveu 100%
Muito obrigado...
Você quer exibir a nota 3 só se for clicado no referente a ela?
basta você fazer uma requisição pela URL (get)
Segue a lógica:
Se a URL for igual a ?seenota=2
Acho que apenas isso resolve seu problema :)