Follow me on...

  • FeedBurner: Joomla15Joomla15
  • Twitter: alexkurgan

Создание файла сценария установки/удаления/обновления

E-mail Печать

При установке, обновлении или удалении компонента могут потребоваться дополнительные операции, которые не обеспечиваются основными операциями, описанными в основном файле xml.  

Joomla! предлагает новый подход к решению этой проблемы. Он заключается в использовании файла сценария, содержащего класс с именем вида com_ИмяКомпонентаInstallerScript, в котором используются пять методов:

  • preflight, выполняется перед установкой или обновлением
  • install
  • update
  • uninstall
  • postflight, который выполняется после установки и обновления.

Создайте файл script.php со следующим кодом:

<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
/**  * Script file of HelloWorld component  */
class com_helloWorldInstallerScript
{
 /**  * method to install the component  *  * @return void  */
 function install($parent) 
 {
 // $parent is the class calling this method
 $parent->getParent()->setRedirectURL('index.php?option=com_helloworld');
 }
 
 /**  * method to uninstall the component  *  * @return void  */
 function uninstall($parent) 
 {
 // $parent is the class calling this method
 echo '<p>' . JText::_('COM_HELLOWORLD_UNINSTALL_TEXT') . '</p>';
 }
 
 /**  * method to update the component  *  * @return void  */
 function update($parent) 
 {
 // $parent is the class calling this method
 echo '<p>' . JText::sprintf('COM_HELLOWORLD_UPDATE_TEXT', $parent->get('manifest')->version) . '</p>';
 }
 
 /**  * method to run before an install/update/uninstall method  *  * @return void  */
 function preflight($type, $parent) 
 {
 // $parent is the class calling this method
 // $type is the type of change (install, update or discover_install)
 echo '<p>' . JText::_('COM_HELLOWORLD_PREFLIGHT_' . $type . '_TEXT') . '</p>';
 }
 
 /**  * method to run after an install/update/uninstall method  *  * @return void  */
 function postflight($type, $parent) 
 {
 // $parent is the class calling this method
 // $type is the type of change (install, update or discover_install)
 echo '<p>' . JText::_('COM_HELLOWORLD_POSTFLIGHT_' . $type . '_TEXT') . '</p>';
 }
}

Этот скрипт после установки будет направлять пользователя в наш компонент com_helloworld, а при обновлении или удалении – выводить соответствующее сообщение. При обновлении мы показываем новую версию, используя $parent->get('manifest')->version.

Измените языковые файлы:

admin/language/en-GB/en-GB.com_helloworld.sys.ini

COM_HELLOWORLD="Hello World!"
COM_HELLOWORLD_DESCRIPTION="This is the Hello World description"
COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_TITLE="Hello World"
COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_DESC="This view displays a selected message"
COM_HELLOWORLD_MENU="Hello World!"
COM_HELLOWORLD_INSTALL_TEXT="HelloWorld Install script"
COM_HELLOWORLD_POSTFLIGHT_DISCOVER_INSTALL_TEXT="HelloWorld postlight discover install script"
COM_HELLOWORLD_POSTFLIGHT_INSTALL_TEXT="HelloWorld postflight install script"
COM_HELLOWORLD_POSTFLIGHT_UNINSTALL_TEXT="HelloWorld postflight uninstall script"
COM_HELLOWORLD_POSTFLIGHT_UPDATE_TEXT="HelloWorld postflight update script"
COM_HELLOWORLD_PREFLIGHT_DISCOVER_INSTALL_TEXT="HelloWorld preflight discover install script"
COM_HELLOWORLD_PREFLIGHT_INSTALL_TEXT="HelloWorld preflight install script"
COM_HELLOWORLD_PREFLIGHT_UNINSTALL_TEXT="HelloWorld preflight uninstall script"
COM_HELLOWORLD_PREFLIGHT_UPDATE_TEXT="HelloWorld preflight update script"
COM_HELLOWORLD_UNINSTALL_TEXT="HelloWorld Uninstall script"
COM_HELLOWORLD_UPDATE_TEXT="HelloWorld Update script. HelloWorld now updated to version %s."

 admin/language/ru-RU/ru-RU.com_helloworld.sys.ini

COM_HELLOWORLD="Привет МИР!!!"
COM_HELLOWORLD_DESCRIPTION="Это описание нашего компонента Привет МИР!"
COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_TITLE="Привет Мир"
COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_DESC="Выберите вариант отображения"
COM_HELLOWORLD_MENU="Привет Мир!"
COM_HELLOWORLD_INSTALL_TEXT="HelloWorld Install script"
COM_HELLOWORLD_POSTFLIGHT_DISCOVER_INSTALL_TEXT="HelloWorld postlight discover install script"
COM_HELLOWORLD_POSTFLIGHT_INSTALL_TEXT="HelloWorld postflight install script"
COM_HELLOWORLD_POSTFLIGHT_UNINSTALL_TEXT="HelloWorld postflight uninstall script"
COM_HELLOWORLD_POSTFLIGHT_UPDATE_TEXT="HelloWorld postflight update script"
COM_HELLOWORLD_PREFLIGHT_DISCOVER_INSTALL_TEXT="HelloWorld preflight discover install script"
COM_HELLOWORLD_PREFLIGHT_INSTALL_TEXT="HelloWorld preflight install script"
COM_HELLOWORLD_PREFLIGHT_UNINSTALL_TEXT="HelloWorld preflight uninstall script"
COM_HELLOWORLD_PREFLIGHT_UPDATE_TEXT="HelloWorld preflight update script"
COM_HELLOWORLD_UNINSTALL_TEXT="HelloWorld Uninstall script"
COM_HELLOWORLD_UPDATE_TEXT="HelloWorld Update script. HelloWorld now updated to version %s."

В файл helloworld.xml после строки:

<description>COM_HELLOWORLD_DESCRIPTION</description>

добавьте следующие строки:

<!-- Runs on install/uninstall/update; New in 2.5 -->
<scriptfile>script.php</scriptfile>

Создайте архив с компонентом, установите его на сайт.

zipСкачать архив для этой части курса

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Mark
 
Интересная статья? Поделись ей с другими: