J3.x

Desarrollo de un Componente MVC/Agregar un modelo a la parte del sitio

From Joomla! Documentation

< J3.x:Developing an MVC Component
This page is a translated version of the page J3.x:Developing an MVC Component/Adding a model to the site part and the translation is 100% complete.

Other languages:
العربية • ‎English • ‎español • ‎français • ‎Nederlands
Joomla! 
3.x
Tutorial
Desarrollo de un Componente MVC


Esta es una serie multi-artículos de tutoriales sobre cómo desarrollar un Componente Modelo-Vista-Controlador para Joomla! VersiónJoomla 3.x.

Comenzar con la Introducción, y navegar por los artículos de esta serie usando el botón de navegación en la parte inferior o en el cuadro de la derecha (los "Artículos de esta serie").



Nota

  • Puedes seguir los pasos que hay a continuación para agregar un modelo componente Hello World! o puedes descargar directamente el archivo

Agregar un Modelo a Hello World!

En este artículo vamos a cubrir cómo añadir un modelo a un componente básico de Joomla!. Para este ejemplo vamos a continuar nuestro trabajo con el componente Hello World!.

Hay varias formas de actualizar un componente Joomla!. En este tutorial nos vamos a centrar en la opción 2.

1 Agregar manualmente los archivos en <path_to_joomla>/
2 Actualizar usando el Gestor de Extensiones de Joomla! y el directorio original, no comprimido, utilizado a la instalación de componentes
3 Actualizar usando el Gestor de Extensiones de Joomla! y un Servidor de Actualización

Para agregar un modelo, tendrás que navegar a com_helloworld, que es el directorio original que hemos hecho para nuestro componente. Debes utilizar el directorio actualizado de la estructura del último tutorial. Utilizando tu administrador de archivos preferido, crea o actualiza los siguientes archivos; tanto en crear o actualizar los archivos, agrega el código fuente para cada archivo que se encuentra en Detalles de los Archivos.

1 Crear: helloworld.php <path_to_com_helloworld>/site/models/helloworld.php
2 Crear: index.html <path_to_com_helloworld>/site/models/index.html
3 Actualizar: view.html.php <path_to_com_helloworld>/site/views/helloworld/view.html.php
4 Actualizar: helloworld.xml <path_to_com_helloworld>/helloworld.xml

Actualizar el Componente Hello World!

Para actualizar el Componente Hello World! en el sitio web Joomla!, por favor, sigue los mismos pasos que para la instalación original.

Detalle de los Archivos

site/models/helloworld.php

<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_helloworld
 *
 * @copyright   Copyright (C) 2005 - 2018 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

// No direct access to this file
defined('_JEXEC') or die('Restricted access');

/**
 * HelloWorld Model
 *
 * @since  0.0.1
 */
class HelloWorldModelHelloWorld extends JModelItem
{
	/**
	 * @var string message
	 */
	protected $message;

	/**
	 * Get the message
         *
	 * @return  string  The message to be displayed to the user
	 */
	public function getMsg()
	{
		if (!isset($this->message))
		{
			$this->message = 'Hello World!';
		}

		return $this->message;
	}
}

site/views/helloworld/view.html.php

<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_helloworld
 *
 * @copyright   Copyright (C) 2005 - 2018 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

// No direct access to this file
defined('_JEXEC') or die('Restricted access');

/**
 * HTML View class for the HelloWorld Component
 *
 * @since  0.0.1
 */
class HelloWorldViewHelloWorld extends JViewLegacy
{
	/**
	 * Display the Hello World view
	 *
	 * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
	 *
	 * @return  void
	 */
	function display($tpl = null)
	{
		// Assign data to the view
		$this->msg = $this->get('Msg');

		// Check for errors.
		if (count($errors = $this->get('Errors')))
		{
			JLog::add(implode('<br />', $errors), JLog::WARNING, 'jerror');

			return false;
		}

		// Display the view
		parent::display($tpl);
	}
}

helloworld.xml

<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="3.0" method="upgrade">

	<name>Hello World!</name>
	<!-- The following elements are optional and free of formatting constraints -->
	<creationDate>January 2018</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 since J2.5 -->
		<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 link='index.php?option=com_helloworld'>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>


Explicación Del Código

En caso que seas curioso en cuanto a por qué esto funciona de la manera que lo hace.

helloworld.php

class HelloWorldModelHelloWorld extends JModelItem
{

Esta clase será llamada por la clase HelloWorldViewHelloWorld.

view.html.php

$this->msg = $this->get('Msg');

La clase HelloWorldViewHelloWorld pide al modelo datos utilizando el método get de JViewLegacy. Este método get convierte la llamada get('Msg') en una llamada getMsg() en el modelo, que es la función que hemos tenido que proporcionar.

Contenidos del componente

En este punto del tutorial, el componente debe contener los siguientes archivos:

1 helloworld.xml este es un archivo XML (manifiesto) que le indica a Joomla! cómo instalar nuestro componente.
2 site/helloworld.php este es el punto de entrada del componente Hello World! en el sitio
3 site/index.html evita que se liste el contenido del directorio del servidor web
4 site/controller.php archivo que representa al controlador
5 site/models/helloworld.php archivo que representa al modelo
6 site/models/index.html evita que se liste el contenido del directorio del servidor web
7 site/views/index.html evita que se liste el contenido del directorio del servidor web
8 site/views/helloworld/index.html evita que se liste el contenido del directorio del servidor web
9 site/views/helloworld/view.html.php archivo que representa la vista
10 site/views/helloworld/tmpl/index.html evita que se liste el contenido del directorio del servidor web
11 site/views/helloworld/tmpl/default.php la vista predeterminada
12 site/views/helloworld/tmpl/default.xml archivo que agrega el elemento del menú
13 admin/index.html evita que se liste el contenido del directorio del servidor web
14 admin/helloworld.php este es el punto de entrada del componente Hello World! en el administrador
15 admin/sql/index.html evita que se liste el contenido del directorio del servidor web
16 admin/sql/updates/index.html evita que se liste el contenido del directorio del servidor web
17 admin/sql/updates/mysql/index.html evita que se liste el contenido del directorio del servidor web
18 admin/sql/updates/mysql/0.0.1.sql es un archivo que permite inicializar el esquema de versiones del componente com_helloworld.
Info non-talk.png
General Information

Por favor, crea una petición o tema en https://github.com/joomla/Joomla-3.2-Hello-World-Component para cualquier discrepancia en el código o para la edición de cualquier parte del código fuente de esta página.