我正在使用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>
但它不起作用。它什么都不返回。
我希望有人可以帮助我并告诉我我错过了什么。
答案 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
以查找其子项及其子项