Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: INCLUDE / IF / FOREACH (и т д) в шаблоне

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Slash Zn
Отправлено: 25 Июля, 2015 - 16:06:10
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Июль 2015  


Помог: 0 раз(а)




Здравствуйте.
На одном своем сайте использую шаблоны с переменными такого вида: [title], предварительно заменив переменные из массива:
PHP:
скопировать код в буфер обмена
  1. $tpl = array_merge($tpl, array(
  2.     '[title]'   => 'Home Page',
  3.     '[content]' => 'Content Page',
  4.         '[date]'    => date('H:i / d.m.Y')
  5. ));

вот так:

Просьба моя к Вам, покажите, пожалуйста, пример, как сделать, что бы можно было использовать INCLUDE / IF / FOREACH в шаблонах, что то типа того:
PHP:
скопировать код в буфер обмена
  1. [include | filename]
  2.  
  3. [if ( ... ):]
  4. [else:]
  5. [endif;]
  6.  
  7. [foreach ( ... ):]
  8. [endforeach;]

Спасибо.
 
 Top
teddy
Отправлено: 25 Июля, 2015 - 16:43:33
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Блин, вот не понимаю я товарищей, которые используют шаблонизаторы всякие там смарти твиги или ещё хуже пишут свои шаблонизаторы.
Зачем, вам, может, понадобиться, шаблонизатор? Что бы верстальщику было проще? (Встречал такое мнение, поржал. С квадратными скобками ему же проще)
Что мешает сразу использовать родной if не оборачивая его в какие то непонятно зачем квадратные скобки а потом ещё и придумывать как запрограммировать парсинг своего никому ненужного синтаксиса да ещё и отлаживать это дело. Даже думать не начну над поставленным вопросом.

P.S: в тему пришел не поворчать, а подсказать, что вы занимаетесь бесполезным делом.
 
 Top
DelphinPRO
Отправлено: 25 Июля, 2015 - 17:21:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Slash Zn пишет:
Просьба моя к Вам, покажите, пожалуйста, пример, как сделать, что бы можно было использовать INCLUDE / IF / FOREACH в шаблонах, что то типа того:

не изобретайте велик. Хороший шаблонизатор написать - дело не простое. Возьмите готовый, рекомендую Twig (простой и мощный).

teddy пишет:
вот не понимаю я товарищей, которые используют шаблонизаторы всякие там смарти твиги

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


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
teddy
Отправлено: 25 Июля, 2015 - 17:35:45
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




DelphinPRO
Да мне тоже не особо хочется спорить )

Только непонятно в чем удобство. Я действительно этого не понимаю.
ob_start, extract, include, ob_get_clean - этих 4 функций достаточно что бы сгенерить полноценный шаблон используя нативный синтаксис.

Кстати это как раз один из тех немногих случаев, где я готов защитить сторону экономии на спичках(собственный синтаксис и разметку в n строк кто то же парсит) Улыбка Ну да ладно... )

Буду вечером, если что)

(Отредактировано автором: 25 Июля, 2015 - 17:38:07)

 
 Top
Slash Zn
Отправлено: 25 Июля, 2015 - 17:54:29
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Июль 2015  


Помог: 0 раз(а)




Я знал, что в первую очередь в теме будут ответы от людей, которые против шаблонов.
teddy пишет:
Даже думать не начну над поставленным вопросом.

Дело ваше. Конкретно вас я и не просил.
DelphinPRO пишет:
Возьмите готовый, рекомендую Twig (простой и мощный).

Была такая идея... Посмотрю, что за шаблонизатор такай. Спасибо.
 
 Top
DelphinPRO
Отправлено: 25 Июля, 2015 - 18:22:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




teddy пишет:
Только непонятно в чем удобство. Я действительно этого не понимаю.
ob_start, extract, include, ob_get_clean - этих 4 функций достаточно что бы сгенерить полноценный шаблон используя нативный синтаксис.

Покажи, как ты реализуешь этими функциями наследование шаблонов?

Допустим, обычная страница должна отображаться полностью, а 404 без шапки и подвала.
CODE (twig):
скопировать код в буфер обмена
  1. {# index.twig #}
  2. <html>
  3. <body>
  4. {% block header %}
  5. {% endblock %}
  6.  
  7. {% block content %}
  8. {% endblock %}
  9.  
  10. {% block footer %}
  11. {% endblock %}
  12. </body>
  13. </html>


CODE (twig):
скопировать код в буфер обмена
  1. {# home.twig #}
  2. {% extends 'index.twig' %}
  3.  
  4. {% block header %}
  5. header
  6. {% endblock %}
  7.  
  8. {% block content %}
  9. content
  10. {% endblock %}
  11.  
  12. {% block footer %}
  13. footer
  14. {% endblock %}


CODE (twig):
скопировать код в буфер обмена
  1. {# 404.twig #}
  2. {% extends 'index.twig' %}
  3.  
  4. {% block content %}
  5. 404
  6. {% endblock %}


Для любой страницы я просто вызываю рендер этой страницы

PHP:
скопировать код в буфер обмена
  1. $view->render('home.twig');
  2. $view->render('404.twig');


Да, это можно реализовать пыхом, но тебе придется написать отдельную подсистему, которая, в свою очередь и будет являться шаблонизатором (пусть и с нативным php-синтаксисом). Самописным, с дырками Улыбка Или без дырок, если постараешься. Но в любом случае - это лишняя трата времени.

Ну и твиге, в частности, есть куча других примочек

teddy пишет:
я готов защитить сторону экономии на спичках(собственный синтаксис и разметку в n строк кто то же парсит)
Да брось Улыбка Я думал ты в курсе, что любой подобный шаблонизатор кеширует шаблоны в виде php-кода, а не парсит их при каждом запросе.

ну и еще хочу отметить, что я, в принципе, не против шаблонов с нативным php-кодом, просто я не встречал хороших шаблонизаторов такого типа, а самому писать - влом Улыбка


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
teddy
Отправлено: 26 Июля, 2015 - 00:15:15
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




DelphinPRO пишет:
Покажи, как ты реализуешь этими функциями наследование шаблонов?

Наследование шаблонов? Улыбка Не, я таким не занимаюсь) У меня несколько иной подход к генерации разметки. Для меня есть только объект View в который можно встраивать такие же объекты с неограниченным уровнем вложенности (иерархия однотипных объектов)

Вот пример
PHP:
скопировать код в буфер обмена
  1. $view = new View($variables);//or use method $view->setVariables($variables);
  2. $view->setTemplate('templateAliasOrPathToTemplate');
  3.  
  4. $childVew = new View($variables);
  5. $childView->setTemplate('templateAliasOrPathToTemplate');
  6. $view->addChild($childView);

Это все что нужно чтоб встроить один шаблон в другой когда это требуется. В самих вьюшках так же спокойно использую плагины для вью, например $this->translate('phrase'); (а ты как их юзаешь? много танцевать приходится?Улыбка)

(Отредактировано автором: 27 Июля, 2015 - 20:01:55)

 
 Top
teddy
Отправлено: 27 Июля, 2015 - 20:03:08
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




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

Класс View
Спойлер (Отобразить)

Построение иерархии и рендеринг
PHP:
скопировать код в буфер обмена
  1.  
  2. $child = new View(['name' => 'Mike']);
  3. $child->setTemplate('child.php');
  4.  
  5. $root = new View();
  6. $root->setTemplate('root.php');
  7. $root->addChild($child);
  8.  
  9. echo $root->render();
  10.  

Файл root.php
Спойлер (Отобразить)


Файл child.php


Как видишь, "подсистема" очень проста. Если копнуть чуть глубже, то в конечном счете все ещё проще.
Если стало интересно, могу расписать workflow, где общий рендеринг сводится просто к "однажды инициализировать общий шаблон, а дальше просто возвращать массив из action-a".

(Отредактировано автором: 27 Июля, 2015 - 20:05:10)

 
 Top
DelphinPRO
Отправлено: 27 Июля, 2015 - 20:50:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




teddy пишет:
Видимо, нужно было показать код...

не нужно Улыбка
DelphinPRO пишет:
В холиваре участвовать не буду, можешь не начинать


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
teddy
Отправлено: 27 Июля, 2015 - 21:01:38
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Дык не ради холивара то было...
Ладно, видимо зря старался )
 
 Top
DelphinPRO
Отправлено: 28 Июля, 2015 - 01:06:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




DelphinPRO пишет:
ну и еще хочу отметить, что я, в принципе, не против шаблонов с нативным php-кодом, просто я не встречал хороших шаблонизаторов такого типа

... сказал delphinpro и вот тут же выходит Pixie 3 с нативным php-шаблонизатором с поддержкой наследования и блоков...
Надо будет посмотреть Улыбка


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB