2

onClickでビューを切り替えるボタンに取り組んでいます。ページの更新やナビゲーションのたびにデフォルトの表示状態に切り替わらないようにするために、最後/デフォルトの位置を変数に保存したいと考えています。

PHPファイルで次のことができることを読みました:

$myVar= -1;
$smarty->assign('myVar', $myVar);

次に$myVar、tpl ファイルで使用します。しかし、それは私にはうまくいきません。私が取り組んでいる tpl ファイルはモジュールの一部ではなく、prestashop ルート フォルダーに .php ファイルがありません。

smarty/php と、変数を作成し、それらを使用してボタンの状態を保存する方法について、誰かが私に少し教えてもらえますか?

ありがとう

4

2 に答える 2

4

Smarty は、PrestaShop のコア機能/コントローラーからのプレゼンテーション (XHTML/CSS) の分離を容易にする、PHP 用の PHP テンプレート エンジンです。

テンプレート ファイル (通常、PrestaShop では .tpl 拡張子が付いています) は、常に PHP コントローラー ファイル (フロントエンド コア コントローラーまたはモジュール コントローラー) によって呼び出されます。

例:/prestashop/controllers/front/ContactController.php

$this->context->smarty->assign(array(
    'contacts' => Contact::getContacts($this->context->language->id),
    'message' => html_entity_decode(Tools::getValue('message'))
));

$this->setTemplate(_PS_THEME_DIR_.'contact-form.tpl');

このファイルがデータベースから情報を取得し、Smarty に割り当てていることがわかります。

次に、「contact-form.tpl」テンプレートがそれを訪問者に表示します。

モジュールの構文は非常に似ています。例:/prestashop/modules/blocklink/blocklink.php

public function hookLeftColumn($params)
{       
    $this->smarty->assign('blocklink_links', $this->getLinks());
    
    return $this->display(__FILE__, 'blocklink.tpl');
}

また、値を Smarty 変数に格納するには、「割り当て」機能を 2 つの方法で使用できます。

  1. $this->context->smarty->assign('my_smarty_variable_name', $my_value);

    または、複数の変数がある場合:

  2. $this->context->smarty->assign(array('my_smarty_variable_name1' => $my_value1), ('my_smarty_variable_name2' => $my_value2));

そして、Smarty テンプレートで:

The value of my variable is {$my_smarty_variable_name|escape:'htmlall':'UTF-8'}.

「エスケープ」修飾子は、XSS セキュリティの問題を回避するために使用されます。

于 2013-06-25T13:29:10.203 に答える
3

smarty ファイルで変数を使用するには、次の例を使用する必要があります。

$this->context->smarty->assign(
    array(
        'myVar' => $myvar,
        'otherVar' => $otherVar
    )
 );

次に、tpl ファイルで使用するには、以下を使用するだけです。

<div>my var = {$myVar}</div>

smarty で変数を使用するには、{} 内に記述する必要があります。

于 2013-06-26T06:03:52.137 に答える