17.04.2009 | 15:10

Создаем модуль пустышку: QuickStart по созданию простенького функционала - часть1

Обдумав порядок публикации статей, я решил начать с ШАГА №2, ШАГ№1 скорее всего будет публиковаться либо после ШАГА№3, либо параллельно.

А чтобы не тратить время зря, решая абстрактные задачи, - будем писать "Модуль Личного кабинета". Данная публикация QuickStart является заготовкой для этого модуля.

Порядок создания у нас будет следующий:

  1. Создание иконок модуля для скина «Основной»
  2. Создание иконок модуля для скина «Butterfly»
  3. Создание рабочей папки модуля
  4. Создание файлов необходимых для работы модуля
  5. Создание инструкций для инсталлятора модуля
  6. Создание базовых функций (методов) клиентской части
  7. Создание базовых функций (методов) для административной части
  8. Создание шаблона дизайна для административной части
  9. Работа над правами для функций административной части
  10. Создание методов клиентской части
  11. Работа над правами для функций клиентской части
  12. Создание шаблонов дизайна для клиентской части
  1. Создаем иконки модуля для административной части для скина «Основной»
    • /images/cms/admin/full/ico_s/ico_PrivateOffice.gif – (размер 16x16) – иконка модуля в меню модулей
    • /images/cms/admin/full/ico_b/ico_PrivateOffice.gif – (размер 32x32) – иконка активного модуля
    • /images/cms/admin/full/tree/ – здесь хранятся иконки используемые в мета контрол дереве – (размер 16x16)
  2. Создаем иконки модуля для административной части для скина «Butterfly»
    • /images/cms/admin/mac/icons/big/PrivateOffice.png – (размер 95x95) – иконка активного модуля
    • /images/cms/admin/mac/icons/medium/PrivateOffice.png – (размер 42x64) – иконка модуля в панели избранных модулей (док)
    • /images/cms/admin/mac/icons/small/PrivateOffice.png – (размер 42x30) – иконка модуля в меню модулей
    • /images/cms/admin/mac/tree/ – здесь хранятся иконки используемые в мета контрол дереве – (размер 16x16)
  3. Создаем рабочую папку модуля
    • /classes/modules/PrivateOffice
  4. Внутри этой папкой создаем файлы (пока пустые)
    • install.php - Инсталлятор модуля в систему, содержит массив $INFO[], ключи которого вносятся в реестр
    • class.php - В этом файле содержатся методы (функции), используемые в клиентской части
    • __admin.php - содержатся методы (функции), используемые в админке
    • i18n.php - В этом файле хранятся все языковые константы, используемые в админке
    • lang.php - В этом файле хранятся все языковые константы, используемые в клиентской части
    • permissions.php - В этом файле хранятся подключи для прав к функциям модуля (он не нужен, если мы храним права в реестре – мне больше нравится реестр)
    • __event_handlers – Здесь мы будем хранить обработчики событий
    • events.php – В этом файле будут храниться перехватчики событий
    • custom_events.php – В этом файле будут храниться пользовательские перехватчики событий
    • __custom.php – Для кастомных макросов клиентской части модуля
    • __custom_adm.php – Для кастомных макросов админкии
  5. Открываем install.php и пишем в нем следующее…
  6. <?php

     $INFO = Array();

    $INFO['name'] = "PrivateOffice"; // Имя модуля (латинское), должно совпадать с именем папки модуля
    $INFO['filename'] = "modules/PrivateOffice/class.php"; // Путь до файла class.php
    $INFO['config'] = "0"; // Если «1», то модуль будет настраиваемый, если «0», то нет
    $INFO['ico'] = "ico_PrivateOffice"; // Базовое имя файла иконки модуля
    $INFO['default_method'] = "view"; // Метод (функция) вызываемая, по умолчанию для клиентской части
    $INFO['default_method_admin'] = "manage"; // Метод (функция), вызываемая, по умолчанию для админки

    $INFO['func_perms'] = ""; // Массив, определяющий группы прав нашего модуля (появятся в настройках пользователя и будут влиять на доступ к методам (функциям) модуля), ключи массива вносятся в реестр иерархически.
    // В данном случае мы предусмотрим, что «пользователь» сможет «админить» модуль (даем доступ к методу manage), а также просматривать его страницы (даем доступ к методу view)
    $INFO['func_perms/view'] = "Просмотр страниц модуля"; //Собственно объявляем права для «клиентского метода»
    $INFO['func_perms/manage'] = "Администрирование модуля"; // И для «административной части»

    ?>

  7. Открываем class.php и пишем в нем следующее
    • Модуль в UMI.CMS – это, по сути отдельный класс, являющийся дочерним по отношению к классу def_module
    • Открываем модуль конфигурации
    • Тыкаем по вкладке модули
    • Прописываем путь до инсталляционного файла, в нашем случае это classes/modules/PrivateOffice/install.php
    • Тыкаем кнопку установить
    • Если мы все сделали правильно, наш модуль установится в систему
    • Открываем адрес – moy-site.ru/PrivateOffice/ - мы должны увидеть страничку с просьбой авторизации, это произошло по тому, что у пользователя «Гость», пока нет прав на метод view
    • Лезем в модуль пользователи, в пользователя «Гость» и ставим галочку напротив perms-PrivateOffice-view
    • Обновляем страничку – moy-site.ru/PrivateOffice/ - мы должны увидеть результат работы метода view нашего модуля, а именно -  Hallow World - Мы находимся в клиентской части нашего модуля
  8. <?php
    class PrivateOffice extends def_module { //Модуль в UMI.CMS – это, по сути, отдельный класс, являющийся дочерним по отношению к классу def_module, в данном случае наш класс будет называться PrivateOffice

    public function __construct() {
    parent::__construct(); // Вызываем конструктор родительского класса def_module

    if(cmsController::getInstance()->getCurrentMode() == "admin") { // данный "if" нужен для того чтобы не подгружать методы админ части, когда пользователь находится в клиентской и наоборот (позволяет экономить ресурсы)
    $this->__loadLib("__admin.php"); // подгружаем файл __admin.php с абстрактным классом __PrivateOffice для админки, в принципе можно хранить все методы и в файле class.php, но данный подход позволяет сократить ресурсы и структурировать используемые методы
    $this->__implement("__PrivateOffice_adm"); // подключаем методы класса __PrivateOffice_adm для расширения функционала админки
    $this->__loadLib("__custom_adm.php"); // подгружаем файл __custom_adm.php с абстрактным классом __custom_adm_PrivateOffice
    $this->__implement("__custom_adm_PrivateOffice"); // подключаем методы класса __custom_adm_PrivateOffice - нужен для кастомизации админки
    } else {
    $this->__loadLib("__custom.php"); // подгружаем файл __custom.php, содержащий абстрактный класс __PrivateOffice_custom для клиентской части - нужен для кастомизации клиентской части
    $this->__implement("__PrivateOffice_custom"); // подключаем методы класса __PrivateOffice_custom
    }

    $this->__loadLib("__event_handlers.php"); // подгружаем файл __event_handlers.php и подключаем, хранящийся в нем методы абстрактного класса __PrivateOffice_handlers, в будущем это позволит нам более гибко использовать событийную модель, вынеся обработчик события в отдельный абстрактный класс
    $this->__implement("__PrivateOffice_handlers");

    // С конструктором покончено, все что мы хотели в него включить - включили
    // Чуть позже покажу как работать с реестром, хранить в нем ключи и их значения, использовать возможности "конфигурирования модуля" посредством админки

    }

    // Теперь нам нужно создать метод, вызываемый по умолчанию в клиентской части модуля
    public function view() { //Вспоминаем, что так мы его обозвали в инсталяторе (файл install.php), добавив вот эту строчку $INFO['default_method'] = "view";
    return "Hallow World - Мы находимся в клиентской части нашего модуля";
    }

    };
    ?>

     

    Произведенных нами действий достаточно, чтобы модуль заработал, теперь нужно его проинсталлировать:

    Проверяем работу модуля:

  9. Создание пустышки для административной части
  • Создание базового метода manage
  • Создание шаблона дизайна
  • Вывод «Hallow Admin – Ты находишься в админке модуля»

Открываем __admin.php и пишем в него следующий код

<?php
class __PrivateOffice_adm extends baseModuleAdmin {

// Теперь нам нужно создать метод, вызываемый по умолчанию в админке модуля
public function manage() { //Вспоминаем что так мы его обозвали в инсталяторе (файл install.php), добавив вот эту строчку $INFO['default_method_admin''] = "manage";

$params['config']['string:Hallow'] = (string) "Admin";

$this->setDataType("settings");
$this->setActionType("view");

$data = $this->prepareData($params, "settings");

$this->setData($data);
return $this->doData();
}
}
?>

 

Продолжение следует...

Читайте также:

Категории

Теги

xslt технологии документация шаблоны Служба Заботы партнеры мероприятия маркетинг веб студии москва UMI UMISummit события umisummit лицензии новинки UMI Edu UMI Cloud продукты UMI модуль Кейсы маркетинг обзоры business облако тегов кастомы uwdc Челябинск разработчики конференция Конкурс UMIRU exchange 28 Обмен данными 1C Интеграция с 1С версии UMICMS хостинг юмихост umihost UMICMS рейтинг MySQL разделение баз данных developer программинг менеджмент Алексей Самойлов Сергей Котырев KINETICA CMS Сибирская интернетнеделя видео UMIWorkshop интернетмагазин интернет-магазин интернет магазин интернет-маркетинг flash actionscript каталог анимация техподдержка tpl local scope macro кейсы итоги года SAPE seo мероприятие рынок веб разработки экономика Золотой сайт umi_workshop акция стратегия партнерская_программа партнерство highload РуПромо Машков версия 2_7 кэширование скорость стихи день рождения статьи пресс конференция версия 2_5 Edit_in_Place онлайн платежи кризис достижения CeBIT внедрения umi cms блоги верстка релиз EditInPlace изучение Юми создание модуля модули ReMIX UMI_CMS_Net iPhone XML драйвер как убрать лампочку форма обратной связи языковые версии CMS Pistols музыка UMICMS 28 удобство юзабилити usability user experience интерфейсы CMS Eye tracking ай тракинг usability test UXRussia управление сайтом RIW Russian internet week Softool выставки интернет клиенты сайты umisound cms pistols РИФ 2011 Tagline качество 2012 UMISound Полюса Илья Разин Марат Машков

Авторы блога