ФорумРазработкаКлиентская сторонаВерстка и оформление → Рекурсия в Smarty

Рекурсия в Smarty

  • Baboot

    Сообщения: 440 Репутация: N Группа: Адекваты

    Spritz 15 мая 2009 г. 2:27

    вот собсна. Вобщем не знаю как красивее и читабельней сделать. Мож кто то реализовывал? Поделитесь опытом. Есть массив вида:

    $cList = array("0"=>array(
                                      "id"         =>"1",
                                      "name"    =>"firstEl"
                                      "daughEl" =>array()
                                     )
                       "1"=>array(
                                      "id"         =>"2",
                                      "name"    =>"secEl"
                                      "daughEl" =>array(
                                                               "id"         =>"2",
                                                               "name"    =>"secEl"
                                                               "daughEl" =>array()
                                                               )
                                       )
                         )
    // и т.д. макс вложенность до 5 элементов

    Нужно вывести на экран иерархичепский список… Геммор в том что этот массив "резиновый". То есть он постоянно будет изменятся нужен универсальный(рекурсивный перебор данных) перебор в смарти и выод на экран. У меня только мысли только через include если размер daughEl больше 0.
  • phpdude

    Сообщения: 26632 Репутация: N Группа: в ухо

    Spritz 15 мая 2009 г. 2:29, спустя 2 минуты 23 секунды


    вот собсна. Вобщем не знаю как красивее и читабельней сделать. Мож кто то реализовывал? Поделитесь опытом. Есть массив вида:

    $cList = array("0"=>array(
    "id" =>"1",
    "name" =>"firstEl"
    "daughEl" =>array()
    )
    "1"=>array(
    "id" =>"2",
    "name" =>"secEl"
    "daughEl" =>array(
    "id" =>"2",
    "name" =>"secEl"
    "daughEl" =>array()
    )
    )
    )
    // и т.д. макс вложенность до 5 элементов


    красивее на рекурсии ))
    Сапожник без сапог
  • Baboot

    Сообщения: 440 Репутация: N Группа: Адекваты

    Spritz 15 мая 2009 г. 2:32, спустя 2 минуты 45 секунд


    красивее на рекурсии ))


    Да я понимаю) тока как ее самую через смарти реализовать. Не сталкивался с такой проблемой.
  • Baboot

    Сообщения: 440 Репутация: N Группа: Адекваты

    Spritz 15 мая 2009 г. 2:47, спустя 15 минут 41 секунду

    Что, никто не поможет? Профессионалы называются))))
  • phpdude

    Сообщения: 26632 Репутация: N Группа: в ухо

    Spritz 15 мая 2009 г. 2:51, спустя 3 минуты 18 секунд


    Что, никто не поможет? Профессионалы называются))))
    в бан захотел?)

    тебе просто надо сделать темплейт который может сам в себя инклудить при определенном условии.

    епт а самим подумать? начинающие называются))
    Сапожник без сапог
  • Baboot

    Сообщения: 440 Репутация: N Группа: Адекваты

    Spritz 15 мая 2009 г. 2:54, спустя 3 минуты 15 секунд

    в принципе так и делаю. Больше ничего на ум не пришло….
  • phpdude

    Сообщения: 26632 Репутация: N Группа: в ухо

    Spritz 15 мая 2009 г. 2:57, спустя 2 минуты 59 секунд


    в принципе так и делаю. Больше ничего на ум не пришло….
    используй xslt, в нем это обычная вещь))
    Сапожник без сапог
  • phpdude

    Сообщения: 26632 Репутация: N Группа: в ухо

    Spritz 15 мая 2009 г. 2:57, спустя 8 секунд

    ооо! зы: 5000
    Сапожник без сапог
  • ubica

    Сообщения: 530 Репутация: N Группа: Кто попало

    Spritz 15 мая 2009 г. 14:15, спустя 11 часов 18 минут 14 секунд

    Baboot, если ты не эстет в отношении мвц, то рекурсию выполни в пхп, получив нечто вида

    array
    (
     [0] => array
     (
       "id" => "1",
       "name" => "firstEl"
       "level" => 0
     ),
     …
    );

    и потом приассигни это в смарти
  • Baboot

    Сообщения: 440 Репутация: N Группа: Адекваты

    Spritz 17 мая 2009 г. 14:55, спустя 2 дня 39 минут

    мож кому пригодится решил так:


    <!– Темплата cList.tpl –>

    {foreach item='cList' from=$object.daughter}
       {*здесь обработка данных*}
       {if $cList.daughter|@count>0}
           {include file='cList.tpl' object=$cList}
       {/if }    
    {/foreach}
  • ubica

    Сообщения: 530 Репутация: N Группа: Кто попало

    Spritz 18 мая 2009 г. 10:15, спустя 19 часов 20 минут 40 секунд


    мож кому пригодится решил так:


    <!– Темплата cList.tpl –>

    {foreach item='cList' from=$object.daughter}
       {*здесь обработка данных*}
       {if $cList.daughter|@count>0}
           {include file='cList.tpl' object=$cList}
       {/if }    
    {/foreach}


    концепт-пиздец, реализация норм)
  • Baboot

    Сообщения: 440 Репутация: N Группа: Адекваты

    Spritz 18 мая 2009 г. 10:18, спустя 2 минуты 31 секунду

    Убийца, почему пиздец то? Наоборот удобно, не нужно плодить данные. Универсальный рубрикатор. есть ид, если есть родитель то парент=ид записи родителя. Получается иерархический список. Удобно ёпт. Вот тока с сраными рекурсиями бесит возиться при парсинге.
  • phpdude

    Сообщения: 26632 Репутация: N Группа: в ухо

    Spritz 18 мая 2009 г. 10:18, спустя 29 секунд

    {if $cList.daughter|@count>0}
           {include file='cList.tpl' object=$cList}
       {/if }


    ===

    {if count($cList.daughter)>0}
           {include file='cList.tpl' object=$cList}
       {/if }
    Сапожник без сапог
  • phpdude

    Сообщения: 26632 Репутация: N Группа: в ухо

    Spritz 18 мая 2009 г. 10:19, спустя 37 секунд


    Убийца, почему пиздец то? Наоборот удобно, не нужно плодить данные. Универсальный рубрикатор. есть ид, если есть родитель то парент=ид записи родителя. Получается иерархический список. Удобно ёпт. Вот тока с сраными рекурсиями бесит возиться при парсинге.
    почитай про бинарные деревья в бд, думаю тогда ты поймешь что твой концепт - пиздец, причем полный
    Сапожник без сапог
  • phpdude

    Сообщения: 26632 Репутация: N Группа: в ухо

    Spritz 18 мая 2009 г. 10:19, спустя 20 секунд



    Убийца, почему пиздец то? Наоборот удобно, не нужно плодить данные. Универсальный рубрикатор. есть ид, если есть родитель то парент=ид записи родителя. Получается иерархический список. Удобно ёпт. Вот тока с сраными рекурсиями бесит возиться при парсинге.
    почитай про бинарные деревья в бд, думаю тогда ты поймешь что твой концепт - пиздец, причем полный
    с увеличением рубрик, количество запросов к бд растет ой ой ой
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!