jQuery 菜单不加载 PHP 子类别
Posted
技术标签:
【中文标题】jQuery 菜单不加载 PHP 子类别【英文标题】:jQuery menu not loading PHP child categories 【发布时间】:2017-05-05 10:08:21 【问题描述】:我们有一个自定义的 jQuery 菜单,它在我们的 OpenCart 商店中运行良好。但是不会显示第二级子类别,php 在更改或原始菜单上都不正确。任何具有 2 或更多深度的类别都不会显示。
所以我们有一个 2 深类别在 http://ocart.site/opencart/index.php?route=product/category&path=25_29_59
但是你看到它不会显示在主菜单中 http://ocart.site/opencart
如果我添加回原始默认菜单的默认部分,它实际上会使菜单中断。您可以在以下位置查看新旧菜单的比较 http://ocart.site/defaultmenutoJQ.html
有什么东西阻止了某处的显示负载,有什么想法吗?
这里是 JSFiddle https://jsfiddle.net/mtq5khz0/ 的所有相关代码
<?php if ($categories) ?>
<div id="cssmenu">
<ul>
<?php foreach ($categories as $category) ?>
<li><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a>
<?php for ($i = 0; $i < count($category['children']);) ?>
<ul>
<?php $j = $i + ceil(count($category['children']) / $category['column']); ?>
<?php for (; $i < $j; $i++) ?>
<?php if (isset($category['children'][$i])) ?>
<li><a href="<?php echo $category['children'][$i]['href']; ?>"><?php echo $category['children'][$i]['name']; ?></a></li>
<?php ?>
<?php ?>
</ul>
<?php ?>
<?php ?>
</li>
</ul>
</div>
<?php ?>
OpenCart 的完整标题代码 - 编辑代码 https://jsfiddle.net/v5vmLbjj/
OpenCart 默认安装的完整标题代码https://jsfiddle.net/tneqy2qt/
(类别下拉菜单代码,靠近代码块的页脚)
这里是 PHP 使用的 JQuery 菜单代码https://jsfiddle.net/ezhnnbsg/
【问题讨论】:
为什么用 php 发布一个 jsfiddle?你认为它会奇迹般地变成有效的 html 吗? 网站看到子类显示正确,在子类的页面可以看到子类的子项 @merch89 你能更新并包含print_r($categories)
或var_dump($categories)
的输出吗?我认为它具有递归的所有子类别,您需要为每个类别项目执行递归类别 parent > children。
尝试在该类别中添加一些产品。
@madalinivascu i 事情@Christos 是对的,显示var_dump($categories)
的输出
【参考方案1】:
如果我对您的理解正确,那么通过查看您的代码,我会发现一些事情。
首先,您只循环通过$categories
和每个$category['children']
。
要到达“第二级”孩子,您需要进行另一个循环。例如:
if(!empty($category['children'][$i]['children']))
echo '<ul>';
foreach($category['children'][$i]['children'] as $children2)
echo '<li/>';
echo '</ul>';
我看到的第二个问题是你的小提琴 css。
你有这个:
#cssmenu ul ul li a
font-size: 12px;
font-weight: 400;
z-index: 9999;
width: 250px;
padding: 11px 15px;
text-decoration: none;
color: #000;
border-bottom: 1px solid rgba(150, 150, 150, .15);
background: #ddd;
webkit-font-size: 11.5px;
和
#cssmenu .submenu-button
position: absolute;
z-index: 99;
top: 0;
right: 0;
display: block;
width: 46px;
height: 32px;
cursor: pointer;
border-left: 1px solid rgba(120, 120, 120, .2);
#cssmenu .submenu-button
是触发下拉菜单的类,因此它需要一个高于#cssmenu ul ul li a
的 z-index
所以改成这样:
#cssmenu ul ul li a
font-size: 12px;
font-weight: 400;
z-index: 98;
width: 250px;
padding: 11px 15px;
text-decoration: none;
color: #000;
border-bottom: 1px solid rgba(150, 150, 150, .15);
background: #ddd;
webkit-font-size: 11.5px;
通知z-index: 98;
而不是z-index: 9999;
?
希望这有助于解决您的问题。
【讨论】:
嗨,关于如何将 PHP 合并到 jsfiddle.net/mtq5khz0 中的任何帮助? jsfiddle不能运行php。 这是我正在努力解决的 Opencart 标头的 PHP 合并问题。反正我已经标记了你的答案。 感谢@merch89。如果你能给我一个$categories
数组的转储,我可以更新我的答案来合并它。【参考方案2】:
你在单引号内使用双引号 试试这个
<?php
if ($categories)
echo "<div id='cssmenu'>";
echo " <ul>";
foreach ($categories as $category)
echo " <li><a href='".$category['href']."'>".$category['name']."</a>";
if (count($category['children']) > 0)
$columns = array_chunk($category['children'], ceil(count($category['children']) / $category['column']));
foreach ($columns as $children)
echo ' <ul>';
foreach ($children as $child)
echo " <li><a href='" . $child['href'] ."'>" . $child['name'] . "</a></li>";
echo " </ul>";
echo " </li>";
echo " </ul>";
echo "</div>";
?>
【讨论】:
对不起 Vijaya,仍然没有 3 级猫通过。 jquery代码在上面,答案可能就在里面(首页»类别»2级类别»3级类别)【参考方案3】:您的内部循环代码似乎很奇怪。按照代码,它看起来可以工作,但它可能容易出错。于是我稍微改写了一下:
if ($categories)
echo '<div id="cssmenu">';
echo ' <ul>';
foreach ($categories as $category)
echo ' <li><a href="' . $category['href'] .'">' . $category['name'] . '</a>';
if (count($category['children']) > 0)
$columns = array_chunk($category['children'], ceil(count($category['children']) / $category['column']));
foreach ($columns as $children)
echo ' <ul>';
foreach ($children as $child)
echo ' <li><a href="' . $child['href'] . '">' . $child['name'] . '</a></li>';
echo ' </ul>';
echo ' </li>';
echo ' </ul>';
echo '</div>';
【讨论】:
感谢 Ronald,只是在集成时遇到了一些麻烦。我试过jsfiddle.net/nfr1dmho 并得到这个错误doc-10-58-docs.googleusercontent.com/docs/securesc/… @merch89,你不能在 jsfiddle 中运行 php。以上是关于jQuery 菜单不加载 PHP 子类别的主要内容,如果未能解决你的问题,请参考以下文章
在不加载页面的情况下从“按类别排序帖子”菜单更改 <div> 内的内容
使用 ajax 通过 WordPress 菜单在 div 中按类别加载最新帖子