如何在opencart admin / catalog / product_form.tpl上获取所有类别?

时间:2013-11-17 12:42:18

标签: php opencart

我正在使用opencart 1.5.6,而我正在尝试做的是添加一个简单的选择,其中包含所有类别和子类别作为product_form.tpl上的选项。

我尝试在admin / controler / catalog / product.php上添加以下代码:

    $this->load->model('catalog/category');

    $results = $this->model_catalog_category->getCategories(0);

    foreach ($results as $result) {

        $this->data['categories'][] = array(
            'category_id' => $result['category_id'],
            'name'        => $result['name']
        );
    }

以及视图admin / view / catalog / product_form.tpl:

<tr>
              <td>Categories</td>
              <td><select>
                      <option value="">All Categories</option>
                      <?php foreach ($categories as $category) { ?>
                      <option value="<?php echo $category['name']; ?>"><?php echo $category['name']; ?></option>
                      <?php } ?>
                  </select>
              </td>
          </tr>

但它不起作用。它什么都不返回。

我希望有人可以帮助我并告诉我我错过了什么。

2 个答案:

答案 0 :(得分:6)

我认为您的方法很好,但是一个小错误 - 管理部分中的方法getCategories()不会收到$parent_id参数,而是array $data参数(用于排序和过滤可能性)。因此,如果您想在product控制器中加载类别,可以像这样继续(我正在重用您的代码):

$this->load->model('catalog/category');

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

foreach ($this->model_catalog_category->getCategories(array()) as $category) {
    $this->data['categories'][] = array(
        'category_id' => $category['category_id'],
        'name'        => $category['name']
    );
}

在你的模板中:

      <?php if($categories) { ?>
      <tr>
          <td>Categories</td>
          <td><select>
                  <option value="">All Categories</option>
                  <?php foreach ($categories as $category) { ?>
                  <option value="<?php echo $category['category_id']; ?>"><?php echo $category['name']; ?></option>
                  <?php } ?>
              </select>
          </td>
      </tr>
      <?php } ?>

我认为这与你所拥有的几乎相同,不明白为什么它对你不起作用......

答案 1 :(得分:2)

获取完整类别列表的最简单方法是直接调用数据库,例如

$result = $this->db->query("
    SELECT
        `category_id`,
        `name`
    FROM
        `" . DB_PREFIX. "category_description`
    WHERE
        `language_id` = '" . (int) $this->config->get('config_language_id')  . "'
");

但是,这些不会显示父类别,也不会按任何特定顺序显示。要做到这一点,您需要运行$this->model_catalog_category->getCategories(0);的递归查找,将0更改为循环category_id以查找其子项及其子项