0

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>

ここで私がどこで間違っているのか誰か知っていますか?

4

2 に答える 2

2

Opencart は Model-View-Controller フレームワーク (MVC) を使用します。このフレームワークでは、コントローラーがモデルと通信してデータを取得し、データを準備してからビュー (Opencart の .tpl ファイル) に渡し、適切に表示します。

あなたの場合、header.phpコントローラーでまだ準備されていないため、header.tplには$products配列のデータがありません。ヘッダー コントローラー (catalog/controller/header.php) の index() 関数で、モデルからすべてのデータを取得し、必要な方法で準備してからビューに渡します。

$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

これは、すべての商品が最上位のカテゴリのみに属し、サブカテゴリには属していないことを前提としています。将来、最上位カテゴリのサブカテゴリを作成する場合は、それらのサブカテゴリをループして、それぞれの製品を取得する必要があります。

于 2012-08-28T21:35:57.260 に答える
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;                                                          
    ?>

クレジットはここのフォーラムメンバーに送られます。

于 2012-09-03T03:53:02.070 に答える