首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择块类别的同级(Prestashop、Smarty)

选择块类别的同级(Prestashop、Smarty)
EN

Stack Overflow用户
提问于 2013-07-08 01:44:45
回答 3查看 838关注 0票数 0

我们在Prestashop中有一个块类别菜单,总共有400个类别,包括所有子类别,这在我们的每个页面上创建了太多的链接,导致页面上的SEO不是最优的。

我想添加rel="nofollow“和一些Javascript到所有链接,除了根和选定的类别,它的孩子和兄弟。

示例:-子类别A(根,dofollow) -子类别A-1(选定的兄弟,dofollow) -子类别A-2 (选定,dofollow) -子类别A-2-a (选定的子项,dofollow) -子类别A-2-b (选定的子项,dofollow) -子类别A-2-c (选定的子项,dofollow) -子类别A-3 (选定的兄弟,dofollow) -子类别B(根,dofollow) -子类别B-1 (非跟随)-子类别B-2 (非跟随)-子类别B-2-a (非跟随)-子类别B-2-b (非跟随)-子类别B-3 (非跟随)-子类别C(根,点跟随)-子类别D(根,点跟随)

我已经成功地选择了根、选定对象和选定对象的子项。然而,我没有成功地选择所选对象的兄弟姐妹(它们共享相同的父代)。

如何在块类别.tpl文件中选择所选类别的同级?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-13 14:17:51

我通过修改blockcategories.php、blockcategories.tpl和category-tree-branch.tpl解决了这个问题。

首先,在blockcategories.php中,我编辑了148和246行。

行148是getTree(),其中模块在.tpl文件中分配名为$node的返回数组。在这里,我将以下行添加到数组中(我将id_parent值分配给父对象:

代码语言:javascript
复制
'parent' => $resultIds[$id_category]['id_parent']

在第246行,我将"currentCategoryParent“添加到smarty->赋值数组中。

代码语言:javascript
复制
$this->smarty->assign(array('currentCategory' => $category, 'currentCategoryId' => $category->id, 'currentCategoryParent' => $category->id_parent));

然后,我可以使用$currentCategoryParent和$node.parent从.tpl文件访问这些变量。

票数 0
EN

Stack Overflow用户

发布于 2013-07-08 20:39:44

PrestaShop使用嵌套的set模型来存储其类别:

  • http://www.fliquidstudios.com/2008/12/23/nested-set-in-mysql/
  • http://en.wikipedia.org/wiki/Nested_set_model

这使您可以轻松地选择树的一部分(父项、子项、兄弟项等)。

每个“类别”对象都有一个nleftnright成员,它们将帮助您执行这些选择。

另一种更简单的方法是使用 level_depth 成员,所有同级都将具有相同的level_depth值。

您可以修改blockcategories.php文件以在hookLeftColumn()的SELECT语句中添加level_depth。然后在category-tree-branch.tpl ch.tpl文件中,简单地添加一个测试:

代码语言:javascript
复制
{if $node.level_depth == ....}rel="nofollow"{/if}

要小心,谷歌可能不会喜欢这样的事实,即一个分类的页面是不关注的,而在其他页面上不关注。

票数 0
EN

Stack Overflow用户

发布于 2014-03-10 08:19:55

我也遇到过非常类似的问题--我需要更改选定类别的所有兄弟项的样式,以便解决方案是相同的

需要修改category-tree-branch.tpl ch.tpl

代码语言:javascript
复制
<li {if isset($last) && $last == 'true'}class="last"{/if}>
    {assign var="RET" value=""}
    {if $node.children|@count > 0}
        {foreach from=$node.children item=child name=categoryTreeBranch}
            {if $smarty.foreach.categoryTreeBranch.last}
                {include file="$branche_tpl_path" node=$child last='true' assign='childItems'}
            {else}
                {include file="$branche_tpl_path" node=$child last='false' assign='childItems'}
            {/if}
            {assign var="RET" value="{$RET}{$childItems}"}
        {/foreach}
    {/if}
    <a href="{$node.link|escape:'htmlall':'UTF-8'}" {if $RET|strpos:'selected'} class="parentselect"{/if}{if isset($currentCategoryId) && $node.id == $currentCategoryId}class="selected"{/if}
        title="{$node.desc|strip_tags|trim|escape:'htmlall':'UTF-8'}">{$node.name|escape:'htmlall':'UTF-8'}</a>
    {if $RET}<ul>{$RET}</ul>{/if}
</li>

您只需将所需内容放在活动分支...or的{if $RET|strpos:'selected'}{\if}之间,更改未选中分支{if $RET|strpos:'selected'==false}的条件

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17514603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档