Локальная таблица символов и генерация html
29.10.2009Перевод блоголета на бд оказался гораздо больше, чем подключение бд. Переделана концепция виджетов/сайтбаров, управление темами, формат тем, аякс, управление классами, комментарии, карта урлов. Сейчас блоголёт находится в полностью разобранном виде - старую версию уже сложно поддерживать, а новой еще нет. Рассуждения в постах мне лично очень помогают - после вчерашнего поста было добавлено свойство 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, контекстные объекты, и необходимость написать регэксп для получения списка переменных в строке для их замены.
Комментарии (17) на запись “Локальная таблица символов и генерация html”
Оставить комментарий
Извините, что не по теме записи. Но как обновить старую версию до текущей? У меня из анабиоза вышло несколько блогов. В частности, есть версия: 2.20. Боюсь, что если просто нажму «Автоматически скачать новую версию и обновиться сейчас», то потеряю все данные, как это у меня уже неоднократно происходило.
Возможно, ничего бы и не трогал, но понадобилось отредактировать дату старых сообщений, а в версии 2.20 есть только быстрый редактор, а полного (где можно менять URL, дату и так далее) нету.
Начал делать по вашей инструкции (http://blogolet.ru/ispravlenie-otlozhennyx-publikacij-i-stabilnoe-obnovlenie/).
Нажал первую кнопку. Выскочило: Call to undefined function getnamedinstance() in /lib/postsclass.php on line 251
Потом залил в корень сайта файл из http://litepublisher.googlecode.com/svn/trunk/index.php
В результате вместо админки вижу в строке поиска перенаправление на URL главной страницы. Однако вместо самой страницы Firefox выдаёт:
Неверное перенаправление на странице
Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится.
В Operа тоже ничего не работает. Если вернуть прошлый index.php, то ошибка следующая:
Fatal error: Call to a member function GetPath() on a non-object in /lib/classes.php on line 5
И как же мне теперь вернуть некогда работающий блог на 2.20 или всё же обновить его до последней версии? Последнее предпочтительнее.
Со старыми версияями проблема - для начала надо было бы обновиться где то до 2.42, если не оошибаюс, потом двухступенчатое обновление.
Со следующей версией еще будет беда - изменений настолько много, что даже я сам опасаюсь за работоспособный скрипт перехода.
я читал про ошибку залогивания, может xSS атака?
может куки удалить? я не успел попробовать, распсиховался удалил блоголет и заного поставил.
сейчас пытаюсь бекапнуть обратно, не получается.
да кстати отправление блоголета на мыло пароля от админки я не получал, возможно я настройки почты не настроил
http://litepublisher.googlecode.com/svn/trunk/utils.password.php
Вообще никак не решается, могу рекомендовать логинится с помощью кук, для этого в файле lib/adminpage.php надо заменить строку
if (!($auth->cookieenabled && $Urlmap->Ispda)) {
на строку
if (false) {
и тогда будешь логинится через форму на сайте.
скрипт смены пароля сделал, и изменил форму входа, все равно не заходит, я в панике. что делать?