Julius'Lab

How-to

(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 »

(Formidable) Cómo mostrar u ocultar contenido a partir de user_meta keys

1) Agregar este code snippet: https://formidableforms.com/knowledgebase/php-examples/#kb-check-parameter-value

add_shortcode('if_get_param', 'check_get_param_value');
function check_get_param_value( $atts, $content="" ) {
    if ( ! isset( $atts['name'] ) || ! isset( $atts['value'] ) || ! isset( $atts['type'] ) ) {
        return $content;
    }
    
    $type = $atts['type'];
    if ( $type == 'greater_than' ) {
        $type = '>';
    } else if ( $type == 'less_than' ) {
        $type = '<';
    } else if ( $type == 'equals' ) {
        $type = '==';
    } else if ( $type == 'not_equal' ) {
        $type = '!=';
    }

    $get_value = isset( $_GET[ $atts['name'] ] ) ? $_GET[ $atts['name'] ] : '';

    if ( ! FrmFieldsHelper::value_meets_condition( $get_value, $type, $atts['value'] ) ) {
        $content = '';
    }

    return do_shortcode( $content );
}

2) Agregar este code snippet:

add_shortcode('user_meta', 'user_meta_shortcode_handler');
function user_meta_shortcode_handler($atts,$content=null){
 
	if ( !isset( $atts['user_id'] ) ){
		$user = wp_get_current_user();
		$atts['user_id'] = $user->ID;
	}
	if ( !isset( $atts['size'] ) ){
		$atts['size'] = '50';
	}
	if ( !isset( $atts['post'] ) ) {
		$atts['post'] = '';
	}
	if ( !isset( $atts['wpautop'] ) ) {
		$atts['wpautop'] = '';
	}

	$user = new WP_User($atts['user_id']);
 
	if ( !$user->exists() ) return;
 
	if( $atts['key'] == 'avatar'){
		return $atts['pre'] . get_avatar( $user->ID, $atts['size']) . $atts['post'] ;
	}
	if ( $user->has_prop( $atts['key'] ) ){
		if ($atts['wpautop'] == 'on'){
			$value = wpautop( $user->get( $atts['key'] ) );
		} else {
			$value = $user->get( $atts['key'] );
		}
	}
 
	if (!empty( $value )){
		return $atts['pre'] . $value . $atts['post'] ;
	}
 
	return;
}

Esto creará un nuevo shortcode: [user_meta key=»loquesea»]
Reemplaar «loquesea» con el nombre del user meta y encontrará el valor almacenado ahí.

También tiene unos cuantos parámetros que acepta si se quieren usar:

user_id – id del usuario del cual se quiere obtener el meta. Debe dejarse vacía si se quiere que sea igual al usuario actual.
key – meta key del campo que se quiere obtener.
wpautop = «on» – este se usa para áreas de texto o campos wysiwyg.
size = «100» – este se usa para especificar el tamaño del campo de avatar.

Probablemente la mayoría no se necesiten estas extra opciones pero pueden usarse.

3) Usaremos el shortcode frm-set-get (nativo de FormidableForms) para obtener el valor de la meta data (usando nuestro nuevo shortcode user_meta (implementado en el paso 2)) y guardarlo temporalmente, para decirle al shortcode if_get_param (implementado en el paso 1) que use el valor guardado, de la forma siguiente:

[ frm-set-get param=my_user_meta ][user_meta key="loquesea"][ /frm-set-get ]
[if_get_param name="my_user_meta" type="equals" value="VALOR A COMPROBAR"]Contenido si es VERDADERO[/if_get_param]

[if_get_param name="my_user_meta" type="not_equal" value="VALOR A COMPROBAR"]Contenido si es FALSO[/if_get_param]

Solución orientada por Chris de FDM Digitaly adaptada por Julius, desde Slack.

(Formidable) Cómo mostrar u ocultar contenido a partir de user_meta keys Leer más »

Asignar un valor de una función Javascript a un campo en Formidable

<script type="text/javascript">
jQuery(document).ready(function($){ //set a random 9-char key
    var currentValue = '';
    var lenght = 9;
    var randomChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz0123456789';
    var result = '';
    currentValue = $(field_mediakey).val();
    if ($(field_mediakey).val() == '') {
    for ( var i = 0; i < lenght; i++ ) {
            result += randomChars.charAt(Math.floor(Math.random() * randomChars.length));
        }
        $(field_mediakey).val(result);
    }
    $(field_yzjna).val($(field_mediakey).val());
});
</script>

Asignar un valor de una función Javascript a un campo en Formidable Leer más »

(Javascript) Crear un string alfanumérico random

<script type="text/javascript">
jQuery(document).ready(function($){ //set a random 9-char key
    var lenght = 9; // lenght of key
    var randomChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz0123456789'; //any string
    var result = '';
    for ( var i = 0; i < lenght; i++ ) { //fills result with 9 random characters from randomChars
            result += randomChars.charAt(Math.floor(Math.random() * randomChars.length));
        }
    return result; // do anything with "result" string
});
</script>

(Javascript) Crear un string alfanumérico random Leer más »

Cambiar el nombre de carpeta de instalación de WordPress en servidor

Cada instalación de WordPress se compone de un conjunto completo entre archivos y carpetas en un orden jerárquico específico que garantiza el funcionamiento correcto del sitio web.

Aunque la mayoría de los usuarios instalan WordPress es la carpeta raíz del sitio web que es generalmente public_html o htdocs, para acceder a él desde la URL absoluta de la página, sin embargo esto ni singifica que no puedes instalar varios WordPress en tu servidor o instalar WordPress en un carpeta separada.

El proceso de instalación de WordPress tanto en una ruta absoluta en el servidor como en una carpeta secundaria como en un enlace de http://example.com/tienda para vender los productos de tu empresa.

Pero ¿Qué pasa si quieres cambiar nombre de carpeta de WordPress? En este caso es necesario entonces hacer cambios en la ruta de instalación de tu servidor, lo cual explicamos en a continuación.

Cambiar Nombre de Carpeta de WordPress

Esta operación es un proceso de usuarios avanzados que entienden la organización de WordPress y cómo funciona una instalación, por eso te recomendamos primero crear un backup completo de los archivos y la base de datos de WordPress.

Si te sientes lo sufientemente seguro de manipular tu instalación y cambiar nombre de carpeta principal, entonces te recomendamos seguir los pasos detallados abajo al pie de la letra para no arruinar tu sitio web.

Cambiar Dirección URL de WordPress

El primero paso a dar para cambiar el nombre de la carpeta de instalación de WordPress es dirigirse al panel de control de tu sitio web actual, donde cambias los enlaces URLs actuales.

Supongamos a tu sitio web está en un carpeta llamada “wp” a la cual quieres cambiar al nombre de “blog”. En la sección de Ajustes → Generales del panel, estableces el valor de “blog” en la parte final de la URL de WordPress. Justo después de guardar los cambios con el botón Guardar cambios, aparecerá un error en la página.

No te preocupes, esto significa que acabas de cambiar nombre de carpeta de WordPress, y te está redirigiendo a la página de acceso para acceder de nuevo al sitio web.

Cambiar Nombre de Carpeta de WordPress

El segundo y último paso a hacer es acceder a los archivos de tu instalación mediante el protocolo FTP para ubicar la carpeta de tu sitio web de WordPress a la que quieres cambiar el nombre en el servidor.

Cambiar el nombre de carpeta de instalación de WordPress en servidor 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 »

Incrementar el valor campo en una entrada específica de acuerdo a una elección (Radio, dropdown o check)

Este código permite incrementar (o decrementar) el valor de uno o varios campos específicos de acuerdo a la opción elegida en un campo de opciones de otro formulario.

El ejemplo asume la creación de dos formularios FormularioA (origen/captura) y FormularioB (destino).

El FormularioA, el origen, recibirá la elección del usuario. Puede ajustarse, si se desea, para no guardar las entradas recibidad. En este formulario deberá crearse los siguientes campos:

  • Campo de opción (llamado YourChoice en este ejemplo), y asignar un valor diferente para cada opción (1, 2, 3 o lo que sea necesario). Deben ser diferentes para determinar la elección del usuario. En este caso ejemplo, contendrá tres opciones con los valores guardados 1, 2 y 3.
  • Campo de número (llamado TheEntry en este ejemplo). Este número contendrá el id de la entrada del Formulario B a la cual irán los cambios.

El FormularioB es el formulario destino. Cualquier entrada de este formulario podrá ser referenciada en el campo TheEntry, del FormularioA. En este caso ejemplo, este FormularioB contendrá tres campos numéricos con nombre: Total1, Total2 y Total3, correspondientes a cada una de las opciones del campo YourChoice en el FormularioA. Cada campo podrá ser incrementado por 1
(en este ejemplo) de acuerdo a la opción elegida por el usuario, en la entrada correspondiente FormularioA/TheEntry.

Una vez designado esto, deberá agregarse el siguiente código a Functions.php (o utilizar el plugin Code Snippets (recomendado))

add_action('frm_after_create_entry', 'after_entry_created', 30, 2);
function after_entry_created($entry_id, $form_id){
  if($form_id == 2){ //FormularioA (id:2)
    global $wpdb;
    $counter_ids = $_POST['item_meta'][7]; // [7] es el campo número en FormularioA (origen/captura) (id:2)
    if($_POST['item_meta'][16] == 1){ // [16] es el campo YourChoice, 1 es el valor seleccionado.
        $count_field = 12; //count_field=12 es el field_key del total1 (FormularioB id:3)
        foreach ( (array) $counter_ids as $counter_id ) {
            $total_get = FrmEntryMeta::get_entry_meta_by_field( $counter_id, $count_field, true );
            $wpdb->update( $wpdb->prefix .'frm_item_metas', array( 'meta_value' => ( (int) $total_get+1 ) ), array( 'item_id' => $counter_id, 'field_id' => $count_field ) );
        }//end of foreach
    }//end of if post1
    if($_POST['item_meta'][16] == 2){
        $count_field = 13; //count_field=13 es el field_key del total2 (FormularioB id:3)
        foreach ( (array) $counter_ids as $counter_id ) {
            $total_get = FrmEntryMeta::get_entry_meta_by_field( $counter_id, $count_field, true );
            $wpdb->update( $wpdb->prefix .'frm_item_metas', array( 'meta_value' => ( (int) $total_get+1 ) ), array( 'item_id' => $counter_id, 'field_id' => $count_field ) );
         }//end of foreach
    }//end of if post2
    if($_POST['item_meta'][16] == 3){
        $count_field = 14; //count_field=14 es el field_key del total3 (FormularioB id:3)
          foreach ( (array) $counter_ids as $counter_id ) {
          $total_get = FrmEntryMeta::get_entry_meta_by_field( $counter_id, $count_field, true );
          $wpdb->update( $wpdb->prefix .'frm_item_metas', array( 'meta_value' => ( (int) $total_get+1 ) ), array( 'item_id' => $counter_id, 'field_id' => $count_field ) );
          }//end of foreach
	}//end of if post3
  }//end of if($form_id == 2)
}//end of function

Las líneas 6 al 12 contienen un código que puede ser repetido para cada número de opciones.

Incrementar el valor campo en una entrada específica de acuerdo a una elección (Radio, dropdown o check) 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 »