【问题标题】:Opencart - Hide A Category from Sitemap & Search EngineOpencart - 从站点地图和搜索引擎中隐藏类别
【发布时间】:2014-07-30 10:47:52
【问题描述】:

如何从我的 Opencart 站点地图中隐藏一个类别? [route=information/sitemap] 还有搜索引擎爬虫?

我有一个类别 (store.com/private),我不希望它出现在搜索结果或网站站点地图中。是否有一个扩展或代码可以让我通过 vQmod 为类别实现此结果?

由于没有名为 /private 的文件夹,我不相信我可以将 /private 简单地放在 robots.txt 文件中以阻止它为类别编制索引。如果我被误导了,请纠正我!另外,由于 opencart 有两个相同类别的 url,一个是到类别 id 的路由,所以这会导致进一步的问题吗?

【问题讨论】:

    标签: php opencart


    【解决方案1】:

    您可以将该类别的所有可能 URL 放入 robots.txt 文件中。如果private 类别没有子类别(子类别)并且认为它的 ID 为 1,那么这可能是内容:

    Disallow: /private
    Disallow: /private/
    Disallow: /index.php?route=product/category&path=1
    

    对于站点地图,最简单、最省力的解决方案是直接在模板中添加一个检查。首先确保 category_id 对更改 catalog/controller/information/sitemap.tpl 默认代码的模板可见:

    $this->data['categories'][] = array(
        'name'     => $category_1['name'],
        'children' => $level_2_data,
        'href'     => $this->url->link('product/category', 'path=' . $category_1['category_id'])
    );
    

    进入这个:

    $this->data['categories'][] = array(
        'category_id' => $category_1['category_id'],
        'name'     => $category_1['name'],
        'children' => $level_2_data,
        'href'     => $this->url->link('product/category', 'path=' . $category_1['category_id'])
    );
    

    然后在各自的模板文件中更改

    <?php foreach ($categories as $category_1) { ?>
    <li><a href="<?php echo $category_1['href']; ?>"><?php echo $category_1['name']; ?></a>
    <!-- ... -->
    </li>
    <?php } ?>
    

    进入这个:

    <?php foreach ($categories as $category_1) { ?>
    <?php if ($category_1['category_id'] != 1) { ?>
    <li><a href="<?php echo $category_1['href']; ?>"><?php echo $category_1['name']; ?></a>
    <!-- ... -->
    </li>
    <?php } ?>
    <?php } ?>
    

    (仍然期望 private 类别的 ID 为 1 - 如果不同,请调整此值)。此站点地图解决方案应隐藏private 类别以及可能的子项。如果您只需要隐藏一个类别,这是完全可以的,但如果您以后想隐藏更多类别,我建议您使用下面描述的更简洁的方式。

    更简洁但更省力的解决方案是在管理中添加一个新设置,并为类别添加一个新数据库列,允许您设置该类别是否应在站点地图中列出,然后是该类别及其子类别如果为站点地图启用了类别,则应为站点地图检索其他数据。这样的设置可能看起来与 Status 设置完全相同(例如,带有 EnabledDisabled 选项的选择以及存储在 DB 中的 10 值)。类别模型catalog/model/catalog/category.php 应该调整,将getCategories($orded_id) 方法复制到getCategoriesForSitemap($order_id),同时向查询添加一个条件,检查是否为站点地图启用了类别。然后应该在站点地图控制器中调用此方法。

    【讨论】:

    • 抱歉没有及时回复,我做了个噩梦,我的房子被淹了!笔记本没了!已全部恢复并重新上线,目前正在阅读您的回复
    • 您对 SE 爬虫的第一个解决方案,据我了解,爬虫只查看域根目录中的 robots.txt 文件。这适用于子域吗?我用谷歌搜索了这个,找不到可靠的答案。我的网上商店在文件夹/shop/ 中,我在公共文件夹的根目录中有其他内容。因此,我有一个此文件夹的子域:http://shop.domain.com.
    • 关于直接将代码添加到controller文件和tpl文件的方案,我同意!老实说,这是我能想到的唯一解决方法,您的回答支持它。我将 vQmod 这些核心文件更改!添加了加载时间规范,但这是我必须付出的牺牲! :) 谢谢。
    • 不客气。对于子域的robots.txt,只需将其放入/shop/ 目录,如果子域指向此/shop/ 目录,它应该可以正常工作。哦,我希望你也已经恢复了被淹的房子!祝你一切顺利!
    • 感谢您的反馈!我不知道这一点,我今晚将把它放在适当的位置。是的,一切都应该没问题。只有两个房间被淹,但我的笔记本电脑在地板上。不错!
    猜你喜欢
    • 1970-01-01
    • 2014-10-23
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多