Opciones de diseño de formulario
Tres formas de organizar los campos de un formulario de creación/edición, además del selector del lado del cliente para cómo se presenta ese formulario en pantalla.
El valor por defecto plano
Sin ninguna configuración de diseño, cada campo editable se renderiza uno por línea, de arriba abajo, en el orden natural de columnas de la tabla (o en el orden de fields(), si lo llamaste). Esto no requiere configuración y es la opción correcta para formularios cortos:
$xcrud = Xcrud::get_instance();
$xcrud->table('customers');
$xcrud->route('customers');
echo $xcrud->render();
rows() - campos uno al lado del otro
rows($row, $fields) coloca dos o más campos en la misma fila numerada del formulario en lugar de apilarlos. Cada campo que comparte una fila divide equitativamente el ancho completo de esa fila:
$xcrud->rows(1, 'firstName,lastName');
$xcrud->rows(2, 'city,state,zip');
$row es una posición de fila, no un índice de orden de declaración - las filas se renderizan en orden numérico ascendente sin importar qué llamada a rows() apareció primero en tu PHP. Un campo pertenece a lo sumo a una fila; volver a llamar a rows() para él lo mueve en lugar de duplicarlo. Las filas son independientes de, y se combinan libremente con, cualquier otro diseño descrito a continuación.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
$row | int | obligatorio | Posición de la fila (1 o mayor); las filas se renderizan en orden numérico ascendente |
$fields | string | obligatorio | Lista separada por comas de nombres de campo editables a colocar en esta fila |
rows() + aside() - una columna lateral persistente
aside($fields) extrae campos por completo del flujo principal del formulario y los coloca en una columna independiente que permanece visible junto a él, mientras que todo lo demás - campos planos, pares de rows(), lo que quede - ocupa el panel principal. Suele combinarse con rows() para que el panel principal se mantenga compacto y la columna lateral aloje subidas de archivos o campos secundarios:
$xcrud->rows(1, 'firstName,lastName');
$xcrud->rows(2, 'city,state,zip');
$xcrud->aside('photo,attach');
Los campos de la columna lateral se apilan de arriba abajo en el orden en que ya los coloca la propia lista de campos del formulario - solo hay una columna lateral, así que no hay número de fila que asignarle. Nota: en una tabla que también usa https://xcrudnova.xcrud.net/docs/es/nested-tables-overview, la columna lateral permanece solo dentro del panel de la pestaña "Details" propia del padre, no en todas las pestañas anidadas.
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
$fields | string | obligatorio | Lista separada por comas de nombres de campo editables a extraer hacia la columna lateral |
El selector de modo de edición (lado del cliente)
Independientemente de cómo se organicen los propios campos de un formulario, set_edit_mode($mode) controla cómo se presenta el propio formulario cuando se abre una fila para añadir/editar:
$xcrud->set_edit_mode('side');
| Modo | Descripción |
|---|---|
modal | Cuadro de diálogo emergente centrado sobre la cuadrícula (el valor por defecto) |
side | Panel deslizante/offcanvas desde el borde de la pantalla |
current | "Normal" - el formulario reemplaza la cuadrícula en línea, dentro de la propia página |
Existen dos modos adicionales pero son exclusivos de JS - no hay ningún valor de set_edit_mode() para ellos, solo el menú "⋯ Más opciones" de la barra de herramientas (consulta https://xcrudnova.xcrud.net/docs/es/grid-toolbar-and-more-options-menu) puede alcanzarlos en tiempo de ejecución:
| Modo | Descripción |
|---|---|
split_left | Cuadrícula y formulario mostrados lado a lado, formulario anclado a la izquierda, en una vista dividida redimensionable |
split_right | La misma vista dividida, pero con el formulario anclado a la derecha |
A diferencia de modal/side, los modos divididos nunca ocultan ni cubren la cuadrícula - su tabla de datos simplemente se vuelve más estrecha, y permanece totalmente clicable mientras se edita una fila junto a ella.