Создание плагинов под Maxsite CMS. Часть 2
В предыдущей части статьи, по созданию плагинов для Maxsite CMS, мы рассмотрели основные этапы создания простейшего плагина. На самом деле получившийся плагин можно считать каркасом, который послужит нам отличным примером для наших последующих изысканий и опытов. Цель, что мы преследовали, выполнена, но лишь наполовину - плагин успешно определяется системой и выводит информацию, которую мы задали изначально, но мы не имеем возможности менять опции (настройки) плагина, т.к. они полностью отсутствуют. Вот на этом этапе и начинается все самое интересное. В этой статье я расскажу, как "прикрутить" к плагину опции и получать необходимый результат при их использовании.
Для начала продолжим с того, на чем остановились в прошлый раз. Хуки (hooks). В их использовании, как оказалось, ничего сложного нет: достаточно задать область или событие, на которое будет реагировать наш хук и определить для этой ловушки действие на выполнение (функцию). Существует большое количество хуков, они охватывают огромный спектр задач: подключение стилей и скриптов в <head>, отлов ошибок и выбор области для вывода необходимой информации, "перекрытие данных" и т.д. и т.п. Их использование, действительно упрощает работу веб-программисту и увеличивает функциональность самих плагинов. Поэтому, я решил, перечислить (см. дополнительные ссылки к статье) некоторые из них (те, что мне удалось найти), а те, что оказались в стороне, надеюсь, будут озвучены уважаемыми читателями в своих комментариях.
Конечно, знание хуков это хорошее дело, но вот без знания того, как их применить они останутся бесполезными. Давайте рассмотрим пример, подключения своего CSS-файла при помощи хуков. В нем мы определим стили, которые в последующем будут применяться при выводе информации. В прошлый раз мы выбрали класс стиля наобум, и поэтому мы вряд ли получим тот результат на который расчитывали. Итак, в каталоге нашего плагина создадим CSS-файл с именем "style.css" и накинем на него несколько стилей. Содержание моего файла выглядит так:
div.plugin_plugin {
margin: 10px 0;
padding: 8px;
background: whiteSmoke;
text-decoration: none;
}
span.plugin_text {
font-size: 12px;
color: #666
}
У вас же стили могут быть иными, разницы нет, главное, что стоит избегать дублирования стилей, которые указаны в "var_style", "style-all-mini" и "add_style". Правильнее будет использовать их напрямую из этих файлов (те, что я перечислил), но если мы хотим уникального оформления нашего плагина, то свой CSS-файл будет кстати. Теперь давайте посмотрим, как изменится функция автоподключения плагина:
function Plugin_autoload()
{
mso_hook_add('head', 'Plugin_head');
if (is_type('page')) mso_hook_add('content_end', 'Plugin_show');
}
Здесь мы добавили ловушку на , и для нее предопределили функцию на выполнение "Plugin_head" (см. ниже). В которой осуществляем вывод "линка" на наш стиль. Это работает так: при загрузке плагина в заголовок страницы помещается ссылка на наш CSS-файл, и уже из плагина мы вызываем необходимые классы стилей. А вот основной вывод информации будет происходить на страницах типа "page", чтобы лишний раз не мусорить на сайте. Это возможно благодаря проверке - is_type('page'), в любом другом случае ловушка на "content_end" не будет срабатывать. Функция "Plugin_head" выглядит так:
function Plugin_head($args = array())
{
echo NR . '' . NR;
return $args;
}
function Plugin_show()
{
echo 'Текст 1Текст 2';
}
Незаметно мы подошли к ключевому моменту статьи - определение опций для плагина. В первой части статьи мы затерли ненужные функции, но теперь необходимо вернуть одну из них, а именно "function плагин_mso_options()", которая обрабатывает миниопции плагина. Она может иметь огромное количество опций, но каждая из них определяется несколькими параметрами: type (тип), name (имя или заголовок), description (описание), default (значение по-умолчанию). Поле "type" может иметь следующие значения: text, select (выпадающий список), checkbox, info (информационный блок, обозначение раздела или области), radio (переключатель), textarea (текстовый блок). Вот так она выглядит в изначальном виде:
# функция отрабатывающая миниопции плагина (function плагин_mso_options)
# %%% - замените на имя плагина
function %%%_mso_options()
{
if ( !mso_check_allow('%%%_edit') )
{
echo t('Доступ запрещен');
return;
}
# ключ, тип, ключи массива
mso_admin_plugin_options('plugin_%%%', 'plugins',
array(
'option1' => array(
'type' => 'text', //тип текстовое поле
'name' => t('Название'), //заголовок или имя
'description' => t('Описание'), //пояснение или описание
'default' => '' //значение по-умолчанию
),
),
t('Настройки плагина %%%'), // титул
t('Укажите необходимые опции.') // инфо
);
}
Добавив еще несколько опций, я задействовал все виды контроллов. Теперь функция обрабатывающая миниопции плагина выглядит иначе:
function Plugin_mso_options()
{
if ( !mso_check_allow('Plugin_edit') )
{
echo t('Доступ запрещен');
return;
}
# ключ, тип, ключи массива
mso_admin_plugin_options('plugin_Plugin', 'plugins',
array(
'option1' => array(
'type' => 'text', //тип "текстовое поле"
'name' => t('Название'), //название
'description' => t('Описание'), //пояснение
'default' => '' //по-умолчанию
),
'option2' => array(
'type' => 'select', //тип "список"
'name' => t('Нужное выбрать:'), //название
'description' => t('Здесь описание'), //пояснение
'values' => t('1||Первое #2||Второе #3||Третье'),
'default' => '1' //по-умолчанию
),
'option3' => array(
'type' => 'checkbox', //тип "чекбокс"
'name' => t('Значение1'),
'description' => t('Здесь идет текст пояснения'),
'default' => '1' //1 - выбор осуществлен, 0 - нет
),
'option4' => array(
'type' => 'info', //тип "информационный блок"
'title' => t('Это заголовок раздела'),
'text' => 'Этот текст можно не указывать',
),
'option5' => array(
'type' => 'radio',
'name' => 'Нужное выбрать',
'description' => 'Это текст пояснения',
'values' => 'Значение1 # Значение2 # Значение3',
'default' => 'Значение1',
'delimer' => ' ', //разделитель
),
'option6' => array(
'type' => 'textarea',
'rows' => 10, //"высота"
'name' => t('Здесь указан заголовок'),
'description' => t('Ввод данных осуществляется в виде гиперссылок: <а href="http://site.ru/">Ссылка<а>'),
'default' => ''
),
),
t('Настройки плагина Plugin'), // титул
t('Укажите необходимые опции.') // инфо
);
}
Для завершения картины я немного изменил функцию Plugin_show() - пользователи почты от Google знают, что в браузерном варианте почты, перед выводом выходящих писем, есть небольшой блок, в котором происходит вывод рекламы в виде поясняющего текста и ссылки. Это так называемая веб-подборка. Ее то мы и попробуем реализовать. В функции function Plugin_show() мы поучаем опции, и проверяем нужную на существование. Если запрос истина, то осуществляем вывод значения опции. Все очень и очень просто. Для того чтобы опробовать рабочий вариант нужно, в последнем поле опций нашего плагина указать ссылку и сохранить ее значение. Остальные опции, я думаю, вам не составит особого труда приспособить в своих проектах.
function Plugin_show()
{
$options = mso_get_option('plugin_Plugin', 'plugins', array());
if (isset($options['option6']) and $options['option6'])
{
echo ''. $options['option6'] . 'Веб-подборка';
}
}
Не забудьте, что "$options = mso_get_option('plugin_Plugin', 'plugins', array())" должна также находиться в теле функции автоподключения плагина, иначе плагин просто не увидит ваших сохраненных опций. К статье прилагается мой рабочий плагин, который вы можете использовать для своих опытов и экспериментов. В следующей части статьи мы затронем виджеты и все, что с ними связано. До встречи, на этом же месте.
Дополнительные ссылки:
Создание плагинов для Maxsite CMS - Часть1
Официальный сайт: Maxsite CMS
Перечень хуков:
content_end - срабатывает после текста записи.
content_start - срабатывает перед текстом записи.
content_content - сам текст записи.
content - текст записи перед началом обработки.
head - срабатывает в секции страницы.
body_start - сразу после <body>
body_end - перед </body>
comments_content_end - после <textarea> в форме отправки комментария
comments_content_start - кнопки формы комментария
comments_content_custom - текст комментария
comments_content_out - вывод комментария
content_auto_tag_custom
content_auto_tag_my
content_balance_tags_custom
content_balance_tags_my
comments_new_captcha_error - ошибка капчи
init - сразу после <body> (инициализация)
content_auto_tag
content_balance_tags
editor_content - редактирование контента
admin_comment_edit - редактирование комментария
new_comment - новый комментарий
admin_head - срабатывает в секции <head> админки
content_out - вывод контента
pagination - пагинация страниц
custom_page_404 - срабатывает на ошибку 404
global_cache_end - хук глобального кэша
type-foreach-file-general - изменение текущего type_foreach-файла
Вложение | Размер |
---|---|
Plugin.zip | 2.32 КБ |
- jimmyjonezz's блог
- Добавить комментарий
- 3518 просмотров
Комментарии
3 комментария(ев)Дата: ЧТ, 26/04/2012 - 21:15
+1
Даешь описание разработки реального плагина =)
Дата: ПТ, 27/04/2012 - 17:00
Эмм... создание плагинов я разделил на несколько этапов: каркас (основы), опции, виджеты и дополнительно. Все сваливать в одну кучу я не буду. Будет примерно 4 части. Вторая часть статьи может претендовать на разработку вполне реального плагина... или нужно разработать что-то более конкретно?
Дата: СБ, 28/04/2012 - 17:34
Недавно портировал плагин FlareVideo для Maxsite CMS:
Официальный сайт: ]]>http://flarevideo.com/]]>
Сам плагин для Maxsite CMS лежит здесь: ]]>http://jimmy.16mb.com/uploads/my/flarevideo.zip]]>
Работает это так. Вставка видео осуществляется через тег: [video=http://flarevideo.com/flarevideo/examples/volcano.mp4]
На данный момент реализовано подключение скинов (через опции плагина). Неправильно работает режим fullScreen.