0

我只是从 Opencart 开始。我需要有品牌列表,比如类别列表。我这样尝试:

<div class="box">
  <div class="box-heading"><?php echo "По брендам" ?></div>
  <div class="box-content">
    <ul class="box-category">
      <?php foreach ($manufacturers as $manufacturer) { ?>
      <li>
        <?php if ($manufacturer['manufacturer_id'] == $manufacturer_id) { ?>
        <a href="<?php echo $manufacturer['href']; ?>" class="active"><?php echo $manufacturer['name']; ?></a>
        <?php } else { ?>
        <a href="<?php echo $manufacturer['href']; ?>"><?php echo $manufacturer['name']; ?></a>
        <?php } ?>
        <?php if ($manufacturer['children']) { ?>
        <ul>
          <?php foreach ($manufacturer['children'] as $child) { ?>
          <li>
            <?php if ($child['manufacturer_id'] == $child_id) { ?>
            <a href="<?php echo $child['href']; ?>" class="active"> - <?php echo $child['name']; ?></a>
            <?php } else { ?>
            <a href="<?php echo $child['href']; ?>"> - <?php echo $child['name']; ?></a>
            <?php } ?>
          </li>
          <?php } ?>
        </ul>
        <?php } ?>
      </li>
      <?php } ?>
    </ul>
  </div>
</div>

我将此代码添加到 default/template/module/category.tpl 文件中。我收到此错误:注意:未定义变量:制造商在....

我该怎么做???谢谢。

4

2 回答 2

4

category.tpl类别控制器的模板。其目的是显示类别。尝试将您的浏览器指向http://your.site/index.php?route=product/manufacturer,您将获得制造商列表。模板是/catalog/view/theme/default/template/product/manufacturer_list.tpl.

您的错误是一件简单的事情的结果:该$manufacturers变量未在 ControllerModuleCategory 控制器(又名category.php)中定义。如果要在模板中使用变量,则必须在相关控制器中定义它。

为了获得准确的制造商列表/catalog/view/theme/default/template/module/category.tpl(即使这不是本模块的目的),您需要做一些事情:

1)在/catalog/model/catalog/manufacturer.php文件(型号ModelCatalogManufacturer)中添加函数(该函数将帮助您从数据库中获取制造商列表):

public function getManufacturerByCategory($category_id) {
    $query = $this->db->query("SELECT m.* 
        FROM " . DB_PREFIX . "product p 
        RIGHT JOIN " . DB_PREFIX . "product_to_category p2c ON 
            p.product_id = p2c.product_id 
        LEFT JOIN " . DB_PREFIX . "manufacturer m ON 
            p.manufacturer_id = m.manufacturer_id
        WHERE 
            p2c.category_id = " . (int)$category_id . " AND 
            m.manufacturer_id IS NOT NULL
        GROUP BY m.manufacturer_id");
    return $query->rows;
}

2)在/catalog/controller/module/category.php文件(又名 ControllerModuleCategory 控制器)中,在if (file_exists(DIR_TEMPLATE . $this->config->get('confi...插入代码之前:

if (isset($this->request->get['path'])) {
    $category_id = array_pop($parts);

    $this->load->model('catalog/manufacturer');
    $this->data['manufacturers'] = $this->model_catalog_manufacturer->getManufacturerByCategory($category_id);
} else {
    $this->data['manufacturers'] = array();
}

(请记住$this->data['manufacturers'],控制器将在模板中可用,如$manufacturers. $this->data['categories']will be $categories$this->data['another_var']will be$another_var等。)

并且从那一刻起,您可以使用foreach ($manufacturers as $manufacturer)类别模块模板(当您收到“未定义变量”错误时,您尝试过的地方foreach)来输出适用于当前类别产品的制造商列表。

最好的方法是创建另一个模块,“制造商”模块,而不是非法使用类别模块。但我不确定你现在是否准备好迎接这一挑战。

顺便说一句,我完全支持shadyyx与 Jay Gilford 指南的链接。对于初学者来说,这是一个很棒的快速入门指南。

于 2013-10-05T14:51:13.503 回答
2

我有简单的解决方案:只需在 Controller:category.php 中添加代码:

$this->load->model('catalog/manufacturer');
$this->data['mans'] = $this->data['manufacturers'] = 
$this->model_catalog_manufacturer->getManufacturers();

并查看:category.tpl:

<?php
         foreach($mans as $mans_value)
         {
            var_dump($mans_value);
         }
?>
于 2014-05-27T04:52:16.193 回答