Categorías
Wordpress

Cómo actualizar un plugin de WordPress existente con SVN

Esta guía le mostrará cómo actualizar su complemento de WordPress en el directorio de complementos utilizando TortoiseSVN.

IMPORTANTE: Actualizar el archivo readme.txt para incluir el registro de cambios, incluido el número de versión actualizado y los cambios en la revisión.

  1. Actualice los archivos de su complemento en la carpeta Trunk.
  2. Cuando se cambia un archivo existente, aparecerá un signo de exclamación rojo sobre el icono del archivo.
  3. Una vez que esté listo para confirmar los cambios, haga clic con el botón derecho en un área en blanco de la carpeta Trunk y seleccione SVN Commit
  4. En el campo superior, ingrese una descripción adecuada para describir la actualización, por ejemplo, la versión 1.2.4
  5. Los archivos nuevos y los archivos de cambios aparecerán en el campo inferior, seleccione los archivos que desea actualizar y luego OK.
  6. Tendra que introducir su nombre de usuario y contraseña de WordPress, es el mismo nombre de usuario y contraseña con el que se dio de alta en el repositorio.
  7. Una vez realizada la actualización, haga clic en OK para guardar los cambios .
  8. Agregar revisión al directorio, desde la carpeta Trunk, haga clic derecho en una ubicación en blanco y elija TortoiseSVN -> Branch/tag
  9. En la carpeta ‘To path  , cambie la ubicación de trunk a tags /<número de versión>
  10. En el log mensaje introduzca comentario de revisión, por ejemplo, versión 1.2.4 – lazy load script y pulse OK
  11. Ahora debera ir a la cartepa de Tags, boton derecho y Elegir SVN update, con estp descargara todas las revisiones a tu carpeta local.

NOTA: Si cambió los números de versión, el número de versión del complemento cambiará en el directorio de WordPress pasados unos 15 minutos.

Categorías
angular

Fugas de memoria

Recursos de interés sobre las fugas de memoria en Angular

https://www.dwmkerr.com/fixing-memory-leaks-in-angularjs-applications/

Explicación del uso de las herramientas de desarrollador de chrome, para la búsqueda de fugas en angular (fichas Performance y Memory) y ejemplos de Anti-Patterns que tenemos que evitar con angular y sus soluciones.

https://www.toptal.com/angular-js/top-18-most-common-angularjs-developer-mistakes

Mirar la 1, 2, 6, 10, 12, 13 y 17

// Utiles
$(document.body).scope().$root;
$($0).scope();

Categorías
Base de datos

No hay forma de conectarse remotamente al puerto 3306 de mysql en plesk

Tienes que editar el fichero de configuración de mysql con tu editor favorito.

vi /etc/my.cnf

Añade estas 2 lineas

[mysqld]
skip-external-locking
bind-address = 0.0.0.0
Categorías
HTML5

¿Como eliminar el botón de descarga de la etiqueta vídeo?

Dependiendo de la versión de chrome, tendremos 2 formas.

A partir de la versión de chrome 67.0.3396.62

Añadimos este atributo a la etiqueta HTML5 Video

controlslist="nodownload"

Navegador Chrome sin el atributo controllist=»nodownload»

Navegador chrome con el atributo controllist=»nodownload»

El icono para descargar va depender de la versión de chrome instalada

Para versiones anteriores

Deberemos implementar unas clases CSS para ocultar el botón de descargar

video::-internal-media-controls-download-button {display:none}
video::-webkit-media-controls-enclosure {overflow:hidden}
video::-webkit-media-controls-panel {width: calc(100% + 18px); /* Ajustar los pixeles segun se necesite */}
Categorías
Prestashop

¿Como poner el slider de la home del prestashop al 100% de la pantalla?

Te vas a la ruta del servidor themes/classic/assets/css/custom.css 

body.page-index #wrapper .container{max-width:100%;width:100%;padding-left:0;padding-right:0}
 body.page-index #wrapper .featured-products,body.page-index #wrapper .banner,body.page-index #wrapper #custom-text{margin:0 15px}
 @media (min-width: 992px) {
 body.page-index #wrapper .featured-products,body.page-index #wrapper .banner,body.page-index #wrapper #custom-text{max-width:940px}
 }
 @media (min-width: 1200px) {
 body.page-index #wrapper .featured-products,body.page-index #wrapper .banner,body.page-index #wrapper #custom-text{max-width:1140px}
 }
 @media (max-width: 991px) {
 body.page-index #wrapper .featured-products,body.page-index #wrapper .banner,body.page-index #wrapper #custom-text{max-width:100%}
 }
 .carousel-control .icon-prev,.carousel-control .icon-next{margin:0}
Categorías
Prestashop

¿Como quitar el cuadro de seleccionar moneda en prestashop?

Tienes que ir a la sección de módulos y buscar «moneda» y pulsar en desactivar el modulo, ya no te aparecerá el selector.

Categorías
woocommerce

Ocultar el resto de gastos de envió, cuando el envió sea gratuito en woocommerce

Parece ser que existe un problema muy común, que surge cuando habilitas varios tipos de gastos de envío y habilitas la opción de gasto de envío gratuito cuando cumpla X condiciones.

Pues resulta que cuando se cumple los criterios para que el envío sea gratuito, woocommerce te da muestra una lista con todos los tipos de envíos disponibles, ¡incluido el envío gratuito!

Lo cual parece curioso, si ya es gratis el envio, para que mostrar la lista de los de pago, obviamente ningún cliente quiere pagar gastos de envío.

Y para mas inri, resulta que woocommerce, ofrece una solución un poco rara, ya que viene ocurriendo desde los inicios de woocommerce y es incluir una función dentro del tema hijo en funtions.php

O en su defecto utilizar un plugin de terceros WC Hide Shipping Methods

Versión WC 3.0+

/**
 * Hide shipping rates when free shipping is available.
 * Updated to support WooCommerce 2.6 Shipping Zones.
 *
 * @param array $rates Array of rates found for the package.
 * @return array
 */
 function my_hide_shipping_when_free_is_available( $rates ) {
 $free = array();
 foreach ( $rates as $rate_id => $rate ) {
 if ( 'free_shipping' === $rate->method_id ) {
 $free[ $rate_id ] = $rate;
 break;
 }
 }
 return ! empty( $free ) ? $free : $rates;
 }
 add_filter( 'woocommerce_package_rates', 'my_hide_shipping_when_free_is_available', 100 );

Versión WC 2.5

/**
 * woocommerce_package_rates is a 2.1+ hook
 */
 add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 );
 /**
 * Hide shipping rates when free shipping is available
 *
 * @param array $rates Array of rates found for the package
 * @param array $package The package array/object being shipped
 * @return array of modified rates
 */
 function hide_shipping_when_free_is_available( $rates, $package ) {
 // Only modify rates if free_shipping is present
 if ( isset( $rates['free_shipping'] ) ) {
 // To unset a single rate/method, do the following. This example unsets flat_rate shipping
 unset( $rates['flat_rate'] );
 // To unset all methods except for free_shipping, do the following
 $free_shipping = $rates['free_shipping'];
 $rates = array();
 $rates['free_shipping'] = $free_shipping;
 }
 return $rates;
 }
 

Versión < WC 2.5

/**
 * Hide ALL shipping options when free shipping is available and customer is NOT in certain states
 * Hide Free Shipping if customer IS in those states
 *
 * UPDATED FOR WOOCOMMERCE 2.1
 *
 * Change $excluded_states = array( 'AK','HI','GU','PR' ); to include all the states that DO NOT have free shipping
 */
 add_filter( 'woocommerce_package_rates', 'hide_all_shipping_when_free_is_available' , 10, 2 );
 /**
 * Hide ALL Shipping option when free shipping is available
 *
 * @param array $available_methods
 */
 function hide_all_shipping_when_free_is_available( $rates, $package ) {
 $excluded_states = array( 'AK','HI','GU','PR' );
 if( isset( $rates['free_shipping'] ) AND !in_array( WC()->customer->shipping_state, $excluded_states ) ) :
 // Get Free Shipping array into a new array
 $freeshipping = array();
 $freeshipping = $rates['free_shipping'];
 // Empty the $available_methods array
 unset( $rates );
 // Add Free Shipping back into $avaialble_methods
 $rates = array();
 $rates[] = $freeshipping;
 endif;
 if( isset( $rates['free_shipping'] ) AND in_array( WC()->customer->shipping_state, $excluded_states ) ) {
 // remove free shipping option
 unset( $rates['free_shipping'] );
 }
 return $rates;
 }
Categorías
Base de datos

Cómo elegir la base de datos entre MyISAM o InnoDB

El motor de almacenamiento se encarga de almacenar, manejar y recuperar información de una tabla. Los motores más conocidos son MyISAM e InnoDB. La elección de uno u otro dependerá mucho del escenario donde se aplique.

En la elección se pretende conseguir la mejor relación de calidad acorde con nuestra aplicación. Si necesitamos transacciones, claves foráneas y bloqueos, tendremos que escoger InnoDB.

Por el contrario, escogeremos MyISAM en aquellos casos en los que predominen las consultas SELECT a la base de datos.

InnoDB dota a MySQL de un motor de almacenamiento transaccional (conforme a ACID) con capacidades de commit (confirmación), rollback (cancelación) y recuperación de fallos.

InnoDB realiza bloqueos a nivel de fila y también proporciona funciones de lectura consistente sin bloqueo al estilo Oracle en sentencias SELECT.

Estas características incrementan el rendimiento y la capacidad de gestionar múltiples usuarios simultáneos.

No se necesita un bloqueo escalado en InnoDB porque los bloqueos a nivel de fila ocupan muy poco espacio.

InnoDB también soporta restricciones FOREIGN KEY. En consultas SQL, aún dentro de la misma consulta, pueden incluirse libremente tablas del tipo InnoDB con tablas de otros tipos

InnoDB

InnoDB es una tecnología de almacenamiento de datos de fuente abierta para MySQL, incluido como formato de tabla estándar en todas las distribuciones de MySQL AB a partir de las versiones 4.0.

Su característica principal es que soporta transacciones de tipo ACID y bloqueo de registros e integridad referencial. InnoDB ofrece una fiabilidad y consistencia muy superior a MyISAM, la anterior tecnología de tablas de MySQL, si bien el mejor rendimiento de uno u otro formato dependerá de la aplicación específica.

  • Soporte de transacciones
  • Bloqueo de registros
  • Nos permite tener las características ACID (Atomicity, Consistency, Isolation and Durability: Atomicidad, Consistencia, Aislamiento y Durabilidad en español), garantizando la integridad de nuestras tablas.
  • Es probable que si nuestra aplicación hace un uso elevado de INSERT y UPDATE notemos un aumento de rendimiento con respecto a MyISAM.

MyISAM

MyISAM es la tecnología de almacenamiento de datos usada por defecto por el sistema administrador de bases de datos relacionales MySQL.

Este tipo de tablas están basadas en el formato ISAM pero con nuevas extensiones. En las últimas versiones de Mysql, el motor InnoDB está empezando a reemplazar a este tipo de tablas por su capacidad de ejecutar transacciones de tipo ACID y bloqueo de registros e integridad referencial.

  • Mayor velocidad en general a la hora de recuperar datos.
  • Recomendable para aplicaciones en las que dominan las sentencias SELECT ante los INSERT / UPDATE.
  • Ausencia de características de atomicidad ya que no tiene que hacer comprobaciones de la integridad referencial, ni bloquear las tablas para realizar las operaciones, esto nos lleva como los anteriores puntos a una mayor velocidad