1

PrestaShop1.5用のモジュールAbcを開発していますこれは私のディレクトリです

23/10/2012  18:23             1.307 index.php
07/12/2012  18:27    <DIR>          tpl
               -> tpl dir:
               07/12/2012  18:27    <DIR>          .
               07/12/2012  18:27    <DIR>          ..
               07/12/2012  18:39               543 form.tpl
07/12/2012  18:36             4.507 abc.php

これは私が使用するコードです:

class Abc extends Module
{
    public function getContent()
    {
             return $this->display(dirname(__FILE__), 'tpl/form.tpl');
        }
...
}

ただし、smarty{debug}を使用してすべての変数を出力する場合

公式ドキュメントによると、変数を取得できないか、{img_dir}必要なものがありません。{shop_name}

テンプレートを配置する場所、テーマなどがわかりません。バックオフィス(バックエンド)ページのみが必要です。私は何が間違っているのですか?

ありがとうございました

4

2 に答える 2

2

Smarty変数にはグローバルスコープがあります。これは、それらを1つのファイルに割り当てることができ、スクリプトのライフサイクル全体でどこでも使用できることを意味します。このように、フックを起動するか、フロントエンドで独自のtplを使用すると、使用するコントローラーに関係なく、ほとんどの場合(コントローラーのオーバーライドには例外がありますが)、メソッドFrontController::init()が実行されます。このメソッドでは、これらのグローバルsmarty変数のほとんどが割り当てられます(http://doc.prestashop.com/display/PS15/Creating+a+PrestaShop+module#CreatingaPrestaShopmodule-UsingSmarty):

$assign_array = array(
    'img_ps_dir' => _PS_IMG_,
    'img_cat_dir' => _THEME_CAT_DIR_,
    'img_lang_dir' => _THEME_LANG_DIR_,
    'img_prod_dir' => _THEME_PROD_DIR_,
    'img_manu_dir' => _THEME_MANU_DIR_,
    'img_sup_dir' => _THEME_SUP_DIR_,
    'img_ship_dir' => _THEME_SHIP_DIR_,
    'img_store_dir' => _THEME_STORE_DIR_,
    'img_col_dir' => _THEME_COL_DIR_,
    'img_dir' => _THEME_IMG_DIR_,
    'css_dir' => _THEME_CSS_DIR_,
    'js_dir' => _THEME_JS_DIR_,
    'pic_dir' => _THEME_PROD_PIC_DIR_
); 

管理パネルでフックを使用すると、FrontController::init()実行されません。そのため、ファイル内で使用するには、これらすべての変数を割り当てる必要があります。

ただし、管理パネルのどこでも、メソッドで割り当てられたmodule_dirとmodule_template_dirを使用できますModule::display()

于 2012-12-11T15:51:36.133 に答える
0

Prestashopの[モジュール]タブ内に拡張構成forms/htmlを配置する場合は、smartyを使用せずに実行することをお勧めします。通常、これは、javascript、htmlなどを使用したdisplayFormや、これを呼び出すpublicメソッドgetContent()などのメソッドによって実行されます。関数を実行し、そこに表示するために必要なhtmlを返します。これは1.4の単純な拡張の古いマニュアルですが、そこからアイデアを得ることができます。

1.5からは、プライベート関数initForm()の編集モジュールで行われるように、デフォルトのフィールドを使用してフォームを設定することもできます。

管理パネル内で(テンプレートを使用して)何かをより困難にする機能を持たせるには、既存のタブの1つに独自のタブを作成するか、独自のタブを作成する必要があると思います。

私が知っているすべてのデフォルトモジュールでは、tpl css jsファイル(mymodule.tpl)がフロントエンドにコンテンツを表示するために使用され、配置する必要があります(これは、1.5バージョンに当てはまります。1.4では、これらのファイルはモジュールのルートフォルダーに配置されています。多くのコアモジュールに当てはまります)

于 2012-12-11T06:40:55.650 に答える