вывод дерева и простой шаблон

Popoff

popoff.donetsk.ua
Фанат
Все остальные способы - глючные. Дерево - рекурсивная структура. Для представления рекурсивных структур требуются рекурсивные шаблоны.

А функция нужна для того, чтобы передавать дочерний $a_level, отличиный от родительского. Это можно сделать и без использования функции, но за счёт добавления РНР-кода в шаблон.

-~{}~ 27.08.06 01:46:

В моём способе всё просто: перед деревом ставит <ul>, после - </ul>. Каждый элемент начинается с <li> и заканчивается на </li>. Элемент содержит в себе ссылку и поддерево. Мне кажется это естественным и простым описанием, которое будет понятно дизайнеру.
 

Фанат

oncle terrible
Команда форума
Popoff
я буду тебе очень благодарен, если ты укажешь мне на потенциальные глюки моего способа.
Я просто их не вижу, а очень не хотелось бы столкнуться с ними впоследствии.

-~{}~ 27.08.06 02:52:

Да, возможно, ты прав...

-~{}~ 27.08.06 02:56:

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

Popoff

popoff.donetsk.ua
я буду тебе очень благодарен, если ты укажешь мне на потенциальные глюки моего способа.
Первое, что мне бросилось в глаза - это одиночный </ul> при пустом дереве. Отображаться, конечно, будет правильно, возможно, даже будет правильно отображаться в большинстве браузеров, а возможно, также, ты будешь отдельно делать проверку на пустое дерево, но всё же это глюк. ИМХО, правильная функция должна возвращать правильный результат на всех допустимых входных данных. Для пустого дерева результат вполне естественный - пустая страница.

Я имел в виду также тот глюк, о котором ты сам написал - возможны ситуации, когда требуется много раз подряд закрывать </ul>. Если ты не учёл это сразу, значит там не всё так просто. Лично мне простая программа нравится больше, чем сложная.

Ну и плюс непонятность кода. Как в самом шаблоне неочевидно назначение введённых тобой флагов, так и процедура их формирования тоже мне не представляется прозрачной.

А насчёт мелкости шаблона - это, как говорится, на вкус и цвет. Тут уж выбирай, что для тебя страшнее - мелкие шаблончики, устрашающие тебя неприятными воспоминаниями из прошлого в связи с недоделанным кем-то шаблонизатором или непонятность кода, с которым тебе же работать в будущем. ИМХО, непонятный код выльется в головную боль гораздо быстрее, чем маленький шаблончик.

-~{}~ 27.08.06 03:31:

Да, кстати, вдогонку, не далее как в этом месяце к одному из вопросов в этом форуме по поводу того, какая программа является правильной, сформулировал:
http://popoff.donetsk.ua/text/work/prg/accuracy.html

Нахожу эти критерии очень удобными при выборе одного из нескольких похожих вариантов программ.

Был бы рад получить от тебя критику и дополнения.
 

Фанат

oncle terrible
Команда форума
уел ты меня
по всем пунктам

-~{}~ 31.08.06 23:33:

кстати, висячий </ul> побеждается, элементарно ;-Р
 

Popoff

popoff.donetsk.ua
Если ты найдёшь уязвимость в скриптах моего сайта и укажешь мне на неё, то, не сомневайся - исправить ошику для меня будет элементарней элементарного. :)
 

Фанат

oncle terrible
Команда форума
Дао твоё глубоко, о, учитель.

но я с детства любил сии строки Козьмы Пруткова:
Однажды нёс пастух куда-то молоко
Но так ужасно далеко,
Что уж назад не возвращался.
Читатель! Он тебе непопадался?
 

Popoff

popoff.donetsk.ua
Ты сказал, что
висячий </ul> побеждается, элементарно
Я нахожу висячий </ul> ошибкой (а именно так я его определил в предыдущих сообщениях), а "победу висячего </ul>" - исправлением этой ошибки. По крайней мере, мне показалось, что ты имел в виду именно это. "Победить висячий </ul>" - легко, скорее всего потому, что большинство ошибок исправляются легко, по крайней мере обычно. Собственно, слова мои следует воспринимать как: "я тоже могу найти простой способ исправления ошибки, если буду знать, в чём ошибка".

Хотя сравнение моё, конечно, преувеличено - висячий </ul> - это далеко не какая-то хитромудрая труднонаходимая ошибка в дебрях скриптов моего сайта - это обычная, заурядная ошибка в трех строчках кода. Не сложнее и не проще какой-нибудь ошибки, которая, к примеру, могла бы привести к возможности выполнения SQL-инъекции. Это преувеличение было использовано мной для того, чтобы показать, что придумать способ, как не допустить ошибку (а только в таком случае можно более-менее надеятся на то, что в большом объёме скриптов не будет очень много ошибок) - это гораздо более интересное занятие, чем придумать способ, как эту ошибку исправить.

Я о том говорю, или я тебя как-то не так понял? %)
 

Фанат

oncle terrible
Команда форума
Старайся говорить проще.
Ошибку я не исправил, а удалил.
короче, корректная работа со списками.
 

Popoff

popoff.donetsk.ua
Фанат
"Говорить проще" - это задача примерно такого же уровня сложности, как и "писать программы с меньшим числом ошибок". Я люблю коллекционировать фишки (разные подходы, методики, решения конкретных задач), которые помогают мне писать программы с меньшим числом ошибок. Но я как-то никогда раньше не задумывался над тем, что нужно делать для того, чтобы "говорить проще". Спасибо тебе за подсказку, на досуге поразмышляю.
 

Фанат

oncle terrible
Команда форума
а я вот только об этом и думаю.
правда, не всегда получается. но стараюсь
 

Popoff

popoff.donetsk.ua
Я тут, кстати, сейчас подумал и обнаружил, что, видимо, "простота говорения" - это свойство не только (а, может быть даже и не столько) говорящего, сколько свойство слушателя: один услышит сказанное и подумает: "вот как всё просто!", другой услышит то же самое и подумает: "во как намудрил!" Это примерно как свойство картины быть красивой. Красивость картины - это свойство наблюдателя, а не картины, хотя многие и уверены в обратном. Один будет смотреть и восхищаться, а другой, рассматривая ту же самую картину, будет корчить гримассы и удивляться, что в ней может нравиться. Разные люди называют одну и ту же картину красивой или не красивой.

Насчёт ошибок в программе я тоже пришёл к похожему выводу - что ошибка - это не объективная реальность, а субъективное восприятие:
http://popoff.donetsk.ua/text/work/prg/error.html
Это помогло мне понять, почему некоторые люди не считают ошибкой то, что мне видится неправильным.

Тем не менее, хотя ошибка - это субъективное восприятие, мы не можем отрицать фактическое существование такого феномена, как "ошибка в программе". Более того, мы придумываем способы как сделать так, чтобы ошибок было меньше. Значит, можно заподозрить, что всё-таки существуют способы, как можно говорить так, чтобы большему количеству людей казалось, что речь - простая.
а я вот только об этом и думаю.
правда, не всегда получается. но стараюсь
Ты уже смог сформулировать какие-нибудь подходы?
 

Фанат

oncle terrible
Команда форума
Тем не менее, хотя ошибка - это субъективное восприятие, мы не можем отрицать фактическое существование такого феномена, как "ошибка в программе".
спокойной ночи.
 

С.

Продвинутый новичок
Фaнaт, что ты думаешь о таком "простом шаблоне" для дерева? Два варианта, но суть одинаковая. Код функции tree() для обоих вариантов имеется.

PHP:
<?
$treedata=array(
  array('id'=>'1'),
  array('id'=>'2'),
  array('id'=>'3','children'=>array(
    array('id'=>'3.1'),
    array('id'=>'3.2','children'=>array(
      array('id'=>'3.3.1'),
      array('id'=>'3.3.2'),
    )),
    array('id'=>'3.4'),
  )),
  array('id'=>'4'),
);
?>

<!-- option 1 -->

<div>Here the tree begins</div>
<? while( tree($treedata,'children') ): ?>
  <ul>
  <? while( $branch=tree() ): ?>
    <li><?=$branch['id']?>
  <? endwhile ?>
  </ul>
<? endwhile ?>
<div>Here it ends</div>

<!-- option 2 -->

<div>Here the tree begins</div>
<? for(tree($treedata,'children'); tree(); tree()): ?>
  <ul>
  <? for($branch=tree(); tree(); tree()): ?>
    <li><?=$branch['id']?>
  <? endfor ?>
  </ul>
<? endfor ?>
<div>Here it ends</div>
 

AmdY

Пью пиво
Команда форума
да, с инклудом вообще лажа получится, тормоз страшный, я так один блог сделал, пришлось спасать изменением стратегии парсинга.
 

С.

Продвинутый новичок
Ну на тебя не угодишь... Куда еще "чище" натив шаблон. Неужели дополнительный парсинг лучше?
 
Сверху