Рекурсивное построение меню

fixxxer

К.О.
Партнер клуба
Фанат
Та не, просто некоторые считают что это типа хелперы и это типа нормально.
В некоторых модных фреймворках подобное дерьмецо чуть не центральное место занимает.
 

Фанат

oncle terrible
Команда форума
Да не, ну ты читай переписку :)
Это был вопрос конкретному клиенту. Я очень надеюсь на положительный ответ ;)
 

hell0w0rd

Продвинутый новичок
Нет, не понимаешь.
вот это -

- к шаблонам не имеет ни малейшего отношения.
Это называется "спагетти".

Меня тут одна мысль озарила.
Скажи, употребляя слово "препроцессор", не имеешь ли ты в виду, что вот этот вот код генерирует код шаблона со смартиподобным иснтаксисом?
Употребляя слово препроцессор я подразумеваю что есть конструкция вида {menu.1}, препроцессор ищет подобные конструкции, "понимает" что нужно запросить у контроллера данные по модулю меню и параметру 1 - контроллер смотрит, видит что есть такой модуль, отправляет в модель, модель в базе берет все данные по меню с параметром 1 и отдает их контроллеру, контроллер отдает их функции из-за которой и началась эта самая тема:)
 

Фанат

oncle terrible
Команда форума
понятно.
классический случай - шаблоном мы считаем только шапку, а весь остальной HTML ничтоже сумняшеся пихаем в код
садись, два
 

hell0w0rd

Продвинутый новичок
понятно.
классический случай - шаблоном мы считаем только шапку, а весь остальной HTML ничтоже сумняшеся пихаем в код
садись, два
Какую-то хрень несешь если честно))
PHP:
{page.doctype}
<html>
	<head>
		<title>{page.title}</title>
		{page.keywords}
		{page.description}
	</head>
	<body>
		<div id="wrapper">
			<div id="head">
				<p>{const.phone}</p>
				<p>{const.address}</p>
				{module.catalog}
			</div>
			<div id="topnav">
				{menu.1}
				{const.bugaga}
			</div>
			<div id="content">
				{page.h1}
				{page.text}
				{module.gallery}
			</div>
		</div>
	</body>
</html>
Вот так выглядит тестовый шаблон) по описаной аналогии в предыдущем сообщении обработка идет, если это не правильно, объясни, пожалуйста, почему, а не бросайся красноречивыми отговорками, никак и никому не помогающими)
 

Фанат

oncle terrible
Команда форума
Когда у тебя menu.1, page.text и module.gallery будет выводиться через шаблоны - вот тогда можно будет сказать, что ты понимаешь, что такое шаблоны и пользуешься ими. А сейчас у тебя ни "препроцессоров", ни "похожих на смарти шаблонизаторов" и в помине нету. Есть только бесполезный фантик и куча умных слов.
 

hell0w0rd

Продвинутый новичок
Когда у тебя menu.1, page.text и module.gallery будет выводиться через шаблоны - вот тогда можно будет сказать, что ты понимаешь, что такое шаблоны и пользуешься ими. А сейчас у тебя ни "препроцессоров", ни "похожих на смарти шаблонизаторов" и в помине нету. Есть только бесполезный фантик и куча умных слов.
Под шаблонами подразумеваешь конструкции вроде:
require_once('path/to/module/menu.php');
а в menu.php:
<ul>
<? foreach(bla as blabla=>blablabla):?>
теги теги теги
<?endforeach;?>
 

Фанат

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

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

ksnk

прохожий
GusakovNick А вот поясни, откуда взялся код из первого поста? Он появляется из того шаблона парой постов выше? Каким образом?
 

hell0w0rd

Продвинутый новичок
GusakovNick А вот поясни, откуда взялся код из первого поста? Он появляется из того шаблона парой постов выше? Каким образом?
Не совсем, я тяну шаблон из файла, построчно ищу в нем {*}, далее по определенным правилам выполняю какие-то действия, записываю в массив пары *=>замена и второй раз прохожусь по шаблону, попутно заменяя {*} значениями из массива, это основной принцип
То есть написав {menu.100500} в функцию уйдут данные по меню с id 100500
 

hell0w0rd

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

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

ksnk

прохожий
Фанат Человек, как видишь, мастерит свой шаблонизатор и возражения по лапше и стилю не совсем приемлемы.

GusakovNick Ошибка этого топика в том, что нужно было обсуждать ИСХОДНЫЙ синтаксис шаблона и явно рассказать откуда ноги растут.

Вопрос первого поста таким образом, разрешается вводом специального тега "начало макрокоманды", "конец макрокоманды" и еще одного - "вызов макрокоманды".
 

Фанат

oncle terrible
Команда форума
ksnk
Да с чего ты взял? Ничего он не мастерит. Нету у него ни шаблона, ни синтаксиса.
Классический "шаблон" вида
PHP:
шапка
{контент}
подвал
в котором контент выводится старым добрым говнокодом без шаблонов.
Я о таком еще года три назад писал:
Самое простое и очевидное заблуждение состоит в том, что новички называют шаблоном вынесенный в отдельный файл "дизайн" - обший html для всех страниц сайта. И на этом успокаиваются. Динамическую информацию, ничтоже сумняшеся, выводя старым добрым echo :)
 

hell0w0rd

Продвинутый новичок
ksnk
Да с чего ты взял? Ничего он не мастерит. Нету у него ни шаблона, ни синтаксиса.
Классический "шаблон" вида
PHP:
шапка
{контент}
подвал
в котором контент выводится старым добрым говнокодом без шаблонов.
Я о таком еще года три назад писал:
У тебя неприлично предвзятое мнение о новичках, если я выложил тестовый шаблон и в нем отнюдь не так, как ты указал - стоит задуматься, над тем что лучше что-то посоветовать дельное, нежели сидеть и ворчать)
 

fixxxer

К.О.
Партнер клуба
Фанат
Ну так хелперы это то же самое, только в меньшем объеме. ;)
Не вижу в контексте генерации html вызовом php функции концептуальной разницы между { tree } и { content } ;)

Притом что если { content } просто поначалу от непонимания, то с этими хелперами смешно - накрутили иерархии классов, эм вэ мать его цэ, шаблонизаторы-хренизаторы, и тут опа вышли опять на Дерибасовскую =)
 

ksnk

прохожий
GusakovNick Вопрос про код из первого поста, все-таки,остается открытым. Откуда он взялся? Он написан вручную и это "значение", которое будет "подставлено" в место шаблона с каким-нибудь {menu.100500}
 

Фанат

oncle terrible
Команда форума
У тебя неприлично предвзятое мнение о новичках
На зеркало не надо пенять.
стоит задуматься, над тем что лучше что-то посоветовать дельное
Во-первых, если тебя интересует дельный совет, надо задуматься над тем, чтобы не спорить, называя черное - белым, а этот самый совет попросить.
Вот, к примеру, как задача решается в "смартиподобных языках": http://www.smarty.net/docs/en/language.function.function.tpl (see ex. 7.43)
 
Сверху