访问者单击子菜单并且链接在新页面中打开时,我遇到了问题,因此我想将该子菜单保持在该页面上处于活动状态。
我有活跃的CSS类和JavaScript来打开它,我需要的是使它与PHP成为活跃的。
这是具有以下类别的UL:
这是我的代码。可以用php或javascript完成。
<ul>
<?php
$qKategori = ("SELECT * FROM kategori WHERE kprind = 0");
$rKategori = mysqli_query($dbc, $qKategori);
if ($rKategori) {
while ($exKat = mysqli_fetch_array($rKategori, MYSQLI_ASSOC)){
$emrikategorise = $exKat['kemri'];
$idkategori = $exKat['kid'];
$idprind = $exKat['kprind'];
?>
<li><a href="#"><?=$emrikategorise;?></a>
<ul>
<?php
$qPrind = ("SELECT * FROM kategori WHERE kprind = '".$idkategori."'");
$rPrind = mysqli_query($dbc,$qPrind);
while($prind = mysqli_fetch_array($rPrind)) {
?>
<li><a href="kategori.php?kid=<?=$prind['kid']?>"><?=$prind['kemri']?></a> </li>
<?php
}
mysqli_free_result($rPrind);
?>
</ul>
</li>
<?php }
mysqli_free_result($rKategori);
}
?>
</ul>
您可以在网站左侧看到菜单。网站是www.sitimobil.mk
最佳答案
您可能需要在输出之前构建阵列,以便能够确定哪些菜单应处于活动状态。您还可以将其与查询的优化组合在一起,从而不必为每个类别进行1个查询。
就像是:
$active = isset($_GET['kid'] ? $_GET['kid'] : -1;
$tree = array();
$list = array();
$qKategori = ("SELECT * FROM kategori ORDER BY kprind");
$rKategori = mysqli_query($dbc, $qKategori);
if ($rKategori) {
while ($exKat = mysqli_fetch_array($rKategori, MYSQLI_ASSOC)){
$id = $exKat['kid'];
//To prevent numerical array with unused space
$name = 'kategori'.$exKat['kid'];
$list[$name] = $exKat;
//Calculate depth to see if the menu is a sub..sub..sub menu etc.
$parent = $list[$name]['kprind'];
if($parent == 0) {
$list[$name]['depth'] = 0;
$list[$name]['childCount'] = 0;
}
else {
$list['kategori'.$parent]['childCount']++;
$list[$name]['depth'] = $list['kategori'.$parent]['depth']+1; //Increment
}
if($id == $active) {
$list[$name]['active'] = true;
while($parent != 0) {
$parentName = 'kategori'.$parent;
$list[$parentName]['active'] = true;
$parent = $list[$parentName]['kprind'];
}
}
else
$list[$name]['active'] = false;
}
mysqli_free_result($rPrind);
//Once we have that we can output the results...
function output_menu($list, $parent = 0, $active = false)
$activeClass = $active ? ' class="active"' : '';
echo '<ul'.$activeClass.'>';
foreach($list as $row){
if($row['kprind'] != $parent) continue;
$link = $row['kprind'] == 0 ? '#' : 'kategori.php?kid='.$row['kid'];
echo '<li><a href="'.$link.'">'.$row['kemri'].'</a>';
if($row['childCount'] > 0)
output_menu($list, $row['kprind'], $row['active']);
echo '</li>';
}
echo '</ul>';
}
output_menu($list);
}
这仍然有些粗糙,但是应该可以解决。它可能已经过优化,因此我们不必遍历该列表太多,但有一个好处,就是不必请求太多的数据库调用。这将减轻数据库的工作量并加快输出速度。
关于javascript - 子菜单在用户单击并打开新页面时保持事件状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27508858/