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 のリンクには大賛成です。初心者向けの素晴らしいクイックスタートガイドです。

于 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 に答える