Ne v kontakte Asocial programmer's blog

b2evolution изнутри или портирование скина.

Все началось с того, что, выбрав b2evolution в качестве блогового движка этого сайта, я приступил к поиску какой-нибудь оригинальной шкуры для нее. Надо сказать что, по непонятным мне причинам, b2evo пользуется среди вебмастеров заметно меньшей популярностью, чем ее сестра Wordpress (оба эти движка являются потомками прекратившего свое существование b2), хотя как минимум не уступает ей по возможностям.

Как следствие, хороших шкур для нее довольно мало. Тем не менее, мне удалось найти в репозитории целых две шкуры, которые после доработки могли стать тем, что мне надо. Не долго думая, я скачал их, залил в нужную папку и установил из админки. Тут меня ждало первое разочарование: блог ни в какую не хотел работать, заявляя, что шкура не найдена :( Что за бред? Я же только что ее установил и она была видна :? Захожу в админку - там она есть. Несколько минут медитации навли меня на мысль покопаться в файлах сккина - вдруг чего интересного найду? Там действительно оказался неприметный файл skininfo.html, в котором было написано, что скин предназначен для версии 1.9.х, у меня же стоит 2.4. Черт.

Парочка интуитивно придуманных решений ни к чему не привела - с тех пор API блога так изменился, что почти половина вызовов функций в шаблонах вела себя черт знает как.

Стало ясно, что без вдумчивого чтения документации мне не обойтись. Пришлось лезть на оффсайт и ворошить тамошнюю вики на предмет доков по шаблонам. К моему удовольствию, там нашлась статья по обновлению скинов версий 1.х на 2.х, в которой кое-что пояснялось. Однако очень быстро выяснилось, что этой статьи недостаточно, а кое-что из нее в моем шаблоне просто отсутствовало, и как тут быть не совсем ясно. Еще двадцать минут читания документации и в голове сформировался вывод: шаблоны документированы хреново и придется разбираться самому.

На помощь мне пришел старый добрай способ “посмотри, как это сделано у других и сделай так же”. В результате пяти часов сравнения стиля Boogle (именно его я и начал портировать) со встроенным стилем evopress, изучения сорцов блога в надежде понять назначение и алгоритм работы всевозможных функций, я получил то, что хотел: дизайн, напоминающий гуглевский и еще несколько камней в огород разработчиков. Собственно, результат работы вы можете видеть в данный момент :)

Что я сделал:

  1. Сменил имена файлов шаблона на те, которые требовались для работы в новых версиях.
  2. Нашел и подставил новые функции вместо тех, которые использовались в старых версиях движка.
  3. Позаимствовал код отображения постов и боковой панели из шкуры evopress, заменив им старый код и адаптировав его для моего шаблона путем довольно-таки нудного ковыряния в css. Собственно, это и заняло большую часть времени.
  4. Выкинул старый код, напрямую обращавшийся к плагинам, заменив его контейнерами для виджетов.
  5. Мелкие косметические изменения в шаблоне.

Теперь о упомянутых камнях. Камень номер раз: несмотря на то, что на оффсайте движок заявлен как freeware, в нем имеется adware код, который выводит спонсорскую ссылку внизу страницы в строке с копирайтами. Надо сказать, что патчик, решающий проблему, (по вполне очивидным причинам я его публиковать не стану B) ) занимает всего три строчки, и его написание заняло меньше 10 минут, но неприятный осадок остался. Камень номер два: недостаточная документированность движка. К сожалению, этим грешат многие движки, но известны и обратные случаи. От части этот камень компенсируется достаточно простым кодом, но все равно обидно. Последним камнем станет чрезвычайно сложные шаблоны: в них активно используются php функции движка, непонятно как работающие и недокументированные. Я придерживаюсь мнения, что в шаблонах кода должен бвть минимум, а все должно быть реализовано при помощи базовых конструкций шаблонизатора. Хорошим примером может служить система шаблонов в phpBB3: полная абстрагированность от php кода ядра и в то же время все необходимые управляющие конструкции. Еще один хороший пример - всем известный smarty, но, ИМХО, он все же слишком перегружен, слишком уж много в нем программирования. К слову, самая плохая система шаблонов из мне известных используется в SMF - там весь HTML код хранится в виде строковых переменных php, что сильно напрягает при редактировании.

В качестве плюсов можно назвать достаточно простой и понятный код, наличие возможности не дублировать в своем шаблоне код для всех страниц, и подключать встроенные модули с разметкой “по умолчанию”, модульность и довольно простая структура виджетов.

Я умышленно не стал касаться юзабилити - это тема для отдельной статьи, тем более неоднократно обсуждавшаяся.