Знаете ли вы какие-нибудь популярные PHP-движки для php, которые имеют концепцию текущего контекстного узла? - PullRequest
1 голос
/ 15 октября 2010

Этот вопрос связан с этим вопросом Есть ли что-то вроде Dwoo-s {with} или {loop} в Smarty 3 или более ранней версии?

В основном я хочу иметь что-то вроде currentузел из шаблонов XSLT.

В XSLT, когда я пишу что-то вроде:

<xsl:for-each select="catalog/cd">
<tr>
  <td><xsl:value-of select="title"/></td>
  <td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>

Artist фактически ссылается на каталог / CD [1] / Artist (и, конечно, [2], [3] ... и т. д., если есть больше компакт-дисков)

Текущий контекст, в котором имена полей понимаются, изменяется внутри каждого блока.

Мне очень нравится эта функциональность.Знаете ли вы какой-нибудь популярный шаблонный движок PHP (кроме Dwoo), обладающий такой функциональностью?

ОБНОВЛЕНИЕ:

Тим Фонтан предложил:

// smarty
{foreach from=$cds item=cd}
    <tr>
        <td>{$cd->title}</td>
        <td>{$cd->artist}</td>
    </tr>
{/foreach}

но я бы предпочел что-то вроде:

// dwoo
{foreach from=$cds}
    <tr>
        <td>{$title}</td>
        <td>{$artist}</td>
    </tr>
{/foreach}

, которое не будет работать.

Подумайте о вложенном цикле (предположим, что на cd есть несколько исполнителей):

// smarty
{foreach from=$cds item=cd}
    <tr>
        <td>{$cd->title}</td>
        <td><ul>
        {foreach from=$cd->artist item=$ar}
           <li>{$ar}</li>
        {/foreach}
        </ul></td>
    </tr>
{/foreach}

когда я предпочитаю

// dwoo
{foreach from=$cds}
    <tr>
        <td>{$title}</td>
        <td><ul>
        {foreach from=$artist}
           <li>{$}</li>
        {/foreach}
        </ul></td>
    </tr>
{/foreach}

Также, если у меня также есть коллекция музыки на кассетах, я могу повторить ее с тем же кодом:

// dwoo
{foreach from=$mcs}
    <tr>
        <td>{$title}</td>
        <td><ul>
        {foreach from=$artist}
           <li>{$}</li>
        {/foreach}
        </ul></td>
    </tr>
{/foreach}

Я не знаю, еслиЯ мог бы использовать одно и то же имя для переменной цикла снова и снова, как здесь:

// smarty, buggy?
{foreach from=$mcs item=o}
    <tr>
        <td>{$o->title}</td>
        <td><ul>
        {foreach from=$o->artist item=o}
           <li>{$o}</li>
        {/foreach}
        </ul></td>
        <td>{$o->title}</td>
    </tr>
{/foreach}

Но я полагаю, что внутренний $ o перезаписал бы внешний $ o

Ответы [ 4 ]

1 голос
/ 15 октября 2010

сам PHP?

Если я правильно понимаю, вы хотите эту функцию

<?php foreach($catalog as $cd): ?>
    <tr>
        <td><?php echo $cd['title'] ?>
        <td><?php echo $cd['artist'] ?>
    </tr>
<?php endforeach ?>

Вы можете иметь это самостоятельно в файле шаблона, и ваш контроллер создаст массив $ catalog и передаст его шаблону.

0 голосов
/ 28 декабря 2010

Насколько мне известно, единственный довольно популярный шаблонизатор с открытым исходным кодом с этой функцией - Dwoo

0 голосов
/ 02 декабря 2010

ИМХО более запутанно опускать «придуманное» имя, так как нет ссылки на то, из какой области поступают данные.Это очень похоже на ужасно злоупотребляемую функцию extract () в PHP, которая извлекает массив из текущей таблицы символов, что делает очень сложным управление кодом.

0 голосов
/ 15 октября 2010

Разве это не просто обычный цикл foreach?Так, например, в Smarty эквивалент будет:

{foreach from=$cds item=cd}
    <tr>
        <td>{$cd->title}</td>
        <td>{$cd->artist}</td>
    </tr>
{/foreach}

, но все опции шаблонов и сам PHP могут это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...