0
Другие записи за это число:
2010/04/16_01 - Романа Ерыкалова с Днем рождения! Модуль TAGS
<< предыдущая заметкаследующая заметка >>
16 апреля 2010
О нововведениях в движке и модуле LAST

Всех пользователей движка касается, особенно Тему Павлова, разумеется.

Речь пойдет на примере модуля last. Это такая служебная фича, которая выводит на одной странице сразу последние nlast записей блога и позволяет их листать вглубь.

Некоторым нравится делать эту страницу стартовой в блоге (по умолчанию стартовой открывается последняя запись, но можно установить любую страницу по умолчанию, отредактировав в config.php переменную «$rootpage = 'last';»)

Серьезно же я занялся модулем last, когда на сайте LUME понадобилось работать с блоком новостей (с точки зрения движка пофиг, назвать поток записей «блог» или «новости»). И многое пришлось доработать. Значит, по порядку.

1) Стратегия служебных страниц-модулей (всякие там списки, рейтинги, поиски), когда по адресу /last ищется и запускается /module/last.php, который и делает страницу, оказалась не совсем верной. В некоторых случаях это полезно, но чем дальше развивается движок, тем больше требований к нему, и тем меньше желания доверить выдавать конечную страницу отдельно взятому скрипту. К примеру, дизайн страницы last тоже каждому хочется собственный, и его следует задавать в шаблонах, а не копаться в файле last.php, переправляя весь разрозненный ужас.

Поэтому от идеи /module/last.php (и прочих служебных страниц) мы постепенно отходим к идее темплайтов. Выглядит это так: кладется /site_module/last.php — и это уже не программа, выдающая страницу, а посто модуль в формате движка, который выдает движку данные по обращению из кода страницы {_last:_} Это позволяет и служебные страницы верстать как html-темплейты, где в коде имеется обращение {_last:_}. И складывать в той же папке template/last.htm (Чтобы темплейты служебных страниц не путались с темплейтами дизайна страниц блога мы их называем *.htm, в то время как темплайты блога, как мы помним, *.html).

Справедливости ради следует отметить, что вызвать {_last:_} можно из любого места, хоть в тексте заметки блога, только это будет пиздец и рекурсия, если сама заметка попадет в число тех 10, которые она выводит. Рекурсию, впрочем, я отключил на всякий случай, но смысла не появилось. Но если создать отдельную страницу с именем (а не датой в блоге), и в нее прописать только {_last:_}, то это удобно. Я вот себе сделал страницу в простеньком дизайне: http://lleo.aha.ru/blog/lastx Проще говоря, единственный смысл хранить вызов last это в файле, а не в базе, связан с инсталляцией движка, когда новому пользователю надо дать все инструменты, и проще положить файлы, чем запихивать что-то в его базу.


2) Возникает вопрос: ну хорошо, а если модуль last при своем выполнении тоже внутри содержит какие-то элементы дизайна, которыми он выводит нужную информацию? Можно ли как-то ему их передать? Теперь можно. Вызывая модуль, мы можем передать ему параметром некий его конфиг (модуль должен уметь такой конфиг читать, а лучше, если несет в себе еще и переменные по умолчанию — но для всего этого я написал процедурки).

Например, вот так задается теперь обращение к модулю last:

{_LAST:
nskip = 10

next = <small><a href={nextpage}>&lt;&lt;&nbsp;предыдущие {n}</a></small>
prev = <small><a href={prevpage}>следующие {n}</a>&nbsp;&gt;&gt;</small>

prevnext = <table width=100%><tr><td align=left>{next}</td><td align=right>{prev}</td></tr></table><p>

comment = <div style='text-align: right; font-size:10pt; margin-right: 5px'><a href={link}#comments>комментариев {ncomm}</a> | <a href="javascript:majax('comment.php',{a:'comform',id:0,lev:0,comnu:comnum,dat:{num}});">оставить комментарий</a></div>

template = <div style='text-align:justify;padding:0 15px;'><div class='header' id='Header_{num}' style='text-align:left'>{edit}<a href='{link}'>{Y}-{M}-{D}: {Header}</a></div>{zamok}<div id='Body_{num}'>{Body}</div>{comment}</div><hr width=100% color=green>
_}

Ясно? То есть, мы делаем html-шаблон last.htm в том дизайне, какой нам нужен, где центральной командой является обращение {_last:_}. И в этом обращении в понятном текстовом формате передаем все прочие кусочки и шаблоны дизайна, которые модулю last понадобятся.

3) Также при отладке last оказалось, что движок не обучен работать, когда на одной странице отображаются несколько заметок. В смысле, показать он их покажет, но вот система правки и редактирования глючила. Это я тоже поправил, теперь можно править в режиме last любую заметку системой правки и вызывать ее на редактирование в системе редактирования.

PS: 2temapavlov — сорри, пока с категориями cat модуль last не подружился. Впиши их, если надо. Но вообще тэги надо делать отдельной таблицей в базе, иначе плохо работает поиск и индексация. Кроме того, когда-нибудь движок станет многопользовательским, и все равно придется выводить тэги в отдельную таблицу, чтобы можно было искать метки записей (типа «юмор») по блогам всех пользователей.

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
Страницы, которые привлекли мое внимание за последние дни, рекомендую:
архив ссылок
Оставить комментарий


Include not found: `/home/www/lleo.me/blog/template/_reklamnaya_lirica.htm`