Smarty. многомерный массив + вложенные секции

.scu

Новичок
Smarty. многомерный массив + вложенные секции

есть вот такой массив {$news_content}:

PHP:
Array (2)
0 => Array (3)
  content => Array (3)
    0 => Array (4)
      title => первая новость
      anons => empty
      date => 21.08.2005 05:08:14
      text => empty
    1 => Array (4)
      title => вторая
      anons => empty
      date => 21.08.2005 05:08:09
      text => empty
    2 => Array (4)
      title => Погода в доме
      anons => Говорят, что бесконечно долго можно с...
      date => 21.08.2005 09:08:40
      text => <strong>Камин</strong>&nbsp;&mdash; э...
  template => news_1.tpl
  news_title => Новости IT
1 => Array (3)
  content => Array (1)
    0 => Array (4)
      title => Стань чемпионом!
      anons => <p>Что можно сделать с&nbsp;сосисками...
      date => 30.08.2005 04:08:45
      text => <p>Что можно сделать с&nbsp;сосисками...
  template => news_1.tpl
  news_title => Пресс релиз
вопрос - как обратиться к например элементу

PHP:
1 => Array (3)
    content => Array (1)
       0 => Array (4)
         title => Стань чемпионом!
я пробовала мное... по идеи должно быть что-то типо:
PHP:
{section name=list loop=$news_content}

{$news_content[list].news_title}

{section name=list1 loop=$news_content[list].content}
{$news_content[list].content.[list1].anons}
{/section}

{/section}
но не фига не получается((
помогите плз
 

.scu

Новичок
то есть секция в секции для многомерного массива и кол-во элементов я естественно не знаю.

-~{}~ 30.08.05 07:18:

без foreach нельзя сделать? в плане только секциями 2мя вложенными...
синтаксис
PHP:
{section name=list1 loop=$news_content[list].content} 
{$news_content[list].content.[list1].anons} 
{/section}
чем не верен? мож просто ошибка где-то....

-~{}~ 30.08.05 07:24:

или если можно foreach с текущей ситуацией (на примере гораздо легче понять)
:)
а то я не очень его синтаксис в смарти пока догоняю....

-~{}~ 30.08.05 07:56:

фуххххх догнала смыл. :)
оказывается в foreach к элементу
PHP:
{$news_content[list].content.[list1].anons}
(так и не поняла, почему такое название не пашет)
можно обратиться просто как
PHP:
{foreach name=outer item=content from=$news_content[list].content}
  {foreach key=key item=item from=$content.anons}
	{if $item}
	<div style="padding-right:43px;">{$item}
	<div style="padding-top:5px;"><a href="" class=podrobnee>подробнее<img src="/images/arr2.gif" width=5 height=10 border=0 align=absmiddle></a></div>
	<br><br></div>
	{/if}
  {/foreach}
{/foreach}
кстати доп. вопрос тогда как упростить конструкцию, если много элементов, а не один
PHP:
anons
например anons, title, text
можно делать что-то типоо ( у меня не пашет, но может нужно просто правильно написать... ):
PHP:
{foreach name=outer item=content from=$news_content[list].content}
  {foreach key=key item=item from=$content}
      {$item->anons}
      {$item->title}
  {/foreach}
{/foreach}

заранее сенк за ответы :)
 

kvf77

Red Devil
.scu
нужно правильно написать, естественно.

а именно:
{$item.anons}

Странно ты как-то юзаешь синтаксис Smarty. В одном месте правильно - в другом нет - тебе не кажется, что если ты онин раз в Foreach писала так, то и в остальных foreach ничего не изменилось?
 

.scu

Новичок
просто по идеи (по логике)
PHP:
{$news_content[list].content.[list1].anons}
так же ж тоже должно работать, но не работает... поэтому я и запуталась :)
 

kvf77

Red Devil
.scu

ну и не работает - ты ж синтаксис нарушила
зачем list1 взяла в скобки?
 

.scu

Новичок
так он же к второй секции находится, где цикл...

то есть там будет для элементов цикла вместо list1 0,1,2 и тп
 

kvf77

Red Devil
.scu

вот так будет:
{$news_content
  • .content.list1.anons}
    а как там на самом деле - я не знаю - нет желания исследовать твой массив - пиши правильно и будет тебе счастье
 

.scu

Новичок
{$news_content
  • .content.list1.anons}
    в этом случае List1 будет восприниматься как переменная цикла ? :)

    просто я наверное несовсем понимаю пока синтаксис смарти.
    собственно написала [list1] по аналогии с
    • - это же тоже секция... а во вложенной секции я подумала, что синтаксис должен быть аналогичным.
 

kvf77

Red Devil
.scu
да, блин, че ты не понимаешь?
есть массив
$array['id']['id1']['id2']
в смарти он будет записан так
{$array.id.id1.id2}
теперь тебе понятно?
 

.scu

Новичок
примерно.
просто это ж для конкретного элемента (Если мы знаем их число)
а вот при использовании секций (я так понимаю, что это что-то типо while) обозначается переменная, которая будет переходить по итерациям... так вот почему в первом случае она обозначается в скобках
  • . а если есть вложенная секция, то уже без.
    то есть у меня не было бы вопросов, если бы и в первой секции писалось

    PHP:
    {section name=list loop=$news_content} 
    {$news_content.list.news_title} 
    {/section}
 

kvf77

Red Devil
.scu

это разные записи одного и тогоже - только и всего
дело в том, что в smarty ты можешь написать так
$array[$id]
но не можешь так
$array.$id

соответственно, можно и так писать
$array[id]

поэтому и разный синтаксис
в целом же - всегда лучше писать
как я написал в предыдущем посте - если тебе не надо использовать в качестве индекса инфо из переменной другой
 

.scu

Новичок
спасибо большое!
очень дельные советы %)

-~{}~ 30.08.05 20:02:

вынуждена таки вернуться к нашему диалогу... все-таки видимо не все поняла.
ты сказал, что будет работать (чтобы не создавать много foreach) код

PHP:
{foreach name=outer item=content from=$news_content[list].content}
  {foreach key=key item=item from=$content}
       {if $item.anons}
	{$item.anons}
	{$item.id}
       {/if}
  {/foreach}
{/foreach}
но он выводит какую-то билеберду...
 

kvf77

Red Devil
.scu

ты таки заставляешь меня разбираться со структурой твоего массива!

если брать твой первоначальный массив - то циклов должно быть 3, что такое
  • я не понял
 

.scu

Новичок
из документации по смарти:

PHP:
{* секции могут быть неограничено вложеннымиas. С помощью вложенных секций
   вы можете организовать доступ к комплексным стрктурам информации, таким
   как многомерные массивы. В данном примере $contact_type[customer] является
   массивом, где содержатся типа контактов данного клиент. *}
{section name=customer loop=$custid}
	id: {$custid[customer]}<br>
	name: {$name[customer]}<br>
	address: {$address[customer]}<br>
	{section name=contact loop=$contact_type[customer]}
		{$contact_type[customer][contact]}: {$contact_info[customer][contact]}<br>
	{/section}
	<p>
{/section}
-~{}~ 01.09.05 11:30:

то есть
  • это вроде как счетчик от 0 и до конца массива, который поочередно проходит итерации и делает себе ++
 
Сверху