0

我有一个下拉列表,其中包含来自我的 OpenCart 商店的类别和子类别,但是我似乎无法将 SEO 关键字 URL 显示为选项值:

<select name="cat_id" id="category-select" class="span4">
    <option value="">Browse by category</option>
    <?php 
    $cats = $this->model_catalog_category->getCategories();
    foreach ($cats as $cat) {
        echo '<option value="' . $this->url->addRewrite('product/category', '&category_id=' . $cat['category_id']) . '">' . $cat['name'] . '</option>';
        $subcats = $this->model_catalog_category->getCategories($cat['category_id']);
        foreach ($subcats as $subcat) {
            echo '<option value="' . $this->url->addRewrite('product/category', '&category_id=' . $subcat['category_id'])  . '">- ' . $subcat['name'] . '</option>';
        }
    }
    ?>
</select>

我是 OpenCart 的新手,不太确定 addRewrite 函数需要做什么。在 OpenCart 文档中似乎也找不到任何提及。

4

1 回答 1

1

这可能是因为使用了错误的方法。对于 SEO URL,您必须使用该link()方法。当然,您忘记了MVC。正确的方法是修改控制器,该控制器将加载并准备将传递给模板的数据。模板应该只绘制/呈现数据......

所以让我们假设它是category控制器和模板,所以让我们先编辑正确的控制器(catalog/controller/product/category.php):

$this->data['my_categories'] = array();

foreach($this->model_catalog_category->getCategories() as $category) {
    $this->data['my_categories'][] = array(
        'title' => $category['name'],
        'href'  => $this->url->link('product/category', 'path=' . $category['category_id']),
    );
}

这只是举例,因此我不在这里加载子类别,但方法是相同的。

现在在模板中呈现数据(so catalog/view/theme/<YOUR_THEME>/template/product/category.tpl):

<select name="cat_id" id="category-select" class="span4">
    <option value="">Browse by category</option>
    <?php if($my_categories) { ?>
    <?php foreach ($my_categories as $category) { ?>
    <option value="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></option>
    <?php } ?>
    <?php } ?>
</select>

编辑:子类别的 SEO 链接应该是:

'href' => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $subcategory['category_id'])
于 2013-05-07T14:33:30.387 回答