Desarrollo de una component para Joomla 4. Parte de edición

Edicion Editor Controller Editor View Editor Model Editor Layout botones cancel, save, delete

Introducción

 

Edición icon edicion

La parte de edicion requiere la representación de un formulario cuyos datos los toma de la base de datos correspondiente y los almacena en las tablas definidas en el directorio:

cuya función en el archivo:

se muestra a continuación:

table adressen

El formulario se carga por medio de las funciones definidas en el modelo, que leen los archivos xml definidos en el directorio:

A continuación, el archivo: com_readmdb/site/forms/m_db/adressen.xml con algunos de los campos de la tabla adressen del banco de datos m_db. Entre ellos se distingue el que lleva name="Actividad_id". Este es del tipo (type) actividadlist que es un menú desplegable con las actividades que distintas empresas tienen y que están almacenadas en la tabla actividad del banco de datos m_db.

actividad list field

La lista desplegable del campo Actividad_id se obtiene del código a continuación contenido en el archivo:

que deriva de ListField y esta a su vez de FormField

actividad list

En ella se observa una query a la tabla actividad de la que se obtienen los campos "id" y "nombre". En la lista desplegable se verá el nombre y quedará elegido el id.
Observese que el nombre del archivo ActividadlistField.php es, sin la extensión, el mismo que el de la clase ListField que deriva de FormField que contiene la función getOptions(), que es el array que contiene los datos para la lista desplegable que la figura a continuación muestra.

actividad_id

Editor Controller

El botón de edición arriba indicado se basa en el siguiente código:

botón edición

En la lista vemos la función

la cual hace llama una nueva página con la variable url &task=Editor.edit la cual va al Controller EditorController y llama la función edit() El Editor Controlle es una clase que deriva de FormController. La lista a continuación muestra el constructor de la clase

editor controller

El botón de edición nos lleva a este controller. La lista muestra como el controller define la view y el model

Editor View

Es una clase que deriva de HtmlView. La lista a continuación la muestra

editor view

En la lista, la función display llama a la función del modelo:

la cual contiene el la función getFieldset($table) que retorna el formulario a editar

Editor Model

Es una clase que deriva de la AdminModel. La lista a continuación muestra el constructor __construct

editor model

El constructor llama al la función AdminModel AdminModel::populateState() cuyo códidiog es:

populateState02

y que la clase EditorModel sobrescribe como sigue:

editormodel02

donde:

Otra función que sobrescribe es AdminModel AdminModel::getTable(), la cual se sobrescribe según la lista que sige en la que el nombre de la tabla se obtiene de la variable url: &table.

editormodel03

También se sobrescribe de la clase AdminModel getForm, la cual llama al método AdminModel::loadForm que llama a AdminModel::loadFormdata, también está sobrescrito y que toma los datos a través del método AdminModel::getItem(), que retorna un solo record.

editormodel04

La función AdminModel AdminModel::getForm() es así mismo sobrescrita y desde ella se llama a AdminModel::loadForm() tal como se indica a continuación.

editormodel05

Editor Layout

El editor carga los datos como sigue:

La lista muestra el layout del editor:

editor layout

Botones cancel, save, delete

 botones cancel save delete

En la figura se muestra un formulario para editar la tabla adresseny uno de los botones de la página es save
El código de ese botón es:

que da el valor a la variable url

con lo cual se hace una llamada a la función save en el controller, que es como sigue:

controller edit save

El formulario arriba representado se llama jform y la orden:

$data = $app->input->get('jform', array(), 'array'); obtiene los datos. Por ejemplo, la instrucción:
foreach($data as $k => $v) echo '<br> k='.$k.' v='.$v, que da como resultado:

La orden:

$data = $model->validate($form, $data); controla que estén bien; $data es true
La orden:

de la funcion en la clase AdminModel almacena los datos.