Современная, быстрая и удобная система управления сайтом

Краткий обзор новых возможностей в MaxSite CMS 0.80

Архив записейКомментарии: 5Просмотров: 4997

Главное нововведение в MaxSite CMS 0.80 - это новый способ построения шаблона. Традиционно у нас использовалась схема, которую я взял из WordPress - default-шаблон содержал файлы, которые могли использоваться другими шаблонами. Схема довольно простая - если в шаблоне нет какого-то типового файла, он автоматом берётся из default.

Сама по себе схема неплохая, но имеет ряд ограничений, одно из которых довольно жесткая завязка на default-шаблон. Приходилось идти на ряд ухищрений, чтобы сохранить совместимость и при этом добавить новую функциональность. Всё это приводило к неявным вещам. Например в default-шаблоне для опций используется несколько ini-файлов.

Другая проблема - дублирование файлов и php-кода, который кочуют от шаблона в шаблон в неизменном виде. Теперь, если мне захочется ввести новую функционнальность, придется пожертвовать совместимостью, а это не совсем верно.

В итоге я решил сделать еще один вариант построения шаблона, на основе т.н. shared-каталога. Этот каталог является общим для всех шаблонов. Если раньше шаблон завязывался на default-шаблон, то теперь он «питается» из shared.

Все шаблоны, построенные по default-схеме продолжают работать. Речь идет только о новых шаблонах.

Попутно я переделал структуру каталогов так, чтобы обеспечить как можно большую гибкость и модульность. Например type-файлы теперь располагаются в своём одноименном подкаталоге. То есть теперь существует «главный» файл типа данных, а остальные, если есть, его модули. Раньше нужно было вводить дополнительные условия, чтобы исключить вспомогательные type-файлы (например page-comments.php). По этой причине главный файл шаблона index.php упростился буквально до нескольких строчек. Сравните его с default, чтобы увидеть разницу.

Новый шаблон D2 работает на основе shared-каталога и призван продемонстрировать новые возможности. Если вы делали шаблоны для MaxSite CMS, то без труда разберётесь с D2 и заметите, что в шаблоне теперь меньше файлов и структура каталогов более логичная.

Далее я хочу остановиться на некоторых новых возможностях. На текущий момент они доступны в MaxSite CMS 0.804.

Изображение записи

Для любой записи можно указать адрес изображения в дополнительных полях (метаполя).

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

Самое главное здесь то, что миниатюра формируется автоматически с учетом исходных и конечных размеров: выполняется обрезка, кроп и т.п. Для этого используется класс Thumb, о котором я уже рассказывал.

Новые компоненты

Сейчас доступно 19 компонентов, которые можно использовать в шапке или подвале сайта. Некоторые компоненты выполняют роль «подкомпонентов», то есть используются в других компонентах. Например menu используется в menu-icons, menu-login, menu-search и других. То есть это различные комбинации меню с другими блоками.

Структура компонентов изменилась. Теперь каждый компонент находится в своём каталоге и больше не будет путаницы с файлами. Существуют предопределенные файлы:

  • style.css - стили компонента, которые автоматически подключатся в HEAD сайта.
  • options.ini и options.php - файлы опций, также подключаются автоматически.

Если компонент начинается на «-» или «_», то его подключение игнорируется. Как правило это использутся для подкомпонентов.

«Main-шаблоны» вывода

Это новая возможность, которой раньше не было и приходилось программировать отдельно. Как известно main.php в шаблоне выполняет роль модульной сетки. Теперь main.php можно указать опционно для любой записи. Например довольно частая задача - вывести запись без сайдбара. Чтобы её решить старым способом, приходилось указывать разные условия в sidebars.php. В D2 для этого существует мета-опция «Шаблон записи».

Файл вывода при таком выборе: main/no-sidebar/main.php. В D2 этот файл имеет ту же самую структуру, что и главный main.php, только удалён вывод сайдбара и прописан css-класс body.no-sidebar.

Помимо шаблона записи, можно указать шаблон вывода для произвольного type-файла. Для этого соответствующий main.php следует расположить в main/type/ТИП ДАННЫХ/main.php. Например, если требуется выводить главную страницу без сайдабра, то скопируем main/no-sidebar/main.php в main/type/home/main.php.

Опции шаблона

В default с опциями сложность в том, что есть некие общие опции, которые могут использоваться другими шаблонами, а есть опции «типовые», которые как правило могут использоваться шаблоном, и есть строго свои опции. Эта путаница в D2 решена очень просто: все общие опции вынесены в shared-каталог, а опции шаблона в отдельных каталог options. В этом каталоге располагаются ini-файлы, которые подключаются «скопом». Таким образом удалось разделить некогда единый ini-файл на отдельные секционные файлы.

В файле options.php, который выполняет роль диспетчера, можно указать режим подключения дефолтных (из shared) опций - параметр get_options_default. Если они не нужны, то значение false.

Функциональность

Часть функций, которые раньше я делал в default/functions-template.php, теперь перенесена в shared-каталог или включена в ядро MaxSite CMS. Для шаблона автоматически подключается шаблонизатор Page_out, вывод колонок - Columns, а также формирование миниатюр - Thumb.

Шаблонизатор Page_out, о котором я уже раказывал (раз, два), теперь используется достаточно активно. Например в компонентах, а также type-файлах.

LESS/CSS

«Любимая» тема. :-) Если кратко, то MaxSite CMS имеет очень хорошую поддержку LESS, причём на таком уровне, о котором другие CMS могут только мечтать. Помимо компилятора mso_lessc(), я написал плагин less_compiling, в котором можно выполнить компиляцию произвольного less-файла, а не только в каталоге шаблона. Если вы работаете с LESS, то обратите внимание на этот плагин, с ним очень удобно работать.

В самом компиляторе mso_lessc() добавил некоторые новые «фишки». Например автоматическое подключение less-файлов компонентов, блоков, плагинов и т.п. Описание есть в var_style.less шаблона D2.

Также я сделал возможность, которая присутствует только в LessPHP - создание своих less-функций. Например, мы хотим сделать функцию double и использовать так:

border: double(4px) solid red;

Создаём файл var_style.less.php, который располагается рядом с компилируемым var_style.less.

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
 
function lessphp_double($arg) 
{
	list($type, $value, $unit) = $arg;
	return array($type, $value*2, $unit);
}
 
$compiler->registerFunction("double", "lessphp_double");

MaxSite CMS автоматически подключит этот файл, где less-компилятор зарегистрирует новую функцию double.

Теперь касательно каталога css-less. Основная задача - обеспечение модульности стилей при том, чтобы было понятно где какой файл находится. Очевидно, что стили компонентов расположены в components, модульная сетка - в layouts и т.п.

Типографика, UI-элементы и css-фреймворк

CSS-фреймворк style-all-mini.css теперь находится в shared-каталоге и доступен в виде исходных less-файлов. Сами стили были поправлены, лишнее выкинуто, что-то улучшено. Типографика стала лучше и симпатичней. Технически, вместо style-all-mini.css можно использовать его составные less-файлы, если вдруг какие-то стили не нравятся.

Некоторые стили были вынесены в отдельные less-файлы и чтобы их использовать следует явно подключить в своём шаблоне. Сейчас это кнопки, табы, сообщения, метки и dropdown-меню. Файл helpers.less содержит хелперы-миксы и может подключаться прямо из shared-каталога.

В css-less находятся два каталога frameworks и elements, которые предполагают использование сторонних стилей под определенные элементы. Предполагается, что разместив в них свои миксы, можно будет автоматом получать разные дизайны, которые сейчас публикуются как UI-Kit. Пока это задел на будущее, будем надеятся, что идея будет реализована.

Как теперь делать шаблоны

На текущий момент D2 выполняет роль каркаса для новых шаблонов. Таким образом достаточно его скопировать и он уже полностью готов к использованию. Шаблон Default оставлен только в целях совместимости со старыми шаблонами, поэтому на его основе уже нет смысла делать новые. Каркас «_create_a_new_template» удалён, поскольку больше не имеет смысла.

Комментариев: 5 RSS

1Аноним23-12-2012 18:23

Спасибо за обзор! Интересно было почитать, буду изучать новое построения шаблонов! :)

2Анатолий27-12-2012 22:46

А как правильно обновляться? У меня 801...

3Аноним28-12-2012 09:05

Можно просто файлы поверх. Единственный момент: в d2/options/ я убрал ini-файлы. Если они есть, то удалите d2 и загрузите по новой.

4Аноним07-01-2013 10:07

Слушай Максим. Заметил у себя на сайте в каждой статье, сразу в начале идет вот такой код:

<title></title><style type="text/css">

img.c3 {border:0;}
p.c2 {font-weight: bold}
br.c1 {clear:both}
</style>

Откуда он берется и как его убрать?

5Сергей09-02-2013 18:56

Такой же код заметил у себя. И плюсом после заголовка H1 выводятся еще раз блоки, как в начале странице. Как это можно поправить?

Шаблон default, 0,81 maxsite. Что самое интересное, на локальном сервере - код страниц нормальный.

Оставьте свой комментарий!

Комментарий будет опубликован после проверки

Вы можете войти под своим логином или зарегистрироваться на сайте.

(обязательно)