Julius'Lab

Formidable

(Formidable) Limitar mes de un datepicker al mes en curso

Para limitar el mes de un datepicker en Formidable, usar este código en Code Snippets:

add_action('frm_date_field_js', 'limit_date_field_to_current_month');
function limit_date_field_to_current_month($field_id){
  if($field_id == 'field_FIELDKEY'){ // change FIELDKEY to the key of the date field
    $first_day_of_month = date('Y-m-01');
    $last_day_of_month = date('Y-m-t');
    $first_day_js = date('n-j-Y', strtotime($first_day_of_month));
    $last_day_js = date('n-j-Y', strtotime($last_day_of_month));
    
    echo "
      ,minDate: new Date('{$first_day_js}')
      ,maxDate: new Date('{$last_day_js}')
      ,dateFormat: 'dd/mm/yy'
      ,showMonthAfterYear: false
      ,monthNames: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre']
      ,monthNamesShort: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre']
    ";
  }
}

Este código fue escrito por ChatGPT (https://chatgpt.com/c/983f82d5-fc89-466d-95ad-790f116960ab) basado en el código dado por Formidable en https://formidableforms.com/knowledgebase/frm_date_field_js/#kb-custom-dynamic-date-range

Curiosamente, en monthNamesShort estaban los nombres de tres caracteres de los meses (‘ene’,’feb’,’mar’, etc) pero se los tuve que cambiar ya que sólo toma el nombre en ese array, y ChatGPT no lo solucionó.

NOTA: IMPORTANTE que la línea ,dateFormat:’dd/mm/yy’ tenga ese formato para que la fecha elegida sea aceptada por el formulario.

(Formidable) Limitar mes de un datepicker al mes en curso Leer más »

(Formidable) Filtrar por fecha una Vista a través de otra

VISTA PARENT: ENTRADAS-FECHAS

[display-frm-data id=entradas-fechas filter=limited]
<div class="dateBox">
    <div class="dateDisplay">[fecha-field] <span>[fecha-field format="l"]</span></div>
    <div class="entriesDisplay">[display-frm-data id=entradas thedate=[fecha-field format="Y-m-d"]]</div> //IMPORTANTE: format en fecha-field
</div>

Order: Fecha Descending (de la más reciente a la más antigua)

Filter: Fecha IS unique(get newest entries)

VISTA: ENTRADAS (View key: entradas)

<div class="EntryBox">
    <div class="entryTime">[time-field]</div>
    <div class="entryConcept">[concept-field]</div>
    <div class="entryDescription">[description-field]</div>
    <div class="entryAmount">$ [amount-field thousands_sep="," decimal=2]</div>
</div>

Order: (cualquiera)

Filter: Fecha IS EQUAL TO [get param=thedate]

(Formidable) Filtrar por fecha una Vista a través de otra Leer más »

(Formidable,Javascript) Checkboxes de Dynamic Fields – Aplicar JS para contar y limitar checkboxes

Formidable tiene un par de códigos en JS que cuentan y limitan las Checkboxes de un Checkbox field:

Count number of checked boxes:

Limit the number of checked boxes

 
Estos códigos funcionan muy bien con los campos Checkbox nativos de Formidable,pero no funcionan con los checkboxes creados por un Dynamic field.

Para esto, ChatGPT me ayudó a adaptar los scripts para que funcionen con los Dynamic/Checkboxes fields:

Limita los checkboxes seleccionados a un número arbitrario (en este caso 3):

jQuery(document).ready(function($) {
    var limit = 3; // Change this to your desired limit
    // Use event delegation to handle dynamic checkboxes
    $(document).on('change', 'input[name="item_meta[973][]"]', function() {
        var checkbox_num = $('input[name="item_meta[973][]"]:checked').length;
        if (checkbox_num > limit) {
            this.checked = false;
        }
    });
});

Cambiar 973 al ID del Dynamic/checkboxes field.

Cuenta los checkboxes seleccionados y coloca el valor en cualquier lugar:

jQuery(document).ready(function($) {
    // Use event delegation to handle dynamic checkboxes
    $(document).on('change', 'input[name="item_meta[973][]"]', function() {
        var val1 = $('input[name="item_meta[973][]"]:checked').length;
        $("#field_checkLimit").val(val1);
    });
});

Cambiar 973 al ID del Dynamic/checkboxes field, y dar nombre de class checkLimit a cualquier contenedor (div, span, etc.) en el que quiera colocarse el número de checkboxes seleccionadas.

Este es el script de los dos códigos combinados, para que lo haga todo junto:

jQuery(document).ready(function($) {
    var limit = 3; // Change this to your desired limit
    $(document).on('change', 'input[name="item_meta[973][]"]', function() {
        // Limit the number of checked checkboxes
        var checkbox_num = $('input[name="item_meta[973][]"]:checked').length;
        if (checkbox_num > limit) {
            this.checked = false;
        }

        // Count checked checkboxes
        var val1 = $('input[name="item_meta[973][]"]:checked').length;
        $("#field_checkLimit").val(val1);
    });
});

(Formidable,Javascript) Checkboxes de Dynamic Fields – Aplicar JS para contar y limitar checkboxes Leer más »

(Formidable/PHP) Colocar una entry meta en un campo (fecha, hora, id de la entrada, etc.)

Agregar este código donde se necesite (create o update entry):

add_action('frm_after_create_entry', 'frm_update_updated_at_meta', 10, 2);
add_action('frm_after_update_entry', 'frm_update_updated_at_meta', 10, 2);
function frm_update_updated_at_meta($entry_id, $form_id) {
    if ($form_id == 41) { //id of the form with the entry and the fields to set
        $updated_at = current_time('Y-m-d H:i:s'); // Get the current date and time

        $updated_date = date('Y-m-d', strtotime($updated_at)); // Extract the date part
        $updated_time = date('H:i:s', strtotime($updated_at)); // Extract the time part

        FrmEntryMeta::add_entry_meta($entry_id, 845, '', $updated_date);
        FrmEntryMeta::add_entry_meta($entry_id, 864, '', $updated_time);
        // Replace 845 and 864 with the IDs of the fields where you want to store the date and time parts respectively
    }
}

En este caso específico, la función extrae el valor meta de $updated_at (fecha de actualización), lo separa en 2 valores ($updated_date y $updated_time), y cada uno lo coloca en los campos 845 (date field) y 864 (time field) con el método: FrmEntryMeta::add_entry_meta, que automáticamente toma el id de la entrada con $entry_id y coloca el valor respectivo de las variables.

Puede usarse con el hook frm_after_create_entry o con frm_after_update_entry.
Pueden usarse otros valores meta, por ejemplo created_at o entry_id.

Ejemplo para colocar el id de la entrada en un campo:

add_action('frm_after_create_entry', 'frm_add_entry_id', 42, 2);
function frm_add_entry_id($entry_id, $form_id){
   if ( $form_id == 2 ) { //change 2 to the ID of your form
     FrmEntryMeta::add_entry_meta( $entry_id, 30, "", $entry_id);//change 30 to the ID of the field in which you want to store the entry ID
   }
}

(Formidable/PHP) Colocar una entry meta en un campo (fecha, hora, id de la entrada, etc.) Leer más »

(Formidable/JavaScript) Hacer que un campo Dinámico dispare otro campo (mientras Lógica Condicional de Formidable no funciona)

En un mundo perfecto, un campo dinámico debería poder «disparar» (trigger) la visualización de otro campo, si la lógica condicional de este campo se pone en:
In a perfect world, a Dynamic field should be able to trigger the displaying of another field, if Conditional Logic of the latter is set like this:

Show this field if any/all of the following match:
Field1 is equal to anything

Pero actualmente no funciona. Formidable alega que está al tanto de este problema, pero aún no tienen fecha de arreglo.
But it currently does not work. Formidable is allegedly aware of this issue, but they don’t have a fix date yet.

Así que, este es mi arreglo (gracias a ChatGPT):
So, this is my fix (thanks to ChatGPT:

<script>
jQuery(document).ready(function($){
// Hide field by default
	$("#frm_field_775_container").css('display','none');

	$(document).on('change', 'select[name="item_meta[773]"]', function(){ //select[name='item_meta[994]']
		var show;

		var val1 = $("select[name='item_meta[773]']").val();
		console.log("Selected value:", val1);
		if (val1 !== '' && val1 !== '0' && val1 !== '-1' && val1 !== ' ')
			{show = true;console.log("showing");}
		else
			{show = false;console.log("hidden");}

		if(show){
			$("#frm_field_775_container").css('display','block');
		}else{
			$("#frm_field_775_container").css('display','none');
		}
	});
});
</script>

Field773 es el campo Dinámico que dispara. Field775 es el campo inicialmente oculto que se muestra al elegir algo en el campo Dinámico.
Field773 is the triggering Dynamic field. Field775 is the field, initially hidden, that shows up when chosing something in the Dynamic field.

(Formidable/JavaScript) Hacer que un campo Dinámico dispare otro campo (mientras Lógica Condicional de Formidable no funciona) Leer más »

(Formidable/Divi) Resolver problema de enlaces de Calendario en Divi

Usando el tema Divi, los enlaces de la vista de Calendario de Formidable no funcionan de manera adecuada. Sólo hacen scroll un poco hacia abajo y no llevan al mes previo o siguiente.

La solución reside en agregar este script en Javascript (usando el plugin Simple Custom CSS and JS):

document.addEventListener('DOMContentLoaded', function() {
  var previousLink = document.querySelector('a.frmcal-prev');
  var nextLink = document.querySelector('a.frmcal-next');
  if (previousLink) {
    previousLink.href = previousLink.href.replace(/#.*/, '');
  }
  if (nextLink) {
    nextLink.href = nextLink.href.replace(/#.*/, '');
  }
});

Este script quita la parte: #frmcal-1411 de los enlaces (1411 en mi caso, es el id de mi vista Calendario), y los transforma de:

https://mysite.com/calendar/?frmcal-year=2023&frmcal-month=04#frmcal-1411

a:

https://mysite.com/calendar/?frmcal-year=2023&frmcal-month=04

Y con eso, el problema se resuelve.

(Formidable/Divi) Resolver problema de enlaces de Calendario en Divi Leer más »

(Formidable, CSS) Colocar un campo (frm-first) iniciando en cualquier columna

En un formulario de Formidable, puede colocarse cualquier campo iniciando en cualquier columna, en el grid de 12 columnas.

Suponiendo que quiere colocarse un campo de 4 columnas de ancho, iniciando en la columna 5:

Dar al campo las clases «frm_first frm-push-4»

Esta última es una custom class:

.frm-push-4 {
  grid-column: 5 / span 3!important;
}

Donde en grid-column, es el número de columna donde iniciará el campo, y 3 es el número de columnas que abarcará.

(Formidable, CSS) Colocar un campo (frm-first) iniciando en cualquier columna Leer más »

(Formidable, Javascript) Recargar la página después que se ha enviado un formulario en un Bootstrap Modal

Un formulario insertado en un Bootstrap Modal (add-on de Formidable) no refrescará automáticamente la página, ocurriendo que, a la hora de hacer clic fuera de la ventana modal y luego abrir la modal de nuevo, mostrará el mismo formulario con el mensaje de éxito o error. Manualmente hay que recargar la página con el navegador.

Para evitar esto, hay que:

1. En los Ajustes del formulario > Al Enviar: Mostrar el formulario con el mensaje de confirmación.

2. Ajustes > Ajax > Activar Enviar este formulario con Ajax.

3. En los mensajes Al Enviar y Al Actualizar, colocar el siguiente javascript:

<script>
    setTimeout("window.location.reload(true);",2000);
</script> 

Siendo 2000 el número de milisegundos para que recargue la página.

(Formidable, Javascript) Recargar la página después que se ha enviado un formulario en un Bootstrap Modal Leer más »

(Formidable, CSS) Cómo formatear los campos Dropdown dinámicos y sus placeholders

SELECTOR SIMPLE (ELEGIR SOLO UN VALOR)

#frm_form_35_container .chosen-container-single > a { //incluir #frm_form_35_container para formatear todos los dropdowns de un formulario
	height: 32px!important; //modifica y ajusta la altura del campo, 32px funciona bien para los tamaños estándar, "!important" es importante
}

#frm_form_35_container .chosen-container-single > a > span {
	font-size: 16px; line-height:32px!important; // tamaño y alineación vertical del placeholder
}

 
MULTISELECTOR


#field_usr_especialidad_dyn_chosen > ul > li > input { //altura del dropdown (usr_especialidad = nombre del dyn field)
	height: 30px!important;
}

#frm_form_35_container .chosen-search-input {
	font-size:16px!important; // sólo tamaño de la fuente, no he hallado la alineación del placeholder
}

(Formidable, CSS) Cómo formatear los campos Dropdown dinámicos y sus placeholders Leer más »