我正在构建一个仅以2个产品开始的网站,因此类别菜单不合适,我正在尝试创建仅限产品的菜单。
我正在使用商业主题,并在header.tpl
中自动生成类别菜单我需要创建一个产品菜单但不是一个php编码器它变得棘手,到目前为止我有:
<ul id="topnav">
<?php foreach ($products as $product) { ?>
<li><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></li>
<?php } ?>
</ul>
有谁知道我在哪里出错?
答案 0 :(得分:2)
Opencart使用模型 - 视图 - 控制器框架(MVC),其中Controller与模型对话以检索数据,准备数据然后将其传递给View(Opencart中的.tpl文件),然后适当地显示它。
在您的情况下,header.tpl没有$ products数组的数据,因为尚未在header.php控制器中准备它。所以在头控制器的index()函数(catalog / controller / header.php)中,让我们从模型中获取所有数据,按照我们想要的方式准备,然后将其传递给视图:
$this->load->model('catalog/category'); //
$this->load->model('catalog/product'); //Load our models so the controller can get data
$categories = $this->model_catalog_category->getCategories(0); //get all top level categories
$all_products = array();
foreach ($categories as $category) //go through each category and get all the products for each category
{
$category_products = $this->model_catalog_product->getProductsforCategoryId($category['category_id']); //returns product IDs for category
foreach ($category_products as $category_product)
{
$product_data = $this->model_catalog_product->getProduct($category_product); //fetch product data for this product then add it to our array of all products
$all_products[] = array(
'href' => $this->url->link('product/product', 'product_id=' . $product_data['product_id']),
'name' => $product_data['name']
);
}
}
$this->data['products'] = $all_products; //Now pass our product array data to the view, in the view this will be the $products array
这假设您的所有产品仅属于顶级类别,而不属于任何子类别。如果您确实在将来创建顶级类别的子类别,则需要遍历这些子类别并为每个子类别获取产品。
答案 1 :(得分:0)
感谢OpenCart论坛的一位成员,我找到了答案。
只需将此代码放在您需要的位置:
<?php
$this->load->model('catalog/product');
$products_1 = $this->model_catalog_product->getProducts($data = array());
if ($products_1) {$output = '<ul id="topnav">';}
foreach ($products_1 as $product_1) {
$output .= '<li>';
$unrewritten = $this->url->link('product/product', 'product_id=' . $product_1['product_id']);
$output .= '<a href="'.($unrewritten).'">' . $product_1['model'] . '</a>';
}
if ($products_1) {$output .= '</ul>';}
echo $output;
?>