Планы по изменению формата тем
06.10.2009Недавно был переход от ini файла шаблона комментов на tml, осталось еще два ini файла в теме - about.ini, который нужен для админки, и theme.ini в котором собрана инфа о теме.
В theme.ini находится шаблон меню, виджетов и навигационных ссылок (ссылки на страницы с цифрами -). Шаблоны виджетов наверно можно поместить в отдельный файл widget.tml - по примеру как для комментов, а инфу о меню расположить в index.tml, остается еще шаблоны для навигационных ссылок и пара классов (скорее недоработка шаблонов). Также в theme.ini можно задавать шаблон ссылок внутри виджетов, но скорее всего было бы более удобно поместить этот шаблон внутри всего шаблона виджета - по примеру комментариев.
Уже сейчас доступен шаблон для админки - если в теме будет файл admin.tml то он будет использован вместо index.tml. Об этом я пока нигде не сообщал, но уже сейчас можно сделать admintml из index.tml без виджетов и с другим сайтбаром.
Также были внесены изменения в движок - теперь каждый класс может самостоятельно выбирать себе главный шаблон, если не задано, то будет index.tml. В настоящее время index.tml читается каждый раз при обращении к нему, в отличии от comments.tml который читается и парситься один раз. Поскольку index.tml не парсится, то и он не кэшировался.
Например, если указать шаблон для меню внутри index.tml, то тогда придется парсить этот файл наподобие comments.tml. В этом случае в index.tml можно будет включить шаблоны виджетов. С одной стороны получается удобно - практически целиком в одном файле будет описано несколько шаблонов. Но встает следующая проблема: если какой то объект использует шаблон отличный от index.tml - то как с этим быть? Если оставить все как сейчас, то ничего сложного - сейчас это работает. Если же вставить шаблоны меню и виджетов внутрь вариантов index.tml, то придется парсить каждый из этих файлов. В принципе это тоже возможно, если результаты парсинга кэшировать отдельно. Ну то есть если при первом обращении не был найден отпарсенный файл, то отпарсить и сохранить для следующего использования.
Но тут тоже не все так просто: в настоящее время контент виджетов кэшируется. Например рубрики обновляются редко и достаточно в кеше создать файл с контентом виджета рубрик, чтобы каждый раз не дергать генерацию html виджета рубрик. Так оно сейчас и сделано, и отлично работает (есть несколько типов кэширования для виджетов). В случае с альтернативными шаблонами виджетов как быть? Либо просто не разрешать альтернативные виджеты, либо разрулить иным способом. А каким способом? Сейчас файл виджета в кеше имеет имя widget-$id.php где понятно что $id это id виджета. Каждый виджет может объявить себя устаревшим в кеше, чтобы обновиться. С неопределенным числом альтернативных шаблонов виджетов как найти и однозначно связать шаблон с файлом в кеше? Создать папку с именем файла шаблона в папке cache, и туда писать контент виджетов? При тотальной очистке кеша удалять все эти папки с файлами?
Есть пространство для споров и рассуждений - моих мозгов пока не хватает для принятия правильного решения, чтобы не было мучительно в будущем переделывать неудачное решение.
Комментарии (9) на запись “Планы по изменению формата тем”
Оставить комментарий
Сейчас существует модель сайтбаров,в котором виджеты, то есть в шаблоне написано
$Template->sitebar
в таком случае проще сделать отдельный widgets.tml - и вовсе не нужно включать его в тему. Вопрос практически стоит о нескольких темах в одной теме: стоит ли разрешать такой бардак/свободу. С другой сттороный нагляднее сделатьвиджеты в одном файле, а если хочется вариант страницы, то можно копипастить. Либо выбрать имя файла для виджета такой, чтобы можно было легко находить их все по одной маске и обойтись без подпапок. Либо совсем заковыристо: для каждого виджета своя папка, где будут его файлы, наприммер тот же index.php для шаблона по умолчанию, и другие составленные из имени файла шаблона. Думаю в таком варианте можно будет легче справиться. Разве что появится добполнительная проверка на существование папки, и при ее отсутствии создать. Точнее проверка существования файла виджета в кеше, ну а сохранениие будет с проверкой существования папки виджета. Очисткак кеша будет состоять еще и в удалении всех папок в кеше.
Таким образом принимаю как рабочую гипотезу вариант индивидуальной папки в кеше для каждого виджета.
Если вставить шаблон виджетов сразу в index.tml то станут бесполезными старые теги $Template->sitebar, либо заключить сайтбар в псевдотеги
<!--sitebar-->
<!--widget-->
<h2>%s</h2>
<ul>
%s
</ul>
<!--/widget-->
<!--categories-->
<h2 class="categories">%s</h2>
<ul>
<!--item-->
<li><a href="url">title</a></li>
<!--/item-->
</ul>
<!--/categories-->
<!--/sitebar-->
что нибудь в этом духе. Нечто похожее накрутить вокруг меню. А нынешний виджет мета можно даже и жестко прописать.
Что остается - это шаблон для ссылок на страницы с цифрами - их куда девать? С одной стороны они относятся к контенту - можно было бы после тега
$Template->content
указать
<!--navilinks-->
....
<!--/navilinks-->
поскольку они могут исползованы еще и в постах как ссылки на страницы. Получается диллема: стоит ли добавить в post.tml шаблон для навигационных ссылок, либо сделать иерархию шаблонов навигационных ссылок - если нет шаблона в post.tml, то использовать из главного. Но по мне как то слишком сложно и нехорошо тем, что сейчас post.tml не парсится как и сейчас index.tml, и соответствено придется его парсить, а если парсить то по каким правилам?
После разруливания навигационных ссылок смогу приступить к реализации - благо там ничего сверхнового и сложного нет.
Прошлый раз писал отвлеченный вопрос в Контакты, сейчас ок, в комменты. :)
А как вообще блоголет обновлять ? Поискал здесь на сайте, мануала не нашел. Тупое копирование новой версии поверх результатов не дало пишет ошибки. Подозреваю, нужны lib/update/update*.php ? Но они из браузера не хотят запускаться - You don't have permission to access /lib/update/update263.php on this server. И я, кстати, не помню, какая у меня версия стояла раньше. :)
Про то, что там можно посмотреть номер версии - я знаю, я просто не помню, какая версия там была :)
Я сначала поставил везде рекурсивно 777 и нажал кнопку "обновить автоматически". Скрипт подумал чуток и выдал простыню ошибок. Я вручную переписал index.php из дистриба - снова ерроры. Переписал весь дистриб поверх - ничего не изменилось.
Вот ошибки при заходе на index.php:
Caught exception: The requested property files not found in class TOptions
0 lib/kernel.php(31): TDataClass->Error('The requested p...')
1 lib/kernel.php(254): TDataClass->__get('files')
2 lib/templateclass.php(69): TEventClass->__get('files')
3 lib/kernel.php(218): TTemplate->load()
4 lib/kernel.php(546): TEventClass->__construct()
5 lib/kernel.php(554): GetInstance()
6 lib/templateclass.php(23): GetNamedInstance()
7 lib/kernel.php(871): TTemplate::Instance('TTemplate')
8 lib/kernel.php(860): TUrlmap->PrintClassContent('template', 'TTemplate')
9 lib/kernel.php(755): TUrlmap->PrintContent()
10 lib/kernel.php(734): TUrlmap->DoRequest('THomepage', Array)
11 index.php(35): TUrlmap->Request(Array)
12 {main}
Обновляюсь первый раз.
В сегодняшнем обновлении была ошибка - оклоло получаса была в дистрибутиве, я сам обновлял blogolet.ru, чтобы исправить эту ошибку сохрани на сервер .php файл и набери его адрес в браузере, скрипт:
<?php
$mode = 'upd';
include('index.php');
include('lib/update/update277.php');
Update277();
?>