Жидкий доступ к другому массиву в цикле for

У меня есть такие массивы, как:

$business = array(0 => 'Car', 1 => 'IT');
$counts   = array(0 => 15, 1 => 33);

Я назначаю оба массива в своем гибком шаблоне и перебираю бизнес-массив.

<f:for each="{business}" as="b" key="key">
    <li>
        <f:link.action action="business" arguments="{current_business: b.uid}">
            <f:if condition="{counts.key} > 0">
                <f:then>
                    {b.title} {counts.key}
                </f:then>
                <f:else>
                    {b.title}
                </f:else>
             </f:if>
        </f:link.action>
    </li>
</f:for>

Я не получаю вывод для {counts.key}, должен ли я получить доступ к нему другим способом?


person smartcoderx    schedule 23.08.2015    source источник


Ответы (2)


Это можно сделать с помощью v:variable.get-ViewHelper из расширения vhs. Вместо {counts.key} используйте

{v:variable.get(name: 'counts.{key}')}

or

<v:variable.get name="counts.{key}"/>.
person Jost    schedule 23.08.2015

Конечно, вы можете сделать это, как показал Йост, манипулируя данными в представлении, это совершенно правильно, с другой стороны, вероятно, объединение массивов в ваших контроллерах в ассоциативный массив(ы) будет более удобным, например:

$business = array(
    0 => array('title' => 'Car', 'count' => '15'),
    1 => array('title' => 'IT', 'count' => '33'),
);

Посмотреть

<f:for each="{business}" as="b">
    <li>
        <f:link.action action="business" arguments="{current_business: b.uid}">
            <f:if condition="{b.count} > 0">
                <f:then>
                    {b.title} ({b.count})
                </f:then>
                <f:else>
                    {b.title} (no items)
                </f:else>
             </f:if>
        </f:link.action>
    </li>
</f:for>

Примечание. Если на самом деле это коллекция объектов модели, вы можете просто добавить поле transient - count в свою модель - без объявлений TCA и SQL - в этом случае вы сможете устанавливать значения "на лету" в этом поле в пределах контроллер и использовать их как общее поле модели в представлениях, но они не будут сохранены в БД.

person biesior    schedule 23.08.2015