Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Inicialmente tenho uma conexao com banco de dados para extrair alguns dados:
$sql = "select * from tabela order by data desc"; // order data desc, permite acessar as materias mais recentes.
$exec = $conn->query($sql);
$rows = $exec->fetchAll( PDO::FETCH_ASSOC );
$dados = $rows;
Em seguida tenho algumas divs expansíveis, que quando clica no primeira div, se expande, e executo um codigo php para exibir os titulos que estão em um banco de dados, assim:
DIV1
DIV2
Quando clico na DIV1, se expande e exibe o título extraido do banco de dados, assim:
DIV1 (clico nesta div, ela se expande)
for ( $a=0; $a <= count($dados)-1; $a++ ) {
echo $dados[$a]["titulo"] . "<br>";
}
Note que poderão ser listados varios titulos. O problema é, ao clicar sobre o título (pois o título será exibido em forma de link), deverá ser exibido o texto correspondente ao título.
Na instrucao sql acima eu já acessei o banco de dados e já posso pegar o valor do titulo (como fiz acima na primeira div), e tenho já tambem o texto. Mas como exibir o texto correto?
Sei que existe uma possibilidade de fazer o mesmo procedimento quando vamos submeter o valor de um formulario via ajax ou jquery, poderia utilizar o mesmo critério, mas irá realizar uma nova consulta ao banco de dados atraves de uma nova pagina php, o que acho meio desnecessário, pois já tenho a consulta realizada. Então é apenas uma questão de manipular variaveis, passando-a através de ajax ou jquery e depois resgatar o valor desta variavel para exibir o texto correto.
Dei uma pesquisada sobre isto, mas não achei nada que resolva....Cara,
Acho que poderia ser feito utilizando de duas formas:
- Local Storage ( http://www.w3schools.com/html/html5_webstorage.asp ), mas ainda existiria o problema de toda requisição executar, do lado do servidor, executar a consulta, então seria necessário algum controle para evitar isso, seilá, alguma variável de sessão, parâmetro no request, ou alguma outra coisa.
- Atualizar somente algumas áreas na tela, ou seja, fazer requisições em AJAX e atualizar apenas áreas da tela, assim o menu não seria redesenhado a toda solicitação.
bem, tenho uma outra situacao.
Nestes menus que são clicados e se expandem, o usuário clica num menu, ele se expande e mostra os titulos:
TITULO 1
TITULO 2
TITULO 3
TITULO 4
etc...
quando o usuário clica no TITULO 1, a janela se expande e exibe o texto referente aquele titulo. Ocorre que a janela
sempre se expande a partir do ultimo titulo, neste exemplo a janela se expande a partiru do TITULO 4. Sendo assim,
não é legal, pois posso ter uma relação de 100 titulos, e se o usuario clicar no TITULO1, o texto será mostrado apos o TITULO 100, forçando o usuario a rolar a tela para baixo para ver o texto, além do que, como está fora do alcance de sua visão que a janela se expandiu lá no fim da página, poderá nem perceber.
Então o que quero que a janela se expanda logo abaixo do titulo em que clicou.
O codigo que fiz está assim:
aqui o codigo jquery
>
Citar
<script type="text/javascript">
// Inicia o jQuery
$(document).ready(function(){
//============================ INICIO MENU EXPANSIVEL ===============================================
//hide the all of the element with class msg_body
$(".msg_titulo").hide();
$(".msg_texto").hide();
//toggle the componenet with class msg_body
$(".msg_grupo").click(function()
{
$(this).next(".msg_titulo").slideToggle(200);
$(".msg_texto").hide();
});
//hide the all of the element with class msg_body
//toggle the componenet with class msg_body
$(".msg_titulo").click(function()
{
// recupera o valor de id (corresponde ao numero da matriz - obtido em selecao no banco de dados). Não se refere ao id na tabela no banco de dados,
// mas sim ao valor contido na variavel $a existente no laço for.
//var registro = $(this).attr('id');
//alert(registro);
$(this).next(".msg_texto").slideToggle(200);
});
//================================= FIM MENU EXPANSIVEL===========================================
**agora o codigo HTML**
>
Citar
<div class="msg_grupos">
<p class="msg_grupo">HISTORIA </p>
<div class="msg_titulo">
<?php
for ( $a=0; $a <= count($dados)-1; $a++ ) {
$xtexto = $dados[$a]["texto"];
echo "<div id='$xtexto'>" . $dados[$a]["titulo"] . "</div>" . "<br>";
}
?>
</div>
<div class="msg_texto">
aqui vem o texto conforme o titulo que foi clicado
</div>
é isto..
Acho que isto pode lhe ajudar - service worker