Actions

J2.5

Difference between revisions of "Developing a MVC Component/Adding an install-uninstall-update script file"

From Joomla! Documentation

< J2.5:Developing a MVC Component
(Creating the extension script file)
Line 20: Line 20:
 
Writing an extension script consists in declaring an class whose name is ''com_'''ComponentName'''InstallerScript'' with these 5 methods.
 
Writing an extension script consists in declaring an class whose name is ''com_'''ComponentName'''InstallerScript'' with these 5 methods.
  
 +
<span id="script.php">
 +
''script.php''
 +
<source language="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::_('COM_HELLOWORLD_UPDATE_TEXT') . '</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>';
 +
}
 +
}
 +
</source>
 +
</span>
 
== Packaging the component ==
 
== Packaging the component ==
  
Line 110: Line 181:
 
<!-- The description is optional and defaults to the name -->
 
<!-- The description is optional and defaults to the name -->
 
<description>COM_HELLOWORLD_DESCRIPTION</description>
 
<description>COM_HELLOWORLD_DESCRIPTION</description>
 +
 +
<!-- Runs on install/uninstall/update; New in 1.6 -->
 +
<scriptfile>script.php</scriptfile>
  
 
<install> <!-- Runs on install -->
 
<install> <!-- Runs on install -->

Revision as of 19:40, 1 December 2010

Documentation all together tranparent small.png
Under Construction

This article or section is in the process of an expansion or major restructuring. You are welcome to assist in its construction by editing it as well. If this article or section has not been edited in several days, please remove this template.
This article was last edited by Cdemko (talk| contribs) 3 years ago. (Purge)

Template:Future

Articles in this series


Introduction

This tutorial is part of the Developing a Model-View-Controller (MVC) Component for Joomla!1.6 tutorial. You are encouraged to read the previous parts of the tutorial before reading this.


Creating the extension script file

Installing, updating and uninstalling a component may require additional operations that cannot be achieved by the basic operations described in the main xml file. Joomla 1.6 offers a new approach to solve this problem. It consists in using a php script file containing a class using five methods:

  • preflight which is executed before install and update
  • install
  • update
  • uninstall
  • postflight which is executed after install and update

Writing an extension script consists in declaring an class whose name is com_ComponentNameInstallerScript with these 5 methods.

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::_('COM_HELLOWORLD_UPDATE_TEXT') . '</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>';
        }
}

Packaging the component

Content of your code directory

Create a compressed file of this directory or directly download the archive and install it using the extension manager of Joomla!1.6. You can add a menu item of this component using the menu manager in the backend.

helloworld.xml

<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="1.6.0" method="upgrade">
 
        <name>COM_HELLOWORLD</name>
        <!-- The following elements are optional and free of formatting conttraints -->
        <creationDate>November 2009</creationDate>
        <author>John Doe</author>
        <authorEmail>john.doe@example.org</authorEmail>
        <authorUrl>http://www.example.org</authorUrl>
        <copyright>Copyright Info</copyright>
        <license>License Info</license>
        <!--  The version string is recorded in the components table -->
        <version>0.0.15</version>
        <!-- The description is optional and defaults to the name -->
        <description>COM_HELLOWORLD_DESCRIPTION</description>
 
        <!-- Runs on install/uninstall/update; New in 1.6 -->
        <scriptfile>script.php</scriptfile>
 
        <install> <!-- Runs on install -->
                <sql>
                        <file driver="mysql" charset="utf8">sql/install.mysql.utf8.sql</file>
                </sql>
        </install>
        <uninstall> <!-- Runs on uninstall -->
                <sql>
                        <file driver="mysql" charset="utf8">sql/uninstall.mysql.utf8.sql</file>
                </sql>
        </uninstall>
        <update> <!-- Runs on update; New in 1.6 -->
                <schemas>
                        <schemapath type="mysql">sql/updates/mysql</schemapath>
                </schemas>
        </update>
 
        <!-- Site Main File Copy Section -->
        <!-- Note the folder attribute: This attribute describes the folder
                to copy FROM in the package to install therefore files copied
                in this section are copied from /site/ in the package -->
        <files folder="site">
                <filename>index.html</filename>
                <filename>helloworld.php</filename>
                <filename>controller.php</filename>
                <folder>views</folder>
                <folder>models</folder>
                <folder>language</folder>
        </files>
 
        <media destination="com_helloworld" folder="media">
                <filename>index.html</filename>
                <folder>images</folder>
        </media>
 
        <administration>
                <!-- Administration Menu Section -->
                <menu img="../media/com_helloworld/images/tux-16x16.png">COM_HELLOWORLD_MENU</menu>
                <!-- Administration Main File Copy Section -->
                <!-- Note the folder attribute: This attribute describes the folder
                        to copy FROM in the package to install therefore files copied
                        in this section are copied from /admin/ in the package -->
                <files folder="admin">
                        <!-- Admin Main File Copy Section -->
                        <filename>index.html</filename>
                        <filename>config.xml</filename>
                        <filename>access.xml</filename>
                        <filename>script.php</filename>
                        <filename>helloworld.php</filename>
                        <filename>controller.php</filename>
                        <!-- SQL files section -->
                        <folder>sql</folder>
                        <!-- tables files section -->
                        <folder>tables</folder>
                        <!-- models files section -->
                        <folder>models</folder>
                        <!-- views files section -->
                        <folder>views</folder>
                        <!-- controllers files section -->
                        <folder>controllers</folder>
                        <!-- helpers files section -->
                        <folder>helpers</folder>
                </files>
 
                <languages folder="admin">
                        <language tag="en-GB">language/en-GB/en-GB.com_helloworld.ini</language>
                        <language tag="en-GB">language/en-GB/en-GB.com_helloworld.sys.ini</language>
                </languages>
        </administration>
 
</extension>

Navigate

Prev: Adding ACL Next: Adding an update server

Contributors

Bold text