|
|
|
|
|
для: Loki
(26.09.2008 в 16:18)
| | Интересует только одно, насколько быстро это будет работать? | |
|
|
|
|
|
|
|
для: mihdan
(29.09.2008 в 17:25)
| | Loki предложил реально рабочий, простой и структурно понятный вариант реализации обработки дерева на смарти, чем он вам всем не нравится??
А самое главное что его вариант использует смарти действительно как "шаблонизатор". | |
|
|
|
|
|
|
|
для: Loki
(02.10.2008 в 12:48)
| | Значит я враг самому себе, и делая запрос на выборку из базы дерева, разбросаю записи как попадя?:) Нафига она нужна такая выборка? Я так выбираю с учетом того, что мне возможно потребуется вывести на страницу уже раскытое дерево. Если и в этом случае делать рекурсию в Смарти, то это вообще было бы из рук вон. Я бы поступил проще - также сортированное дерево с иерархией вложения, плюс добавление к записям уровня вложения. Останется просто при разложении массива в шаблоне, например, добавлять к имени класса элемента уровень вложения, а в соответствующем классе указать padding-left, или просто банально добавить соответствующее число слева.
Есть оправданные условия когда можно и в Смарти вызвать рекурсию, но вот для меню, которые и нужно сортировать, и которые имеют максимум 3-4 уровней в ширину, я бы не стал такого делать. | |
|
|
|
|
|
|
|
для: Trianon
(02.10.2008 в 11:32)
| | Ну если рассматривать идеологию шаблонов, то приложение делится на две части: одна отдает структурированные данные, а вторая их правильно отображает. Если вторая часть не может самостоятельно отобразить полученные данные и мы начинаем в структуру данных вводить какие-то дополнительные подпорки, то тем самым мы переносим часть кода представления в код логики. Ну а остальное уже просто характеризуется степенью этого переноса: если Лена полностью перенесла представление в приложение, то sim5 просто произвел сортировку определённым образом (при нарушении сортировки работать этот код не будет). | |
|
|
|
|
|
|
|
для: Loki
(02.10.2008 в 10:12)
| | Как-то это ... хм... странно слышать.
Я может чего и не понимаю в шаблонизаторах, но
Вариант в начале треда передавал шаблонизатору готовые теги.
Которые применялись не для построения представления, а для голой выдачи наружу.
Здесь же передается именно что структура дерева. | |
|
|
|
|
|
|
|
для: Loki
(02.10.2008 в 10:12)
| | Loki, ну на вас не угодишь :) Я просто получаю массив дерева (чистая РНР часть) и отдаю шаблонизатору, че ему тут разжевывать? :) Что значит кашица? Ну а как я должен в рекусивном запросе получать дерево - "каком к верху"? :) | |
|
|
|
|
|
|
|
для: 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}
|
| |
|
|
|
|
|
|
|
для: Loki
(30.09.2008 в 10:38)
| | Хорошо, но позже, мне ноут принесли, нужно сделать. Но что-то вы не туда. Я получаю дерево, а это значит знаю уровни вложения, характеристики уровней, и проверяя эти значения построить нужное, труда не составит. Это то же, что и вы делаете, только я в одном шаблоне, а вы несколькими ;-) | |
|
|
|
|
|
|
|
для: sim5
(30.09.2008 в 10:07)
| | >средствами Смарти
А я какими средствами его разложил?
Собственно, я хочу увидеть как можно разложить "средствами Смарти" дерево с неограниченной вложенностью, с созданием корректной объектной модели не прибегая к рекурсии. Желательно чтобы дизайнер при виде макета не покончил с собой. Покажете, наконец? | |
|
|
|
|