(Incompleto) Usaré como ejemplo el mantenimiento de cuentas de usuario.
1. Controlador de entrada
Se invoca un controlador que comúnmente hereda de Abs_AppController.
Este controlador añade a la vista principal algunas secciones interesantes:
- crud-bootstrap-list. Para obtener por AJAX una vista de lista o tabla
- crud-bootstrap-search. Para obtener por AJAX una vista de búsqueda y filtros
En ambos casos se le pasa también un controlador (pero no un nombre de clase, sino solo el nombre de controlador, por ejemplo 'CrudConfiguracionUsuarios` para que las vistas de lista y búsqueda las obtenga de ahí. Este es el controlador principal, es AJAX, y controla el CRUD.
1.1. Controlador CRUD AJAX
El controlador principal deriva de Abs_AppCrudController, aunque en realidad la clase base es Abs_AdmCrudController. Dicha clase padre invoca a la función initData() al terminar el constructor, por lo que se puede usar esa función para incorporar nuestro propio código de inicialización. Normalmente lo mínimo que se hace aquí llamar a:
$this->auto('nombretabla');
Para construir todo usando nombretabla.
2. La vista crud-boostrap-list
La vista crud-bootstrap-list compone una URL a partir del nombre del controlador que se le ha pasado, y muy importante: Pasa el parámtro /lst.
También elabora un selector jQuery a partir de dicho nombre de controlador (salvo que se le haya especificado el parámetro _id a la vista).
Por último llama a actionLoad() con dicha URL y el selector. Esa función se encuentra en adm.js.
3. JS/actionLoad()
La funcion actionLoad(url, selector):
-
Busca un target para el selector enviado (o sea se crea un DIV o se busca uno si ya existía)
-
Llama a una función previa (que pone un gif animado de precarga).
-
Carga el contenido AJAX de la url en ese target. En el actual punto estamos llamando a la función
/lstdel target. -
Llama a una función posterior (que quita el gif y hace unas cuantas inicializaciones)
4. Función /lst de un AppCrudController
Corresponde a la función lst(). Hace numerosas inicializaciones y obtiene un TableViewer. Posteriormente configura el TableViewer y lo dibujar invocando a direct().
4.1. Inicializaciones
Se limpian campos de control de relaciones, se aplican los filtros actualmente establecidos, se obtiene el número de página.
También se inicializa el TableView, configurándose los campos a mostrar u ocultar.
4.2. Obtención del TableViewer
Se hace llamando a la función lstGetTableViewer().
Esta función instancia un objeto de la clase TableViewer. De cara al flujo, establece una propiedad del TableViewer importante:
$tvr->setSectionTemplate($this->vTemplateTable);
El valor predeterminado es adm3/tableviewer-table. Se refiere a la vista que se va a usar para dibujar una página de la tabla.
4.3. Configuración del TableViewer
Si se puede ordenar, se asignan los SortButtons al TableViewer.
Si se puede paginar, análogamente se asigna un Paginator al TableViewer.
También se asignan las acciones por fila (obtenidas de lstGetActions).
4.4. Dibujado del TableViewer
Basta con llamar a la función direct(). Por último recordamos la última página por si tenemos que permanecer allí en otro momento.