[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Подскажите как реализовать идейку
Страницы: 1, 2
McLotos
Добрый вечер.
Решил попрактиковаться в ООП, начал с такой задачи как создание парсера шаблона.
По задумке парсер должен соответствовать следующим пунктам:
1. В файлах шаблонов не должно быть никаких дополнительных слов определяющих начало и конец блока что-то типа
<!-- BEGIN:Main --> <!-- END:Main -->

2. В файлах шаблонов не должно быть php кода

Как я планирую это реализовывать:
1. Построчное чтение файла шаблона
2. Поиск в каждой строке шаблона специальных тегов в формате {ИмяМодуля.ИмяПеременной}
3. Поиск в шаблоне тэгов ol и ul (чтобы не выводить эти тэги и всё что между ними, если списка не существует)
4. Значение каждого тэга {Модуль.Переменная} сначала должны проверяться на is_array и если true то выводить строку с этим тэгом несколько раз постоянно заменяя значение на следующий элемент массива.

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

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Aeq
и чем {Модуль.Переменная} лучше чем <?= $module->variable ?> ? зачем напрягать пхп обработкой шаблонов, если он умеет это нативно.
Arh
Цитата (Aeq @ 10.12.2013 - 17:00)
и чем {Модуль.Переменная} лучше чем <?= $module->variable ?> ? зачем напрягать пхп обработкой шаблонов, если он умеет это нативно.

стильно, модно, молодежно =)

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
McLotos
Aeq
Спасибо, за свежую мысль =)
Шучу.
Каждый раз когда поднимается подобный вопрос, обязательно найдутся люди, которые выдают эту фразу, но скорее всего, если бы меня устраивал такой вариант, я бы не создал этот топик.
{Модуль.Переменная} лучше чем <?=$module->variable?> уже хотя бы тем, что в шаблоне вообще не будет php кода и какой-нибудь горе-верстальщик не сможет создать мне проблем, дискуссия на тему "зачем" бессмысленна и к сожалению бесконечна.
Arh
на самом деле, сейчас очень модно говорить "зачем писать, когда пых и так..."
но если следовать такой логике, тогда зачем вообще писать, всё уже давно написано.

Не хочу никого обидеть, но если Вам нечего сказать по существу, тогда не стоит ничего писать, по-моему если количество Ваших сообщений будет в несколько раз выше количества Ваших ПОЛЕЗНЫХ сообщений, никто от этого умнее не станет, а Вы только зря потеряете время.

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Aeq
Цитата (SergeySA @ 10.12.2013 - 21:06)
Aeq
Спасибо, за свежую мысль =)
Шучу.
Каждый раз когда поднимается подобный вопрос, обязательно найдутся люди, которые выдают эту фразу, но скорее всего, если бы меня устраивал такой вариант, я бы не создал этот топик.
{Модуль.Переменная} лучше чем <?=$module->variable?> уже хотя бы тем, что в шаблоне вообще не будет php кода и какой-нибудь горе-верстальщик не сможет создать мне проблем, дискуссия на тему "зачем" бессмысленна и к сожалению бесконечна.

горе верстальщику без разницы чего писать {} или <?= ?>. проверено многолетним опытом. главное сказать ему "пиши вот так", он запомнит и будет писать "вот так".
Aeq
ладно ладно, умолкаю, у меня тут как раз соседняя тема о противоположном мнении laugh.gif
Arh
Да я не отговариваю) сам использую похожий велосипед =)
На сколько помню <?=$a?> еще надо в настройках сервера включать, не везде заработает, а писать <?php echo $a; ?> куда менее удобно чем {$a}
Так что я тебя даже поддерживаю, можно не строить лисапедов и писать на машинном коде вообще, чё уж там.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Aeq
Цитата (Arh @ 10.12.2013 - 21:13)
Да я не отговариваю) сам использую похожий велосипед =)
На сколько помню <?=$a?> еще надо в настройках сервера включать, не везде заработает, а писать <?php echo $a; ?> куда менее удобно чем {$a}
Так что я тебя даже поддерживаю, можно не строить лисапедов и писать на машинном коде вообще, чё уж там.

по-моему с 5.3 не надо ничего включать. <?= уже не считается short_tag-ом. вы все еще на 5.2?? тогда мы идем к вам!!
McLotos
Цитата (Aeq @ 10.12.2013 - 21:15)
вы все еще на 5.2?? тогда мы идем к вам!!

Ждём-с!
Ну так а по делу есть что сказать?
Кстати, Arh, как продвигается изобретение своего велосипеда? и на сколько он получился удобнее того что уже есть, к примеру xTemplate?

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Arh
Цитата (SergeySA @ 10.12.2013 - 17:17)
Цитата (Aeq @ 10.12.2013 - 21:15)
вы все еще на 5.2?? тогда мы идем к вам!!

Ждём-с!
Ну так а по делу есть что сказать?
Кстати, Arh, как продвигается изобретение своего велосипеда? и на сколько он получился удобнее того что уже есть, к примеру xTemplate?

Да как то 1 раз написал пару лет назад, так и пользуюсь)
Хотя иногда посещают мысли "нафига когда можно без этого", но уже привычка.

$Tpl->Load('list.html'); //Подключил нужный файл

$Tpl->Tags($row)->Content(); //Поменял теги из шаблона на значения из массива и вывел всё на экран


Надо бы заглянуть в этот класс, чё там и как работает)

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
McLotos
Цитата
Arh
Надо бы заглянуть в этот класс, чё там и как работает)

Мда, вот это мне всегда и нравилось, через пару-тройку лет открываешь код и... пишешь всё с начала, потому-как в старом коде уже ничего не понимаешь и он кажется полным бредом =)

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Arh
Цитата (SergeySA @ 10.12.2013 - 17:30)
Цитата
Arh
Надо бы заглянуть в этот класс, чё там и как работает)

Мда, вот это мне всегда и нравилось, через пару-тройку лет открываешь код и... пишешь всё с начала, потому-как в старом коде уже ничего не понимаешь и он кажется полным бредом =)

Собственно вот что под капотом
$tpl это шаблон сохранённый в переменный с помощью $Tpl->Load(), через ob_start (); короче
ну $row это массив со значениями которые менять.
Регулярка находит в шаблоне {$var} теги, один массив с тем что нашла {$var}, другой с тем что внутри тегов var
дальше unique, чтоб форыч меньше раз крутился, потом, блин впадлу уже ))
потом проверяет есть ли такое значение в массиве и перезаписывает это в $Tags['1'] , то есть вместо var будет значение $row['var'] а во втором массиве остаётся тег {$var}
потом str_replace меняет {$var} на значение $row['var']
вроде все нормально, хз может допилите , обновлюсь)

preg_match_all('!{\$([a-z0-9\_\.\->]+)}!i',$tpl, $Tags);
$Tags['1'] = array_unique($Tags['1']);
$Tags['0'] = array_unique($Tags['0']);

if(isset($Tags['0'])){
foreach ($Tags['1'] as $key => &$val) {
if ($val) $Tags['1'][$key] = isset ($row[$val]) ? $row[$val] : '';
} unset($val);
}
$this->return = str_replace($Tags['0'], $Tags['1'], $tpl);
return $this;


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.