Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Рекурсия на смарти возможна?

Сообщения:  [1-10]    [11-20]  [21-27] 

 
 автор: mustang.sanek   (19.02.2009 в 17:11)   письмо автору
 
   для: Loki   (26.09.2008 в 16:18)
 

Интересует только одно, насколько быстро это будет работать?

  Ответить  
 
 автор: mustang.sanek   (19.02.2009 в 16:59)   письмо автору
 
   для: mihdan   (29.09.2008 в 17:25)
 

Loki предложил реально рабочий, простой и структурно понятный вариант реализации обработки дерева на смарти, чем он вам всем не нравится??
А самое главное что его вариант использует смарти действительно как "шаблонизатор".

  Ответить  
 
 автор: sim5   (02.10.2008 в 12:59)   письмо автору
 
   для: Loki   (02.10.2008 в 12:48)
 

Значит я враг самому себе, и делая запрос на выборку из базы дерева, разбросаю записи как попадя?:) Нафига она нужна такая выборка? Я так выбираю с учетом того, что мне возможно потребуется вывести на страницу уже раскытое дерево. Если и в этом случае делать рекурсию в Смарти, то это вообще было бы из рук вон. Я бы поступил проще - также сортированное дерево с иерархией вложения, плюс добавление к записям уровня вложения. Останется просто при разложении массива в шаблоне, например, добавлять к имени класса элемента уровень вложения, а в соответствующем классе указать padding-left, или просто банально добавить соответствующее число   слева.
Есть оправданные условия когда можно и в Смарти вызвать рекурсию, но вот для меню, которые и нужно сортировать, и которые имеют максимум 3-4 уровней в ширину, я бы не стал такого делать.

  Ответить  
 
 автор: Loki   (02.10.2008 в 12:48)   письмо автору
 
   для: Trianon   (02.10.2008 в 11:32)
 

Ну если рассматривать идеологию шаблонов, то приложение делится на две части: одна отдает структурированные данные, а вторая их правильно отображает. Если вторая часть не может самостоятельно отобразить полученные данные и мы начинаем в структуру данных вводить какие-то дополнительные подпорки, то тем самым мы переносим часть кода представления в код логики. Ну а остальное уже просто характеризуется степенью этого переноса: если Лена полностью перенесла представление в приложение, то sim5 просто произвел сортировку определённым образом (при нарушении сортировки работать этот код не будет).

  Ответить  
 
 автор: Trianon   (02.10.2008 в 11:32)   письмо автору
 
   для: Loki   (02.10.2008 в 10:12)
 

Как-то это ... хм... странно слышать.
Я может чего и не понимаю в шаблонизаторах, но
Вариант в начале треда передавал шаблонизатору готовые теги.
Которые применялись не для построения представления, а для голой выдачи наружу.
Здесь же передается именно что структура дерева.

  Ответить  
 
 автор: sim5   (02.10.2008 в 10:42)   письмо автору
 
   для: Loki   (02.10.2008 в 10:12)
 

Loki, ну на вас не угодишь :) Я просто получаю массив дерева (чистая РНР часть) и отдаю шаблонизатору, че ему тут разжевывать? :) Что значит кашица? Ну а как я должен в рекусивном запросе получать дерево - "каком к верху"? :)

  Ответить  
 
 автор: Loki   (02.10.2008 в 10:12)   письмо автору
 
   для: sim5   (02.10.2008 в 00:36)
 

На мой взгляд, этот вариант принципиально не отличается от варианта предложенного Леной в начале треда: тоже перекладывание проблем представления на логику приложения. То есть в конечном итоге в шаблон передается не структура дерева, а некая разжёванная кашица с костылями для отрисовки.
Но вариант рабочий. Спасибо! Буду иметь его ввиду;)

  Ответить  
 
 автор: sim5   (02.10.2008 в 00:36)   письмо автору
 
   для: Loki   (30.09.2008 в 10:38)
 

Зря взялся за этот ноут, только время потерял.) Что касается вывода. Значит так. Я получаю рекурсивным вызовом дерево каталогов, соответственно сортированное, с вложением по родителю. Так я раскладывал массив для древовидного меню. Шаблон формировался под меню товаров (потому по памяти пишу о них:)). Наличие ссылки в меню определялось наличием товаров в категории, этим же условием определялся и класс элемента меню. Условием вложения элементов (их закрытие) служило id родителя категории. Например, массив товаров будет такой:
<?
$tree 
= array(
array(
'name'=>'Украшения','id'=>1,'par'=>0,'prod'=>10),
array(
'name'=>'Косметика','id'=>2,'par'=>0,'prod'=>0),
array(
'name'=>'Люкс','id'=>3,'par'=>2,'prod'=>10),
array(
'name'=>'Крема','id'=>4,'par'=>2,'prod'=>0),
array(
'name'=>'Такие','id'=>5,'par'=>4,'prod'=>10),
array(
'name'=>'И вот такие','id'=>6,'par'=>4,'prod'=>10),
array(
'name'=>'Чего-то','id'=>7,'par'=>2,'prod'=>10)
);

А так в шаблоне:
{section name=i loop=$tree}
  {if !$tree[i].prod}
    <div class="folder">{$tree[i].name}
  {else}
    <div class="doc"><a href="?cat={$tree[i].id}">{$tree[i].name}</a>
  {/if}
  {if $tree[i.index_next].par ne $tree[i].par and $tree[i].prod}
    </div></div>
  {else}
    {if $tree[i].prod}</div>{/if}
  {/if}  
{/section}

  Ответить  
 
 автор: sim5   (30.09.2008 в 10:46)   письмо автору
 
   для: Loki   (30.09.2008 в 10:38)
 

Хорошо, но позже, мне ноут принесли, нужно сделать. Но что-то вы не туда. Я получаю дерево, а это значит знаю уровни вложения, характеристики уровней, и проверяя эти значения построить нужное, труда не составит. Это то же, что и вы делаете, только я в одном шаблоне, а вы несколькими ;-)

  Ответить  
 
 автор: Loki   (30.09.2008 в 10:38)   письмо автору
 
   для: sim5   (30.09.2008 в 10:07)
 

>средствами Смарти
А я какими средствами его разложил?

Собственно, я хочу увидеть как можно разложить "средствами Смарти" дерево с неограниченной вложенностью, с созданием корректной объектной модели не прибегая к рекурсии. Желательно чтобы дизайнер при виде макета не покончил с собой. Покажете, наконец?

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-27] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования