Desarrollo de un Componente MVC/Agregar un modelo a la parte del sitio
From Joomla! Documentation
< J3.x:Developing an MVC Component
Artículos de esta Serie
Agregar un tipo de menú a la parte del sitio
Agregar un modelo a la parte del sitio
Agregar una variable de petición en el tipo de menú
Utilizando la base de datos
Lado servidor básico
Agregar gestión de idioma
Agregar acciones del lado servidor
Agregar decoraciones del lado servidor
Agregar verificaciones
Agregar categorías
Agregar configuración
Agregar un archivo de secuencia de comandos instalar-desinstalar-actualizar
Agregar un formulario del lado cliente
Usar la facilidad filtro de idioma
- Agregar una Modal
- Agregar Asociaciones
- Agregar Comprobación
- Agregar Ordenamiento
- Agregar Niveles
- Agregar Control de Versiones
- Agregar Etiquetas
- Agregar Accesos
- Agregar procesos por lote
- Agregar Caché
- Agregar un Canal de Noticias
Agregar un servidor de actualización
Esta es una serie multi-artículos de tutoriales sobre cómo desarrollar un Componente Modelo-Vista-Controlador para Joomla! Versión.
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
- Este artículo es parte del tutorial Desarrollo de un Componente MVC para Joomla! 3.x. Te invitamos a leer las partes anteriores del tutorial antes de leer esto.
- Puedes seguir los pasos que hay a continuación para agregar un modelo componente Hello World! o puedes descargar directamente el archivo
- Puedes ver un video (en inglés) asociado con este paso del tutorial en Paso 4, Agregar un Modelo.
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>[email protected]</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. |
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.