Estructura HTML de formularios en SPIP

Edición de formularios utilizados en el área privada.

Documento de referencia que especifica cómo deben estructurarse los formularios en SPIP

Estructura HTML

Un formulario básico se estructura de la siguiente manera:

<div class="formulaire_spip formulaire_editer formulaire_editer_nomformulaire formulaire_editer_nomformulaire-id">
<a id="nomformulaire" name="nomformulaire"></a>
<form action="#" method="post">
  <fieldset>
    <legend>Una Leyenda</legend>
    <p class="explication">Explicación del formulario</p>
    <div class="editer-groupe">
      <div class="editer editer_nomlabel obligatoire erreur">
        <label for="nomlabel">Correo</label>
        <em class="aide">#AIDER{arttitre}</em>
        <p class="explication"> Explicación de la etiqueta</p>
        <span class="erreur_message">Mensaje de error</span>
        <input type="type" class="type" name="nomlabel" id="nomlabel" value="" />
      </div>
    </div>
  </fieldset>
</form>
</div>

La etiqueta <div> en el recuadro de arriba tiene la clase formulaire_spip genérica . Los formularios de edición en el área privada también tienen la clase formulaire_editer que indica que estamos tratando con un formulario de edición de base de datos.

Cada campo de entrada está encapsulado en un elemento de clase .editer, que debe agruparse en un elemento de clase .editer-groupe. Hasta SPIP 3.0, estas clases se llevaban a cabo mediante las etiquetas html li y ul. A partir de SPIP 3.1, tomamos como convención el uso de div para reducir la síntesis de voz y mejorar la accesibilidad de los formularios.

El primer conjunto de campos es opcional, también podemos escribir, sin el conjunto de campos y sin los párrafos opcionales:

<div class="formulaire_spip formulaire_editer formulaire_editer_nomformulaire formulaire_editer_nomformulaire-id">
<a id="nomformulaire" name="nombre del formulario"></a>
<form action="#" method="post">
  <div class="editer-groupe">
    <div class="editer editer_nomlabel obligatoire">
      <label for="nomlabel">Correo</label>
      <input type="type" class="type" name="nomlabel" id="nomlabel" value="" />
    </div>
  </div>
</form>
</div>

Las clases especiales

  • « explication »: para indicar un mensaje de explicación (que se relaciona con todos los campos o con un paso). Ejemplo: <p class="explication">.
  • « attention »: para mostrar un mensaje sobre un campo de edición crítico. Ejemplo: <em class="attention"><:texte_login_precaution:></em>.
  • « obligatoire »: para indicar un campo obligatorio, que se aplicará al elemento de la lista principal. Ejemplo: <div class="obligatoire">.
  • « erreur »: para informar de un error, que se aplicará al elemento de la lista principal. Ejemplo: <div class="erreur">. Cada error tiene un mensaje explicativo, con la clase « erreur_message »: <span class="erreur_message">.

Marco incluyente

Este formulario puede incluir opcionalmente un marco de edición de formulario y luego puede contener un encabezado de formulario:

<div class="cadre-formulaire-editer">
  <div class="entete-formulaire"></div>
  <div class="formulaire_editer formulaire_editer_site formulaire_editer_site-#ENV{id_site,nouveau}"></div>
</div>

Gestión de mensajes de éxito / error

Mensajes globales
Un formulario debe contener obligatoriamente dos párrafos que permitan mostrar los aciertos y errores generales que puedan presentarse durante el envío. Las variables de entornomessage_ok y message_erreur son respuestas enviadas por SPIP (formularios CVT).

<div class="formulaire_editer formulaire_editer_site formulaire_editer_site-#ENV{id_site,nouveau}">
  [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
  [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
</div>

Mensajes específicos
Cada campo de formulario, encapsulado en un li, puede recibir un mensaje de error específico. Está contenido en la tabla de entorno de ’errores’ y se puede obtener de la siguiente manera:

[(#ENV**{erreurs}|table_valeur{nombre_de_campo})]

Podemos asignar la clase ’error’ al li y mostrar un error específico, si existe, así:

<div class="editer editer_descriptif[ (#ENV**{erreurs}|table_valeur{descriptif}|oui)erreur]">
  <label for="descriptif"><:texte_descriptif_rapide:></label>
  [<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{desctiptif})</span>]
  <textarea name='descriptif' id='descriptif' rows='2' cols='40'>[(#ENV**{descriptif})]</textarea>
</div>

Particularidades para los estilos css

Campos de entrada

Cada <input /> diferente de hidden debe tener una clase idéntica a su tipo (para superar una deficiencia del navegador Internet Explorer):

<input type="text" class="text" name="titre" id="titre" value="[(#ENV**{titre})]" />

Botones de envío
Los botones de envío se incluyen en un cuadro .boutons (que puede acomodar varios botones):

<p class="boutons"><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>

casillas radio/checkbox
En el caso de un botón de radio o casilla de verificación(checkbox), no podemos usar la misma estructura, por ejemplo, para tener el botón antes de la etiqueta, o para tener la lista de radio en horizontal.

Cada entrada (radio + etiqueta) se puede enmarcar con un bloque .choix

<div class="editer editer_syndication">
  <div class="choix">
    <input type='radio' class="radio" name='syndication' value='non' id='syndication_non'[ (#ENV{syndication}|=={non}|?{'checked="checked"'})] />
    <label for='syndication_non'><:bouton_radio_non_syndication:></label>
  </div>
  <div class="choix">
    <input type='radio' class="radio" name='syndication' value='si' id='syndication_oui'[ (#ENV{syndication}|=={si}|?{'checked="checked"'})] />
    <label for='syndication_oui'><:bouton_radio_syndication:><em>#AIDER{rubsyn}</em></label>
  </div>
</div>

De forma predeterminada la lista es vertical. Para hacer la lista horizontal, todo lo que tiene que hacer es especificar que el campo en cuestión es de tipo en línea (inline):

.formulaire_editer .editer_syndication .choix {display:inline;}

Principios generales de estos formularios para tener las etiquetas alineadas a la izquierda

¨

Nos encontramos en un caso en el que tenemos:

<div class="editer-groupe">
	<div class="editer">
		<label />
		<input />
	</div>
	<div class="editer">
		<label />
		<em />
		<span />
		<input />
	</div>	
</div>

1) aplicamos un relleno a la izquierda .editer mayor que el tamaño de la etiqueta (ej: 120px)

.formulaire_spip .editer {
	margin: 0;
	padding: 10px 10px 10px 130px;
	clear:both;
	border-top: 1px solid #eee;
}

2) le pedimos a la etiqueta que flote y se mueva hacia la izquierda (a través de un margen negativo)

.formulaire_spip .editer label {
	width: 120px;
	float:left;
	margin-left:-125px; 
	text-align: left;
	vertical-align: top;
}

3) cuando un conjunto de campos sigue a un .editer, también se desplaza hacia la izquierda (solo IE no lo tiene en cuenta) para que el conjunto de campos también tome todo el ancho

.formulaire_spip .editer fieldset {
	border:1px solid #888;
	background:white;
	margin-left:-125px; /* desplazamiento a la izquierda ... IE <8 no lo tiene en cuenta */
}

Autor o autora henry Publicado el:

Traducciones: català, English, Español, français, Nederlands