Formularios - Bsale-IO/template-docs GitHub Wiki

Home > Componente > Formulario

  1. Plantillas de Formularios
  2. Componente de Formulario
  3. Variables de Formulario
  4. Imprimir Formulario
  5. Correo de respuesta

Formularios Especiales

  1. Encargar
  2. Cotización

Plantillas de Formularios

Tipo de plantilla url
Formulario /form/{{nombre formulario}}
Formulario-exito, Formulario-error /form/save/{{nombre formulario}}

Estructura básica Plantilla

<!DOCTYPE html>
<html lang="es">
   <head>
      {{ 'head' | get_component }}
   </head>
   <body>
      {{ 'body' | get_component }}
      {{ 'Cabecera' | get_component }}
      {{ 'Formulario' | get_component }}
      {{ 'Pie de Página' | get_component }}
   </body>
</html>
Componente Formulario
<!-- Datos Libro de reclamaciones Perú -->
<!-- Acá se deben colocar los datos de la empresa -->
{% assign empresa  = "Nombre Empresa" %}
{% assign ruc  = "ruc empresa" %}
<!-- Fin Datos -->

<!-- Configuración de mensajes personalizados -->
{% assign custom_msg_default = "Gracias por contactarnos" %} <!-- Mensaje por defecto -->
{% assign custom_msg_suscripcion = "¡Gracias por suscribirte! Te mantendremos informado." %}
{% assign custom_msg_contacto = "Gracias por contactarnos. Nos comunicaremos contigo pronto." %}
{% assign custom_msg_libro_reclamaciones = "Gracias por presentar su reclamo. Conforme al Código de Protección y Defensa del Consumidor, su reclamo ha sido registrado en nuestro Libro de Reclamaciones." %}
{% assign custom_msg_encargar = "Te avisaremos cuando el producto esté disponible." %}
{% assign custom_msg_cotizar = "¡Gracias por solicitar una cotización! Nuestro equipo revisará tu solicitud y te enviará una propuesta a la brevedad." %}

<!-- Selección del mensaje según el título -->
{% assign custom_msg = custom_msg_default %}

{% if title == "Suscripción" or title == "Suscripcion modal" %}
    {% assign custom_msg = custom_msg_suscripcion %}
{% elsif title == "Contacto" %}
    {% assign custom_msg = custom_msg_contacto %}
{% elsif title == "Libro de Reclamaciones" %}
    {% assign custom_msg = custom_msg_libro_reclamaciones %}
{% elsif title == "Encargar" %}
    {% assign custom_msg = custom_msg_encargar %}
{% elsif title == "Cotizar" %}
    {% assign custom_msg = custom_msg_cotizar %}
{% endif %}

<!-- Componente: formulario -->
<div class="container bs-form">
    {{ 'migas de pan' | get_component }}
    <div class="row justify-content-center">
        {% if msg %}
            <!-- Mensajes -->
            <div class="col-12">
                <div class="jumbotron formulario-mensaje-personalizado {% if error %}formulario-mensaje-error{% else %}formulario-mensaje-exito{% endif %}">
                    {% if error %}
                        <p class="lead">Lo sentimos</p>
                        <h1 class="display-4">{{ msg | strip_html }}</h1>
                    {% else %}
                        <h1 class="display-4">{{ custom_msg }}</h1>
                    {% endif %}
                </div>
            </div>
            <!-- Fin mensajes -->
        {% else %}
            <!-- Inicio formulario reclamaciones -->
            {% if title == "Libro de Reclamaciones" %}
                <div class="col-md-8 text-left">
                    <h1 class="pb-3 bs-title">{{ title }}</h1>
                    <p>Conforme a lo establecido en el Código de Protección y Defensa del Consumidor, esta institución cuenta con un Libro de Reclamaciones a su disposición.</p>
                    <p>Razón Social: {{ empresa }}</p>
                    <p>RUC: {{ ruc }}</p>
                    <br>
                    {{ 'this' | print_form: "Gracias por contactarnos", "Enviar", "", true }}
                </div>
                <div class="col-md-6 text-justify h6">
                    <li>La formulación del reclamo no impide acudir a otras vías de solución de controversias y no es requisito previo para imponer una denuncia ante el INDECOPI.</li><br>
                    <li>El proveedor deberá dar respuesta al reclamo en un plazo no mayor a quince (15) días calendario, pudiendo ampliar el plazo hasta por quince (15) días más, previa comunicación al consumidor.</li><br>
                    <li>NOTA: La respuesta a la presente queja o reclamo será brindada mediante comunicación electrónica enviada a la dirección que usted ha consignado en la presente Hoja de Reclamación. En caso de que usted desee que la respuesta le sea enviada a su domicilio deberá expresarlo en el detalle del reclamo o queja.</li>
                </div>
            {% else %}
                <div class="col-md-6 text-center">
                    <h1 class="bs-title">{{ title }}</h1>
                    <br>
                    {{ 'this' | print_form: "Gracias por contactarnos", "Enviar", "", true }}
                </div>
            {% endif %}
            <!-- Fin formulario reclamaciones -->
        {% endif %}
    </div>
</div>

{% if title == "Libro de Reclamaciones" %}
    <script defer>
    const titleNames = document.getElementById('nombres-y-apellidos');
    titleNames.insertAdjacentHTML('beforebegin', "<h4 class='text-left'>Datos de la Persona que presenta el Reclamo</h4>");

    const titleProduct = document.querySelector(`[name="identificación-del-bien-contratado"]`);
    titleProduct.insertAdjacentHTML('beforebegin', "<h4 class='text-left'>Identificación del Bien Contratado</h4>");

    const titleClaim = document.querySelector(`[name="tipo"]`);
    titleClaim.insertAdjacentHTML('beforebegin', "<h4 class='text-left'>Detalle del Reclamo</h4>"); 

    const textArea = document.getElementById('detalle-del-cliente');
    textArea.insertAdjacentHTML('beforebegin', "<p class='text-left texto-form'><span>- <strong>RECLAMO:</strong> Disconformidad relacionada a los productos expendidos o servicios brindados.</span></p><p class='text-left texto-form'><span>- <strong>QUEJA:</strong> Disconformidad NO RELACIONADA a los productos o servicios. Malestar o descontento respecto con la atenci&oacute;n al p&uacute;blico</span></p>")
    const textArea2 = document.getElementById('solicitud-del-cliente');
    textArea2.insertAdjacentHTML('beforebegin', "<div class='pt-4'></div>")

    </script>
{% endif %}
<!-- Fin componente: formulario -->

Componente de formulario utilizando estructuras Bootstrap

  • El mensaje {{ msg }} tiene un filtro {{ msg | strip_html }} para evitar que se rompa de la estructura HTML
Código CSS
.texto-form {
    font-size: 10px;
}

/* Estilos base para el jumbotron de mensaje */
.jumbotron.formulario-mensaje-personalizado {
    border: 1px solid #e1e5ec;
    box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
    background-color: #ffffff;
    padding: 1.5rem;
    border-radius: 8px;
    margin-bottom: 1.5rem;
    font-family: 'Roboto', sans-serif;
    display: flex;
    flex-direction: column;
    justify-content: center;
    height: 200px;
}

/* Estilos específicos para mensajes de error */
.jumbotron.formulario-mensaje-error {
    background-color: #fef2f2;
    border-color: #f5c6cb;
    color: #721c24;
}

/* Estilos específicos para mensajes de éxito */
.jumbotron.formulario-mensaje-exito {
    background-color: #ffffff;
    border-color: #c3e6cb;
    color: #155724;
    box-shadow: 0 4px 15px rgba(40, 167, 69, 0.1);
}

/* Estilo de los encabezados dentro del mensaje */
.jumbotron.formulario-mensaje-personalizado h1.display-4 {
    font-size: 1.8rem;
    font-weight: var(--font-light);
    margin-bottom: 0.5rem;
    color: var(--body-txt-default-color);
}

.jumbotron.formulario-mensaje-personalizado p.lead {
    font-size: 1rem;
    margin-bottom: 0.5rem;
    color: #555;
}

/* Media Query para pantallas pequeñas */
@media (max-width: 768px) {
    .jumbotron.formulario-mensaje-personalizado {
        padding: 1rem;
        height: auto;
    }

    .jumbotron.formulario-mensaje-personalizado h1.display-4 {
        font-size: 1.6rem;
    }

    .jumbotron.formulario-mensaje-personalizado p.lead {
        font-size: 0.9rem;
    }
}

Variables

Código Descripción
{{ title }} nombre del formulario , sólo funciona en plantilla formulario
{{ error }} true Mensaje error
false Mensaje éxito
Si el error es nulo "" el mensaje también es nulo ""
{{ msg }} Mensaje del formulario, depende de variable {{ error }} es editado en la configuración del formulario

Imprimir Formulario

{{ "nombre formulario" | print_form: "$Mensaje", "$Botón", "$Requerido", $Placeholder }}
Variables Descripción
$Mensaje String Mensaje de éxito del formulario, aparecera si el formulario no tiene configurado un mensaje personalizado. Debe ir siempre entre comillas
$Botón String Texto del botón , debe ir entre comillas
$Requerido String Texto que aparecerá si el campo es requerido, debe ir entre comillas
$Placeholder Boolean:true Muestra sólo placeholder
$Placeholder Boolean:false Muestra label y placeholder

Ejemplos

1. Formulario con label

{{ "contactanos" | print_form: "Gracias por contáctarnos", "Enviar", "", false }}

2. Formulario sin label

{{ "contactanos" | print_form: "Gracias por contáctarnos", "Enviar", "", true }}

3. Formulario Botón con icono

Icono en base a fontawesome.com

{{ "contactanos" | print_form: "Gracias por contáctarnos", "<i class='fa fa-envelope'></i>", "*", true }}

Correo de Respuestas

Todos los formularios pueden ser configurados para notificar al cliente la recepción de su correo. Para ello se debe habilitar la opción Habilitar envío de email al cliente en la configuración del formulario.

Respuestas personalizadas

Es posible emplear respuestas personalizadas capturando los datos que el cliente llenó en el formulario, esto es posible utilizando la variable {{data}}

Ejemplo de campos

nombre de campo de formulario variable de respuesta
nombre {{data.nombre}}
apellido {{data.apellido}}
e-mail {{data.e-mail}}
nombre y apellido ❌ no es posible utilizar nombres con espacio

Ejemplo de plantilla de respuesta

dato cliente
nombre Juan
apellido González
e-mail [email protected]

Hola {{data.nombre}} {{data.apellido}}:
Gracias por confiar en nosotros, te responderemos a la brevedad a tu correo {{data.e-mail}}

Correo que recibe el cliente

Hola Juan González:
Gracias por confiar en nosotros, te responderemos a la brevedad a tu correo [email protected]
⚠️ **GitHub.com Fallback** ⚠️