Invis1ble
25.11.2014 - 15:39
Цитата |
А твиг как это делает под капотом? |
Добавил в свой шаблонизатор одну строчку, теперь так работает.
{$block=}
<div>
Какието данные
</div>
{/$block}
<?php
tpl::display('index.tpl',array(
'block' => $block
));
?>
Или сразу в массив
{$data['block']=}
<div>
Какието данные
</div>
{/$data['block']}
<?php
tpl::display('index.tpl',$data);
?>
Или сразу вывести
{$var=}
<div>
Какието данные
</div>
{/$var}
{$var}
Правда не уверен где это применять. Надо будет поиграться с наследованиями =)
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Игорь_Vasinsky
25.11.2014 - 15:56
Цитата |
Добавил в свой шаблонизатор |
он навсегда останется твоим.
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Цитата (Игорь_Vasinsky @ 25.11.2014 - 15:56) |
Цитата | Добавил в свой шаблонизатор |
он навсегда останется твоим.
|
В смысле?) Он и должен остаться моим.
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Invis1ble, моё решение
<?php
class Layout
{
protected $classLayout = 'parent';
protected $layoutPath = 'tpls/layout.php';
public function parseTemplate()
{
ob_start();
require $this->layoutPath;
return ob_get_clean();
}
}
class ChildLayout extends Layout
{
protected $classLayout = 'child';
}
$view = new ChildLayout;
$view->parseTemplate();
а в tpls/layout.php
<div class="layout <?php echo $this->classLayout;?>"></div>
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Invis1ble
25.11.2014 - 16:50
cheeнеплохо, хотя я ожидал другой подход и уже подготовил критику
зато в твоем случае, чтоб поменять класс, верстальщику надо лезть в php-файлы
не говоря о том, что он там натворит, если нужно будет сделать что-то сложнее смены класса
а в результате получим всё тот же шаблонизатор (очередную вариацию)
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
Invis1ble, для публичных CMS мой вариант не приемлем(хотя если доробатать, то впринципе приемлем), для закрытых систем, самое то.
Цитата (Invis1ble @ 25.11.2014 - 16:50) |
не говоря о том, что он там натворит, если нужно будет сделать что-то сложнее смены класса а в результате получим всё тот же шаблонизатор (очередную вариацию)
|
таки это и есть шаблонизатор(это же php). Мы там с твином тягаемся CMSками, когда реализую сможешь оценить возможности такого шаблонизатора
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Переменные еще туда передать надо. Не просто верстку. А тут начнется геморрой на костылях. Для того и делаются эти приблуды, чтобы упростить такие вот нюансы.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
twin, вы про мой код или про ваш?
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Про ваш естественно. Как передать в родительский шаблон переменные посредством этого класса?
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
twin, эм, а не нужно. В эти классы сами запрашивают данные у моделей, а потом подключают файлы отображения, в файлах отображения все эти данные подставляется. То есть такая лютая инкапсуляция.
В итоге контролер занимается только подготовкой модели и вьюшек, а потом запускается вью, которая вытягивает данные из модели, и отображает их как хочет. MVC же.
twin, вы сможете более детально ознакомиться с этим подходом, когда я опубликую свою версию CMS.
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Я знаю этот подход, это не новость. Тот же Yii так работает. Только это не шаблоны вовсе, а полноценные скрипты. А шаблонизатор как раз и помогает разделить скрипты и верстку, дабы не валить всё в одну кучу.
Потому и.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Подскажите примеров где можно использовать наследования шаблонов.
Просто пытаюсь придумать и вроде получается, а потом понимаю что я загоняюсь и всё на самом деле делается проще.
Ну есть у нас index.html, целый шаблон, скачанный с любого сайта.
Проставили мы там теги для смены имени сайта, описания, ключевых слов.
Проставили теги в нужных местах, где будет выводиться скрипты/модули/плагины в зависимости от ссылки, от контроллера.
Соответственно в каждый тег/переменную в шаблоне, будет выводиться свой скрипт, у которого есть свой мини шаблон. Например меню.
Допустим у модуля меню есть свой мини шаблон index.tpl, в нём допустим форыч и вёрстка <ul><li>
Ну и всё, модуль выполнился и передал свой результат в тег в главном шаблоне.
Где тут наследование использовать?
Ну или посложнее, модуль новостей.
Там два шаблона. Первый с форычем, который выводит новости из категории, второй выводит полную новость.
Перешли по ссылке /news/ контроллер подключил первых шаблон, передав туда массив с новостями из модели.
Перешли по ссылке /news/id/1 контроллер подключил шаблон полной новости.
Чёб еще придумать.
Допустим форум, ну или личные сообщения.
Модуль личных сообщений. Предположим у него есть шаблон всех диалогов, шаблон самих сообщений и всё это выводится в какой то общий шаблон, где сверху есть общее меню.
Хм, а вот тут вроде может пригодиться, подключаем шаблон сообщений, наследуемся от основного, и меняем в меню основного шаблона, класс кнопки "сообщения" на active.
Сам спросил - сам ответил =)
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.