Темы оформления в Эгее 2.4
Так, ну первые баги беты новой Эгеи я починил — спасибо всем храбрым ребятам, кто рискнул поставить её. Теперь рассказываю про штуку с темами оформления.
Как в принципе работают темы в Эгее
С точки зрения ядра, всё, что идёт наружу (ХТМЛ, ЦСС и Джаваскрипт) — это «тема оформления». Чтобы отдать любую страницу, ядро готовит данные и отдаёт их в шаблон main.tmpl.php. Шаблон может использовать другие шаблоны, подключать стили и скрипты — это уже его заботы, ядру безразлично, как именно он генерирует страницу.
Есть только момент, связанный с наследованием. Ядро пытается использовать main.tmpl.php из папки вашей темы (/themes/yours/main.tmpl.php). Если файла нет, то берёт из родительской (допустим, из системной: /system/theme/main.tmpl.php). Когда main.tmpl.php вызывает, допустим, footer.tmpl.php, ядро, снова, сначала ищет такой файл в используемой теме, потом в её родительской и так по цепочке вплоть до системной темы.
Это позволяет делать одну тему на основе другой, переопределяя только то, что нужно. Ещё разные подробности о темах оформления есть в документации.
Что изменилось и почему
Ядро как раньше отдавало все данные в main.tmpl.php, так и сейчас отдаёт. Логика наследования тоже осталась прежней.
Но поменялась сама организация комплектных тем, и то, кто из них чего откуда наследует. Раньше в системной папке /system/theme/ лежала «Классическая» тема, то есть стандартная тема оформления Эгеи. Остальные темы лежали в /themes/*/ и наследовали от системной. Получалось, что любая ваша тема неизбежно наследовала от «Классической» и описывалась не в формате «хочу так», а в формате «хочу не так, как в „Классической“, а вот так». У «Классической», хоть она и весьма нейтральна, есть своё мнение по некоторым вопросам. При этом не опираться на неё совсем — невозможно, потому что в ней живёт вся логика фронтенда.
В новой версии «Классическая» тема переехала в /themes/classical/ и больше не претендует на основу всего. Системная же тема, живущая в /system/theme/, теперь выглядит совсем голой, это такая тема «без дизайна», но со всей логикой. Она навязывает вам намного меньше своей воли.
Теперь все комплектные темы (включая «Классическую») содержат по одному шаблону — layout.tmpl.php. В нём определён весь ХТМЛ-каркас темы. Все остальные шаблоны с мелочами определены в системной. При этом по-прежнему ничего не мешает в своей теме переопределить любой шаблон, как и раньше, просто новая конструкция помогает в большинстве случаев отделаться одним файлом.
Соответственно, чтобы создать свою тему, вам теперь не нужно в большинстве случаев вообще ходить в папку /system/theme/ и смотреть, как там что устроено. Вы просто копируете приглянувшуюся папку из /themes/, называете как вам нравится и меняете в ней всё по вкусу.
Как прикрутить свою старую тему к Эгее 2.4
Лучше переделать тему по новым правилам, но есть хак чтобы быстро воткнуть старую.
Темы, написанные для 2.3 оказываются несовместимы с 2.4 только потому, что они рассчитывали на другую иерархию, наследовали от старой системной или другой комплектной темы. Поэтому, если взять родительскую тему (темы?) из старой, то всё заработает. Если у вас не сохранился дистрибутив Эгеи 2.3, скачайте его.
Возьмите системную тему оформления из Эгеи 2.3 (папка /system/theme/) и положите новой в /themes/system_2_3/. Теперь откройте файл вашей темы theme-info.php. Используете ли вы какую-то другую тему из Эгеи 2.3 в качестве основы для своей с помощью поля based_on?
Если нет, то всё просто: значит ваша тема основана на системной теме Эгеи 2.3. Тогда в ваш theme-info.php допишите:
'based_on' => 'system_2_3',
Если да, то из дистрибутива Эгеи 2.3 вам нужно будет взять ещё и ту тему, на которой основана ваша. Предположим, это «Просторная». Тогда надо взять папку /themes/spacious/ из старого дистрибутива и положить в /themes/spacious_2_3/, а в вашей теме прописать так:
'based_on' => 'spacious_2_3',
Но это не всё. Сама-то «Просторная» из 2.3 основана на системной из 2.3, поэтому эту связь тоже придётся прописать. Зайдите в /themes/spacious_2_3/, откройте её theme-info.php и допишите там:
'based_on' => 'system_2_3',
Теперь вы восстановили всю иерархию зависимостей тем оформления, которая у вас была раньше.
Есть ещё одна проблема: в старых Эгеях использовалась фича ПХП под названием short_open_tag. Эта опция позволяет в качестве тега ПХП-кода использовать краткую форму <? ?> вместо длинной <?php ?>. В новой Эгее я от этого отказался, потому что от этого с какого-то перепугу отказался в последних версиях сам ПХП. Но темы, которые вы взяли из старого дистрибутива используют короткую запись. Соответственно, вам надо либо во всех файлах заменить <? (но не <?=) на <?php, либо, если вы используете более старую версию ПХП, которая ещё поддерживает short_open_tag, включить эту фичу в Эгее (для этого откройте .htaccess из корня и исправьте там в обоих местах short_open_tag off на short_open_tag on).
Почему это всё хак и лучше так не делать? Как минимум потому, что в новых темах много чего причёсано и появились радости типа затухания подсветки ссылок. Если вы воткнёте всё старое, то это потеряется. Ну и потеряется смысловая часть фронтенда, появившаяся только в новой версии, например, блок «Популярное», социокнопки, подсветка синтаксиса. Так что рекомендую потратить полчаса и переделать свою тему по новым канонам, чтобы она наследовала от новой «голой» системной.