%RPLC-TITULO-DEL-DIALOGO |
Buscar [QUE_BUSCAR]:
|
%RPLC-TITULO-DEL-DIALOGO |
Buscar [QUE_BUSCAR]:
|
%RPLC-TITULO-DEL-DIALOGO |
Buscar [QUE_BUSCAR]:
|
%RPLC-TITULO-DEL-DIALOGO |
Buscar [QUE_BUSCAR]:
|
%RPLC-TITULO-DEL-DIALOGO |
Buscar [QUE_BUSCAR]:
|
Esta biblioteca, altamente extensible, es ofrecida a partir de la implementación de los hook elements
y theme. Brinda un conjunto de utilidades para crear controladores de entrada
de datos en tiempo de desarrollo y en tiempo de producción.
En esta página se ofrece una guía sintética (con ejemplos de uso) para establecer los atributos básicos de
los siguientes elementos:
Árbol de selección múltiple,
Árbol selector simple,
AreaDinaSet,
AzDbCombo,
BodyField,
Button,
CheckBox,
CheckBoxes,
Date,
Depurador JavaScript,
Fieldset,
File,
Format filter,
Form,
Hidden,
Image Button,
InputGroup,
Item,
Lista clasificadora slz,
Lista selectora slz,
Markup,
Menu,
Menu ítem,
Menu locator,
Fijador de opciones,
Ordenador de listas,
Ordenador de listas discretas,
Ordenador de listas anidadas,
Password /
Password confirm,
RadioBox,
RadioBoxes,
Select list,
Tabla activa,
Tabs secundarios,
Textarea,
TextDinaSet,
Textfield,
TextUnique,
Weight.
Sintaxis de definición de elementos
Cada elemento debe ser definido mediante un array de definición, como un array de pares de la forma:
'NombreDeInstancia' => [ 'claveliteral' => 'valor', ... ]
En caso de instalar o crear módulos de extensión para ofrecer nuevos elementos se puede agregar los atributos que se necesite. Pero, manteniendo el mismo modelo de sintaxis para asegurar una correcta interacción entre módulos y utilidades.
Button
Genera un botón normal, con el propósito de lanzar una acción como procesar un formulario,
reiniciarlo, cargar algún contenido asociado, etc.
<?php module_load_include('inc', 'foliate', 'hook/elements'); $boton = [ '#name'=>'interruptor', '#type' => 'button', '#operation'=>'op', '#value'=>'Haga click aquí' ]; echo theme_button($boton);
CheckBox
Este tipo de elemento tiene como propósito facilitar la recolección de opciones booleanas (si o no)
de modo que se marque sólo si la opción es afirmativa.
<?php module_load_include('inc', 'foliate', 'hook/elements');
$item = [ '#name'=>'sionoitem', '#type' => 'checkbox', '#default_value'=>'0', '#return_value'=>'1', '#value'=>'1', '#labelpos'=>0, '#title'=>'El texto ha sido de utilidad', '#description'=>Por favor marque el cuadro de selección para indicar que el texto de esta página ha sido útil. En caso negativo quite la marca., '#context' => 'success', ]; // da salida al ítem usando su primera definición: echo theme_checkbox($item); // modifica únicamente el atributo '#context' $item['#context'] = 'primary'; // vuelve a dar salida al ítem modificado: echo theme_checkbox($item);
Depurador JavaScript
Inserta una caja en la que se muestran trazas de comandos como solicitudes Ajax lanzadas por las
acciones enlazadas mediante el modelo lgq_Binded. No debe insertarse más de un elemento
por formulario.
<?php module_load_include('inc', 'foliate', 'hook/elements'); $depuradordef = [ '#name'=>'ejemplodepurador', '#type' => 'depurador', '#title'=>'Visualizador de llamados ajax', '#context' => 'primary' ]; echo theme('depurador', $depuradordef);
Fijador de opciones electas
Este elemento, es en realidad un asistente para manejar agrupadas familias de
opciones del tipo CheckBox, RadioBox y Personalizadas que suelen no pasar valores
cuando son deseleccionadas y que eventualmente podrían "perderse" o hacer necesaria
la escritura de mucho código adicional para asegurar su presencia y tratamiento
al procesar los conjuntos de valores pasados por el cliente en $_POST y/o
$form_state['values']
Este elemento genera un campo oculto cuyo valor es una cadena que contiene los ids, valores actuales y flags indicadores de si se esperan o no cambios de los campos selectores de opciones "problemáticos" y, en caso de ser empleado dentro de un formulario cuyo procesamiento de lugar a un objeto $form_state devuelve un array de pares iddeopcion=>valor que simplifica el tratamiento de valores devueltos por dichos campos.
<?php // Se establece un array con las opciones que se deben controlar // se muestra el empleado en el formulario citado arriba $opciones = [ 'LCB1-35' => [ 1, 1 ], 'LCB3-36' => 0, 'LCB2-37' => 0, 'LCB4-38' => 0, 'LCB5-39' => 0, 'LCB6-40' => 0, 'LCB7-41' => 0, 'LCB8-42' => 0, 'LCB9-43' => 0, 'LCC40-44' => 0, 'LCC89-45' => 0, 'LCC88-46' => 0, 'LCC81-47' => 0, 'LCC51-48' => 0, 'LCBA-49' => 0, 'LCBF-50' => 0, 'LCC1A-51' => 0, 'LCC1B-52' => 0, 'LCBC-53' => 0 ]; $formitem = [ '#name' => 'camposactivos', '#type' => 'curroptions', '#value' => $opciones, ];En el preproceso de las respuestas del cliente, el método onproc_proccess() de la clase procesadora del elemento FixCurrOptions pasa el valor al la clave $form_state['values']['nombre_instancia'] bajo la forma de un array nombre_opcion => valor_opcion, garantizando que todos los elementos, habilitados o no y electos o no, pasen valores para que puedan ser recuperados dentro de loops de lectura y o procesamiento de datos.
File
Este control ofrece una caja activadora del diálogo de selección de archivos
para ser subidos al servidor. En caso de que se especifique el atributo #accept
se debe tener presente que el usuario puede hacer cambios en el dialogo de
selección de archivos y puede tratar de subir "bombas" que desborden la
capacidad del servidor y/o enmascarar tipos; de modo que deben implementarse
medidas de seguridad en los procedimientos de carga.
<?php module_load_include('inc', 'foliate', 'hook/elements');
$formfile = [ '#name' => 'archivo', '#type' => 'file', '#title' => 'Archivo a cargar', '#required'=>TRUE, '#inline' => FALSE, '#size' => 0, '#accept' => "image/*", '#default_value' => '', '#value' => '', '#description'=>'Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.' ]; echo theme_file($formfile);
Hidden
Este elemento tiene como propósito pasar información con sentido funcional a los formularios.
Debe usarse cuando es necesario pasar valores que van a ser usados o actualizados por los scripts
de la página sin que sean percibidos por el usuario.
<input type="hidden" id="edit-hiddenitem" name="hiddenitem" value="Valor a pasar"
class="clase1 clase2 clase_x"/>
<?php module_load_include('inc', 'foliate', 'hook/elements'); // definición: $item = [ '#name'=>'hiddenitem', '#type' => 'hidden', '#value'=>'Valor a pasar', '#attributes'=> [ // lista espacioseparada de clases 'class' => 'clase1 clase2 clase_x' ] ]; // uso echo theme_hidden($item);
Image Button
Genera un botón normal, pero su cuerpo es formado por un archivo de imagen. Tiene los atributos
usuales de un elemento button y a cambio de su label
incluye un path para obtener la imagen a mostrar.
<?php module_load_include('inc', 'foliate', 'hook/elements'); $boton = [ '#name'=>'interruptor', '#type' => 'image-button', '#operation'=>'op', '#title'=>'Imagen activa', '#inline' => TRUE, '#description'=>Los botones no suelen agregar descripciones. Aunque en el caso de botones de imagen puede ser útil., '#src'=>'/img/jXfnfCB6z128i.jpg']; // uso echo theme_item($boton);
Item
Este elemento tiene como propósito facilitar la presentación de datos, que deben
aparecer dentro de un formulario, sin posibilidad de modificarlos (o como
referencias), de modo estructurado.
<?php module_load_include('inc', 'foliate', 'hook/elements'); // definición: $item = [ '#name'=>'infoitem', '#type' => 'item', '#value'=>'Este es el valor de este ítem.', '#inline'=>TRUE, '#title'=>'Este es un ítem', '#context' => 'warning' // para mostrarlo con contraste en una caja amarilla '#description'=>'Esprobable que el dato necesite algún comentario. Es ese caso se puede agregar descripción' ]; // uso: echo theme_item($item);
Menu Item
Ofrece un elemento de enlace que va a ser anidado en una lista de enlaces (menú)
para invocar acciones.
Cuando se trata de un submenú tiene exactamente los mismos atributos que el menú,
slavo #format e '#inline' que son establecidos para el menú contenedor.
Password / Password confirm
Este par de elementos son cajas de entrada de texto normales, en las que la entrada es enmascarada para ocultarla de la vista de testigos incómodos.
Desde el punto de vista del paso de información, envían texto plano al servidor - al igual que las cajas de texto normales; de modo
que la información sensible sigue siendo vulnerable.
Tienen, salvo '#type' los mismos atributos que los campos de texto (textfield):
<?php module_load_include('inc', 'foliate', 'hook/elements');
$item = [ '#name'=>'psswrditem', '#type' => 'password', '#title'=>'Clave de acceso', '#size'=>60, '#maxlength'=>128, '#required'=>TRUE, '#inline' => TRUE, ]; // uso: echo theme_password($item); $item['#type'] = 'password_confirm'; $item['#name'] = 'pwrd_confirm'; $item['#title'] = 'confirme la clave'; echo theme_password($item);
RadioBox
Este tipo de elemento tiene como propósito facilitar la recolección de opciones mutuamente excluyentes y
debe ser usado en grupos en los que cada opción es asignada a un elemento. Su uso individual no tiene sentido
porque una vez marcado no puede cambiarse su estado, pues requiere que se marque otro de su mismo grupo para que
su marca sea retirada. En su lugar debe usarse un elemento checkbox.
<?php module_load_include('inc', 'foliate', 'hook/elements'); $item = [ '#name'=>'sisiitem', '#type' => 'radio', '#return_value'=>'1', '#value'=>'0', '#labelpos'=>1, '#title'=>'El texto ha sido de utilidad', '#description'=>Si marca esta opción no podrá cambiarla. Debe recargar la página para ello. ]; echo theme_radio($item);
Textarea
Ofrece una caja de entrada de texto multilínea. Con extensiones adecuadas admite texto enriquecido.
<?php module_load_include('inc', 'foliate', 'hook/elements'); $item = [ '#name'=>'areaitem', '#type' => 'textarea', '#width'=>'100%', '#rows'=>3, '#title'=>'Campo de texto grande', '#context'=> 'warning', //para mostrarlo enmarcado y resaltado con color '#inline' => FALSE, ]; // se sirve echo theme_textarea($item);
Textfield
Ofrece una caja de entrada de texto normal. Sus atributos son los comunes a
los elementos input. Salvo que los valores siempre hacen referencia a cadenas.
<?php module_load_include('inc', 'foliate', 'hook/elements'); // define el elemento $item = [ '#name'=>'textitem', '#type' => 'textfield', '#size'=>60, '#maxlength'=>128, '#title'=>'Texto a enviar', '#inline' => TRUE, ]; // salida a la página a servir echo theme_textfield($item);
Árbol de selección múltiple "selectordwymultiple"
Este elemento está orientado hacia la clasificación y/o catalogación de documentos empleando
el sistema de clasificación Dwy36b inspirado en el sistema de clasificación decimal ideado por
J. Dewey. Dicho sistema emplea un modelo de estructura de árbol en el que el primer nivel admite
hasta 72 ramas (10 en el sistema ideado por Dewey) y cada nodo, a su vez admite la misma cantidad de
subdivisiones. Cuando se asigna un elemento de la estructura como clasificación de un
documento (o ítem de información) se le está asignando la rama completa, de modo que se
consigue eliminar la ambigüedad derivada de las asignaciones de "claves homófonas" típicas
de los tesauros y modelos de catalogación que emplean "palabras claves".
Presenta un campo de despliegue de textos para mostrar las asignaciones hechas y un juego de controles para hacer ajustes a las mismas.
Todos los encabezados mostrados en los botones, y algunos de sus detalles de apariencia son personalizables haciendo uso de sus atributos al preparar su definición.
<?php // Definición de los valores por defecto usados $defaultarbol_1 = [ ['id'=>0, 'cifra'=>'LMF1', 'texto'=>'Antología o compilación'], ['id'=>0, 'cifra'=>'CDU8', 'texto'=>'Literatura'] ]; $defaultarbol_2 = [ ['id'=>0, 'cifra'=>'LV34', 'texto'=>'investigador'], ['id'=>0, 'cifra'=>'LVA1', 'texto'=>'colaborador permanente'] ]; // definición de un array con los dos elementos del ejemplo: $grupodef = [ '#type' => 'markup', '#title' => 'Ejemplos de árboles de selección múltiple', 'arbolselector1' => [ '#type' => 'selectordwymultiple', '#name' => 'arbolselector1', '#title' => 'Clasificación temática', '#description' => 'Haga click en el botón [Asignar clasificación] para desplegar el árbol de selección de descriptores de clasificación. Elija las categorías que desee asignar y regrese haciendo click en el mismo botón.', '#default_value' => $defaultarbol_1, '#nombreasistente' => 'Asistente para selección de temas de clasificación', '#base' => '', '#togglehelp' => 1, '#encabezado_agregar' => 'Asignar clasificación', '#encabezado_desvincular' => 'Desvincular todo', '#botonrompernexo' => 'Desvincular resaltado(s)', '#weight' => 1, ], 'arbolselector2' => [ '#type' => 'selectordwymultiple', '#name' => 'arbolselector2', '#title' => 'Vínculos', '#description' => 'Este control delpliega la lista típica Dwy enpara seleccionar múltiples entradas.', '#default_value' => $defaultarbol_2, '#base' => 'LV', '#nombre_del_arbol' => 'Vínculos', '#nombreasistente' => 'Asistente para establecer vínculos', '#encabezado_agregar' => 'Elegir vínculos', '#encabezado_desvincular' => 'Desvincular todo', '#botonrompernexo' => 'Desvincular resaltado(s)', '#togglehelp' => 1, '#weight' => 2, ], ]; // devolución de salida: echo theme('markup', $grupodef);
Árbol selector simple "arbolselectordwy"
Este elemento al igual que el Árbol de selección múltiple está orientado hacia la clasificación y/o catalogación de documentos empleando
el sistema de clasificación Dwy36b; pero para ser usado en casos en que se van a asignar
categorías únicas. (ej. En la página de configuración de campos de un documento establecer
el nodo raiz bajo el cual se va a desplegar un árbol de clasificación, o el nivel que usará
una lista selectora para ofrecer sus opciones, etc.)
Formato bibliográfico |
AzDbCombo - Lista Selectora AZ navegable
Este es un Control AJAX de entrada de datos. No debe emplearse en clientes que no soportan javaScript.
Ofrece un mecanismo para alimentar campos de entrada mediante selecciones hechas en
listas muy grandes, ligadas con tablas de una o más fuentes de datos. Las listas
incorporan mecanismos de navegación haciendo uso de AZ y paginadores, con o
sin cajas de búsqueda, para hacer amable su rrecorrido y la la selección se produce
haciendo click sobre cualquier texto en la línea en que se encuentra el descriptor
conveniente.
Soporta dos modelos de definición:
<?php // Preparar la definición del elemento asignando sus atributos: $combodef = [ '#togglehelp' =>TRUE, '#type' => 'azdbcombo', // NECESARIO para que theme('azdbcombo', $combodef); pueda actuar '#context' => 'success', // se asigna a los buttons (verdes) '#name' => 'clasificador', // se debe asignar nombre '#title' => 'Tema', // Label del grupo de entrada '#tabla' => 'tblclasificacionb36', // tabla virtual '#form-type' => 'default', // node | tipo de contenido al que pertenece el campo '#inline' => TRUE, '#compacto' => FALSE, '#campoid' => 'idclasificacionb36', '#campos_az' => ['descriptordeclase' => 'Descriptor temático', 'clasificacionb36' => 'código', 'enunciadodefinitorio' => 'descripción' ], '#orderby' => ['descriptordeclase'], '#campoalfa' => 'descriptordeclase', '#campoidparacombo' => 'clasificacionb36', // cuando el combo debe devolver un valor en un campo diferente de campoid '#campo-a-pasar' => 'descriptordeclase', // si no se asigna se asume campoalfa '#default_value' => [], '#usetextaid' => TRUE, // muestra sugerencia para placeholder, '#textaid' => '', // sugerencia para placeholder si no se asigna muestra default '#botonbuscar' => 'explorar en buscador AZ', '#botonclear' => 'desvincular', '#buscar_en' => ['descriptordeclase'=>1, 'clasificacionb36'=>1, 'enunciadodefinitorio' =>1], '#description' => 'Use el selector para establecer el tema que desea asignar al contenido.', '#usamascara' => TRUE, // sólo si asigna #mascara en otro caso no declarar '#mascara' => array('clasificacionb36'=>['zeta'=>'z', 'punto'=>'.']), ]; // mostrar el combo: echo theme('azdbcombo', $combodef);
<?php $combodef = [ '#togglehelp' =>TRUE, '#type' => 'azdbcombo', '#context' => 'warning', '#name' => 'routeselector', // se debe asignar nombre '#title' => 'Ruta', // Label del grupo de entrada '#tabla' => 'menu_router', // tabla virtual '#form-type' => 'default', // node | tipo de contenido al que pertenece el campo '#inline' => TRUE, '#compacto' => TRUE, '#campoid' => 'path', '#campos_az' => ['title' => 'Ruta', 'path' => 'url relativo' ], '#orderby' => ['title'], '#campoalfa' => 'title', '#campoidparacombo' => 'path', // cuando el combo debe devolver un valor en un campo diferente de campoid '#campo-a-pasar' => 'title', // si no se asigna se asume campoalfa '#default_value' => [], '#usetextaid' => TRUE, // sugerencia para placeholder, '#textaid' => '', // sugerencia para placeholder '#botonbuscar' => 'Elegir ruta en buscador AZ', '#botonclear' => 'quitar ruta', '#encoded' => 1, // IMPORTANTE los ids son paths con caracteres especiales se codifican para evitar errores '#description' => 'Use el selector para establecer la ruta que desea asignar al ítem de menú que se está definiendo.', '#usamascara' => FALSE, ]; // mostrar el combo: echo theme('azdbcombo', $combodef);
AreaDinaSet (Párrafos dinámicos)
Este tipo de elemento tiene como propósito facilitar la presentación y recolección
de grupos de párrafos que mantienen unidad temática (o de sentido) pero que
van a ser registrados como unidades individuales.
El caso típico son las asepciones de un concepto, que deben ser registradas,
como definiciones individuales del mismo y que van a ser usadas individualmente
en diferentes contextos.
Cada palabra registrada puede tener una o más asepciones (significados). De modo
que tanto la sinomimía, como la asignación como clave para recuperación, no son
estrictas ni precisas. Usted puede registrar las asepciones de las mismas y luego
emplearlas en los lugares en los que han sido asignadas para hacer más precisas
las búsquedas y ofrecer relaciones entre contenidos con mayor consistencia.
Este grupo de campos no admite la sintaxis markdown
<?php echo theme( 'areadinaset', [ '#type' => 'areadinaset', '#weight' => 10, '#name' => 'asepciones', '#boton_agregar_label' => 'agregar otra asepción', '#collapsible' => 0, '#value' => ['total'=>0, 'textos'=>[]], '#title' => 'Asepciones', '#togglehelp' => 1, '#description' => leer_archivo_de_texto_auxiliar('txt/es/asepciones_info.htm', 'mentefactos'), '#subitempad' => [ '#rows' => 2, '#title_prefix' => 'Asepción', '#type' => 'textarea', '#dinamic_title' => 1, '#width' => '100%', '#default_value' => '', '#joindbid' => 1, '#datadbid' => 0 ] ] );
BodyField
Este elemento ofrece un juego de áreas de texto sincronizadas
para recoger el contenido a mostrar en un documento, junto con un resumen, que se mostrará
en listados y páginas de resúmenes agrupados. Ofrece, adicionalmente, mecanismos para elegir los
filtros aplicables a su formato de entrada y para conmutar la visibilidad y modo
de presentación del resumen.
Cuando se emplean algunos módulos de extensión opera como un editor de texto enriquecido simplificado.
$definebodyfield = [ '#type' => 'bodyfield', '#title'=>'Cuerpo', '#body'=>$lorentxt, '#teaser'=>'', '#formatselectable' => 1, '#name' => 'pruebabodyfield', '#hasteaser' => 1 ]; echo theme_bodyfield($definebodyfield);
CheckBoxes
Este tipo de elemento tiene como propósito facilitar la recolección de grupos de
opciones complementarias, en las que varias combinaciones de condiciones boleanas
son posibles simultáneamente; de modo que se marquen sólo aquellas que sean afirmativas.
<?php module_load_include('inc', 'foliate', 'hook/elements'); $options = [ 'o1' => 'El texto es confuso', 'o2'=>'El texto es util', 'o3'=>'el texto es aburrido', 'o4'=>'La redacción no es buena' ]; $item = [ '#name' => 'complementarias', '#title' => 'Opciones complementarias', '#type' => 'checkboxes', '#value' => [], '#labelpos' => 0, '#options' => $options, '#description' =>Por favor marque las opciones que considere pertinentes. Puede elegir una o más, o ninguna. ]; echo theme_checkboxes($item);
Date
Este control ofrece un juego de listas selectoras para hacer selección de fechas.
Dichas listas pueden contener valores nulos para casos en los que el usuario no
puede fijar alguno o todos los datos, de modo que no se obligue a ingresar una
fecha que podría ser errónea.
<?php module_load_include('inc', 'foliate', 'hook/elements');
$fechaelement = [ '#name'=>'fecha', '#context' => 'primary', '#type' => 'date', '#nulo'=>TRUE, '#min' => 1967, '#max'=>2030, '#value'=>['anho'=>2012, 'mes'=>12, 'dia'=>12], '#inline'=>TRUE, '#title'=>'Elija una fecha', '#description' => 'Cras justo odio, dapibus ac facilisis in, egestas eget quam. ' . 'Donec id elit non mi porta gravida at eget metus. Nullam id dolor' . id nibh ultricies vehicula ut id elit.' ]; echo theme_date($fechaelement);
Format filter
Ofrece un fieldset colapsable que enmarca un juego de radios mutuamente excluyentes
dispuestos para elegir uno entre varios formatos de entrada disponibles.
Muestra los formatos que estando habilitados, hayan sido permitidos al usuario
activo.
Este elemento, generalmente se muestra asociado a un área de texto, o a la página
completa para decidir el tipo de entrada que se hará en la misma. Se ofrece para
facilitar tal asociación, sin tener que estar haciendo cajas de entrada.
<?php module_load_include('inc', 'foliate', 'hook/elements'); // Una definición minimalista $formatelement = [ '#type'=>'format', '#title' => 'Elija el formato del campo' ]; // invocar la salida para usarlo echo theme_format($formatelement);
Ordenador de listas
Ofrece un contenedor en el que se inserta una lista o tabla que se desea reordenar
manualmente.
Los elementos de la tabla o lista a reordenar, deben ser preprocesados antes
de ser pasados al elemento siguiendo las páutas que se establecen en los comentarios
a los atributos (abajo).
<?php module_load_include('inc', 'foliate', 'hook/elements'); // Preparación de la consulta a mostrar // 1. Se crea una función para asignar acciones a los registros function preprocesarContenido($content){ $salida = []; $editicon = '<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> '; $deleteicon = ' <span class="glyphicon glyphicon-trash" aria-hidden="true"></span>'; for($i = 0; $i<count($content); $i++){ $linea = $content[$i]; $linea['action'] = '<a href="/album/edit/'.$content[$i]['id'].'">'.$editicon.'edit</a> | '. '<a href="/album/delete/'.$content[$i]['id'].'">delete'.$deleteicon.'</a>'; $salida[] = $linea; } return $salida; } // 2. Ejecuta la consulta y ajusta el recordset para pasarlo a la tabla $query = 'SELECT * FROM album WHERE 1'; $content = preprocesarContenido( db_query( $query ) ); // Se preparan los arrays de control para la definición del elemento $headers = [ ['header' => 'Id'],['header' => 'Artista'], ['header' => 'Canción'], ['header' => 'Acciones'] ]; $lectokeys = ['id', 'artist', 'title', 'action']; // Se crea el array de definición del elemento $item = ['#name' =>'Ordenador', '#type' => 'listorderer', '#headers' => $headers, '#lectokeys' => $lectokeys, '#content' => $content, '#value' => [], '#title' => 'Esta es una lista ordenable manualmente', '#campoid' => 'id', '#arrows' => 'move', // 'move' | 'resize-vertical', default = 'resize-vertical' '#description' => El ordenador de listas es un control especial, cuyas propiedades son diferentes al común.
Arrastre las líneas hacia arriba o hacia abajo para cambiar sus posiciones dentro de la tabla. ]; // Se muestra la lista echo theme_item($item);
Ordenador de listas discretas
Este control, es una extensión natural del ordenador de listas orientado a trabajar con juegos de listas sincronizadas reordenando e intercambiando sus elementos. Adicionalmente, cada elemento puede contener subelementos activos (de casi cualquier tipo) que disparen acciones o sean útiles para recoger datos.
Zona encabezado
Pie de página
Bloques inactivos
<?php module_load_include('inc', 'foliate', 'hook/elements'); function info_simularConsultaDeBloques(){ // Prepara un array de falsos bloques para simular el resultado de una // consulta que se muestra como lista $bloques = [ ['bid' => 1, 'name' => 'Bloque 1', 'region' => ''], ['bid' => 2, 'name' => 'Bloque 2', 'region' => ''], ['bid' => 3, 'name' => 'Bloque 3', 'region' => ''], ['bid' => 4, 'name' => 'Bloque 4', 'region' => ''], ['bid' => 6, 'name' => 'Buscador', 'region' => ''], ['bid' => 8, 'name' => 'Clasificador', 'region' => ''], ['bid' => 9, 'name' => 'User menu', 'region' => 'izquierda'], ['bid' => 10, 'name' => 'Bloque 7', 'region' => ''], ['bid' => 11, 'name' => 'Menu navegar', 'region' => 'encabezado'], ['bid' => 12, 'name' => 'Site Header', 'region' => 'encabezado'], ['bid' => 13, 'name' => 'Publicidad', 'region' => ''], ['bid' => 15, 'name' => 'Destacados', 'region' => 'derecha'], ['bid' => 17, 'name' => 'Créditos', 'region' => 'pie'], ]; return $bloques; } // Se crea una función para preparar el array de definición function info_prepare_listmultiordendef(){ $consulta = info_simularConsultaDeBloques(); // Simula los grupos existentes $grupos = [ 'izquierda' => ['#title' => 'Lado izquierda', ], 'derecha' => ['#title' => 'Lado derecha', ], 'encabezado' => ['#title' => 'Zona encabezado',], 'cuerpo' => ['#title' => 'Zona principal',], 'pie' => ['#title' => 'Pie de página', ], 'none' => ['#title' => 'Bloques inactivos', ], ]; // Escribe un modelo de salida para pasar en #rows $lineas = [ 0 => ['encabezado' => 12], 1 => ['izquierda' => 3, 'cuerpo' => 6, 'derecha' => 3], 2 => ['pie' => 12], 3 => ['none' => 12], ]; // Escribe la definición. Nótese que solo se emplean algunos atributos clave $elmdef = [ '#type' => 'listmultiorden', '#title' => 'Simulación de configurador de bloques', '#name' => 'configzonas', '#grupos' => $grupos, '#rows' => $lineas, '#grupfldnm' => 'region', '#campoid' => 'bid', '#campotxt' => 'name', '#content' => $consulta, '#pannel' => 1, '#sticky' => 'default' ]; // Devuelve la definición return $elmdef; } // EJECUCIÓN: echo theme_listmultiorden(info_prepare_listmultiordendef());
Ordenador de listas anidadas
Al igual que el Ordenador de listas
discretas, este control, es una extensión natural del
ordenador de listas
orientado a trabajar con juegos de listas anidados dentro de una lista a
modo de árbol. Permite reordenarla e intercambiar o desplazar ramas completas.
Es particularmente útil para trabajar con menús, índices (tablas de contenidos)
y sistemas de clasificación jerárquicos. La página de administración de menús
muestra "ejemplos vivos" de su uso, al establecer las estructuras de los menús
personalizados.
Lista clasificadora editable - (campodelistaslz)
Este elemento tiene como propósito asociar un documento o alguna parte de su
contenido con múltiples descriptores localizados en alguna fuente de datos,
ej. con una lista de palabras claves, tesaurus o taxonomía. De modo que, pueda ser
recuperado en el futuro al realizar búsquedas que las emplean para tal fin.
Ofrece un area de texto en la que las claves pueden se ingresadas separadas mediante el caracter ';' o mediante saltos de línea. Y, para evitar saturar el sistema con claves equivalentes que presenten ligeras diferencias de escritura permite buscarlas y seleccionarlas en una lista emergente. ver ejemplo
<?php // Preparar la definición del elemento asignando sus atributos: $listaslzmdef = [ '#togglehelp' =>TRUE, '#type' => 'campodelistaslz', '#context' => 'success', '#name' => 'tesaurorel', // se debe asignar nombre '#title' => 'Propósito(s)', // Label del grupo de entrada '#tabla' => 'ayudas_propositos', // tabla virtual '#form-type' => 'default', // node | tipo de contenido al que pertenece el campo // '#condicion_virtual'=> '', '#inline' => TRUE, // posiblemente no se use '#campoid' => 'idproposito', '#campos_az' => ['proposito' => 'Proposito', 'descripcion' => 'descripción' ], '#orderby' => ['proposito'], '#campoalfa' => 'proposito', '#campoidparalista' => 'idproposito', // cuando el combo debe devolver un valor en un campo diferente de campoid '#campo-a-pasar' => 'proposito', // si no se asigna se asume campoalfa '#default_value' => [], '#usetextaid' => TRUE, // mostrar sugerencia en placeholder, muestra default si no asigna una '#textaid' => '', // sugerencia para placeholder '#botonbuscar' => 'explorar en buscador AZ', '#botonclear' => 'desvincular todo', '#buttons-context' => 'warning', '#buscar_en' => ['proposito'=>1, 'descripcion'=>1], '#description' => 'Use el selector para establecer los propósitos que posee el objeto documentado.', '#usamascara' => FALSE, '#mascara' => NULL, ]; // mostrar el elemento: echo theme('campodelistaslz', $listaslzmdef);
Lista selectora - (listaselectora)
Este elemento tiene como propósito asociar un documento o alguna parte de su
contenido con múltiples descriptores localizados en alguna fuente de datos.
Opera de modo muy similar a la lista clasificadora editable, pero no permite crear
nuevos descriptores temáticos. Sólo permite hacer asignación.
Los descriptores deben ser elegidos en la lista emergente asociada. ver ejemplo
<?php // Preparar la definición del elemento asignando sus atributos: $listaslzmdef = [ '#togglehelp' =>TRUE, '#type' => 'listaselectora', '#context' => 'warning', '#name' => 'vicularfines', // se debe asignar nombre '#title' => 'Propósito(s)', // Label del grupo de entrada '#tabla' => 'ayudas_propositos', // tabla virtual '#form-type' => 'default', // node | tipo de contenido al que pertenece el campo // '#condicion_virtual'=> [] | NULL | '', '#campoid' => 'idproposito', '#campos_az' => ['proposito' => 'Proposito', 'descripcion' => 'descripción' ], '#orderby' => ['proposito'], '#campoalfa' => 'proposito', '#campoidparalista' => 'idproposito', // cuando el combo debe devolver un valor en un campo diferente de campoid '#campo-a-pasar' => 'proposito', // si no se asigna se asume campoalfa '#default_value' => [], '#usetextaid' => TRUE, // sugerencia para placeholder, '#botonbuscar' => 'Elegir propósitos', '#botonclear' => 'desvincular todo', '#buttons-context' => 'warning', '#buscar_en' => ['proposito'=>1, 'descripcion'=>1], '#description' => 'Seleccione los propósitos utilizando el botón Elegir propósitos. Si necesita romper algún nexo: haga click sobre su descriptor y cuando esté resaltado use el botón [ romper nexo(s) ] para desvincularlo.', '#usamascara' => TRUE, // sólo si asigna #mascara en otro caso no declarar '#mascara' => ['descripcion' => 'srlzd'], ]; // mostrar el elemento: echo theme('listaselectora', $listaslzmdef);
Menu
Ofrece una lista de enlaces (menú) para invocar acciones. Dicha lista es formateada
de acuerdo con las características especificadas por su atributo format.
Puede contener submenús desplegados o colapsados. Ha sido definido para ser empleado
al definir los bloques que van a ser ubicados en las regiones de la página a
servir
<?php // Se define un array de menú basico para generar las estructuras con pequeños cambios // se debe observar que se usan muy pocos atributos para declarar los ítems. $listitemsdef=[ 'itm0' => ['#title'=>'primer enlace', '#src' => '#menuelm', '#type' => 'menuitem'], 'itm1' => ['#isseparator'=>1, '#type'=>'menuitem'], 'itm2' => ['#title'=>'Encabezado', '#src' => '#menuelm', '#isheader'=>1, '#type' => 'menuitem'], 'itm3' => ['#title'=>'enlace con badge', '#src' => '#menuelm', '#type' => 'menuitem', '#badge' => 64], ]; // se agrega un item de submenú, usando al array definido para insertarse como elemento // por esa razón los items se definieron sin atributo name, de modo que el controlador // les asignará valores automáticos diferentes. $listitemsdef['submenu1'] = [ '#items' => $listitemsdef, // asigna la lista como submenú '#type' => 'menu', '#src'=>'cualquierpath/dos', //el header de submenu puede tener su propio path // y puede ser diferente del acceso al dropdown '#name' => 'submenu1', '#format'=>'dropdown', '#title'=>'Submenu emergente: ' ]; // se agrega un item para ilustrar el uso de descripciones emergentes $listitemsdef['itm5'] = [ '#name' => 'itm5', '#title'=>'enlace con ayuda emergente', '#src' => '#menu', '#type' => 'menuitem', // Para mostrar comentario emergente '#description'=>'Este es un comentario emergente para el enlace' ]; // finalmente se asigna la lista completa al atributo #item del menu a mostrar $menusampledef = [ '#items' => $listitemsdef, '#type' => 'menu', '#name' => 'menu1', '#format'=>'normal' ]; // y se invoca el método global theme() para mostrarlo o asignarlo echo theme('menu', $menusampledef);
<?php $menusampledef2 = [ '#type' => 'menu', '#menu-name' => 'admin_menu', '#basepath'=>'admin/build', '#name'=> 'dbmenu2', '#format'=>'normal']; echo theme_menu($menusampledef2);
Menu Locator
Elemento configurador de items de menú de acceso a contenidos, en tiempo de ejecución
y eventualmente asociarlos con disparadores de acciones. Permite definir enlaces para
los contenidos durante su proceso de creación y establecer su posición relativa dentro
de la estructura general de menús del sitio.
Ofrece un campo de entrada de texto para establecer el que muestra el enlace, una casilla de verificación (opcional) para decidir si se usa el título del documento como texto del mismo en caso de dejar vacía la caja anterior, y una lista de selección para ofrecer su posición relativa dentro de la estructura general de menús. ver ejemplo
<?php // Se define un array con el mínimo necesario para ofrecer el elemento $menulocator_def=[ '#type' => 'menulocator', '#title' => 'Configurador de ítem de menú', '#name' => 'config_menu_item', '#aliasenabled' => 1, '#self'=>0, '#collapsed' => 0 ]; // Se invoca la función theme para servirlo echo theme('menulocator', $menulocator_def);
RadioBoxes
Este tipo de elemento tiene como propósito facilitar la recolección de grupos de
opciones complementarias, en las que varias combinaciones de condiciones boleanas
son posibles simultáneamente; de modo que se marquen sólo aquellas que sean afirmativas.
<?php module_load_include('inc', 'foliate', 'hook/elements'); // Establecer las opciones $options = [ 'o1' => 'El texto es confuso', 'o2'=>'El texto es util', 'o3'=>'el texto es aburrido', 'o4'=>'La redacción no es buena' ]; // Preparar la definición del elemento $item = [ '#name'=>'excluyentes', '#type' => 'radios', '#title' => 'Opciones mutuamente excluyentes', '#context' => 'primary', // para que se muestre con fondo azul fuerte '#value'=>[], '#labelpos'=>1, '#required'=>TRUE, '#options'=>$options, // asigna las opciones '#description'=>Por favor marque una opción. Debe elegir una. El campo es obligatorio, '#togglehelp'=>1 ]; // pasa el elemento a la página echo theme_radios($item);
Select list
Este tipo de elemento tiene como propósito facilitar la recolección de grupos de
opciones que pueden ser tanto complementarias como mutuamente excluyentes.
De modo que el usuario escoja una o varias opciones dentro de una lista.
Al igual que los radios y los checkboxes ha sido pensada para impedir que el usuario digite
los datos y ahorrarse errores e inconsistencias.
Sus atributos, son similares a los de radios y checboxes, salvo que no hay posicionamiento de etiquetas,
pero a cambio se ofrece la posibilidad de elegir la cantidad de items visible y el modo de selección.
Por favor elija una opción en la lista
|
Marque las opciones que apliquen al caso. Para seleccionar varias matenga oprimida la tecla
Ctrl mientras hace click sobre ellas. |
<?php module_load_include('inc', 'foliate', 'hook/elements'); // Establece las opciones con dos nivees de anidación $options = [ 'o1' => 'El texto es confuso', 'o2'=>'El texto es util', // item agrupador 'No es bueno; no sirve' => [ 'o3'=>'el texto es aburrido', 'o4'=>'La redacción no es buena', // lista anidada a segundo nivel (no tuvo efecto en chrome) 'No sabe de qué habla'=> [ 'o6' => 'especula mucho', 'o7' => 'se inventa propiedades absurdas', 'o8' => 'comenta fuera de lugar' ] ], // opción normal 'o5'=>'Tengo que leerlo otro día para contestar' ]; // Prepara la definición del elemento $item = [ '#name'=>'listaselect', '#type' => 'select', '#title' => 'Lista de opciones', '#value'=>[], '#titlepos'=>0, '#options'=>$options, '#context' => 'primary', '#description'=>Por favor elija una opción en la lista ]; // devuelve el elemento echo theme_select($item); /* Vale la pena observar que el array de opciones tiene dos niveles de anidación pero el navegador sólo muestra uno. No obstante, el proceso de generación del código html si genera los dos niveles, pensando en futuras versiones de html5, pues W3 lo recomienda en el draft de la especificación. */
Tabla activa
Este tipo de elemento tiene como propósito facilitar la oferta y recolección de
opciones, excluyentes o no, asociadas con tablas grandes, en las que adicionalmente
se pueden invocar acciones de edición, relación etc., para cada uno de sus registros
individual y/o colectivamente.
Es ideal para ofrecer opciones de configuración, complicadas (ejemplos activar/desactivar
módulos de extensión, administrar catálogos de bibliotecas o gestores documentales, etc.).
Tabs secundarios - (pills)
Ofrece un juego de etiquetas con enlaces que simulan carpetas tabuladas, para
indicar que existe un juego de páginas asociado con la acción en curso.
|
<?php // Preparar un array [ descriptor => enlace, ... ] para los tabs $tabs = [ 'Lista' => 'admin/content/clasificacion/clasif-dwy36b', 'Agregar' => 'admin/content/clasificacion/clasif-dwy36b/add', 'Modificar'=> 'admin/content/clasificacion/clasif-dwy36b/modificar/10', 'Eliminar' => 'admin/content/clasificacion/clasif-dwy36b/eliminar/10', ]; // prepara un array de definición de elemento tipo pills $elm = [ '#name' => 'innertabs', '#title' => 'Modificación de descriptor de clasificación', '#type' => 'pills', '#tabs' => $tabs, '#current' => 'Modificar', '#tabs-disabled'=> ['Eliminar'], 'weight' => -9999, ]; // muestra el contenido echo theme('pills', $elm);
Filedset
Ofrece un contenedor cloapsable enmarcado para agrupar grupos de campos que poseen
unidad conceptual. En él, al igual que en los markup se puede insertar y agrupar
cualquier cantidad de elementos de cualquier naturaleza como subarrays del mismo.
Es ideal para presentar agrupadas por secciones las partes de los formularios.
<?php module_load_include('inc', 'foliate', 'hook/elements'); // definición: $item = [ '#name'=>'conjunto', '#type' => 'filedset', '#collapsed' => TRUE, '#value'=>'Este texto aparece antes que el grupo.', '#title'=>'Este es un grupo de campos colapsable' '#description'=>'La descripción en los fieldsets cumple una función diferente a la que se le brinda en los demás contenedores. En un fieldset se muestra como texto principal, a modo de presentación del grupo.' ]; // uso: echo theme_fieldset($item);
<?php module_load_include('inc', 'foliate', 'hook/elements'); // definición del juego de opciones: $options = [ 0=>[ 'Html filtrado', '<ul> <li>Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.</li> <li>Etiquetas HTML permitidas: \<a\> \<em\> \<strong\> \<cite\> \<code> \<ul\> \<ol\> \<li\> \<dl\> \<dt\> \<dd\></li> <li>Saltos automáticos de líneas y de párrafos.</li></ul>'], 1=> [ ' Html pleno', '<ul> <li>Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.</li> <li>Admite todas las etiquetas de la especificación Html5. Debe usarse con cuidado.</li> <li>Saltos automáticos de líneas y de párrafos.</li></ul>'] ]; // es importante notar que las opciones se pasan como arrays id => [label, descripción], ... // y no como arrays [ id => label, ... ] // para lograr que cada radio tenga una descripción de ayuda bajo él. // Definición del grupo de radios $radios = [ '#name'=>'body-format', '#type' => 'radios', '#value'=>[0], '#labelpos'=>1, '#required'=>FALSE, '#options'=>$options, '#togglehelp'=>0 ]; // Definición del fieldset $fieldset = [ '#title' => 'Formato de entrada', '#name' => 'body-formats', '#collapsible' => TRUE, '#type' => 'fieldset', '#collapsed'=>TRUE, 'body-format' => $radios ]; // Salida echo theme_fieldset($fieldset);
Form
Este elemento se encarga de unificar e integrar en unidades funcionales (formularios)
a grupos de elementos de modo que sean tratados como tales para intercambiar información
con el servidor.
Se define como un array de definiciones de elementos válidos. Y, sus atributos, sos establecidos
(en caso de no ser pasados) a defaults razonables.
<?php module_load_include('inc', 'foliate', 'hook/elements'); // definición: $item = [ '#name'=>'formulario', '#type' => 'form', '#title'=>'Este es un formulario', '#method' => 'post', '#enctype' => 'multipart/form-data', // si usa al menos un elemento 'file' ]; // uso: echo theme_form($item);
Markup
Ofrece un contenedor simple, en el que se puede insertar y agrupar cualquier cantidad
de elementos de cualquier naturaleza como subarrays del mismo. Es ideal para diseñar y construir
elementos personalizados que luego puedan ser ofrecidos e insertados en cualquier
página o formulario en tiempo de producción. En principio no requiere que sea establecido
ningún atributo (salvo #type) pero, se pueden asignar los siguientes:
<?php module_load_include('inc', 'foliate', 'hook/elements'); // Código del Ejemplo 1: // definición: $item = [ '#name'=>'conjunto', '#type' => 'markup', '#value'=>'Este texto aparece antes que el grupo.', '#inline'=>FALSE, '#title'=>'<h3>Este es un grupo de campos</h3>' '#description'=>'Los comentarios a un markup aparecen bajo el grupo y aplican al conjunto completo.' ]; // uso: echo theme_markup($item);
// Código ejemplo 2: // Se toma el grupo de opciones usado en el ejemplo checkboxes // y la caja de texto usada en el ejemplo de textfield $subitem1 = [ '#name' => 'complementarias_nvo', '#title' => 'Opciones complementarias', '#type' => 'checkboxes', '#value' => [], '#labelpos' => 0, '#options' => $options, // se elimina el item '#description' ]; $subitem2 = [ '#name'=>'textitem_nvo', '#type' => 'textfield', '#size'=>60, '#maxlength'=>128, '#title'=>'Texto a enviar', '#inline' => TRUE, ]; // y se anidan en el markup del eljemplo anterior $item['complementarias_nvo'] = $subitem1; $item['textitem_nvo'] = $subitem2; // finalmente se repite el llamado de salida: echo theme_markup($item);
Las definiciones de atributos establecen las características generales de los elementos
html5 usados para controlar el paso de información entre el cliente y el servidor.
El control de su aspecto, salvo pequeños detalles, se delega por completo, en las hojas de estilo y en los
temas instalados. Aquí, se trata básicamente, de asegurar su funcionalidad. Aunque algunos
de estos deben servir para conectar con hojas de estilo y scripts pasando juegos de clases adecuados.
A continuación se ofrece una referencia rápida para manejar adecuadamente sus valores:
Sólo los atributos #type y #name son requeridos. Todos los demás poseen defaults razonables que hacen posible no pasarlos, en la mayoría de los casos. El par de atributos '#prefix', '#suffix' puede ser empleado para insertar el elemento dentro del contenedor que se desee.
En este ejemplo se prueba el modelo de definición y control de formularios inspirado por Drupal6.x. Se definen tres métodos procesadores:
Php - BiblioTools [Documentación]