0

PHPの組み込みテンプレートで苦労していることをできるようになることを期待して、Smartyテンプレートエンジンの学習を開始しましたが、同様の問題が発生しています。

たとえば、アコーディオン メニューのような再利用可能な HTML コードを作成したいとします。私のテンプレートは次のようになります:

Accordion.tpl :

<div class="Accordion">

    {foreach from=$entries item=entry}

    <div class="AccordionEntry">
        <div class="AccordionTab">
            {$entry.tab}
        </div>
        <div class="AccordionContent">
            {$entry.content}
        </div>
    </div>

    {/foreach}

</div>

このテンプレートは、コントローラ パーツで割り当てられた変数「エントリ」を取得します。

$smarty = new Smarty();

$smarty->assign('entries', [
    ['tab' => 'tab_00', 'content' => 'content_00'],
    ['tab' => 'tab_01', 'content' => 'content_01'],
    ['tab' => 'tab_02', 'content' => 'content_02']
]);

$smarty->display('Accordion.tpl');

これはうまくいきます。しかし、このアコーディオン テンプレートを複数の場所で再利用したい場合はどうすればよいでしょうか? データは次のように割り当てることができます:

$smarty->assign('leftMenuEntries', [
    ['tab' => 'tab_00', 'content' => 'content_00'],
    ['tab' => 'tab_01', 'content' => 'content_01'],
    ['tab' => 'tab_02', 'content' => 'content_02']
]);

$smarty->assign('rightMenuEntries', [
    ['tab' => 'tab_00', 'content' => 'content_00'],
    ['tab' => 'tab_01', 'content' => 'content_01'],
    ['tab' => 'tab_02', 'content' => 'content_02']
]);

ここに私の問題があります: テンプレート "Accordion.tpl" は常に変数 "entries" からデータを取得しますが、ここでは "leftMenuEntries" と "rightMenuEntries" を使用しているため、明らかに失敗します。2 つのアコーディオンが必ずしも同じエントリを持つとは限らないため、これらのエントリを 2 つの異なる変数に割り当てる必要があります。

これを一緒に機能させるにはどうすればよいですか?

ご協力いただきありがとうございます :)

4

2 に答える 2

1

私が正しく理解したかどうかはわかりませんが、新しい変数を割り当てて新しいテンプレートに表示せずに、同じテンプレート スタイルのデータを複数回使用したい場合は、この div のみで Accordion.tpl を作成し、すべてに含めることができます。データが必要なテンプレート。

{include file='Accordion.tpl'}

上記の場合、メイン テンプレートに割り当てられている場合は同じ名前の変数が取得され、Accordion.tpl には割り当てられません。

ただし、問題の核心が配列の上書きにある場合は、PHP.net の array_merge トピックで次のことがわかりました。

<?php
// you have two arrays:

array1 = array (['0'] =>"blahblupp",
                        ['1'] => "bluppblah" );

array2 = array (['0'] =>"tirili",
                        ['1'] => "tralala" );

// and want following as a result:

result = array (['0'] =>"blahblupp",
                      ['1'] => "bluppblah",
                      ['2'] =>"tirili",
                      ['3'] => "tralala" );

// following function does the addition:

function array_add($array1, $array2)
{
    $result = $array1;
    $h = sizeof($array1);
    for ($i = 0; $i < sizeof($array2); $i++)
    {
        $result[$h] = $array2[$i];
        $h++;
    }

    return $result;
}
?> 

それでも問題が解決しない場合は、別の解決策を見つけようとします

于 2013-04-24T20:03:41.610 に答える