проблема с шаблонизацией

bosh

Новичок
Кстати, относительно таких решений.
Допустим есть шаблоны которые используют один и тот же параметр. Например - "Контактный телефон" для сайта.
Т.е. Товарисчи пользующиеся системой администрирования, имеют желания заходя в раздел "Параметры" системы администрирования поменять там телефон.

При этом, очень хотелось бы что бы телефон изменился и во всех шаблонах сайта, и во всех информационных страничках, в письмах клиентам и т.д. и т.п.

Во все шаблоны телефон вставляется через $parameters->getValue('contact_phone'), то в них он и поменяется, и с ними проблем нет.
Проблемы возникают, когда необходимо во всех информационных страницах выводить эту информацию.

Моими первыми мыслями было забирать этот шаблон, вчитывать во временный файл, и затем парсить смарти. Сомнительная идея надо сказать.

Второй мыслью было заставить людей вставлять теги типа
<parameter value="contacnt_phone"> в системе администрирования, а затем методом afterParce() делать повторный парсинг. Ещё более сомнительная идея, надо сказать.

В результате остановился на второй, добавив кеширование. Может кто сталкивался с подобным? Есть ещё какие-либо варианты?
Ибо у меня в разделе параметры пользователи могут заводить массивы (например "Города распостранения").
$parameters->getValue('contact_phone') c этим шикарно справляется и по городам можно даже цикл организовать.

А вот писать свой "смартёвый парсинг" для массивов условий и т.д. очень не хочется.

может кто сталкивался с такой проблемой?
 

Фанат

oncle terrible
Команда форума
bosh
на первый раз прощаю, но следующее нарушение правил будет караться беспощадно
 

alexhemp

Новичок
bosh

Что за бред...

Чтобы можно было менять какое-то значение глобально нужно следующее

1. Место где оно будет храниться - хорошая идея таблица в БД "Глобальные параметры" - в ней поля "имя", "значение"

2. Интерфейс редактирования данных параметров - в твоей CMS

3. При генерации каждой страницы - считывай все глобальные параметры и передавай в Smarty - например с помощью append('config', $config_row);

4. Далее в шаблонах вставишь где надо
{$config.global_param1|escape}

По моему это элементарно.

Для массивов - тажа фигня. При считывании из хранилища преобразовывай в массивы PHP и передавай, в шаблоне ходи по ним foreach или section.
 

bosh

Новичок
Простите за мой русский :)
первые два пункта как-то очивидны.
Вместо третьего и четвертого гораздо имхо проще передать в смарти по ссылке объект $Parameters и внутри него обращаться к переменным.
(т.к. переменных у тебя может быть много, а в шаблоне может использоваться одна или две).
т.е. в пхп
$smarty->assign_by_ref('params',$parameters)
в шаблоне
$params->getValues(contact_phone).

Но это, в общем то на любителя.

А теперь смотри в чём проблема.
Есть обычная стандартная информационная страничка файла. Содержание которой целиком хранится в БД с понятной целью - что бы была удобная возможность это администрировать.

Т.е. вызывается что-то типа

$contentFromDb=$content->getContent(...);
$smarty->assign('content',$contentFromDb);
$content=$smarty->fetch('infopage.tpl');

Проблема возникает в том, что в переменной $contentFromDb и находятся те самые параметры (Контактный телефон и т.д.)
И этот самый $contentFromDb очень хочется отпарсить с помощью смарти.

Это можно сделать разными способами. Можно хранить темлейты в отдельных файлах и редактировать их с помощью системы администрирования.

Можно "на ходу" вытаскивать контент из БД, сохранять в файл, а затем парсить с помощью смарти.

Можно дописать собственные пару методов для смарти, которые бы это делали.

Но ни одно из этих решений лично мне не кажется правильным. Ни на адном из смартевых форумов я ничего похожего не нашел. Неужели только у меня такие заморочки? :)
 

alexhemp

Новичок
bosh

Плохо искал. В этом форуме многократно обсуждалось. Более того - даже в мануале есть!
http://smarty.php.net/manual/en/template.resources.php

По сути у тебя в базе уже не контент - а шаблон (вообще это сомнительное удовольствие в базе - шаблоны - визуальный редактор не так просто подключить).

Используй свой ресурсный модификатор и спокойно парси Smarty данный шаблон из базы.
 

alexhemp

Новичок
bosh
Проблема у тебя была одна - не прочитанная документация по Smarty.

Кстати, валидатор шаблонов написать придется, если пользователи не шибко дисциплинированные.

Я рекомендую блокировать все инструкции шаблона кроме {$...}, т.е. кроме подстановок переменных.
Ибо иначе очень легко напортачить с синтаксисом при редактировании шаблона неподготовленным юзером.
 
Сверху