ЗадачаСоздать модуль "Hello World", который будет выводить текстовую строку "Hello World!". Текст можно изменить в настройках модуля. Модуль должен работать как в панели управления, так и на публичной части сайта. На публичной части сайта модуль должен иметь возможность работать как в режиме модуля, так и в режиме спецблока. Суть решенияПоскольку модуль обеспечивает простейший функционал и не требует наличия модели данных, для его реализации подойдет базовый гипермодуль ami_clean. С помощью генератора решений будет создана конфигурация базового гипермодуля будет называться hello_world. Для вывода текстовой строки будет использована пользовательская компонента типа "informer". Создание основы модуляИспользуя расширение Генератор решений, создадим дистрибутив со следующими параметрами: 
После добавления, файлы дистрибутива будут размещены в каталоге "_local/modules/data/ami_devtool/my.hello_world/". Cостав дистрибутиваДля реализации расширения нам потребуется следующее: 1) Код модуля для панели администратора - контроллер модуля
- контроллер компоненты
- отображение компоненты
2) Код модуля для публичной части сайта - контроллер модуля
- контроллер компоненты
- отображение компоненты
3) Мета-файл модуля 4) Конфигурация модуля (скелет экземпляра) - заготовки кода экземпляра модуля
- заготовки настроек и объявления экземпляра модуля
- заготовки шаблонов и файлов языковых переменных панели администратора
- заготовки шаблонов и файлов языковых переменных публичной части сайта
- заготовки языковых переменных диалога настройки экземпляра модуля
5) Манифест Все файлы расширения уже созданы Генератором дистрибутивов, и размещены в каталоге "_local/modules/data/ami_devtool/my.hello_world/": /code/ AmiClean_HelloWorld_Adm.php AmiClean_HelloWorld_Frn.php AmiClean_HelloWorld_Meta.php /distrib/configs/ami_clean/hello_world/code/ --modId--_Adm.php --modId--_Frn.php /distrib/configs/ami_clean/hello_world/declaration/ declaration.php options.php properties.php rules.php /distrib/configs/ami_clean/hello_world/templates/ --modId--_informer.tpl /distrib/configs/ami_clean/hello_world/templates_frn/
--modId--.tpl --modId–_messages.tpl /distrib/configs/ami_clean/hello_world/locales/ --modId--_informer.lng /distrib/configs/ami_clean/hello_world/locales_frn/ --modId--.lng /manifest.xml
Код модуля для панели администратора /code/AmiClean_HelloWorld_Adm.php
<?php
class AmiClean_HelloWorld_Adm extends Hyper_AmiClean_Adm{
public function __construct(AMI_Request $oRequest, AMI_Response $oResponse){
parent::__construct($oRequest, $oResponse);
$this->addComponents(array('informer'));
}
}
class AmiClean_HelloWorld_InformerAdm extends Hyper_AmiClean_ComponentAdm{
protected $useModel = false;
public function getType(){
return 'informer';
}
}
class AmiClean_HelloWorld_InformerViewAdm extends Hyper_AmiClean_ComponentViewAdm{
public function get(){
return $this->parse(
'informer',
array(
'text' => AMI::getOption(
$this->getModId(),
'informer_text'
)
)
);
}
}
|
Код модуля для публичной части сайта
/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' => AMI::getOption(
$this->getModId(),
'informer_text'
)
)
);
}
}
class AmiClean_HelloWorld_SpecblockFrn extends Hyper_AmiClean_ComponentFrn{
protected $useModel = false;
public function getType(){
return 'specblock';
}
}
class AmiClean_HelloWorld_SpecblockViewFrn extends Hyper_AmiClean_ComponentViewFrn{
public function get(){
return $this->parse(
'informer',
array(
'text' => AMI::getOption(
$this->getModId(),
'informer_text'
)
)
);
}
}
|
Мета-файл модуля/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',
)
)
),
'specblock' => array(
'obligatory' => FALSE,
'type' => self::CAPTION_TYPE_TEXT,
'locales' => array(
'ru' => array(
'name' => 'Название спецблока для менеджера сайта',
'caption' => 'Спецблок Hello World',
)
)
)
)
);
}
|
Настройки экземпляра модуля доступные для изменения через диалог настроек./distrib/configs/ami_clean/hello_world/declaration/options.php
<?php
if($oDeclarator->isRegistered('##modId##')){
$oMod = $oDeclarator->getModule('##modId##');
$oMod->setOption('informer_text', 'Hello World!');
}
|
Описание параметров настройки. /distrib/configs/ami_clean/hello_world/declaration/rules.php
<?php
$oMod = $oDeclarator->getModule('##modId##');
$oMod->addRule('informer_text', AMI_Module::RLT_STRING, array(), 'Hello World!');
$oMod->finalize();
}
|
Заготовки языковых переменных диалога настройки экземпляра модуляИз этих заготовок будут читаться языковые переменные соответствующих настроек в диалоге настройки экземпляра модуля. /distrib/configs/ami_clean/hello_world/rules/--modId–_rules_captions.lng
##--system info: module_owner="##section##" module="##modId##" system="1"--##
%%informer_text%en%%
Message text
%%informer_text%ru%%
Текст сообщения
|
Заготовки шаблонов и файлов языковых переменных панели администратораПоскольку
компонента типа "informer" не является системной, для нее не были
автоматически созданы шаблоны и языковые файлы. Их придется создать
вручную. Шаблон компоненты типа informer содержит управляющую строку и единственный сет "informer". /distrib/configs/ami_clean/hello_world/templates/--modId--_informer.tpl
##--system info: module_owner="##section##" module="##modId##" system="1"--##
<!--#set var="informer" value="<div>##text##</div>"-->
|
Файлы
языковых переменных компоненты и справочной информации содержат только
управляющую строку, поскольку ни то ни другое в данном модуле не
используется. /distrib/configs/ami_clean/hello_world/locales/--modId--_informer.lng
##--system info: module_owner="##section##" module="##modId##" system="1"--##
|
Заготовки шаблонов и файлов языковых переменных публичной части сайтаНа публичной части сайта для вывода и тела модуля и спецблоков используется единый шаблон - шаблон модуля. /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 файл дистрибутива.
|