Maler
Новичок
Eval или есть иной способ? (реализация сниппетов на подобии ModX)
Давно работаю со своей CMF, много всякого написал, все меня устраивает. Но тут возникло желание упростить некоторые моменты в выводе информации в теле страницы. К примеру - последние новости, связанные страницы.. да что угодно.
Мне очень понравился принцип работы сниппетов в ModX (Etomite). Решил я это реализовать следующим образом..
1. Создал таблицу со сниппетами (id,code. К примеру id:hellow, code: $out_snip = "hellow");
2. В тексте страницы пишу {__SNIP_hellow__};
3. Читаю сниппеты из таблицы в ассоциативный массив $snip (hellow=>code);
3. В Парсере делаю eval;
А теперь вопрос..
Все работает, но мне не нравится привязка к переменной "$out_snip", как по другому это можно реализовать.
Да и вообще, если кто-то сталкивался с такими вопросами, поделитесь опытом.
Весть код (упрощено)
Давно работаю со своей CMF, много всякого написал, все меня устраивает. Но тут возникло желание упростить некоторые моменты в выводе информации в теле страницы. К примеру - последние новости, связанные страницы.. да что угодно.
Мне очень понравился принцип работы сниппетов в ModX (Etomite). Решил я это реализовать следующим образом..
1. Создал таблицу со сниппетами (id,code. К примеру id:hellow, code: $out_snip = "hellow");
2. В тексте страницы пишу {__SNIP_hellow__};
3. Читаю сниппеты из таблицы в ассоциативный массив $snip (hellow=>code);
3. В Парсере делаю eval;
А теперь вопрос..
Все работает, но мне не нравится привязка к переменной "$out_snip", как по другому это можно реализовать.
Да и вообще, если кто-то сталкивался с такими вопросами, поделитесь опытом.
Весть код (упрощено)
PHP:
$scode ='$out_snip = "Hellow";';
$snip = array(
"hellow" => $scode,
);
function BuildTemplate($tpl) {
GLOBAL $snip;
foreach($snip as $k => $v) {
eval($v);
$outv = $out_snip; // переменная из сниппета
$result = str_replace("{__SNIP_".$k."__}", $outv, $tpl);
}
return $result;
}
/// пример работы
$str_tpl = "Тут {__SNIP_hellow__}!";
echo BuildTemplate($str_tpl);