Julius'Lab

Cómo le hice aquella vez

(Formidable) Establecer orden específico para una Vista con un enlace

Agregar el siguiente código PHP:
(tomado de Change View order based on URL parameter)

add_filter( 'frm_filter_view', 'change_my_view_object', 10, 1);
function change_my_view_object( $view ) {
	if ( $view->ID === 8477 ) { // 8477 is the View id
		if ( isset( $_GET['my_param'] ) && $_GET['my_param'] == 'descent' ) {
			$view->frm_order_by = array( created_at );
			$view->frm_order = array( 'DESC' );
		}
	}

	return $view;
}

En el ejemplo, 8477 es el id de la Vista.

En my_param puede ponerse el nombre del parámetro al gusto, e igualmente en descent, cualquier valor.

En la línea $view->frm_order_by = array( created_at );, dentro de los paréntesis, puede haber un ID de un campo (p.e. 150), campo por el cual se ordenará la Vista. En este ejemplo, se usa created_at como campo a ordenar, lo cual sirve para ordenar por creación de la entrada de forma ascendente o descendente.

En la línea $view->frm_order = array( ‘DESC’ );, se pone ASC o DESC, lo que se desee.

Para implementar, el enlace es como:

https://url.com/?my_param=descent

(Formidable) Establecer orden específico para una Vista con un enlace Leer más »

(Javascript) Convertir un número a formato moneda (currency)

JavaScript tiene un formateador de números (parte de la Internationalization API): Intl.NumberFormat

// Create our number formatter.
var formatter = new Intl.NumberFormat('en-US', {
  style: 'currency',
  currency: 'USD',

  // These options are needed to round to whole numbers if that's what you want.
  //minimumFractionDigits: 0, // (this suffices for whole numbers, but will print 2500.10 as $2,500.1)
  //maximumFractionDigits: 0, // (causes 2500.99 to be printed as $2,501)
});

formatter.format(2500); /* $2,500.00 */

Usar undefined en lugar del primer argumento (‘es-MX’ en el ejemplo) para usar el system locale (el «user locale» en caso de que el código esté corriendo en un navegador).

Aquí hay una lista de los «currency codes«.

Código listo para usar (poner dentro del script antes de cualquier número que vaya a desplegarse):

var formatter = new Intl.NumberFormat('en-US', {
  style: 'currency',
  currency: 'USD',
});

Para formatear lo deseado:

formatter.format(colocar aquí el número o expresión numérica a formatear);
formatter.format(2500); /* $2,500.00 */

Fuente: StackOverflow

(Javascript) Convertir un número a formato moneda (currency) Leer más »

(Javascript) Sumar columnas (o celdas cualquiera, o cualquier elemento) en tablas, grids, etc.

<script type="text/javascript">
        var myIVAtotal = 0;
        document.querySelectorAll(".cotRepIVAsum").forEach(
          function(acell){
             var cellvalue= parseFloat(acell.innerHTML);
             if (!isNaN(cellvalue)) {myIVAtotal += cellvalue;}
         }
        );
    document.getElementById('SumaIVA').innerHTML = myIVAtotal.toFixed(2);
</script>

En el caso en que se aplicó, la necesidad era sumar todas las celdas de una tabla producida por base de datos en Formidable, en una Single Entry View. Finalmente, pueden sumarse cualquier cantidad de elementos una vez rendereados en la página.

En el ejemplo, .cotRepIVAsum es el identificador de class de las celdas de la tabla o elementos que se quieran sumar (funciona con div, span, p, etc. cualquier html tag).
document.querySelectorAll(«.cotRepIVAsum»).forEach revisa cada elemento con la clase definida, parseFloat convierte los valores de las celdas (que vienen como texto en el html) a número con decimales. Luego el if(!isNan(cellvalue)) comprueba si es número, si es así, lo suma a myIVAtotal con myIVAtotal += cellvalue y finalmente lo sustituye en cualquier html con tag, en este casi en div id=»SumaIVA».

EJEMPLO CON ANOTACIONES:

<script type="text/javascript">
        var myIVAtotal = 0; //variable para obtener el valor final
        document.querySelectorAll(".cotRepIVAsum").forEach( //revisa todos los elementos con la clase deseada
          function(acell){
             var cellvalue= parseFloat(acell.innerHTML); //obtiene el valor de la celda revisada (parseFloat obtiene número con decimales, parseInt obtiene sólo enteros
             if (!isNaN(cellvalue)) {myIVAtotal += cellvalue;} //checa si no es número, si lo es, procede a agregar el valor a la sumatoria total
         }
        );
    document.getElementById('SumaIVA').innerHTML = myIVAtotal.toFixed(2); //despliega la sumatoria total en cualquier div con ese tag, toFixed(2) redondea a 2 decimales
</script>

(Javascript) Sumar columnas (o celdas cualquiera, o cualquier elemento) en tablas, grids, etc. Leer más »

(Excel) Cómo contar las veces que se repite un texto en una sola celda de Excel

Ejemplo: la palabra «performer«. Necesitamos contar las veces que se repite esta palabra en cada celda.

El contenido de la celda C2 es el siguiente:

Ariel Barreras(performer), Ariel Barreras(writer)

El contenido de la celda C3 es el siguiente:

Ariel Barreras(performer), Natalia Castrejón(performer), Ariel Barreras(writer)

La primera parte de la fórmula consiste en sustituir la palabra «performer» por un caracter extraño (que no tenga posibilidades de aparecer en alguna de las celdas a comprobar). Eso lo consigue esta fórmula:

=SUSTITUIR($C2,"performer","~")

Al aplicarla a las celdas:

C2: Ariel Barreras(~), Ariel Barreras(writer)
C3: Ariel Barreras(~), Natalia Castrejón(~), Ariel Barreras(writer)

Pero eso sólo es para comprobar, no la aplicaremos directamente. La guardamos en cualquier texto, sin el símbolo de igual: =

La siguiente fórmula, cuenta las veces que aparece dicho caracter en la celda a comprobar, en el caso de la C2:

=LARGO(C2)-LARGO(SUSTITUIR(C2,"~",""))

Aplicándola en la columna F, misma línea, el resultado sería:

F2 (refiriéndose a la celda C2): 1
F3 (refiriéndose a la celda C3): 2

Ahora, en la segunda fórmula, sustituimos la referencia a la celda correspondiente, con la primera fórmula, es decir:

SUSTITUIR($C2,"performer","~")

se inserta en

=LARGO(C2)-LARGO(SUSTITUIR(C2,"~",""))

sustituyendo las apariciones de C2.

La fórmula final es:

=LARGO(SUSTITUIR($C2,"performer","~"))-LARGO(SUSTITUIR(SUSTITUIR($C2,"performer","~"),"~",""))

Utilizado en las hojas de Excel para: SISTEMA DE SAPS RECORDS (http://sistema.sapsrecords.com/)

(Excel) Cómo contar las veces que se repite un texto en una sola celda de Excel Leer más »

(Solución) El sitio no se puede ver en mi equipo (Modech y Starwebs), según que por la IP de Broadcast terminada en 255

Solución: Usar el VPN de Opera Browser.

En Donweb me dicen que es porque el último octeto de mi IP Pública (en el caso específico 187.224.124.255), o sea, el 255, la define como una IP de Broadcast, y que los firewall de Donweb no permiten el acceso a sus webs. Lo cual es una mentira, porque todas las demás webs excepto Modech y Starwebs.uno me permiten el acceso sin problams.

Por lo que deduzco que algún problema de configuración deben tener y no quieren revelarlo, ya que esas dos fueron los dos sitios más antiguos que había creado (desde el 2018), problema que no heredan los hostings nuevos.

La solución extendida fue trasladar el sitio completamente a un hosting nuevo, con el plugin All In One WP Migration, y después trasladar los dominios.

(Solución) El sitio no se puede ver en mi equipo (Modech y Starwebs), según que por la IP de Broadcast terminada en 255 Leer más »

Filtrar una Vista por el valor de uno o dos campos con un operador OR

Es posible filtrar una Vista si UNO o DOS campos de las entradas contienen un valor, esto es:
Si Campo A tiene un valor X, o el Campo B tiene un valor Y.

En la Vista, en Ajustes Avanzados, hay que poner un filtro con el nombre del primer campo:

CampoA es Igual a custom
(hay que ponerla así, sólo la palabra custom)

Alterado por mí, del siguiente enlace: https://formidableforms.com/knowledgebase/frm_where_filter/#kb-add-two-filters-combined-with-or

Código:

add_filter('frm_where_filter', 'filtro_campoa_or_campob', 10, 2);
function filtro_campoa_or_campob($where, $args){
	$view_id = 257; // ID de la Vista a filtrar
	$field_1 = 269;// ID del campo A ESTE ES EL PRIMER CAMPO A CHECAR
	$field_2 = 268;// ID del campor B ESTE ES EL SEGUNDO CAMPO A CHECAR
    $user = wp_get_current_user(); // Asigna a la variable $user el Usuario Actual
	$search_term_1 = $user->usr_assign_num_name; // Primer término a comparar: sustituir por algún valor o valor de un campo (o meta-key del usuario, en este caso)
	$search_term_2 = $user->usr_assign_clave; // Segundo término a comparar: 1011000001 (clave usuario)
	if ( $args['display']->ID == $view_id && $args['where_opt'] == $field_1 ) {
		$search_val_1 = $search_term_1; //tal vez estas dos líneas (esta y la siguiente) son superfluas, se podría llegar directamente a $search_val_1
		$search_val_2 = $search_term_2; // y $search_val_2 sin necesidad de pasar por $search_term_1 y $search_term_2

		if ( $search_val_1 && $search_val_2 ) {
			$where = "( (meta_value = '". $search_val_1 ."' and fi.id = " . $field_1 . ")";
			$where .= " OR (meta_value = '" . $search_val_2 . "' and fi.id = " . $field_2 . ") )";
                } else if ( $search_val_1 ) {
			$where = "(meta_value = '". $search_val_1 ."' and fi.id = " . $field_1 . ")";
                } else if ( $search_val_2 ) {
			$where = "(meta_value = '". $search_val_2 ."' and fi.id = " . $field_2 . ")";
		} else {
			$where = "fi.form_id = " . $args['display']->frm_form_id;
		}
	}
	return $where;
}

Filtrar una Vista por el valor de uno o dos campos con un operador OR Leer más »

(Unfinished) Cómo crear un «Constructor de Código» (Code Builder)

Con Formidable Forms podemos crear un «Constructor de Código» en caso de tener la necesidad de escribir un código complejo y recurrente sin tener que copiarlo y editarlo de la última instancia.

En este caso de ejemplo, se construirá un código para un shortcode frm-set-get que incluirá varios parámetros en secuencia.

Paso #1
Crear el formulario

With Formidable Forms we can create a «Code Builder» in case we need to write a complex and recurring code without having to copy and editing from the last instance.

In this example, we’ll build a code for a frm-set-get shortcode that will include several parameters in a sequence. This shortcode is suitable to feed a «Dynamic poll system» (ANOTHER ARTICLE). The resulting code will be something like:

Step #1
Create a form by the usual procedure and name it Codebuilder form (or as you like). In Settings>Form permissions activate the options «Limit form visibility to ADMINISTRATOR» (or any role you like to use the code builder) and «Allow front-end editing» with the correspondent permissions.

Step #2
In our new form, we start by inserting a Text field, and in its Key Field we’ll name it codebuilder-code. This will be the field which will hold the main resulting code. The field label can be something like «Code».

Step #3
Add a Hidden Field. In Default Value of the codebuilder-code field, insert this code:

(Unfinished) Cómo crear un «Constructor de Código» (Code Builder) Leer más »

(Formidable) Cómo filtrar entradas por un campo tipo Toggle (Alternar)

Para filtrar un campo tipo Toggle, el campo debe estar configurado en el formulario con «Mostrar etiquetas» activado, y colocar, por ejemplo, las etiquetas 1 (activo) y 0 (inactivo).

En la Vista, en la sección Advanced Settings, debe ponerse como
(en este ejemplo, el campo Toogle es «Privado»)

Para mostrar (o incluir en el cálculo) todas las entradas en las que «Privado» esté inactivo:

Privado not_equal 1

Y en los shortcodes de frm-stats:

Privado=»»

Para mostrar (o incluir en el cálculo) todas las entradas en las que «Privado» esté activo:

Privado equals 1

Y en los shortcodes de frm-stats:

Privado=1

(Formidable) Cómo filtrar entradas por un campo tipo Toggle (Alternar) Leer más »