Поскольку многим всё-равно нечем заняться на каникулах, предлагаю немного поучиться работать с MaxSite CMS. Хотя я мого раз уже рассказывал о системе, какого-то цельного руководства до сих пор нет. В какой-то мере это попытка начать над ним работу.
Версии
Устанавливать нужно последнюю версию.
Тут еще такой момент. Обновлять MaxSite CMS очень просто: вы просто загружаете файлы поверх старых. Естественно конфигурационные файлы нужно предварительно сохранить. В отличие от WordPress, где обычно нужно выполнять операцию обновления, в MaxSite CMS ничего подобного нет. За все время была только одна версия (0.19), где я не до конца продумал структуру БД и пришлось выполнить обновление. Так что если даже у вас вдруг что-то перестало работать в новой версии, вы просто-напросто загружаете старую версию поверх. Для тех, кто хочет автоматизировать этот процесс я рассказывал о полуавтоматическом обновлении.
Я и дальше буду сравнивать свою систему с WordPress, но не сцелью как-то «возвысить/унизить», а просто потому что многие знают WordPress и на таких отличиях будет проще понять MaxSite CMS.
Итак, скачиваем архив и устанавливаем систему.
Установка MaxSite CMS
Установка системы очень подробно описана в файле install-ru.txt. У меня часто спрашивают можно ли как-то автоматизировать этот процесс. Отвечаю - можно. Но потом. Сейчас, если будет угодно, установка небольшой тест на профпригодность. Если вы смогли установить систему, значит для вас и все остальное будет доступно. Если не получилось, лучше обратитесь к кому-то более опытному.
Первые шаги
После установки можно войти в админ-панель и «поиграться» с настройками и разными опциями. Я уверен, что в MaxSite CMS админ-панель проще и удобней, чем в WordPress, поэтому проблемы с ней у вас вряд ли возникнут.
Из отличий:
- Опций больше, чем в WordPress.
- Некоторые опции взаимосвязаны, например для вывода на главной блоков рубрик нужно указать ещё и рубрики для главной.
- Раздельные опции для сайта и шаблона.
- Сайдбары настраиваются «дубовато» (по сравнению с WordPress), но это сделано потому что можно указывать условия отображения виджетов (об этом поговорим позже).
- Виджетов может быть много одного типа. Не забывайте только указывать для каждого из них уникальный номер или название.
Шаблоны
Шаблонов к MaxSite CMS не очень много. Это факт. Поэтому, когда вы начнете что-то делать, следует понимать как они работают. Я настоятельно рекомендую не брать за основу шаблон «Default», потому что он более сложен для понимания. Я специально включил в комплект поставки Clouds и Mini. Они проще и вам не составит труда начать свое знакомство с шаблонами для MaxSite CMS именно с них.
Плагины
Плагины выполняют такую же роль, как и в WordPress - расширяют возможности системы. Но, когда мы будем говорить об устройстве MaxSite CMS, то вы увидите, что моя система очень простая и маленькая. В ней очень мало каких-то обязательных действий и ограничений. И плагины это не просто дополнительный функционал - это «внешняя» часть системы, с помощью которой написана сама система. Например, админ-панель - это обычные плагины, разве что только их не нужно активировать. Если вы решитесь посмотреть устройство плагинов, то увидите, что они очень небольшие по размеру и имеют строгое именование, предопределенные функции, действия и т.п.
Некоторые плагины создают виджеты, другие имеют свою страницу настроек, а некоторые используют возможность системы автоматически создавать страницу опций. В последнем случае плагины имеют ссылку на опции прямо со страницы плагинов.
Если вы решите создать свой плагин, то обратите внимание на файлы «template for plugins-... .php» - это заготовки для новых плагинов. В них достаточно выполнить замены в Notepad2 и вы сразу же получаете рабочую версию.
Теперь за дело
Ну что ж, будем считать, что все формальности соблюдены и первое впечатление о системе вы уже получили, теперь самое время поговорить о серьезных вещах с точки зрения продвинутых пользователей и программистов.
Как работает MaxSite CMS
Я не перестану повторять об этом раз за разом, потому что понимание таких основ - краеугольный камень всех и вся. Пока вы не усвоите эту часть, работать с MaxSite CMS будет достаточно сложно. Вы будете спотыкаться о самые примитивные вещи. Особенно тяжело будет тем, кто ничего, кроме WordPress'а не видел, потому что там масса ограничений, которые выдаются за «фишки» и особенности/достоинства системы.
Работа MaxSite CMS основана на анализе входящего URL. Поскольку мы используем фреймворк CodeIgniter, то часть работы по анализу выполняет именно он. MaxSite CMS получает готовые сегменты адреса и дальше уже решается что и как выводить.
Когда вы работаете с WordPress, то не задумываетесь о структуре адресов. Вы можете настроить ЧПУ, или даже отказаться от него, но главное чего вы не замечаете - это то, что WordPress имеет строго предопределенные типы данных: страницы, рубрики, метки и т.п. Входящий URL WordPress разбирает и выполняет запрос к БД и отдает готовый результат в шаблон.
В MaxSite CMS всё не так. После разбора URL происходит определение типа данных. Выполняется это в т.н. контролере. Из-за того, что адреса могут быть произвольными, более того, иметь для разных типов один slug, то в MaxSite CMS следует явно указывать тип данных.
Например тип page - это одиночная страница, тип category - рубрика и т.д. (Сравните: http://site.com/page/hello и http://site.com/category/hello.) Полный список предопределенных типов вы можете самостоятельно посмотреть в контролере - файл application/controllers/maxsite.php.
Таким образом система в самый первый момент определила тип данных и построила структуру сегментов. После этого происходит т.н. инициализация системы. Например подключаются все плагины, считываются опции и т.д. Здесь же выполняется хук «init», по которому вы можете переопределить любые действия системы.
И в завершении управление передается в шаблонный index.php. Всё! Больше система ничего не далает. Вся дальнейшая логика ложится исключительно на шаблон.
Впрочем, если совсем строго, то существуют типы данных, которые не используют шаблон, например «url», «ajax» и т.п. В них происходит подключение указанного файла или редирект. То есть шаблон для таких действий не требуется. Точно также вы можете создавать произвольные типы данных на уровне контролера. Система их автоматически «подхватит».
Сейчас я объясню почему именно так, а не как в WordPress - шаблон только для отображения уже полученных данных.
Дело в том, что шаблон в MaxSite CMS не просто визуализация данных, но и конечное приложение. То есть у вас есть возможность на уровне шаблона решать что и как делать, и система лишь предоставляет в ваше распоряжение необходимый функционал. Как его использовать решаете уже вы.
Вы скажете, а что же делать, если необходимо использовать произвольный тип данных, не указанный в системе. На сей счет система поступает очень просто - она присваивает тип «page_404», который вы и «перехватываете».
Анализ типа данных
Существует несколько «легальных» способов анализа типов данных. Самый простой - это использовать предопределенные типы с помощью функции «is_type()». Все это выполняется в шаблонном index.php:
if ( is_type('home') ) ... elseif ( is_type('page') ) ... elseif ( is_type('category') ) ... ...
Другой вариант - это прямое обращение к сегментам URL:
if (mso_segment(1)=='myform') ...
В последнем случае условие сработает на адрес: http://site.com/myform.
Анализ сегментов удобней по той причине, что нет необходимости создавать отдельный тип данных. Например для своего шаблона вы решили сделать форму заказа (order). Пусть она размещается файле order.php (в шаблоне, есно):
if (mso_segment(1)=='order') require('type/order.php');
Начиная с MaxSite CMS 0.37, шаблонный index.php (в default) переписан так, чтобы автоматически «подхватывать» файлы произвольных и несуществующих типов данных на основе как is_type, так и по сегментам. Грубо говоря, в нашем примере всё ещё проще: просто кидаем файл order.php в каталог type своего шаблона. Но, для полного понимания, вам следует знать как все это работает.
Чтобы разобраться досконально с этим вопросом, обратите внимание на файл application/maxsite/templates/default/index-old.php.
Работа шаблона
Ну хорошо, тип данных мы определили, что дальше? А дальше самое интересное - мы должны получить нужные данные и их вывести. Здесь есть несколько важных моментов. Прежде всего отмечу, что шаблон в MaxSite CMS может быть произвольным. Одно правило - наличие index.php. Всё остальное на ваше усмотрение.
Но, поскольку чаще всего встречаются типовые задачи, то разумней будет использовать какой-то предопределенный механизм, которого для совместимости мы и будем придерживаться.
То есть когда мы определили тип данных, нам нужно подключить т.н. type-файл. В нем выполняются все действия по получению данных и их выводу. Например для home - главной страницы используется файл type/home.php.
Вы конечно же можете использовать свои type-файлы, но удобней и проще взять уже готовые от шаблона default. То есть при подключении такого типа, мы просто указываем каталог default.
В подключенном type-файле первым делом выполняется получение данных. Для этого обычно используется (мега-)функция mso_get_pages(). Её описанием мы займемся позже, пока же просто определимся, что данные получены в виде массива. Дальше просто: выводим первую неизменную часть шаблона, потом сами данные/записи и вторую неизменную часть шаблона.
Что такое неизменные части?
Любой сайт начинается с шаблона/дизайна. И в любом шаблоне есть блоки, которые генерирует система, а есть фиксированые/неизменяемые. Например записи - это изменяемая часть, а шапка и подвал - неизменяемая. Таким образом любой шаблон можно разделить на три html-части:
- Первая неизменяемая часть (секция head, шапка, начало структуры).
- Изменяемая часть (генерирует система).
- Вторая неизменяемая часть (закрываем структуру, подвал).
Грубо говоря, наш type-файл должен вывести данные в шаблоне между двумя частями. В MaxSite CMS принято, что это будут файлы:
- main-start.php
- main-end.php
В первом файле можно подключить header.php, где находится html-секция head. В последнем в отдельном файле выносим footer.php. Это уже не является обязательным - так просто удобно и не более того.
Чтобы окончательно прояснить этот вопрос, кратко обрисую схему подключения файлов:
- MaxSite CMS передала управление в шаблонный index.php
- В шаблонном index.php определили тип данных и подключили нужный type-файл.
- В type-файле получили данные для вывода, подключили main-start.php, вывели сами данные, подключили main-end.php.
Как видите всё довольно просто. Главное, когда вы будете делать свой шаблон разбить его на две неизменяемые части.
Что же касается самого type-файла, то пока мы будем относиться к нем как к «черному ящику», поскольку в нем довольно сложный вывод и сейчас его рассматривать - только запутаться. Обратите внимание на шаблоны Clouds и Mini - в них нет никаких type-файлов, потому что используются дефолтные. Когда вы будете делать свой шаблон, то сделаете точно также. Тем более, что MaxSite CMS предоставляет в ваше распоряжение и другие механизмы кастомизации шаблонов. Впрочем не буду забегать вперед.
Сайдбары и виджеты
Естественно, что система генерирует не только записи, но и некоторые другие части, например сайдбары.
Сайдбары - это некие колонки или блоки, которые наполняются виджетами. Главная «фишка» в том, что в шаблоне вы просто прописываете вызов сайдбаров, а наполнением занимаетесь уже через админ-панель.
Для сайдбаров используется функция
mso_show_sidebar('номер сайдбара', 'html до', 'html после');
Второй и третий параметры позволяют задать произвольный html для обрамления виджетов. Есть несколько предопределенных замен, которые позволяют добиться произвольного css-оформления для каждого вижета:
- [SB] - номер сайдбара
- [NUMW] - номер/название виджета
- [FN] - функция виджета
- [NUMF] - номер функции фиджета
То есть можно задать отдельный class для любого виджета в любом сайдбаре. Вариации различны. Например если задать так:
$do = '<div class="widget widget_[SB]_[NUMW] [FN] [FN]_[NUMF]">'; $posle = '</div>'; mso_show_sidebar('1', $do, $posle );
Для виджета «login_form» (первый в первом сайдбаре) получим:
<div class="widget widget_1_1 login_form_widget login_form_widget_0"> ... </div>
Еще следует отметить, что виджеты можно задавать с условием отображение. Например для того, чтобы отобразить виджет только на главной:
text_block_widget главная is_type('home')
Условие может быть произвольным и их можно комбинировать с помощью обычных AND, OR, скобок и т.п.
Хуки
Последний момент, о котором я бы хотел рассказать сегодня - это механизм хуков (hook, «ловушка»). Хуки позвляют прочим функциям «прицепиться» к другим функциям/действиям. Например при инициализации системы срабатывает хук init. Таким образом, можно задать свою произвольную функцию и «прицепить» её к инициализации системы.
mso_hook_add('init', 'my_init'); function my_init($args = array()) { echo 'Ура!'; return $args; }
В данном примере, в момент инициализации системы произойдет вывод текста «Ура!».
Хуки обычно применяются в плагинах под определенное действие. Например вывод текста записи - это хук «content». Если подключиться к нему, то можно произвольно изменить текст записи.
Хуков довольно много и все они имеют какие-то свои особенности, поэтому, когда вы будете их изучать, следует внимательно смотреть входящие параметры, с тем чтобы не нарушить дальнейшую цепочку.
Кроме этого, хуки вы можете придумывать и свои. Предположим, вы написали плагин, который выводит какие-то определенные данные. Чтобы интегрировать его, можно в шаблоне прописать хук:
mso_hook('my_plugin_hook');
На хуках построенны очень многие функции и решения, поэтому вы должны знать, что это важная часть MaxSite CMS.
Заключение
Думаю, что для начала этой информации хватит и вы сможете примерно понять как и что работает. Позже мы будем более подробно изучать «теоретическую» часть, а также рассмотрим практические примеры.
Комментариев: 12 RSS
1Аноним04-01-2010 19:36
Максим, спасибо за эту информацию. Не мог понять раньше, что за хуки и как с ними работать (даже заметка в гугл-группе не прояснила), а теперь все уложилось.
Хотя у вас уже было опубликовано несколько (с десяток, если не больше) заметок по основам вашей CMS и разработке собственных шаблонов под нее, буду ждать дальнейших ваших разьяснений.
2Аноним04-01-2010 19:37
maxsites.ru
Мы работаем над недостатком шаблонов ;)
3JeckDigger04-01-2010 21:26
Полагаю очень полезная затея написать ряд обучающих статей. Иногда просто выпадаешь из темы по ряду причин и перечитать материал об обновлении большого количества версий просто не реально. А тут просто и доступно, в общем очень понравилось, жду продолжения.
4Feelov05-01-2010 10:51
Спасибо за обзорчик. Я вот не знал, что можно просто поверх заливать. Может стоить такое описание прилагать к движку каким-то образом? Было бы удобно дл новичков :-)
5Аноним05-01-2010 14:54
файл application/controllers/maxsite.php строка 68 ($method == 'home') or второй раз. Залез посмотреть типы и немного озадачило...
6Аноним05-01-2010 17:36
Ну это не страшно. :) Исправлю.
7Аноним19-03-2010 11:02
А тем кто не знает вордпрес, есть инструкция? Как вообще все установить?
8Алексей01-10-2012 10:54
Привет всем!
О WordPress знаю только по-наслышке, с MaxSite CMS столкнулся совсем недавно, но уже некое подобие сайта вывел в свет. Вопреки совету, выбрал дефолтный шаблон, т.к. он более функциональный, чем предлагается в аналогах (может не во всех...), могу ошибаться. Однако, и этот шаблон надо будет подкорректировать под свои нужды. Но, сейчас не об этом. При обновлении MaxSite CMS с 074 на 075 пытался настроить автообновление, но по имеющейся инструкции этого сделать мне не удалось. Тогда я сверху распаковал свежую версию и обнаружил, что переименованные файлы (без distr) не обновились, а рядом просто добавились копии (с distr). Только, в старые мы уже вносили изменения и (возможно) устанавливали коды доступа (сейчас точно не скажу). Возникает вопрос: "Что с ними делать дальше?" И ведь какие-то файлы надо было сохранять как old, чего я не сделал...
В общем, вопросов ещё куча. Понимаю, что это не для раздела комментариев. Но, пробиться (зарегистрироваться/войти) на форум тоже не удалось. Может хоть здесь кто-то возьмётся мне помочь...
А, вообще, Максим, большое спасибо за CMS и успехов Вам и Вашей команде в дальнейшем.
С Уважением.
Алексей.
9Аноним01-10-2012 14:58
MaxSite CMS так и обновляется - просто файлы поверх. Ничего делать не нужно. Файл -distr нужны только для установки системы.
10Алексей01-10-2012 18:14
Максим, так, вновь появившиеся файлы с -distr, удалять что-ли или оставить для будущих обновлений? И коль уж Вы вызвались мне помочь - какие файлы можно отнести к конфигурационным? и могу ли я, сам того не подозревая, внести в них изменения из админки? (Вопрос обусловлен тем, что конфигурационные файлы нужно беречь при обновлении системы).
Простите уж за глупые вопросы, но я только в этом году узнал что такое HTML, CSS, PHP and CodeIgniter, и наверное рановато взялся за такое ответственное дело, как сайтостроение. Хотя, я сам у себя заказчик, поэтому не так страшно ошибаться.
А Вам, премного благодарен!
С Уважением,
Алексей.
11Аноним01-10-2012 18:21
Всё равно. У нас же не WordPress, в котором каждое обновение сродни пожару. -distr файлы как раз и предназначены для того, чтобы не затирать конфигурацию или другие важные файлы при обновлении. Делайте с ними, что хотите. Они не используются системой.
12Алексей02-10-2012 09:49
Спасибо Вам за предоставленную свободу выбора!