Центр документации
Карта сайта

Создай визитку сам!


Самоучитель по интеграции дизайна и настройке Amiro.CMS на примере демонстрационной версии пакета Визитка »


Дистрибутивы, не имеющие экземпляров модулей

Некоторые компоненты системы не имеют экземпляров модулей как таковых, например:

  • платежные драйверы;
  • драйверы авторизации в сторонних приложениях (социальных сетях);
  • гаджеты визуального редактора;
  • драйверы модуля импорта данных.

Рассмотрим создание такого дистрибутива на примере гаджета "Спойлер" для визуального редактора.

Пусть условная конфигурация идентифицируется как "ami_fake/ami_spoiler_gadget".

Минимально необходимая структура дистрибутива:

  • "code/AmiFake_AmiSpoilerGadget_Meta.php" - метаданные дистрибутива;
  • "distrib/configs/ami_fake/ami_spoiler_gadget/install.php" - код, исполняемый при инсталляции дистрибутива;
  • "distrib/configs/ami_fake/ami_spoiler_gadget/uninstall.php" - код, исполняемый при деинсталляции дистрибутива в режиме сохранения данных и локального PHP-кода;
  • "distrib/configs/ami_fake/ami_spoiler_gadget/uninstall_all.php" - код, исполняемый при деинсталляции дистрибутива в режиме удаления данных и локального PHP-кода;
  • "manifest.xml" - манифест.

Остальные файлы:

  • "distrib/configs/ami_fake/gadget_ami_spoiler.jpg" - иконка гаджета;
  • "distrib/configs/ami_fake/ami_spoiler.tpl" - шаблон гаджета;
  • "distrib/configs/ami_fake/ami_spoiler_parameters.tpl" - шаблон параметров гаджета;
  • "distrib/configs/ami_fake/gadgets.lng" - локализация.

 

  1. Файл с манифестом

    "manifest.xml"
    <?xml version="1.0" encoding="utf-8"?>
    <package id="amiro.ami_spoiler_gadget" version="1.0" manifestVersion="1.0">
        <information lang="en">
            <title>Visual Editor "Spoiler" gadget</title>
            <description>Visual Editor "Spoiler" gadget</description>
            <author>Amiro.CMS</author>
            <source>http://www.amirocms.com</source>
        </information>
        <information lang="ru">
            <title>Гаджет "Спойлер" для визуального редактора</title>
            <description>Гаджет "Спойлер" для визуального редактора</description>
            <author>Amiro.CMS</author>
            <source>http://www.amiro.ru</source>
        </information>
        <installation>
            <install hypermodule="ami_fake" configuration="ami_spoiler_gadget" version="1.0" />
        </installation>
        <dependencies>
            <dependency hypermodule="ami_fake" version="1.0" />
        </dependencies>
    </package>

    Манифест дистрибутива, не имеющего экземпляров модулей, не содержит тегов <contents>...</contents>.

  2. Файл с метаданными конфигурации

    "code/AmiFake_AmiSpoilerGadget_Meta.php"
    <?php
    /**
     * AmiFake/AmiSpoilerGadget configuration.
     *
     * @copyright Amiro.CMS. All rights reserved.
     * @package   Config_AmiFake_AmiSpoilerGadget
     * @since     5.14.10
     */
     
    /**
     * AmiFake/AmiSpoilerGadget configuration metadata.
     *
     * @package    Config_AmiFake_AmiSpoilerGadget
     * @subpackage Model
     * @since      5.14.10
     */
    class AmiFake_AmiSpoilerGadget_Meta extends AMI_HyperConfig_Meta{
        /**
         * Version
         *
         * @var string
         */
        protected $version = '1.0';
     
        /**
         * Flag specifying that hypermodule configs can have only one instance per config
         *
         * @var bool
         */
        protected $isSingleInstance = TRUE;
     
       /**
         * Array having locales as keys and captions as values
         *
         * @var array
         */
        protected $aTitle = array(
            'en' => 'Visual Editor "Spoiler" gadget',
            'ru' => 'Гаджет "Спойлер" для визуального редактора'
        );
     
        /**
         * Array having locales as keys and meta data as values
         *
         * @var array
         */
        protected $aInfo = array(
            'en' => array(
                'description' => 'Visual Editor "Spoiler" gadget',
                'author'      => '<a href="http://www.amirocms.com" target="_blank">Amiro.CMS</a>'
            ),
            'ru' => array(
                'description' => 'Гаджет "Спойлер" для визуального редактора',
                'author'      => '<a href="http://www.amiro.ru" target="_blank">Amiro.CMS</a>'
            )
        );
     
        /**
         * Retrurns allowed installation/uninstallation modes.
         *
         * @param  string $type  Possible values: 'install' / 'uninstall' / '' (all)
         * @return array
         */
        public function getAllowedModes($type = ''){
             $aModes = parent::getAllowedModes();
             unset($aModes['uninstall']['soft']);
             return
                 $type === '' ? $aModes : $aModes[$type];
        }
    }

    Все описанные свойства класса, за исключением $isSingleInstance, для нашего случая являются обязательными.

  3. PHP-скрипт, исполняемый при инсталляции дистрибутива

    "install.php"
    <?php
    /**
     * @copyright Amiro.CMS. All rights reserved.
     * @package   Config_AmiFake_AmiSpoilerGadget
     */
     
    $oStorage = AMI::getResource('storage/fs');
    $oTplStorage = AMI::getResource('storage/tpl');
     
    $srcPath = dirname(__FILE__) . '/';
    $destPath = AMI_Registry::get('path/root') . '_local/';
     
    // Copy icon
    // Копируем иконку гаджета из дистрибутива в нужное место
     
    $file = 'gadget_ami_spoiler.jpg';
    $this->aTx['storage']->addCommand(
        'storage/copy',
        new AMI_Tx_Cmd_Args(
            array(
                'mode'     => AMI_iTxCmd::MODE_APPEND,
                'source'   => $srcPath . $file,
                'target'   => AMI_Registry::get('path/root') . '_mod_files/ce_images/gadgets/' . $file,
                'oStorage' => $oStorage
            )
        )
    );
     
    // Patch "_local/_admin/templates/lang/gadgets.lng" locale (in fs and db)
    // Дописываем в файл локализацию гаджета (в файловую систему и БД)
     
    $file = 'gadgets.lng';
    foreach(
        array(
            AMI_Registry::get('path/root') => $oStorage,
            ''                             => $oTplStorage
        ) as $dest => $oTmpStorage
    ){
        $this->aTx['storage']->addCommand(
            'tpl/install',
            new AMI_Tx_Cmd_Args(
                array(
                    'mode'      => $this->mode,
                    'modId'     => $this->modId,
                    'target'    => $dest . AMI_iTemplate::LOCAL_LNG_PATH . '/' . $file,
                    'content'   => $oStorage->load($srcPath . $file),
                    'oStorage'  => $oTmpStorage,
                )
            )
        );
    }
    unset($oTmpStorage);
     
    // Copy templates to disk storage
    // Копируем шаблоны гаджета из дистрибутива в нужное место
     
    foreach(
        array(
            'ami_spoiler.tpl',
            'ami_spoiler_parameters.tpl'
        ) as $file
    ){
        $this->aTx['storage']->addCommand(
            'storage/copy',
     new AMI_Tx_Cmd_Args(
                array(
                    'mode'     => AMI_iTxCmd::MODE_APPEND,
                    'source'   => $srcPath . $file,
                    'target'   => AMI_Registry::get('path/root') . AMI_iTemplate::LOCAL_TPL_PATH . '/gadgets/' . $file,
                    'oStorage' => $oStorage
                )
            )
        );
    }
  4. PHP-скрипт, исполняемый при деинсталляции дистрибутива

    "uninstall_all.php"
     <?php
    /**
     * Script executing on hard uninstalling.
     *
     * @copyright Amiro.CMS. All rights reserved.
     * @package   Config_AmiFake_AmiSpoilerGadget
     */
     
    $oStorage = AMI::getResource('storage/fs');
    $oTplStorage = AMI::getResource('storage/tpl');
     
    $srcPath = dirname(__FILE__) . '/';
    $destPath = AMI_Registry::get('path/root') . '_local/';
     
    // Delete templates from disk storage
    // Удаляем шаблоны гаджета
     
    $path = AMI_Registry::get('path/root') . AMI_iTemplate::LOCAL_TPL_PATH . '/gadgets/';
    $oStorage->delete($path . 'ami_spoiler_parameters.tpl');
    $oStorage->delete($path . 'ami_spoiler.tpl');
     
    // Patch "_local/_admin/templates/lang/gadgets.lng" locale (in fs and db)
    // Удаляем локализацию гаджета (из файловой системы и БД)
     
    $file = 'gadgets.lng';
    foreach(
        array(
            AMI_Registry::get('path/root') => $oStorage,
            ''                             => $oTplStorage
        ) as $dest => $oTmpStorage
    ){
        $this->aTx['storage']->addCommand(
            'tpl/uninstall',
     new AMI_Tx_Cmd_Args(
                array(
                    'mode'      => $this->mode,
                    'modId'     => $this->modId,
                    'target'    => $dest . AMI_iTemplate::LOCAL_LNG_PATH . '/' . $file,
                    'oStorage'  => $oTplStorage,
                )
            )
        );
    }
    unset($oTmpStorage);
     
    // Delete icon
    // Удаляем иконку
     
    $oStorage->delete(
        AMI_Registry::get('path/root') . '_mod_files/ce_images/gadgets/gadget_ami_spoiler.jpg'
    );
  5. Файл с локализацией

    "gadgets.lng"
    %%ami_spoiler%en%%
    Spoiler
    %%ami_spoiler%ru%%
    Спойлер
    %%ami_spoiler_author%en%%
    Amiro.CMS
    %%ami_spoiler_author%ru%%
    Amiro.CMS
    %%ami_spoiler_url%en%%
    http://www.amirocms.com
    %%ami_spoiler_url%ru%%
    http://www.amiro.ru
     
    %%ami_spoiler_description%en%%
    Visual Editor &quot;Spoiler&quot; gadget
    %%ami_spoiler_description%ru%%
    Гаджет &quot;Спойлер&quot; для визуального редактора
     
    %%ami_spoiler_content%en%%
    Content
    %%ami_spoiler_content%ru%%
    Содержимое
     
    %%ami_spoiler_header%en%%
    Spoiler
    %%ami_spoiler_header%ru%%
    Спойлер
  6.  Шаблон гаджета

    "ami_spoiler.tpl"
    <div class="amiSpoilerConatiner" style="border: 1px dotted #000;">
    <div class="amiSpoilerHeader" style="cursor: pointer; font-weight: bold; padding: 2px;" onclick="top.AMI.$(this).next().toggle();">%%ami_spoiler_header%%</div>
    <div class="amiSpoilerContent" style="display: none; background-color: #eee; padding: 2px;">##ami_spoiler_content##</div>
    </div>
  7. Шаблон параметров гаджета

    "ami_spoiler_parameters.tpl"
    %%ami_spoiler_content%%:<br />
    <textarea name="ami_spoiler_content" style="width: 550px; height: 300px;"></textarea>

API транзакционных команд, используемых при инсталляции/деинсталляции: http://manual.amiro.ru/docs/api6/li_TxCommand.html

API для инсталляции/деинсталляции модулей из кода: http://manual.amiro.ru/docs/api6/li_TxService.html

Установка и настройка Руководство пользователя Интеграция дизайна Разработчикам (API)
 2000 – 2019 © Amiro.CMS Все права защищены.