php-opencart2.0.3でそれぞれの.tplファイルのコントローラーファイルを検索します
Opencartホームページページにカスタムデータを表示しようとしましたが、データが.tplファイルに送信されるコントローラーを見つけることができません。そして、私はpavoflshshopテーマ2.0.3を使用しています。 catalog/controller/product/product.php
(正しいコントローラーかどうかはわかりません)ファイルにデータを追加しました。 .tplファイルでその変数を呼び出すと、「未定義の変数」と表示されます。誰かがデータがどこから来ているのか私を助けてください。
これは私の.tplパスです:
C:\ xampp \ htdocs \ grceducators \ catalog \ view \ theme \ pav_flashshop \ template \ common \ product \ default.tpl
デフォルトの.tplコードは次のとおりです:
<div class="product-meta clearfix"> <h6 class="name"><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></h6> <h6 class="name"><a href="<?php echo $product['href']; ?>"><?php echo $product['custom_desc']; ?></a></h6> <?php if( isset($product['description']) ){ ?> <p class="description"><?php echo utf8_substr( strip_tags($product['description']),0,200);?>...</p> <?php } ?> <div class="bottom clearfix"> <?php if ($product['price']) { ?> <div class="price"> <?php if (!$product['special']) { ?> <span class="price-new"><?php echo $product['price']; ?></span> <?php } else { ?> <span class="price-new"><?php echo $product['special']; ?></span><span class="price-old"><?php echo $product['price']; ?></span> <?php } ?> </div> <?php } ?> <?php if ($product['description']) { ?> <div class="price"> <span class="price-new"><?php echo $product['custom_desc']; ?></span> </div> <?php } ?> </div> </div>
どんな助けでもありがたいです。
答え :
解決策:
フォルダーcatalog/controller / commonに表示されるコントローラーファイルの一部は、「他の何かのコンテナー」です。たとえば、home.phpファイルで何が起こるかを説明します
そのファイルを開くと、数行のコードしか表示されません。その一部は次のようになります。
$ data ['column_left'] = $ this-> load-> controller('common / column_left');
その1行のコードで、Opencartは、ホームページの左側の列に割り当てられたすべてのモジュールをロードします(管理者から、デザイン -><のページに移動します。強力>レイアウト->ホーム)。
$ data ['column_left'] は、モジュールのリストが含まれる大きなオブジェクトです:
(これは単なる疑似コードであり、スタッフがどのように機能するかを理解するためのものです):
$data['column_left'] {
module 1 {...} controller + template
module 2 {...} controller + template
module 3 {...} controller + template
}
すべてのモジュールには、独自のコントローラー +(モデル)+テンプレート
がありますテンプレートをレンダリングしているコントローラーをすばやく取得するには、最初に(管理パネルから)ホームページのレイアウトを確認する必要があります。 コンテンツの上部、コンテンツの下部、左の列、右の列の4つの主要なセクションが表示されます。 " p>
コンテンツが印刷されているホームページを確認してください。たとえば、左側の列にある場合、tplファイルをレンダリングしているモジュールは、(管理者)ホームレイアウトの左側の列にリストされているモジュールの1つです。 通常、モジュール名は、どのモジュール(次にどのコントローラー)がtplをレンダリングしているかを取得するのに十分です(通常は、カタログ/コントローラー/拡張機能/モジュールフォルダーを調べて、のモジュール名と一致するファイル名を見つけるだけです。レイアウトページ)。 私が説明した方法は、ほとんどの場合、デバッグツールを使用しなくても機能します。 ルービックキューブのように書かれたサードパーティの拡張機能に遭遇しました。そのような場合は、 debug_backtrace()を使用する必要があります。 この関数は、特に大きなフレームワークでは、大量のデータを出力できます。その関数の出力を減らすために、次のことをお勧めします。 ページのどのセクションでコンテンツがレンダリングされているかを確認します(コンテンツの上部、コンテンツの下部、左の列、右の列)、ファイル catalog / controller / common / [ your_section]。php そのファイルの下部にある次のコードをコピーします(debug_backtrace()の修正バージョンを貼り付けています。これにより、ブラウザーから簡単に読み取れるように出力がフォーマットされます):
// PHP < 5.3.6
foreach (debug_backtrace() as $trace) {
echo sprintf("\n%s:%s %s::%s", (isset($trace['file'])? $trace['file'] : '') , (isset($trace['line'])? $trace['line'] : ''), (isset($trace['class'])? $trace['class'] : ''), (isset($trace['function'])? $trace['function'] : ''));
}
die;
// PHP >= 5.3.6
debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
die;
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。