4

Prestashopを使用してクライアントのストアフロントを作成しています。PrestashopはSmarty.TPLファイルを使用します。私は賢いドキュメントを読み、Webを精査しましたが、すべての提案が機能していません。

私は最初に通常の.phpページを使用してサイトを作成し、すべてのページにheader.phpを含めています。

次に、prestashopのディレクトリを作成し、設定しました。header.tplファイルを編集し、header.phpコードにハードコーディングすることができました。これに伴う問題は次のとおりです。ヘッダー(ナビゲーションバー、画像、ソーシャルメディア)を編集する場合は、2つの異なる場所で編集する必要があります。そこで、header.phpファイルを「インクルード」しようとしました。

ただし、smartyの{include_PHP"file.php"}および/または{PHP}include ... {PHP}を使用しようとすると、Prestashopでエラーが発生し、空白の白いページが表示されます-エラーは表示されません-(Chromeではインクルードを取り出すまでは「サーバーエラー」)。

私はheader.tplコード全体を、smarty includeとヘッダーフックを持つ別のコードに置き換えようとしましたが、これらはどれも機能しませんでした。助言がありますか?変更を加えるために一度だけ編集する必要があるヘッダーが1つだけ必要です。

Prestashopv1.4.4.0の使用

編集:allow_phpをfalseからtrueに変更しました。ファイルが見つからないと表示されていますが、ファイルを追加しようとしています。私はそれをheader.tplの隣に置き、使用しました:

{php}
            include('navBar.php'); 
       {/php} 
4

2 に答える 2

4

答えた!

Smarty .TPL ファイルを使用する場合、何かをインクルードするとき、作業中のファイルのパスからインクルードしていません。インデックスがある場所から含めています。

例:

私は header.tpl に取り組んでいます。これは次の場所にあります: siteroot/ smartyinstall /themes/ themename /header.tpl

インクルードがファイルを探すとき、実際には smarty ルート フォルダで探します。これは、header.tpl がsmartyinstallフォルダにある index.html ページに取り込まれているためです。

だから、あなたはそこから行かなければなりません。私の場合、インクルードしようとしていたヘッダーは次の場所にありました: siteroot/includes/navBar.php

そのため、include('../includes/navBar.php'); と書く必要があり、4 つのディレクトリではなく 1 つのディレクトリだけに移動しました。

このようなお悩みをお持ちの皆様のお役に立てれば幸いです!

于 2011-09-02T00:56:59.247 に答える
0

smarty .tpl ファイルに php を含めることは非常に悪い習慣と考えられているため、この方法でコードを追加しないことを強くお勧めします。タグを無効にする主な理由の 1 つは、{php}コード インジェクション攻撃を防ぐためです。e コマース サイトは、その性質上、エクスプロイトの自然なターゲットです。

より良いアプローチは、FrontControllerクラスをオーバーライドしてカスタム コードを smarty 変数に割り当てることです。これは、php を使用することなく、header.tpl に挿入できますinclude()

クラスとコントローラーのオーバーライドが Prestashop 1.4.x で利用可能になったので、ハッキングやコア ディストリビューションへの変更に頼る必要がある本当の理由はありません。

ポール

于 2011-09-02T22:34:53.703 に答える