ЗадачаСоздать модуль "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 файл дистрибутива.
|