ЗадачаСоздать модуль "Hello World", который будет выводить текстовую строку "Hello World!". Модуль должен работать на публичной части сайта. Суть решенияОпределим основу и состав модуля. С использованием инструмента Генератор решений создадим дистрибутив с соответствующей конфигурацией. Для
вывода текстовой строки будет использована пользовательская компонента
типа "informer". Создадим классы контроллера компоненты и ее отображения
для публичной части сайта, создадим шаблон компоненты.
Далее, рассмотрим эти шаги более подробно. Определяем основу модуля и состав дистрибутиваПоскольку модуль обеспечивает простейший функционал и не требует наличия модели данных, для его реализации подойдет базовый гипермодуль ami_clean. Создаваемая в этом примере конфигурация базового гипермодуля будет называться hello_world. Файлы PHP кода модуля Amiro.CMS префиксуются как ИмяГипермодуляCamelCase_ИмяКонфигурацииCamelCase_, соответственно файлы с кодом данного модуля будут иметь префикс AmiClean_HelloWorld. Создание основы модуляИспользуя расширение Генератор расширений, создадим дистрибутив со следующими параметрами: 
После добавления, файлы дистрибутива будут размещены в каталоге "_local/modules/data/ami_devtool/my.hello_world/". Cостав дистрибутиваДля реализации расширения нам потребуется следующее: 1) Код модуля для публичной части сайта - контроллер модуля
- контроллер компоненты
- отображение компоненты
2) Мета-файл модуля 3) Конфигурация модуля (скелет экземпляра) - заготовки кода экземпляра модуля
- заготовки настроек и объявления экземпляра модуля
- заготовки шаблонов и файлов языковых переменных публичной части сайта
4) Манифест Все файлы расширения уже созданы Генератором решений, и размещены в каталоге "_local/modules/data/{genModId}/my.hello_world/": /code/ AmiClean_HelloWorld_Frn.php AmiClean_HelloWorld_Meta.php /distrib/configs/ami_clean/hello_world/code/ --modId--_Frn.php /distrib/configs/ami_clean/hello_world/declaration/ declaration.php properties.php
/distrib/configs/ami_clean/hello_world/templates_frn/ --modId--.tpl /distrib/configs/ami_clean/hello_world/locales_frn/ --modId--.lng /manifest.xml
Код модуля для публичной части сайта/code/AmiClean_HelloWorld_Frn.php
<?php
class AmiClean_HelloWorld_Frn extends Hyper_AmiClean_Frn{
public function __construct(AMI_Request $oRequest, AMI_Response $oResponse){
$this->setDefaultBodyType('informer');
parent::__construct($oRequest, $oResponse);
$this->addComponents(array('informer'));
}
}
class AmiClean_HelloWorld_InformerFrn extends Hyper_AmiClean_ComponentFrn{
protected $useModel = false;
public function getType(){
return 'informer';
}
}
class AmiClean_HelloWorld_InformerViewFrn extends Hyper_AmiClean_ComponentViewFrn{
public function get(){
return $this->parse(
'informer',
array(
'text' => 'HELLO WORLD!'
)
);
}
}
|
Мета-файл модуля/code/AmiClean_HelloWorld_Meta.php
<?php
class AmiClean_HelloWorld_Meta extends AMI_HyperConfig_Meta{
protected $version = '1.0';
protected $isSingleInstance = FALSE;
protected $aTitle = array(
'ru' => 'Hello World'
);
protected $aInfo = array(
'ru' => array(
'description' => 'Описание модуля',
'author' => 'Разработчик'
)
);
protected $aCaptions = array(
'' => array(
'header' => array(
'obligatory' => TRUE,
'type' => self::CAPTION_TYPE_STRING,
'locales' => array(
'ru' => array(
'name' => 'Заголовок',
'caption' => 'HELLO WORLD',
)
)
),
'menu' => array(
'obligatory' => TRUE,
'type' => self::CAPTION_TYPE_STRING,
'locales' => array(
'ru' => array(
'name' => 'Заголовок для меню',
'caption' => 'Hello World',
)
)
),
'description' => array(
'obligatory' => FALSE,
'type' => self::CAPTION_TYPE_TEXT,
'locales' => array(
'ru' => array(
'name' => 'Описание модуля для стартовой страницы интерфейса администратора',
'caption' => 'Описание модуля Hello World',
)
)
),
)
);
}
|
Заготовки шаблонов и файлов языковых переменных публичной части сайтаНа публичной части сайта для вывода и тела модуля и спецблоков используется единый шаблон - шаблон модуля. /distrib/configs/ami_clean/hello_world/templates_frn/--modId--.tpl
##--system info: module_owner="##section##" module="##modId##" system="1"--##
<!--#set var="informer" value="<div class="informer_front">##text##</div>"-->
|
МанифестПоследний, но самый необходимый элемент дистрибутива - манифест. Без манифеста установка дистрибутива невозможна.
<?xml version="1.0" encoding="utf-8"?>
<package id="my.hello_world" version="1.0" manifestVersion="1.0">
<information lang="en">
<!-- Информация о дистрибутиве на английском языке -->
<title>My Hello World module</title>
<description>Amiro.CMS sample module</description>
<author>Author</author>
<source>http:
</information>
<information lang="ru">
<!-- Информация о дистрибутиве на русском языке -->
<title>Мой модуль Hello World</title>
<description>Демонстрационный модуль Amiro.CMS</description>
<author>Автор</author>
<source>http:
</information>
<installation>
<!-- Гипермодуль, имя конфигурации гипермодуля, и версия конфигурации -->
<install hypermodule="ami_clean" configuration="hello_world" version="1.0" />
</installation>
<dependencies>
<!-- Данный модуль для установки требует наличия гипермодуля ami_clean версии 1.0 -->
<dependency hypermodule="ami_clean" version="1.0" />
</dependencies>
</package>
|
На этом разработку модуля "Hello World" и его дистрибутива можно считать завершенной. Расширение может быть установлено через действие модуля Генератор решений. Там же можно скачать tar.gz файл дистрибутива.
|