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> 内的内容

如何从 mysql 将子类别加载到 joomla

使用 ajax 通过 WordPress 菜单在 div 中按类别加载最新帖子

单击时清除 CSS 菜单悬停状态(通过 ajax 加载的页面)

jquery依赖下拉菜单选择

如何在 Laravel 的每个页面上加载我的动态菜单项?