Developing a Model-View-Controller (MVC) Component for Joomla!1.6 – Part 04

http://docs.joomla.org

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.

Adding a model

In the Joomla!1.6 framework, models are responsible for managing the data. The first function that has to be written for a model is a get function. It returns data to the caller. In our case, the caller will be the HelloWorldViewHelloWorld view. By default, the model named HelloWorldModelHelloWorld is the main model associated to this view. with your favorite file manager and editor put a site/models/helloworld.php file containing:

site/models/helloworld.php

<?php  // No direct access to this file  defined('_JEXEC') or die('Restricted access');     // import Joomla modelitem library  jimport('joomla.application.component.modelitem');     /**   * HelloWorld Model   */  class HelloWorldModelHelloWorld extends JModelItem  {  	/**  	 * @var string msg  	 */  	protected $msg;     	/**  	 * Get the message  	 * @return string The message to be displayed to the user  	 */  	public function getMsg()   	{  		if (!isset($this->msg))   		{  			$this->msg = 'Hello World!';  		}  		return $this->msg;  	}  }  

The HelloWorldViewHelloWorld class asks the model for data using the get method of the JView class:

site/views/helloworld/view.html.php

<?php  // No direct access to this file  defined('_JEXEC') or die('Restricted access');     // import Joomla view library  jimport('joomla.application.component.view');     /**   * HTML View class for the HelloWorld Component   */  class HelloWorldViewHelloWorld extends JView  {  	// Overwriting JView display method  	function display($tpl = null)   	{  		// Assign data to the view  		$this->msg = $this->get('Msg');     		// Check for errors.  		if (count($errors = $this->get('Errors')))   		{  			JError::raiseError(500, implode('<br />', $errors));  			return false;  		}  		// Display the view  		parent::display($tpl);  	}  }  

Also modify your helloworld.xml file to indicate use of models and the new version:

helloworld.xml

<?xml version="1.0" encoding="utf-8"?>  <extension type="component" version="1.6.0" method="upgrade">     	<name>Hello World!</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.4</version>  	<!-- The description is optional and defaults to the name -->  	<description>Description of the Hello World component ...</description>     	<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>  	</files>     	<administration>  		<!-- Administration Menu Section -->  		<menu>Hello World!</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>helloworld.php</filename>  			<!-- SQL files section -->  			<folder>sql</folder>  		</files>  	</administration>     </extension>  

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.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s