„power-category“ plugin for PyBlosxom

Предупреждаю что этот плугин я писал персонально для себя. Публиковать не планировал, но получился он неплохим, и пожалуй я его приведу в нормальный вид и опубликую (нету желающих помочь перевести на английский документацию к нему ? ;))

Сам плугин делает три вещи:

  • Генерирует переменную $category_title для использования в темплитах. Эта переменная содержит значение переменой $blog_title_with_path записанное в „нормальном“ виде (заменил слеши на „::“ и добавил запись имён директорий с большой буквы).
  • Если положить в любую из директорий, в которых публикуются топики, файл с именем descript.ion то мой плугин генерирует переменные $category_title и $category_body на основе этого файла. Т.е. первая строка этого файла это будет значение переменой $category_title, всё остальное из этого файла- присваивается переменой $category_body.
  • По умолчанию PyBlosxom показывает элемент со списка статей и саму статью используя один и тот же template - store.html. Это офигенно неудобно. Хотя бы потому что список статей это список и его надо оформлять тегами списка, а отдельная статья это отдельная статья. Там теги списка не нужны. Мой плугин решает эту проблему. Надо добавить три дополнительных template в ваш flavour: category-head.<flavour>, category-foot.<flavour> и category-entry.<flavour>. Содержимое этих templates может быть таким:

    category-head.<flavour>
    <h1>$(category_title)</h1>
    $(category_body)
    <ul>
    category-foot.<flavour>
    </ul>
    category-entry.<flavour>
     <li>
    <h2>
    <a href="$(base_url)/$(file_path_urlencoded).$(flavour)">
    $(title)
    </a>
    </h2>
    <div>$(body)</div>
    </li>

Код плугина


"""
Summary
"""
import os, re, time
__author__ = "maintainer: Gansik - gansik at tagv dot com"
__version__ = "$Date$"
__license__ = "python or GNU"
__url__ = "/"
__description__ = "."
from Pyblosxom import tools
def cb_head(args):
entry = args['entry']
renderer = args['renderer']
request = args["request"]
config = request.getConfiguration()
if ((entry['bl_type' ] == 'dir') and (len(entry['entry_list' ]) >= 1)):
args["template"] = args["template"] + renderer.flavour['category-head']
entry["blog_title_with_path"] = config['blog_title'] + ' > ' + entry['pi_bl'].rstrip('/').lstrip('/').title().replace('/',' > ').replace('-',' ')
try:
cat_file = open(entry['root_datadir'] + 'descript.ion', 'r')
cat_file_txt = cat_file.readlines()
entry["category_title"] = cat_file_txt[0]
entry["category_body"] = "".join(cat_file_txt[1:])
cat_file.close()
except IOError:
entry["category_title"] = 'Home :: ' + entry['pi_bl'].rstrip('/').lstrip('/').title().replace('/',' :: ').replace('-',' ')
entry["category_body"] = ""
return args
def cb_story(args):
entry = args['entry']
renderer = args['renderer']
if ((entry['bl_type' ] == 'dir') and (len(entry['entry_list' ]) >= 1)):
args["template"] = renderer.flavour['category-entry']
return args
def cb_foot(args):
entry = args['entry']
renderer = args['renderer']
if ((entry['bl_type' ] == 'dir') and (len(entry['entry_list' ]) >= 1)):
args["template"] = renderer.flavour['category-foot'] + args["template"]
return args