0

a) PHP で Smarty 配列を修正し、b) その結果を Smarty 配列変数に戻すにはどうすればよいでしょうか?

問題に取り組み、解決に近づいたと思ったのに、目標がどんどん遠ざかり続けた経験はありませんか? 私はこれに半日を費やし、ドキュメントを調べ、例を探しました...しかし、非常に基本的なものが欠けているに違いありません。

前提:エントリが重複する Smarty 配列があります (Smarty コードはテンプレートでエンコードされているため、今のところ、これを作成する方法を変更することはできません)。これは、ショッピング カートに同じ製品のエントリが複数あるため、問題を引き起こします。正直なところ、これがどのようにまとめられたかの論理を変えることはできません。

これが私が得たものです:

Smarty:
         {$products}

私のシナリオでは、{$products} には次のような 4 つのエントリが含まれています。

array(1) { [0]=> array(12) { ["pid"]=> string(2) "13" ["domain"]=> NULL
["billingcycle"]=> string(4) "free" ["configoptions"]=> string(0) "" 
["customfields"]=> array(0) { } ["addons"]=> array(0) { } ["server"]=> string(0) ""
["productinfo"]=> array(9) { ["pid"]=> string(2) "13" ["gid"]=> string(1) "2" 
["type"]=> string(5) "other" ["groupname"]=> string(13) "Beta Products" ["name"]=>
string(44) "BetterStuff "Free Until 2014" Beta" ["description"]=> string(21) 
"BetterStuff installer" ["freedomain"]=> string(0) "" ["freedomainpaymentterms"]=> 
array(1) { [0]=> string(0) "" } ["freedomaintlds"]=> array(1) {[0]=> string(0) ""}}
["allowqty"]=> string(1) "0" ["qty"]=> int(1) ["pricing"]=> array(4) { ["baseprice"]=>
string(9) "$0.00 USD" ["setup"]=> string(9) "$0.00 USD" ["recurring"]=> array(0){}
["totaltoday"]=> string(9) "$0.00 USD" } ["pricingtext"]=> string(5) "FREE!" } }    

PHP では、array-unique を簡単に使用して、この配列内の 3 つの正確なコピーを取り除き、1 つだけを残すことができます (上で示したように)。

{php}
    $var = $this->get_template_vars('products');
    $var = array_unique($var);
    $smarty = new Smarty();
    $smarty->assign('newproducts', $var = array_unique($var));
    var_dump($var);
{/php}

これは PHP では完全に機能し、var_dump($var) には 1 つの配列項目が含まれます (上で示したものと同様)。PHP では、is_array で $var をチェックすると、結果は true です。

ただし、Smarty に戻ると、{$newproducts} は NULL です。

  • 元の Smarty 配列 {$products} を再割り当てしようとすると、配列に文字列値を追加できないというエラー メッセージが表示されます。

  • {$newproducts|@count} を印刷しようとすると、0 が返されます。これは少し混乱します。Smart 配列は 1 から始まるのに対し、PHP 配列は 0 から始まると私は信じているからです。

  • したがって、PHP は私が割り当てた変数を新しい変数の値として配列と見なしますが、Smarty には配列として取り込まれません。

ここで何が間違っていますか?PHP 配列を Smarty 変数に変換できるように、何らかの方法で分解または分割する必要がありますか?

また、Smarty の元の {$products} 配列を新しい一意の配列値に「リセット」するにはどうすればよいですか?

誰?

4

2 に答える 2

0
{php}
    // read data from CURRENT INSTANCE
    $var = $this->get_template_vars('products');
    $var = array_unique($var);
    // create NEW INSTANCE
    $smarty = new Smarty();
    // assign to NEW INSTANCE
    $smarty->assign('newproducts', $var = array_unique($var));
    var_dump($var);
{/php}

つまり、新しい smarty インスタンスを作成し、それにデータを割り当てています。上記のデータが現在のインスタンスで利用可能になると考える理由はありますか?

これを試して:

{php}
    // read data from CURRENT INSTANCE
    $var = $this->get_template_vars('products');
    $var = array_unique($var);
    // assign to CURRENT INSTANCE
    $this->assign('newproducts', $var = array_unique($var));
{/php}

{php} は非推奨です。プラグインを使用した Smarty の拡張を検討することをお勧めします。

于 2012-07-17T16:28:18.440 に答える