Для того, чтобы расширить функциональность системы, используются плагины. Что такое плагины, я думаю, объяснять не нужно. Установка плагина сводится к нескольким простым действиям:
- Скопировать файлы в каталог плагинов
- В админ-панели активировать его
Технически плагины представляют собой обычные php-файлы, которые подключаются в момент инициализации системы. По этой причине плагином можно сделать практически любой сторонний php-скрипт. Всё, что требуется для его модернизации - это указать правильное именование функций (см. правила).
Учитывая свой опыт создания плагинов для WordPress (где существует изрядный бардак), я решил разработать несколько несложных правил, которых должны придерживаться все разработчики плагинов. А для того, чтобы облегчить сей труд, в комплекте с дистрибутивом будет поставляться несколько заготовок для новых плагинов.
Правило 1. Расположение плагинов
Все плагины располагаются в каталоге maxsite/plugins/ в своем каталоге. Главный файл плагина должен иметь имя index.php. Для того, чтобы плагин мог быть активирован, необходимо разместить рядом файл info.php. Данный файл служит для описания плагина и имеет следующее содержимое:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); $info = array( 'name' => 'Название плагина', 'description' => 'Описание плагина', 'version' => '1.0 - версия', 'author' => 'Максим - автор', 'plugin_url' => 'http://maxsite.org/ - ссылка на страницу плагина', 'author_url' => 'http://maxsite.org/ - ссылка на автора', 'group' => 'template - группа' ); ?>
Правило 2. Именование функций плагина.
Функции плагина должны начинаться с имени (каталога) плагина. Например плагин Календаря находится в каталоге «calendar», следовательно функции должны начинаться с «calendar_». То есть за имя плагина берется имя каталога. Это правило позволяет значительно упростить интеграцию плагина в систему, поскольку для плагинов (и виджетов) предусмотрены некоторые предопределенные действия, то их очень просто выполнить просто используя имя каталога.
Правило 3. Каждый плагин может иметь функцию автозагрузки (_autoload)
Например:
function calendar_autoload($args = array()) { // какое-то действие }
В данном примере плагин «calendar» (каталог «calendar»). При инициализации плагина, система автоматически проверит существование функции «плагин_autoload» и выполнит её. Таким образом в этой автозагрузке можно разместить нужные действия, например хуки (hook, ловушки).
Правило 4. Каждый плагин может иметь функцию активации, деактивации и удаления (_ativate, _deativate, _uninstall)
Плагин может иметь функции:
- плагин_ativate - которая срабатывает при включении плагина;
- плагин_deativate - которая срабатывает при отключении плагина;
- плагин_uninstall - которая страбатывает при удалении (всех настроек) плагина.
Правило 5. Каждый плагин может быть виджетным
Виджеты - это какой-то блок, который выводится в сайдбаре. Описание виджетов см. в соответствующем разделе. Следует отметить, что любой плагин можно сделать виджетным. Виджеты удобны тем, что обладают единым интерфейсом, поэтому для их создания и использования не требуется дополнительное программирование.
Для управления виджетами система использует несколько предопределенных именований функций плагина.
- плагин_widget_form - для вывода формы настройки виджета
- плагин_widget_update - обновление настроек виджета
Комментариев: 23 RSS
1Роман01-06-2008 11:29
А плагины как активируются? Есть таблица типа:
TABLE plugins
(
plugin_id
plugin_status
)
где plugin_status = on/off (включен/выключен). Так?
2Максим01-06-2008 11:35
Нет, конечно. :)
Все несколько проще. Есть опция active_plugins, которая представляет собой обычный массив. В нем и хранятся включенные плагины.
3Роман01-06-2008 11:39
То есть таблица?
TABLE active_plugins
(
plugin_id
)
Ну где то же должны хранится значения :D
4Максим01-06-2008 12:03
Значения чего? Имена активных плагинов хранятся в опциях. Ничего лишнего.
5Роман01-06-2008 13:30
А когда выйдет MaxSite CMS? (Кстати нашел генератор названий, может назовете CMS подругому: _http://www.lightsphere.com/dev/web20.html)
6Максим01-06-2008 13:42
Уже. :)
7Юрий01-06-2008 16:54
Немножко не по теме, но все же. Почему то этот движок мне интересен ;); пара вопросов. Какова направленность системы - блоги или сайты или же на ней можно с легкостью сделать и то и другое? (с wordprees-om такое не проходит - пытаюсь на нем сделать небольшой корпоративный сайт, дак постоянно с бубном пляшу, Drupal и Joomala на данном этапе отмел сразу - для меня показались слишком сложными, поскольку о PHP имею только общие неглубокие представления) Если ответ на первый вопрос "и для того и для другого", тогда второй вопрос: сколько будет стоить CMS, когда "уйдет на золото" окончательно? или можем пообщаться приватно на эту тему.
8Максим01-06-2008 19:19
1. И блоги, и сайты. И все что угодно. В системе нет четкой привязки к какой-то одной схеме данных, хотя по-умолчанию я сделал вывод как в блогах.
2. Системе не для «кухарок» - с этим к WordPress'у. ;) Чтобы что-то изменить, потребуются какие-то знания PHP и знания основ движка. Правда, в отличие от WordPress, в моей системе не нужно переделывать сам движок - вполне достаточно сделать свой шаблон.
3. Насчет «стоить» вопрос не понял. Разработка открытая. Главное сохранять копирайты.
9OlegTСайт18-10-2008 20:34
А можно огласить весь список плагинов с описаниями на сайте? Просто понимаю, что в сборке уже присутствуют плагины, но хотелось бы узнать какие, не скачивая и не устанавливая. Так сказать оценить возможности системы читая описания функционала плагинов. Тратить время на тестовую установку чтобы просто узнать возможности, это роскошь в наше время.
Если полный список где-то уже есть, то тогда извиняюсь, тогда надо как-то навигацию более ориентированную на интересующихся вопросом...
10serg21-12-2008 01:52
11Олег23-12-2008 13:21
Используйте текстовый виджет (text_block) или ушко. В него можно вставлять любой текст.
12Олег23-12-2008 13:24
OlegT, в сборке есть все плагины. Хранятся здесь: \maxsite\application\maxsite\plugins
13WaveСайт23-12-2008 21:59
Олег, в сборке не все плагины. Штуки три визивиг-редактора можно найти по ссылкам с форума блоге Ю.Б., ещё один-два плагина аналогично.
К тому же человек хочет не скачивая сборку прочесть где-то на сайте этот список и краткое описание.
14serg27-12-2008 23:31
Спасибо огромное за помощь, с text_block разобрался - работает. Но вот с ушками - проблема. Где бы посмотреть инфу для чайниковских чайников?
15Олег29-12-2008 15:53
Активируете плагин "ushki". Появится в разеделе Плагины раздел "Ушки".
Далее, заходите в него и создаете ухо :)
например: uxo1. Вносите в него свой текст или php-код и сохраняете.
Потом, переходите в "Сайдбары и виджеты" и в блоке "Доступные виджеты" нажимаете на против раздела "Ушки » " на любой из сайдбаров.
Например "Первый сайдбар".
У вас появится в поле надпись ushki_widget. Важно, если у вас в одном сайдбаре будет несколько ух (виджетов), их нужно нумеровать вот так:
ushki_widget 1
ushki_widget 2
...
ushki_widget n
После того, как вы назначили виджет ushki в нужный сайдбар, переходите во вкладку "Настройка виджетов". Она находится вверху страницы. Я ее не сразу заметил :)
В Первом сайдбаре нажимаете на "Ушки", указываете Заголовок (не обязательно) и название вашего уха. В данном случае, это uxo1. Содержимое вашего уха должно отобразится на сайте. :)
16Griz22-04-2009 10:46
Думаю, совсем не помешал бы механизм подключения wp-плагинов к этому движку.
17WaveСайт22-04-2009 11:43
Griz, этого не будет.
В крайнем случае, заказывайте (делайте сами) передеделку WP-плагинов к MaxSite.
18Аноним09-07-2009 10:49
Максим, вы пишите что сделали по умолчанию вывод как в блогах. Можно ли изменив шаблон вывод сделать как на сайтах с многоуровневым вложением, далеко не весь материал можно подать в новостных лентах. Как быть с корпоративными сайтами? Мне кажется многие сталкиваются с этой задачей, и не разобравшись отметают MaxCMS, считая его заточенным под блоги. И еще, когда Вы вели WP , мне очень понравилось как вы описали создание шаблона "своими руками", просто супер. Нельзя ли так же разжевать с MaxCMS, мне бы хотелось сделать шаблон не виджетный, вручную прописать все что мне надо в коде жаблона, если это конечно возможно?
19Максим09-07-2009 11:11
MaxSite CMS тем и хороша, что вы сами решаете как организовать вывод. По опыту скажу, что для таких сайтов я использую в основном двумя приёмами. Первый - анализ сегментов url и по ним подключаю любую страницу. Второй - использую типы страниц. То есть, когда нужно организовать какой-то раздел на сайте, но рубрики и метки уже «заняты», то я просто указываю нужный тип страницы и от этого уже зависит вывод (например навигация).
Возможно, но неэффективно. Зачем прописывать вручную функции, если это же самое делается через админку? В настройках сайдбаров как раз и указываются функции виджетов. Вы можете их вызвать в любом месте шаблона.
20Алексей04-02-2012 21:40
Возможно ли организовать вывод страниц без указания даты и времени ее создания, кол-во просмотров, автора? Или же создавать свой type_foreach файл и править ручками?
Заранее спасибо.
21Максим04-02-2012 22:06
type_foreach-файлы как раз для этого и предназначены.
22Денис Назаров03-09-2012 11:21
Клевая система! Чем дальше погружаюсь, тем больше узнаю :)
Макс, вопрос такой - если в админке плагина сделать загрузку файлов - то CMS обломает? Пытался сделать такое - на сервер ничего не прогружается, то есть в post-запросе имя файла есть, а самого файла нет. Через "Загрузки" админки грузит без проблем, а вне его - никак.
Я, конечно, понимаю, что это вопрос безопасности - но как-то очень неудобно, если, к примеру, организовывать интернет-магазин на количество позиций больше сотни, на каждую загрузить хотя бы по две-три фотографии, то вопрос первоначального запуска каталога (да и последующего сопровождения) становится очень сложным.
23Денис Назаров03-09-2012 13:19
Так, предыдущий вопрос снимается :) Проблема, как подсказал гугл, кроется в пыхе, которая никак не хочет принимать файл без указания в форме "multipart/data" :)
Как обычно - спросишь и тут же найдешь ответ сам :)