Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 构建当前以类别为中心的导航_Javascript_Php_Jquery_Bigcommerce - Fatal编程技术网

Javascript 构建当前以类别为中心的导航

Javascript 构建当前以类别为中心的导航,javascript,php,jquery,bigcommerce,Javascript,Php,Jquery,Bigcommerce,我想开发一个类似于此网站的导航: 他们在BigCommerce平台上,我喜欢他们的侧导航显示类别和子类别的方式。本质上,我想知道这样显示的逻辑,以及我需要在BigCommerce中使用哪些组件来实现这一点 我想指出关于这个例子的一些事情,它们并不符合我们想要的 此站点似乎受到同一链接的多个位置的影响(如果您 看看源代码,一个链接出现了4次-我的网站正试图避免出现这种情况,因为有超过800个内部链接,还因为生成导航的网站加载时间) 每个子类别都是为所有类别和不同的菜单外观生成的,这就是为什么它们

我想开发一个类似于此网站的导航:

他们在BigCommerce平台上,我喜欢他们的侧导航显示类别和子类别的方式。本质上,我想知道这样显示的逻辑,以及我需要在BigCommerce中使用哪些组件来实现这一点

我想指出关于这个例子的一些事情,它们并不符合我们想要的

  • 此站点似乎受到同一链接的多个位置的影响(如果您 看看源代码,一个链接出现了4次-我的网站正试图避免出现这种情况,因为有超过800个内部链接,还因为生成导航的网站加载时间)
  • 每个子类别都是为所有类别和不同的菜单外观生成的,这就是为什么它们每个出现4次
因此,最终,我们需要一个能够实现以下功能的导航:

  • 知道我们目前属于哪一类
  • 显示当前类别之前的父类别
  • 显示当前类别的同级类别
  • 将子类别/子类别显示到当前类别
  • 单击后向下展开以显示子类别

我知道Category API可以告诉我类别的层次结构,但我觉得在我的网站的每个页面上对PHP文件进行AJAX调用可能会违反直觉,从而使我的网站更加快速。有什么简单的对象可以通过JS访问,并且可以在页面级别进行操作吗?

我只是用JS做了一些类似的事情,以确定要显示/隐藏哪些类别以及要打开/关闭哪些类别。首先,在侧边栏中包含类别树并将其隐藏

    function formatCustomSideBar(){
        var cats = [];
        $("ul.breadcrumbs > li").each(function(){
            if($(this).hasClass("is-active")){
                var name = $(this).find("span").text();
                cats.push(name);
            } else {
                var name = $(this).find("a").text();
                cats.push(name);
            }
        });
        console.log(cats);

        $(".custom-nav li a").each(function(){
            var subCat = $(this).text();
            if( $.inArray(subCat, cats) !== -1 ){
                $(this).parent("li").addClass("active-category");
            }
        });
    };
    formatCustomSideBar();
接下来,将所有面包屑值添加到一个数组中,因为面包屑总是告诉我们在站点上的位置。然后循环导航树,并将一类
活动类别
添加到列表项(如果它存在于面包屑数组中)。使用
活动类别
类和CSS,可以设置功能的样式

要添加切换功能,我将在函数末尾添加几行,以循环使用
活动类别
类的列表项,并检查它们是否有子类
,以确定它们是否有子类,然后从中添加一个类,如
有子类


希望这能有所帮助。

我只是使用JS做了类似的事情,以确定要显示/隐藏哪些类别以及要打开/关闭哪些类别。首先,在侧边栏中包含类别树并将其隐藏

    function formatCustomSideBar(){
        var cats = [];
        $("ul.breadcrumbs > li").each(function(){
            if($(this).hasClass("is-active")){
                var name = $(this).find("span").text();
                cats.push(name);
            } else {
                var name = $(this).find("a").text();
                cats.push(name);
            }
        });
        console.log(cats);

        $(".custom-nav li a").each(function(){
            var subCat = $(this).text();
            if( $.inArray(subCat, cats) !== -1 ){
                $(this).parent("li").addClass("active-category");
            }
        });
    };
    formatCustomSideBar();
接下来,将所有面包屑值添加到一个数组中,因为面包屑总是告诉我们在站点上的位置。然后循环导航树,并将一类
活动类别
添加到列表项(如果它存在于面包屑数组中)。使用
活动类别
类和CSS,可以设置功能的样式

要添加切换功能,我将在函数末尾添加几行,以循环使用
活动类别
类的列表项,并检查它们是否有子类
,以确定它们是否有子类,然后从中添加一个类,如
有子类


希望这能有所帮助。

“在侧边栏中包含类别树”-这是否意味着只需调用“%%SNIPPET\u SideCategoryList%%”或“%%PANEL\u SideCategoryList%%”就可以了?我将使用“%%PANEL\u SideCategor”‌​yList%%”以拉入类别树。将此放置在您希望包含此动态侧边栏列表的任何位置。在您的示例中,它位于侧栏中,在category.html文件中可以找到cat页面的大多数蓝图主题。查找左侧边栏的区域并添加代码。请记住,我的JS是为Stencil编写的,因此您需要调整blueprint主题的类/元素名称。我做了一些调整,基本功能正常运行——谢谢。如果类别名称相同,有什么建议吗?我需要比较每个面包屑,形成一条路径。。例如,如果我有两个“红色”类别,比如“上衣>衬衫>红色”和“下装>裤子>红色”,那么这两个“红色”类别都会显示。我会使用CSS仅显示“.active category”
  • ,如果它的父类也有“.active category”,或者直接在
      下。这将防止“底部>裤子>红色”显示“底部”和“裤子”是否没有“.active category”类。“在侧边栏中包含类别树”-这是否意味着只需调用“%%SNIPPET_SideCategoryList%%”或“%%PANEL_SideCategoryList%%”,然后将其放置在何处?我将使用“%%PANEL_SideCategory”‌​yList%%”以拉入类别树。将此放置在您希望包含此动态侧边栏列表的任何位置。在您的示例中,它位于侧栏中,在category.html文件中可以找到cat页面的大多数蓝图主题。查找左侧边栏的区域并添加代码。请记住,我的JS是为Stencil编写的,因此您需要调整blueprint主题的类/元素名称。我做了一些调整,基本功能正常运行——谢谢。如果类别名称相同,有什么建议吗?我需要比较每个面包屑,形成一条路径。。例如,如果我有两个“红色”类别,比如“上衣>衬衫>红色”和“下装>裤子>红色”,那么这两个“红色”类别都会显示。我会使用CSS仅显示“.active category”
    • ,如果它的父类也有“.active category”,或者直接在
        下。如果“Bottoms”和“Pants”没有“.active category”类,这将阻止“Bottoms>Pants>Red”显示。