Я считаю, что в общем случае блог - это функионал, обладающий следующими свойствами:
- хронологическим заполнением;
- структурированием по тэгам;
- возможностью комментирования.
На Finar.ru Блог - это всевозможные заготовки для статей, либо просто размышления и исследования. В wiki-представлении, а вернее в ее pmwiki интерпретации, блог есть сборник заметок, принадлежащий группе 'Blog', со следующими характеристиками.
- на главной Блога выводится:
- последняя заметка полностью;
- ссылками N заголовков последних заметок;
- архив всех заметок, сортированный по дате добавления;
- ссылки на страницы с заметками существующих тэгов;
- заметка характеризуется тэгами;
- существует шаблон, облегчающий создание заметки;
- каждому дню соответствует не более одной заметки;
- к каждой заметке добавлена форма для комментириев благодарных посетителей.
В этой инструкции (или рецепте, если угодно) приведена методика обеспечения подобной функциональности в рамках движка pmwiki. Сухой остаток авторской концепции разработки в том, что все нужно делать настолько просто, насколько это возможно без ущерба базовой функциональности. Поэтому в приведенной инструкции используется максимум встроенных возможностей pmwiki и минимум дополнительных плагинов.
Содержание: (спрятать)
Создаем кнопку "Заблогить о сегодня"
Делать заметки будешь тем чаще, чем проще это сделать. Поэтому первым делом научимся делать магическую кнопочку "пост от текущей даты".
Увы и ах, в текущей стабильной версии (2-1-27) pmwiki нет встроенной переменной с текущей датой (возможно, я ошибаюсь - комментируйте). В новых бетаверсиях, правда, есть, но рисковать лениво. Поэтому для включения текущей даты воспользуемся всей мощью php. Заодно научимся интегрировать php в pmwiki. Понадобится плагин phpinc , после установки которого появляется возможность встроить в любую часть wiki-страницы php-код из файла. Вывести текущую дату в наиболее разумном формате YYYY-MM-DD позволяет файл с немудреным содержанием "<?php echo date("Y-m-d"); ?>". Я назвал его date.php.
Чтобы освободить максимум мозговых ресурсов в будущем, создадим шаблон для всех новых страниц. Для этого в Главный Файл config.php добавим строчку "$EditTemplatesFmt
= 'Blog.Template';". Теперь всякая новая страница нашего сайта при создании будет брать свое содержание из служебной страницы Blog.Template. Мой Blog.Template выглядит так:
?КОНТЕНТ? Категории: [[Category.ENGNAME|+]] ----
При добавлении комментария в каждой строчке следует заменить все заглавные буквы на что-то осмысленное.
Создаем тэги.
Как в pmwiki реализованы тэги вполне доходчиво и на русском описано тут . В двух словах, в pmwiki тэгов нет :) Их роль выполняют служебная Группа, Category (или, впрочем, с любым другим именем), суть содержания всех страниц которой сводится к выведению обратных ссылок. Иначе говоря, тэги - это специальные страницы, которые выводят список всех страниц, которые ссылаются на них. Более подробно функциональность тэгов описана по указанной ссылке.
Чтобы вывести тэги на главной странице воспользуемся встроенным функционалом pmwiki:
(:pagelist group=Category fmt=#title order=title list=normal -Category.Category:)
Этот код выводит все страницы группы Category за исключением корневой Category.Category и служебной Category.Groupfooter и сортирует их в алфавитном порядке по кириллическим заголовкам.
Выводим последние семь заметок.
Ну это совсем просто:
(:pagelist name=Blog.2* count=7 fmt=#title order=-title:)
Последнюю статью выводим с содержанием:
(:pagelist name=Blog.2* count=1 fmt=#include order=-title:)
Казалось бы тоже просто, ан нет. Использованный формат "#include", обеспечивающий включение статьи целиком, не встроен в pmwiki по умолчанию. Поэтому, чтобы приведенный код заработал, "#include" нужно определить. Делается это на служебной странице Site.PageListTemplates путем добавления следующего кода:
!!!fmt=#include This format includes whole pages, with titles as links to the pages, separated by a horizontal rule underneath each page's content. An edit link appears if authorised as editor. [[#include]] (:if auth edit:) %rfloat%[[{=$FullName}?action=edit|[-edit-]]](:if:) !!![[{=$FullName}|[+{=$Title}+]]] (:include {=$FullName}:) ---- (:if equal {>$Group}:) (:if:) [[#includeend]]
Добавляем форму для комментариев.
Для начала я выбрал Comment Box Plus . Эта штуковина просто встраивает комментарии в код комментируемой страницы. Поддерживается защита от спама. Я двинулся по простому пути:
- после инсталляции включил защиту от спама(SDV($EnableAccessCode, true) в commentboxplus.php);
- создал страницу blog.groupfooter (вот поэтому-то у меня комменты и слетели при выкладке на сайт. Страницу надо было называть Blog.GroupFooter) с содержанием "
(:commentboХchrono:)
" (замените X на x). Это автоматически добавляет форму для комментариев ко всем-всем страницам группы Блог. - директивой
(:nogroupfooter:)
запретил выполнение предыдущего пункта для избранных страниц, например для главной, которая собирается автоматически по кусочком и вообще не обладает своим контентом. - исправил ошибку в 94й строке (см. Проблемы, решения и новые проблемы (безмозглый заголовок))
Создаем Главную Страницу.
Хотите верьте, хотите нет, но в итоге код главной страницы, почти полностью определяющий функциональность блога, выглядит так:
(:nogroupfooter:) (:pagelist name=Blog.2* count=1 fmt=#include order=-title:) (:table border=0 width=75% align=center bgcolor=#CCCCCC cellspacing=0 :) (:cellnr align=center:) '''Последние заметки:''' (:cell align=center:) '''Тэги:''' (:cellnr align=center:) (:pagelist name=Blog.2* count=7 fmt=#title order=-title:) (:cell width=50% align=center:) (:pagelist group=Category fmt=#title order=title list=normal -Category.Semimanufactures -Category.Category:) (:cellnr align=right:) [-[[Blog.Archive|+]]-] (:tableend:) ---- [[Blog.(:phpinc date:)|Заблогить о сегодня]]
Комментарии:
Дико извиняюсь за задержку, но ваш вопрос запостился в середину статьи :) Код комментбокса парсит страницу и ищет первое упоминание о себе, не заботясь о том, что его вызов закомментирован. И туда вставляет комментарий.
Как решить проблему? Э-э-э... дайте вспомнить... для этого надо отредактировать 158, 159, 160 сточки вот так:
# date and time formats SDV($JournalDateFmt,'%d %B %Y'); SDV($JournalTimeFmt,'%H:%M');
Директива tag - это локальная переменная, генерируемая плагином формы ввода данных для режима редактирования. Она появляется при установке плагина editmore.php, о котором я писал здесь: Баг в editmore.php, рецепте для PmWiki В результате ее работы все ссылки на категории хранятся в tag'e, однако, как побочный эффект, ссылки на категории из тела статьи переползают в значения этой же переменной при каждом сохранении страницы (см. следующий ответ)
Да, это тот самый editmore.php приводит к таким последствиям. Надо от него, наверное, отказаться, либо исправить эту особенность. Вернул бэкап.
Исправлена ошибка в статье: фраза Blog.template везде заменена на Blog.Template.
Finar.
Оставить комментарий