Bricks: конструктор для новичков

1.08K
.
reaper, да, для того и создавался данный пакет. Кстати, некоторый функционал я здесь не затронул, на пример хелперы.
.
неуспел дописать
http://www.smarty.net/docs/en/ ... y.tpl
.
Да хотя бы тот же генератор ссылок пробросить, не будешь же при каждом вызове функции его передавать и тянуть отовсюду.

Хотя если сделать по умнее и из контроллёра (или что там используется) возвращать словарь (имена шаблонов можно тоже, но я предпочёл бы в конфиге хранить), то можно при формировании ответа пробросить. Но всё равно, на мой взгляд разумнее будет ввести ещё одну сущность.
.
ramzes, reaper верно заметил. Нет смысла изменять шаблон для объекта шаблонизатора, гораздо лучше создать другой объект шаблонизатора с новым шаблоном. В противном, же, случае, может получится так, что окружение настроено для одного шаблона, а подключен другой.
.
reaper, дополнительный функционал подключается к этому шаблонизатору в виде хелперов, которые можно задать:
...
Template::helper('include', function($file, array $env = []){                                                  
  $template = new Template($file);                                                                             
  return $template->evn($env);                                                                                 
});

а затем использовать в любом шаблоне:
<html>
<head>
<title>...</title>
</head>
<body>
<?= $include('other_template.html', ['content' => 'Hello world']) ?>
</body>
</html>


Что касается того, как подключать эти хелперы к шаблонизатору в реальном фреймворке я опишу подробнее чуть позже (для этого нужен менеджер модулей).
.
ramzes, Ну и зачем разводить такую мешанину? Очень просто сделать какую-нибудь ошибку и весело потом её отлавливать в этой горе данных. Это хорошо если в начале у нас шаблонов пару штук и данных мало, а когда их сотни?
.
reaper, какую ошибку? например?
я не понимаю о каких ошибках ты говоришь.
отправь ты данные в не тот шаблон, виноват ты а не скрипт.
ты точно так же можешь задать не тот шаблон в конструкторе.
о каких ошибках речь?
.
Delphinum, Ну мне это мало интересно

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

Т.е. имеем, к примеру, контроллёр:
public function profile(Requst $request) {
     $uid = $request->request->get('uid', null);
     return $this->repo->find($uid)->to_array();
}

В конфиге пишем:
return [
    'routes' => [
        'users.profile' => [
             'path' => '/users/{uid}/profile',
             'handler' => 'users:profile',
             'renderer' => 'html:profile.tmpl'
        ],
        'api.users.profile' => [
             'path' => '/api/v1/users/{uid}/profile',
             'handler' => 'users:profile',
             'renderer' => 'json'
        ]
    ]
];


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

$t = new T('path/to/tpl');
$t->a = 'a';
$t->b = 'b';


Отрендерил, показал. Потом захотел отрендерить новый.

$t->setPath('another/tpl');


Вот тут я должен убедиться, что данные для предыдущего шаблона никак не повлияют на этот шаблон. Т.е. вручную надо будет их удалить, и подставить новые. А теперь представь, что переменных не две и не три, а штук 10, 20. И шаблонов соответственно столько же. Да я лучше сдохну, чем буду писать такое говно.
.
ramzes
любопытствую, ты как две страницы сразу показывать собираешься?
или ты блоками выводить подразумеваешь?
забей в setPath
reset
в чем проблема?
Всего: 49