Перевод блоголета на бд оказался гораздо больше, чем подключение бд. Переделана концепция виджетов/сайтбаров, управление темами, формат тем, аякс, управление классами, комментарии, карта урлов. Сейчас блоголёт находится в полностью разобранном виде - старую версию уже сложно поддерживать, а новой еще нет. Рассуждения в постах мне лично очень помогают - после вчерашнего поста было добавлено свойство javascripts в ttemplate - можно произвольно добавлять и удалять жава скрипты, например аякс и всплывающее меню, это незначительно ускорит создание страницы.

В этом же посте я хочу порассуждать про систему локализации и генерацию html в админке. Одним из недостатков нынешнего кода является использование eval, когда как реально php код не исполняется, а происходит обработка строк средствами php, а именно подстановка значений из переменных. Это удобно, так как html шаблоны из adminhtml.ini становится самоописываемым - ясно где сам html и значения внутри тегов. Хотелось бы отойти от использования eval, который удобен еще тем, что можно использовать локальные переменные. То есть перед получением html в eval происходить инициализация переменных. Вероятно можно было бы воспользоваться функцией get_defined_vars и потом передать полученные массив в функцию генерации html. Другой путь, который приходит мне на ум, это сделать простой класс накопитель параметров для генерации html. Его использование выглядело бы так:


$params = tparams::instance();
$params->somevar = "some value";
$params->nextvar = "next value";
$s = $html->form($params);

где бы класс tparams коллекционировал бы новые свойства через __set, и тогда генератор html имел бы готовый ассоциативный массив для замены. Помимо локальных переменных в шаблоне html есть еще два объекта $options (как правило для получения полного адреса страницы), $lang - строки на национальном языке. Есть еще одна фишка - как правило basename класса совпадает с секцией ini файла - делал это специально, чтобы было меньше путаницы. Таким образом можно свести к миниму создание объектов классов THtmlResource и TLocal, ограничившись свойством у родителя класса, которой бы и создавал необходимый контекст. Следовательно следует поправить генерацию html правильным образом.

Одним из способов отказаться от eval будет самостоятельное распарсивание строки с символами $, чтобы вручную менять значения, без использования eval.

Результат этого поста - новый миникласс tparams, контекстные объекты, и необходимость написать регэксп для получения списка переменных в строке для их замены.