Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

jmlab

botão classe ativo com if em php

Recommended Posts

Boas noites!

uma pequena ajuda se possível!

Como consigo adicionar o seguinte código (para ativar o botão quando selecionado)

if ($pageid == menuItem['menuId']) { echo class="btnActive" }

no código abaixo (a verde) na tag "<li>?

<?php

//========================================================
// Função Menu
function data_menu( array $menuTotal , $idPai = 0, $nivel = 0 )
{
// abrimos a ul do menu principal
echo str_repeat( "\t" , $nivel ),'<ul class="menuCAL">',PHP_EOL;
// itera o array de acordo com o idPai passado como parâmetro na função
foreach( $menuTotal[$idPai] as $idMenu => $menuItem)
{
// imprime o item do menu
echo str_repeat( "\t" , $nivel + 1 ),'<li><a href="?page=' .$menuItem['menuId']. '">',$menuItem['iconP'],$menuItem['iconS'],$menuItem['name'],'</a>',PHP_EOL;
// se o menu desta iteração tiver submenus, chama novamente a função
if( isset( $menuTotal[$idMenu] ) ) data_menu( $menuTotal , $idMenu , $nivel + 2);
// fecha o li do item do menu
echo str_repeat( "\t" , $nivel + 1 ),'</li>',PHP_EOL;
}
// fecha o ul do menu principal
echo str_repeat( "\t" , $nivel ),'</ul>',PHP_EOL;
}
//========================================================
// Chamar conteúdos da Base de Dados
function data_page( $dbc, $id )
{
$q = "SELECT * FROM menuCAL WHERE menuId = $id";
$r = mysqli_query($dbc, $q);
$data = mysqli_fetch_assoc($r);
return $data;
}
?>
Tenho sido confuso para mim.
Obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

testa assim

echo str_repeat( "\t" , $nivel + 1 );
echo '<li><a href="?page=' .$menuItem['menuId'];
echo $pageid == menuItem['menuId']? ' class="btnActive" ':"",'">',$menuItem['iconP'],$menuItem['iconS'],$menuItem['name'],'</a>',PHP_EOL;

talvez seja interessante usar a funcao sprintf()

http://php.net/manual/pt_BR/function.sprintf.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela resposta! :)

Mas dá-me um erro de código na seguinte linha:

 

echo $pageid == menuItem['menuId']? ' class="btnActive" ':"",'">',$menuItem['iconP'],$menuItem['iconS'],$menuItem['name'],'</a>',PHP_EOL;

 

No "writecodeonline.com" testei e dá o seguinte erro:

<b>Parse error</b>: syntax error, unexpected '[', expecting ',' or ';'

 

O que será?

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

falou o $ e tinha um problema com aspas

 

ficou assim

 echo $pageid == $menuItem['menuId'] ? '" class="btnActive">' : '">', $menuItem['iconP'], $menuItem['iconS'], $menuItem['name'], '</a>', PHP_EOL;


Compartilhar este post


Link para o post
Compartilhar em outros sites

Deixou de dar erro.

Mas continua sem ativar quando o botão é clicado.

(agora não sei se é o meu CSS que está errado).

Uma pergunta; o que substitui o "if" no código que postou?

 

E é o "<a>" e não o "<li>" que ficará ativado.

Ajudará se enviar mais algum código?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

voce tem certeza que $pageid é igual $menuItem['menuId']??
use var_dump ou algo do tipo

E é o "<a>" e não o "<li>" que ficará ativado.


é o que foi feito

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boas! :)

Na verdade, a forma como o menu está apresentado também não me ajuda muito :(

Foi o único que consegui fazer (tutorial) que tivesse 3 níveis e em mysqli (visto todo o projeto estar em mysqli). Toda a informação está dentro de uma única tabela.

Serve o propósito, mas é demasiado complicado para refazer às minhas necessidades.

Era mais fácil de personalizá-lo se o "echo" fosse feito dentro do HTML, com as tags "php", tipo o exemplo abaixo, mas com 3 níveis:

<ul>
  <li<?php if($pageid == $nav['id']) { echo ' class="active"'; } ?>>
    <a href="?page=<?php echo $nav['id']; ?>"><?php echo $nav['label']; ?></a>
  </li>
</ul>

Mas chego a um ponto (quanto quero fazer o "echo" dos submenus), em que me perco totalmente.

 

Este projeto tem algumas condicionantes:

. Conteúdos do site para 1, 2 e 3 colunas

(existem páginas com 3 colunas, outras só com 2 e outras só com 1)

Ainda não sei como carregar o conteúdo de forma a que seja carregado em layouts específicos e como dar a possibilidade do cliente escolher qual o tipo de layout que quer, se adicionar uma nova página.

. Ligada à mesma questão acima, tenho também uma página que deveria apresentar um novo menu lateral que carrega a informação desse menu (após ser clicado) dentro da mesma página, mas mantendo sempre o menu principal do site igualmente navegável.

 

Se me conseguir ajudar em alguma destas questões, agradeço imenso.

Obrigado e Bem Haja!

 

PS: Um encaminhamento nas 2 últimas questões, já era uma grande ajuda, pois sabendo a lógica, talvez fosse mais fácil de estudar. O meu conhecimento de PHP ainda é limitado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não sei o que vc quer da vida

Voce disse que é o "<a>" e não o "<li>" que ficará ativado.

agora vc diz contrário

<ul>
<li<?php if($pageid == $nav['id']) { echo ' class="active"'; } ?>>
<a href="?page=<?php echo $nav['id']; ?>"><?php echo $nav['label']; ?></a>
</li>
</ul>
Era mais fácil de personalizá-lo se o "echo" fosse feito dentro do HTML, com as tags "php", tipo o exemplo abaixo, mas com 3 níveis:

 

é só usar o exemplo que dei no ultimo post

<li<?php echo $pageid == $nav['id'] ? ' class="active"' : '';?>>

é o mesmo que

<li<?php
    if ($pageid == $nav['id']) {
        echo ' class="active"';
    }
 ?>>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lol! Eu não disse o contrário.

Só dei um exemplo de estrutura de como gostaria que todo o menu estivesse. :)

Não é fácil ainda para mim perceber toda a lógica.

De qualquer forma, vou estudar e aplicar.

 

Quanto às outras questões, tem algum conselho?

Obrigado e abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

. Conteúdos do site para 1, 2 e 3 colunas

(existem páginas com 3 colunas, outras só com 2 e outras só com 1)

Ainda não sei como carregar o conteúdo de forma a que seja carregado em layouts específicos e como dar a possibilidade do cliente escolher qual o tipo de layout que quer, se adicionar uma nova página.

 

Da uma pesquisada por Master Pages e como usar com PHP

Ou

use um template engine como o Smarty

ou

simples includes de blocos html

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Electronic!

Em principio vou utilizar o include para fazer echo da página das formações.

 

Entretanto surgiu-me uma dúvida (e acredite que estou farto de procurar e nada encontro de concreto).

Posso criar um novo post, se achar que este não é o local indicado.

 

Como sabe, tenho um "tree menu" no site.

Não sei como inserir um novo item no menu com um CRUD, ou seja, se quiser adicionar um novo botão, tenho de dizer qual o idPai onde quero inserir o botão, certo? Os "idPai" serão os existentes (nenhum novo poderá ser criado), mas poderiamos criar "filhos" sem limite. Gostaria que essa lista (idPai's - 7 no total) fosse feita através dum drop list, para que, ao fazer o formulário de inserção, fosse apenas necessário selecionar o item da drop list e após submeter o formulário, novo botão estaria criado.

 

Este é o meu menu recursivo:

<?php
//call the recursive function to print category listing
category_tree(0);
				
//Recursive php function
function category_tree($menuPai){
global $dbc;
				
$q = "SELECT * FROM menuCAL WHERE idPai ='".$menuPai."'";
$r = $dbc->query($q);
				
while($row = mysqli_fetch_object($r)):
$i = 0;
if ($i == 0) echo '<ul class="menuCAL">';
echo '<li><a href="?page='.$row->id,'">' . $row->GlyPrincipal . $row->GlySecundario . $row->menuNomePT, '</a>';
category_tree($row->id);
echo '</li>';
$i++;
if ($i > 0) echo '</ul>';
endwhile;
}
?>

Este o meu formulário CRUD de inserção:

<!-- Textos & Formulários Start --> 
<div class="row">
  <div class="col-lg-12">
                    
  <?php
    if(isset($_POST['enviado']) == 1) {
    $q = "INSERT INTO menuCAL () VALUES ()";
    $r = mysqli($dbc, $q);
								
    if($r) {
      echo'<p>A página foi adicionada!</p>';	
    } else {
      echo '<p>A página não foi adicionada, devido ao seguinte erro: '.mysqli_error($dbc);
      echo '<p>' .$q.'</p>';	
    }
  }
?>

<!-- Formulário Start --> 
<form action="adicionar_pagina.php" method="post" role="form">
                            
<!-- Campo Label Start -->
  <div class="form-group">
    <label for="label">Label</label>
    <input type="text" class="form-control" name="label" id="label" placeholder="Texto a colocar na URL (SEO)">
  </div>
<!-- Campo Label End -->
                            
<!-- Campo header Start -->
  <div class="form-group">
    <label for="menuNomePT">Header</label>
    <input type="text" class="form-control" name="header" id="header" placeholder="Texto descritivo a colocar no topo do website">
  </div>
<!-- Campo header End -->
                            
<!-- Campo ID Menu Pai Start -->
  <div class="form-group">
    <label for="idPai">Adicionar a:</label>
    <select class="form-control" name="idPai" id="idPai">
      <option></option>
    </select>
  </div>
<!-- Campo ID Menu Pai Start -->
                            
<!-- Campo menuNomePT Start -->
  <div class="form-group">
    <label for="menuNomePT">Título PT</label>
    <input type="text" class="form-control" name="menuNomePT" id="menuNomePT" placeholder="Insira o título em Português">
  </div>
<!-- Campo menuNomePT End -->
                            
<!-- Campo conteudo_pagina_PT Start -->
  <div class="form-group">
    <label for="conteudo_pagina_EN">Conteúdos PT</label>
    <textarea class="form-control" name="conteudo_pagina_PT" rows="12" id="conteudo_pagina_PT" placeholder="Insira os textos em Português"></textarea>
  </div>
<!-- Campo conteudo_pagina_PT End -->
                            
<!-- Campo menuNomeEN Start -->
  <div class="form-group">
    <label for="menuNomePT">Título EN</label>
    <input type="text" class="form-control" name="menuNomeEN" id="menuNomeEN" placeholder="Insira o título em Inglês">
  </div>
<!-- Campo menuNomeEN End -->
                            
<!-- Campo conteudo_pagina_EN Start -->
  <div class="form-group">
    <label for="conteudo_pagina_EN">Conteúdos EN</label>
    <textarea class="form-control" name="conteudo_pagina_EN" rows="12" id="conteudo_pagina_EN" placeholder="Insira os textos em Inglês"></textarea>
  </div>
<!-- Campo conteudo_pagina_EN End -->
                        
</div>
  <button type="submit" class="btn btn-default adic_concluir">Gravar</button>
  <input type="hidden" name="enviado" value="1">
</form>
<!-- Formulário End -->
                        
</div>
</div>
<!-- Textos & Formulários End -->

Obrigado mais uma vez :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.