MaxSite CMS для чайников. Основы

Рубрика: MaxSite CMS -> Для чайников
Понедельник, 4 января 2010 г.
Просмотров: 1115
Подписаться на комментарии по RSS
]]>
]]>

Поскольку многим всё-равно нечем заняться на каникулах, предлагаю немного поучиться работать с MaxSite CMS. Хотя я мого раз уже рассказывал о системе, какого-то цельного руководства до сих пор нет. В какой-то мере это попытка начать над ним работу.


Версии

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

Тут еще такой момент. Обновлять MaxSite CMS очень просто: вы просто загружаете файлы поверх старых. Естественно конфигурационные файлы нужно предварительно сохранить. В отличие от WordPress, где обычно нужно выполнять операцию обновления, в MaxSite CMS ничего подобного нет. За все время была только одна версия (0.19), где я не до конца продумал структуру БД и пришлось выполнить обновление. Так что если даже у вас вдруг что-то перестало работать в новой версии, вы просто-напросто загружаете старую версию поверх. Для тех, кто хочет автоматизировать этот процесс я рассказывал о полуавтоматическом обновлении.

Я и дальше буду сравнивать свою систему с WordPress, но не сцелью как-то «возвысить/унизить», а просто потому что многие знают WordPress и на таких отличиях будет проще понять MaxSite CMS.

Итак, скачиваем latest и устанавливаем систему.


Установка 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:

  1.  if ( is_type('home') ) ...
  2.   elseif ( is_type('page') ) ...
  3.   elseif ( is_type('category') ) ...
  4.  ...

Другой вариант - это прямое обращение к сегментам URL:

  1.  if (mso_segment(1)=='myform') ...

В последнем случае условие сработает на адрес: http://site.com/myform.

Анализ сегментов удобней по той причине, что нет необходимости создавать отдельный тип данных. Например для своего шаблона вы решили сделать форму заказа (order). Пусть она размещается файле order.php (в шаблоне, есно):

  1.  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 предоставляет в ваше распоряжение и другие механизмы кастомизации шаблонов. Впрочем не буду забегать вперед.


Сайдбары и виджеты

Естественно, что система генерирует не только записи, но и некоторые другие части, например сайдбары.

Сайдбары - это некие колонки или блоки, которые наполняются виджетами. Главная «фишка» в том, что в шаблоне вы просто прописываете вызов сайдбаров, а наполнением занимаетесь уже через админ-панель.

Для сайдбаров используется функция

  1.  mso_show_sidebar('номер сайдбара', 'html до', 'html после');

Второй и третий параметры позволяют задать произвольный html для обрамления виджетов. Есть несколько предопределенных замен, которые позволяют добиться произвольного css-оформления для каждого вижета:

  • [SB] - номер сайдбара
  • [NUMW] - номер/название виджета
  • [FN] - функция виджета
  • [NUMF] - номер функции фиджета

То есть можно задать отдельный class для любого виджета в любом сайдбаре. Вариации различны. Например если задать так:

  1.  $do = '<div class="widget widget_[SB]_[NUMW] [FN] [FN]_[NUMF]">';
  2.  $posle = '</div>';
  3.  mso_show_sidebar('1', $do, $posle );

Для виджета «login_form» (первый в первом сайдбаре) получим:

  1.  <div class="widget widget_1_1 login_form_widget login_form_widget_0">
  2.  ...
  3.  </div>

Еще следует отметить, что виджеты можно задавать с условием отображение. Например для того, чтобы отобразить виджет только на главной:

  1.  text_block_widget главная is_type('home')

Условие может быть произвольным и их можно комбинировать с помощью обычных AND, OR, скобок и т.п.


Хуки

Последний момент, о котором я бы хотел рассказать сегодня - это механизм хуков (hook, «ловушка»). Хуки позвляют прочим функциям «прицепиться» к другим функциям/действиям. Например при инициализации системы срабатывает хук init. Таким образом, можно задать свою произвольную функцию и «прицепить» её к инициализации системы.

  1.  mso_hook_add('init', 'my_init');
  2.  function my_init($args = array())
  3.  {
  4.   echo 'Ура!';
  5.   return $args;
  6.  }

В данном примере, в момент инициализации системы произойдет вывод текста «Ура!».

Хуки обычно применяются в плагинах под определенное действие. Например вывод текста записи - это хук «content». Если подключиться к нему, то можно произвольно изменить текст записи.

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

Кроме этого, хуки вы можете придумывать и свои. Предположим, вы написали плагин, который выводит какие-то определенные данные. Чтобы интегрировать его, можно в шаблоне прописать хук:

  1.  mso_hook('my_plugin_hook');

На хуках построенны очень многие функции и решения, поэтому вы должны знать, что это важная часть MaxSite CMS.


Заключение

Думаю, что для начала этой информации хватит и вы сможете примерно понять как и что работает. Позже мы будем более подробно изучать «теоретическую» часть, а также рассмотрим практические примеры.

]]>twitter.com Google Buzz google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru]]>

Комментариев: 6

Вы можете получать новые комментарии к этой записи по RSS или оформить подписку на все комментарии сайта. Или даже на все новые записи сайта. Не знаете, как это сделать?
  1. 2010-01-04 в 21:36:08 | akokin
    ]]>]]>

    Максим, спасибо за эту информацию. Не мог понять раньше, что за хуки и как с ними работать (даже заметка в гугл-группе не прояснила), а теперь все уложилось.

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

  2. 2010-01-04 в 21:37:07 | librarian
    ]]>]]>
    Шаблоны

    maxsites.ru

    Мы работаем над недостатком шаблонов ;)

  3. 2010-01-04 в 23:26:31 | JeckDigger

    Полагаю очень полезная затея написать ряд обучающих статей. Иногда просто выпадаешь из темы по ряду причин и перечитать материал об обновлении большого количества версий просто не реально. А тут просто и доступно, в общем очень понравилось, жду продолжения.

  4. 2010-01-05 в 12:51:23 | Feelov

    Спасибо за обзорчик. Я вот не знал, что можно просто поверх заливать. Может стоить такое описание прилагать к движку каким-то образом? Было бы удобно дл новичков grin

  5. 2010-01-05 в 16:54:14 | Attlant
    ]]>]]>

    файл application/controllers/maxsite.php строка 68 ($method == 'home') or второй раз. Залез посмотреть типы и немного озадачило...

  6. 2010-01-05 в 19:36:13 | MAX
    ]]>]]>

    Ну это не страшно. smile Исправлю.

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

Не регистрировать/аноним

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email.
(При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.)



grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

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