Desarrollando un componente MVC: Añadiendo un modelo al frontend
Añadiendo un modelo
En el framework de Joomla, los modelos (Models) son los responsables de gestionar la información. La primera función que tiene que ser escrita para un modelo es una función get. Devuelve datos al objeto llamante. En nuestro caso la vista HelloWorldViewHelloWorld. Por defecto, el modelo llamado HelloWorldModelHelloWorld que reside en site/models/helloworld.php es el modelo principal asociado a esta vista.
Así que vamos a echar un vistazo rápido a las convenciones de nombres con un ejemplo, ya que la convención de nomenclatura son la magia real, que hacen todo el trabajo:
La clase HelloWorldViewHelloWorld reside en site/views/helloworld/view.html.php y hará uso de la clase HelloWorldModelHelloWorld en el fichero site/models/helloworld.php
Así que vamos a suponer que queremos utilizar una vista imaginaria fluffy, tendríamos que tener:
- La clase HelloWorldViewFluffy que reside en site/views/fluffy/view.html.php.
- La vista que hará uso de HelloWorldModelFluffy en el archivo site/models/fluffy.php.
Nota: la pantalla real de la vista: site/views/fluffy/tmpl/default.php se necesita también para hacer que este ejemplo funcione.
Incumplir cualquiera de estas convenciones dará lugar a errores o una página en blanco.
Así que volviendo a la aplicación real de las clases individuales, con tu gestor y editor de archivos favorito crea el archivo site/models/helloworld.php que contenga:
site/models/helloworld.php
msg))
{
$this->msg = 'Hello World!';
}
return $this->msg;
}
}
La clase HelloWorldViewHelloWorld solicita datos al modelo mediante el método get de la clase JView:
site/views/helloworld/view.html.php
msg = $this->get('Msg');
// Check for errors.
if (count($errors = $this->get('Errors')))
{
JLog::add(implode('
', $errors), JLog::WARNING, 'jerror');
return false;
}
// Display the view
parent::display($tpl);
}
}
Nota: $this->get() es un miembro de JView::get que es un proxy para los metodos get* del modelo por defecto donde * que se rellena con el valor del primer parámetro pasado a get()
También modifica el fichero helloworld.xml para indicar el uso de modelos y la nueva versión:
helloworld.xml
Hello World!
November 2009
John Doe
john.doe@example.org
http://www.example.org
Copyright Info
License Info
0.0.4
Description of the Hello World component ...
sql/updates/mysql
index.html
helloworld.php
controller.php
views
models
index.html
helloworld.php
sql
Empaquetando el componente
Contenido del directorio:
- helloworld.xml
- site/index.html
- site/helloworld.php
- site/controller.php
- site/views/index.html
- site/views/helloworld/index.html
- site/views/helloworld/view.html.php
- site/views/helloworld/tmpl/index.html
- site/views/helloworld/tmpl/default.xml
- site/views/helloworld/tmpl/default.php
- site/models/index.html
- site/models/helloworld.php
- admin/index.html
- admin/helloworld.php
- admin/sql/index.html
- admin/sql/updates/index.html
- admin/sql/updates/mysql/index.html
- admin/sql/updates/mysql/0.0.1.sql
Crea un archivo comprimido o directamente descarga el archivo e instalalo mediante el gestor de extensiones de Joomla. Puedes añadir un elemento de menú de este componente mediante el gestor de menús en el backend.