2015-08-23 1 views
2

Я должен массивы как:Fluid доступ другого массива в цикл

$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}, я должен получить доступ к этому другой способ?

ответ

4

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

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

или

<v:variable.get name="counts.{key}"/>. 
2

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

$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 деклараций - в этом случае вы сможете установить значения «на лету «в этом поле внутри контроллера и использовать их как общее поле модели в представлениях, но они не будут сохранены в БД.