Trucos

Sistemas, Trucos

Forzar el cambio de contraseña cada cierto tiempo en Windows Home

Una de las cosas que está obligando (como es lógico) a las PYMES la RGPD es a establecer políticas de cambio de contraseña cada cierto tiempo. En Windows distintos a la edición Home esto se puede hacer con el complemento de directivas locales. Pero Windows Home no tiene esta opción. Te enseñamos cómo puedes hacerlo. Forzar el cambio de contraseña cada cierto tiempo en Windows Home. Al no disponer del complemento en el mmc, tenemos que usar línea de comandos. Activamos la caducidad de contraseñas. Abrimos un terminal con permisos de administrador y escribimos una de las siguientes opciones para activar que las contraseñas caduquen: wmic UserAccount set PasswordExpires=True    – si queremos que se aplique a todas las cuentas del equipo. wmic UserAccount where Name=’NombredeUsuario’ set PasswordExpires=True – si queremos que se aplique sólo a la cuenta NombredeUsuario. Podemos ver si está activado haciendo wmic UserAccount  o wmic UserAccount where Name=’NombredeUsuario’ . Este comando sin opciones nos muestra cómo están configuradas las cuentas. Obviamente se desactiva con False en el PasswordExpires. Establecer el tiempo de caducidad. Para ello en el terminal escribimos   net accounts /maxpwage:nnn Donde nnn es el número de días . Por ejemplo para cada mes podemos poner  net accounts /maxpwage:31 Si queremos comprobarlo ponemos net accounts. Si entras en el equipo con cuenta de Microsoft. Si entras en el equipo con cuenta de Microsoft, tienes una opción de renovar contraseñas cada cierto tiempo en la página de Microsoft entrado con tu usuario.  

Diseño Web, Gestores de contenidos, Trucos

Personalizar los campos obligatorios del checkout o compra de WooCommerce

Cuando vas a comprar en Woocommerce hay ciertos campos de registro obligatorios para realizar el checkout. Hoy os enseñamos cómo modificar dichos campos. Personalizar los campos obligatorios en el checkout de WooCommerce. Como viene siendo habitual, os dejamos dos maneras de hacerlo: Con plugins. Os dejamos tres de los más usados. El modo de hacerlo es similar en los tres. Escogemos la sección y ahí decidimos qué campos queremos que sean obligatorios. En alguno tienes que crear el campo  y luego definir su obligatoriedad o no. –Flexible Checkout Fields for WooCommerce– WooCommerce Checkout Manager– Checkout Field Editor (Checkout Manager) for WooCommerce   Aquí os dejamos cómo usar el primero. Puedes modificar los campos a través de un plugin o poniendo código en functions.php o en un Snippet. Personalmente creo que para este caso es mejor usar plugins, pero por si lo necesitas, aquí lo tienes.La información la tienes en este artículo de WooCommerce. Vas a tener que “jugar” un poco hasta encontrar los campos que quieres y cómo modificarlos, pero te dejamos un par de ejemplos de gente que lo ha hecho para que veas el código.   – Ejemplo de poner campos como obligatorios y quitar otros.– Deshabilitar la validación de campos (no se si es necesario). Ejemplo de Snippets.

Diseño Web, Gestores de contenidos, Prestashop, Trucos

Hacer que las páginas de producto empiecen arriba en Prestashop

Hace unos días un cliente os comentó que los usuarios se quejaban porque al pinchar en la paginación de Prestashop, la nueva página se cargaba en la parte inferior y no al comienzo. Eso les obligaba a hacer scroll hasta arriba. Os dejamos la solución. Tenéis dos maneras de solucionarlo. Botón Volver Arriba. En móviles Prestashop pone un botón de volver arriba. En escritorio lo esconde, pero podéis activarlo por CSS haciendo esto: .hidden-md-up.text-xs-right.up {display:block!important;} Esto debía ser suficiente … pero no lo era para los usuarios de nuestro cliente. Así que tuvimos que desarrollar una segunda opción. Hacer que cada página se cargue automáticamente al principio. Lo que vamos a incluir es un JQuery para que cuando pulse en la paginación, la siguiente carga comience al principio. Tras probar varios, el código lo encontramos aquí. Es el siguiente: $( ‘#products’ ).on( ‘click’, ‘.js-search-link’, function( event ) { var target = $( “#header” ); if ( target.length ) { event.preventDefault(); $( ‘html, body’ ).animate( { scrollTop: target.offset().top+300 }, 1000 ); } }); Se puede poner en varios sitios, pero nosotros lo pusimos al final del fichero  /themes/core.js Como veis, lo que hace es que cuando pinches en la clase .js-search-link hace un scrollTop hasta el principio. Funciona muy bien en modo desktop y tablet, en móviles después del la cabecera vienen los menús, así que tienes que bajar un poco más. Lo ideal sería que subiera a un anchor. Si lo modificamos lo colgaremos aquí.

Diseño Web, Gestores de contenidos, Trucos

User Switching: plugin de WordPress para acceder a la web como un usuario

Hoy os dejamos un plugin que para un usuario o dueño de página web puede no ser útil, pero que para los desarrolladores de páginas multiusuario es una maravilla. Plugin de WordPress para acceder como otro usuario. User Switching te permite, si eres administrador, acceder y ver la web como si fueras otro usuario. De esta manera, puedes comprobar que tiene los permisos adecuados, que puede ver o no ver las partes que debería. Es decir iniciar sesión como un usuario. También es muy útil cuando una web está en producción para poder resolver incidencias. Cuando un usuario se queja de algo, podemos acceder como ellos y comprobar exactamente qué le ocurre. Como digo, una maravilla para cualquier desarrollador web. Prestashop lo tiene de serie y lo echábamos de menos en WordPress. Para usar el plugin, una vez instalado, sólo tendremos que ir a Usuarios, buscar el que queremos y pinchar en la opción Switch to que aparece al posicionar el cursor encima de su nombre. Esto nos llevará a la web como dicho usuario. No necesitamos ni saber ni cambiar la contraseña del usuario en cuestión. Cuando hayamos acabado, sólo tenemos que bajar a fina de la pantalla donde veremos una opción de cambiar de vuelta a nuestro usuario administrador. También está  la opción en el menú de usuario de WordPress. El plugin es seguro, usa el sistema de cookies y no revela contraseña. Sólo pueden usarlo aquellos que puedan editar otros usuarios. Lo dicho….encantados con este descubrimiento que nos ahorra tener que abrir sesiones desde incógnito.

Compartir, Trucos, Video

Cómo añadir o eliminar administradores de un grupo de Skype

Hoy vamos a usar los comandos de Skype que compartimos en este artículo (y que poca gente conoce) para añadir administradores a un grupo de Skype. Cómo añadir administradores de un grupo de Skype. El caso que se nos dio el otro día fue que una persona había creado un chat en grupo, y por lo tanto era la administradora, pero quería abandonarlo y poner a otra persona como admin. Curiosamente Skype no tiene nada en el entorno gráfico para cambiar el rol de administrador. Pero se puede hacer por línea de comandos. Nota: para poder ver los usuarios y sus roles escribe /showmembers en la ventana de chat. Hay dos casos: Si lo puede hacer el administrador saliente. Esto obviamente es lo ideal. Si el administrador en curso está disponible el puede asignar otro administrador de la siguiente manera: /setrole usuariodeskype Admin Si esto no funciona prueba /setrole usuariodeskype Master Si no hay administrador. En teoría (no lo hemos probado), si el administrador en curso deja el grupo, cualquier usuario puede elevarse a administrador con los comandos del punto anterior. Porque tiene que haber un administrador. Ese mismo comando lo puede usar un administrador para relegar un admin a usuario (por ejemplo si te ha hecho el anterior administrador puedes cambiarle a él a usuario). Para ello pon /setrole usuariodeskype User Si quieres echar a un usuario recuerda que lo puedes hacer con /kick usuariodeskype Comandos muy útiles cuando gestionas grupos.

Diseño Web, Gestores de contenidos, Trucos

Marcar pedidos como Completados automáticamente en WooCommerce

Por defecto, cuando se realiza un pago de un pedido en WooCommerce este no aparece como completado sino como En Espera o “Procesando“.  Hoy te enseñamos a poner los pedidos como Completados automáticamente, una vez se hayan pagado. Cómo marcar los pedidos como Completados automáticamente en WooCommerce. WooCommerce considera que, tras el pago de un pedido, se debe realizar un proceso previo antes finalizarlo. Por ejemplo empaquetarlo o enviado. Por lo tanto, cuando un cliente realiza el pago, el estado pasa a Procesando y es el dueño de la tienda el que tiene que cambiarlo al siguiente estado. Sólo en los casos en los que el producto sea virtual y descargable (ambas opciones a la vez), WooCommerce completa los pedidos. Pero claro, esto puede no ser muy deseable para muchas tiendas online. Aquellas que tengan productos virtuales, las que sean aulas online y muchas otras, pueden querer que el pedido se procese tras el pago y el cliente tenga directamente acceso a lo que ha pagado. Sin tener que esperar a que el dueño de la tienda se lo apruebe. Os dejamos dos maneras de hacerlo: Con plugins. Tienes un plugin de pago, Order Status Control, pero también tienes alguno gratuito como Autocomplete WooCommerce Orders. Nosotros hemos probado este último y va genial. Puedes poner que se autocompleten los productos virtuales, o cualquier producto que se pague (nosotros probamos esta opción), o todos los productos independientemente de su pago (no recomendable). Con código. De nuevo puedes ponerlo en el functions.php de tu plantilla hija o en un plugin como Code Snippets. Los códigos te permiten más personalización como elegir el método de pago o el estado final. He encontrado varios y os los dejo para probar. –WooCommerce propone este: /** * Auto Complete all WooCommerce orders. */ add_action( ‘woocommerce_thankyou’, ‘custom_woocommerce_auto_complete_order’ ); function custom_woocommerce_auto_complete_order( $order_id ) { if ( ! $order_id ) { return; } $order = wc_get_order( $order_id ); $order->update_status( ‘completed’ ); } /** * Auto Complete all WooCommerce orders. */ add_action( ‘woocommerce_thankyou’, ‘custom_woocommerce_auto_complete_order’ ); function custom_woocommerce_auto_complete_order( $order_id ) { if ( ! $order_id ) { return; } $order = wc_get_order( $order_id ); $order->update_status( ‘completed’ ); } –Aquí podéis ver este donde podéis elegir el método de pago. // Actualiza automáticamente el estado de los pedidos a COMPLETADO add_action( ‘woocommerce_order_status_processing’, ‘actualiza_estado_pedidos_a_completado’ ); add_action( ‘woocommerce_order_status_on-hold’, ‘actualiza_estado_pedidos_a_completado’ ); function actualiza_estado_pedidos_a_completado( $order_id ) { global $woocommerce; //ID’s de las pasarelas de pago a las que afecta $paymentMethods = array( ‘bacs’, ‘cheque’, ‘cod’, ‘paypal’ ); if ( !$order_id ) return; $order = new WC_Order( $order_id ); if ( !in_array( $order->payment_method, $paymentMethods ) ) return; $order->update_status( ‘completed’ ); } – Y este otro artículo da varias opciones. Los estados de los pedidos por defecto los puedes ver entrando en un pedido y pinchando en el desplegable de estados o en la configuración de WooCommerce en los Emails. Pero son:   Cancelado (Cancelled). Fallido (Failed). Completo (Completed). Pendiente  (Pending payment). Procesando (Processing). En espera (On hold). Reembolsado (Refunded)

Diseño Web, Gestores de contenidos, Trucos

Cómo añadir código personalizado en WordPress. Plugin Code Snippets

Tu web es diferente a las demás, y seguramente requerirá algún comportamiento único. Esto se puede hacer por plugins, pero si es algo más concreto requiere código personalizado. Hoy os enseñamos a añadir dicho código en tu página de WordPress. Cómo añadir código personalizado en tu página de WordPress. Hay tres maneras lógicas de hacerlo: Añadir el código en el fichero functions.php de tu plantilla. Para eso está ese fichero, para las funciones que necesite la plantilla, y las adicionales que quieras tú. PERO (y es un gran pero), sólo lo recomendamos en el caso que hayas creado un tema hijo. Porque si lo añades en tu plantilla “padre”, y la actualizas, lo más seguro es que pierdas las modificaciones realizadas. Con un plugin para añadir código. El más famoso es Code Snippets y se lo ha ganado. Este plugin te permite añadir pequeños códigos (snippets) que puedes activar, desactivar, editar, añadir y borrar a tu antojo. Estos snippets funcionan como si los hubieras añadido al fichero functions.php. Pero además añade varias ventajas muy a tener en cuenta. -La primera es que si cometes un error de código no rompes la página entera (como ocurriría editando el fichero functions), sino que el plugin te avisa del error, de la línea, y desactiva el snippet. – La segunda es que puedes decidir el ámbito de aplicación del código: en toda la web, sólo en el backend, ejecutarlo sólo una vez…. – Para mi es excelente poder activar y desactivar códigos para poder hacer pruebas. – Además puedes poner descripción y etiquetas a tu código para poder saber lo que hace cuando haya pasado un tiempo, o para que lo lea otro desarrollador. – Los snippets se puede exportar y importar entre sitios. – No tienes que añadir tags como los de php, pero si se te olvida y los pones el plugin se encarga de quitarlos. Crear tu propio plugin. Otro día hablaremos de ello. Así que, si no quieres complicarte mucho, y no quieres que tu código dependa del tema, instala Code Snippets y a añadir código. Nosotros lo usamos para php pero puedes poner html, css javascript….lo que quieras.    

Diseño Web, Gestores de contenidos, Trucos

Código para añadir una página de Mis Productos en WooCommerce

Para una de las webs que estábamos desarrollando esta semana, necesitábamos crear una página para que los clientes pudieran ver sus productos.  Hemos encontrado un código que realiza esta función y os lo queremos dejar aquí para que lo uséis. Código para añadir una página de Mis Productos en WooCommerce. Lo primer es mencionar la fuente, el código lo encontramos aquí. Para activar el código tienes dos maneras: Ponerlo en el fichero functions.php de tu plantilla. Solo te recomiendo que hagas esto si has creado una plantilla hija. De no ser así, al actualizar la plantilla se te borrará el código modificado. Ponedlo antes de ?> Usar un plugin para poner códigos personalizados. Como el que mencionamos en este artículo. El código que hay que  poner es : /**  * @snippet       Display All Products Purchased by User via Shortcode – WooCommerce  * @how-to        Watch tutorial @ https://businessbloomer.com/?p=19055  * @sourcecode    https://businessbloomer.com/?p=22004  * @author        Rodolfo Melogli  * @compatible    Woo 3.4.5  */ // Note: this will only return purchased products for completed and processing orders add_shortcode( ‘my_products’, ‘bbloomer_user_products_bought’ ); function bbloomer_user_products_bought() { global $product, $woocommerce, $woocommerce_loop; $columns = 3; $current_user = wp_get_current_user(); $args = array(     ‘post_type’ => ‘product’,     ‘post_status’ => ‘publish’,     ‘posts_per_page’ => -1 ); $loop = new WP_Query($args); ob_start(); woocommerce_product_loop_start(); while ( $loop->have_posts() ) : $loop->the_post(); $theid = get_the_ID(); if ( wc_customer_bought_product( $current_user->user_email, $current_user->ID, $theid ) ) { wc_get_template_part( ‘content’, ‘product’ ); } endwhile; woocommerce_product_loop_end(); woocommerce_reset_loop(); wp_reset_postdata(); return ‘<div class=”woocommerce columns-‘ . $columns . ‘”>’ . ob_get_clean() . ‘</div>’; } /** * @snippet       Display All Products Purchased by User via Shortcode – WooCommerce * @how-to        Watch tutorial @ https://businessbloomer.com/?p=19055 * @sourcecode    https://businessbloomer.com/?p=22004 * @author        Rodolfo Melogli * @compatible    Woo 3.4.5 */ // Note: this will only return purchased products for completed and processing orders add_shortcode( ‘my_products’, ‘bbloomer_user_products_bought’ ); function bbloomer_user_products_bought() { global $product, $woocommerce, $woocommerce_loop; $columns = 3; $current_user = wp_get_current_user(); $args = array( ‘post_type’ => ‘product’, ‘post_status’ => ‘publish’, ‘posts_per_page’ => -1 ); $loop = new WP_Query($args); ob_start(); woocommerce_product_loop_start(); while ( $loop->have_posts() ) : $loop->the_post(); $theid = get_the_ID(); if ( wc_customer_bought_product( $current_user->user_email, $current_user->ID, $theid ) ) { wc_get_template_part( ‘content’, ‘product’ ); } endwhile; woocommerce_product_loop_end(); woocommerce_reset_loop(); wp_reset_postdata(); return ‘<div class=”woocommerce columns-‘ . $columns . ‘”>’ . ob_get_clean() . ‘</div>’; } Después puedes usar el shortcode [my_products] en cualquier sitio de WordPress para mostrar los productos. Aquí tenéis una versión del código que antes realiza una búsqueda en la base de datos y comprueba también si hay productos duplicados (porque unos incluyeron otros).

Linux, Sistemas, Trucos

Cómo activar los procesadores de un servidor virtual o cloud sin reiniciar

Hoy hemos tenido que ampliar los procesadores de un servidor Cloud para un cliente. Lo bueno de estos servidores es que, cuando hay un aumento repentino de accesos, se les puede aumentar los recursos de forma temporal. Porque son servidores virtuales. Sin embargo, la mayoría de las veces el aumento requiere reinicio y esto, en una máquina en producción, puede no ser viable inmediatamente. Hoy os enseñamos cómo activar los procesadores añadidos sin tener que reiniciar. Cómo activar los procesadores de un servidor virtual sin reiniciar. Al activar los procesadores nuevos podéis comprobar como todavía no están en funcionamiento con los comandos de este artículo. Por ejemplo si hacemos un lscpu veremos algo como: Si veis los CPU 0 y 1 aparecen online peor los 2 y 3 salen offline (en linux se centan desde 0). Como hemos dicho podemos reiniciar, y activará los que tiene offline. Pero también podemos ejecutar estos comandos: Activar procesadores. echo 1 > /sys/devices/system/cpu/cpu2/online echo 1 > /sys/devices/system/cpu/cpu3/online De esta manera pones a 1 (online) los atributos  sysfs de dichos procesadores. También se puede hacer lo mismo con chcpu chcpu -r chcpu -e 2 (Esto reescanea los cpus y activa el procesador 2) Para desactivar los procesadores: echo 0 > /sys/devices/system/cpu/cpu2/online echo 0 > /sys/devices/system/cpu/cpu3/online Esto hace lo contrario. Si ahora hacéis de nuevo un lscpu obtendréis que están todos activos:  

Diseño Web, Gestores de contenidos, Prestashop, Trucos

Mejorar la calidad de las imágenes que se suben o se importan en Prestashop

Hace unos días hemos hecho una página web para un cliente en Prestashop. Este cliente, tenía la peculiaridad (respecto a clientes anteriores) que disponía de unas imágenes con buena calidad. Al subirlas a Prestashop, tanto en la subida por producto, como en la importación masiva, la pérdida de calidad era más que evidente. Las fotos de Prestashop no tenían una calidad aceptable teniendo en cuenta las fotos de origen. Y en esa página, las imágenes eran clave. La página la hemos creado en 1.7, pero lo probamos en 1.6 y el resultado era el mismo. Calidad muy por debajo de lo aceptable cuando las imágenes originales son de calidad (para imágenes “usuales” si que es funcional). Obviamente modificamos todas las opciones de calidad en el backend de Prestashop ( Diseño > Ajustes de imágenes ), sin mejora importante del resultado. Nos somos a los primeros a los que les pasó (ver aquí y aquí). Es un tema recurrente y sin resolver (“sorpresa” por parte de Prestashop). Al final descubrimos por qué y cómo resolverlo. Os lo contamos en este artículo. Cómo mejorar la calidad de las imágenes que se suben o se importan en Prestashop. Lo primero es la causa que ocasiona esta pérdida de calidad. Prestashop comprime todas las imágenes al subirlas. Y crea varias imágenes de diferentes tamaños (que se definen en Diseño > Ajustes de imágenes ). Esto es lógico y bueno. El problema es que usa un método de compresión, GD2, que antes se usaba mucho por estar integrado en Php (o en la mayoría de las instalaciones). Sin embargo no es la librería que mejores resultados da, tiene pocas opciones y, además, creo que Php 7 ya no la incluye por defecto. Después de varias pruebas infructuosas con GD, optamos por cambiar a Imagemagick siguiendo las indicaciones de un post al que enlazamos en los párrafos anteriores. Siguiendo los resultados arreglaba algo la subida producto a producto, pero no la masiva. Y aún así, no conseguíamos los mejores resultados así que modificamos el proceso para lo que queríamos. Esto es lo que hicimos.. Para las subidas desde el backend. Tenemos que: Hacer un override (copiar en la carpeta override/classes) de la clase ImageManager.php porque queremos modificar la función resize para que use ImageMagick. Nota:  Para esto tu servidor tiene que tener ImageMagick o deberías poder instalarlo. Si no no funciona. En ese fichero   override/classes/ImageManager.php ponemos lo siguiente: <?php class ImageManager extends ImageManagerCore { /** * Resize, cut and optimize image * * @param string $src_file Image object from $_FILE * @param string $dst_file Destination filename * @param int $dst_width Desired width (optional) * @param int $dst_height Desired height (optional) * @param string $file_type * @param bool $force_type * @param int $error * @param int $tgt_width * @param int $tgt_height * @param int $quality * @param int $src_width * @param int $src_height * @return bool Operation result */ public static function resize2($src_file, $dst_file, $dst_width = null, $dst_height = null, $file_type = ‘jpg’, $force_type = false, &$error = 0, &$tgt_width = null, &$tgt_height = null, $quality = 5, &$src_width = null, &$src_height = null) { if (PHP_VERSION_ID < 50300) { clearstatcache(); } else { clearstatcache(true, $src_file); } if (!file_exists($src_file) || !filesize($src_file)) { return !($error = self::ERROR_FILE_NOT_EXIST); } list($src_width, $src_height, $type) = getimagesize($src_file); // If PS_IMAGE_QUALITY is activated, the generated image will be a PNG with .jpg as a file extension. // This allow for higher quality and for transparency. JPG source files will also benefit from a higher quality // because JPG reencoding by GD, even with max quality setting, degrades the image. if (Configuration::get(‘PS_IMAGE_QUALITY’) == ‘png_all’ || (Configuration::get(‘PS_IMAGE_QUALITY’) == ‘png’ && $type == IMAGETYPE_PNG) && !$force_type) { $file_type = ‘png’; } if (!$src_width) { return !($error = self::ERROR_FILE_WIDTH); } if (!$dst_width) { $dst_width = $src_width; } if (!$dst_height) { $dst_height = $src_height; } $width_diff = $dst_width / $src_width; $height_diff = $dst_height / $src_height; $ps_image_generation_method = Configuration::get(‘PS_IMAGE_GENERATION_METHOD’); if ($width_diff > 1 && $height_diff > 1) { $next_width = $src_width; $next_height = $src_height; } else { if ($ps_image_generation_method == 2 || (!$ps_image_generation_method && $width_diff > $height_diff)) { $next_height = $dst_height; $next_width = round(($src_width * $next_height) / $src_height); $dst_width = (int)(!$ps_image_generation_method ? $dst_width : $next_width); } else { $next_width = $dst_width; $next_height = round($src_height * $dst_width / $src_width); $dst_height = (int)(!$ps_image_generation_method ? $dst_height : $next_height); } } if (!ImageManager::checkImageMemoryLimit($src_file)) { return !($error = self::ERROR_MEMORY_LIMIT); } //Set Imagick Object values /* $src_image = new Imagick(); $src_image->readImage($src_file); $src_image->setImageCompression(Imagick::COMPRESSION_JPEG); $src_image->setInterlaceScheme(Imagick::INTERLACE_PLANE); $src_image->setImageCompressionQuality(89); $src_image->sharpenimage(2, 0.5, 134217727); $src_image->gaussianBlurImage(0.03,0.03); $src_image->stripImage(); $src_image->thumbnailImage($dst_width, $dst_height, Imagick::FILTER_SINC, 1);*/ $src_image = new Imagick(); $src_image->readImage($src_file); $src_image->setImageCompression(Imagick::COMPRESSION_JPEG); /*$src_image->setImageFormat(‘png’);*/ /*$src_image->setInterlaceScheme(Imagick::INTERLACE_PLANE);*/ $src_image->setImageCompressionQuality(89); /*$src_image->sharpenimage(1.5, 0.5, Imagick::CHANNEL_ALL);*/ /* $src_image->gaussianBlurImage(0.03,0.03);*/ $src_image->stripImage(); $src_image->thumbnailImage($dst_width, $dst_height, Imagick::FILTER_LANCZOS, 1); $src_image->brightnessContrastImage(1,0,Imagick::CHANNEL_ALL); $src_image->gammaImage(0.9,Imagick::CHANNEL_ALL); $src_image->modulateImage(100,120,100); //Output the final Image using Imagick return $src_image->writeImage($dst_file); } } Como veis hemos creado la función resize2 que usará ImageMagick. Dejando el nombre resize arregla el backend. Pero no las masivas. Eso si, si sólo hacemos esto con otro nombre no usa resize2 al subir productos. Tenemos que indicarle que lo haga. Para eso. Hacer un override en override/controllers/admin/AdminProductsController.php  . Ahí hay 5 sitios en el que llama a resize. Cambia los 5 a la función anterior (pon un 2 y ya está si has usado nuestro método. Para las importaciones masivas desde ficheros CSV o Excel en el backend. Sólo modificando el ImageManager no arreglaba las importaciones masivas. Estas van “por otro lado”. Usaban en resize pero además el GD de nuevo. Para eso tenemos que hacer lo siguiente. Ahora copiamos el fichero controlador AdminImportController.php en override/controllers/admin/AdminImportController.php Lo editamos y veréis que hay dos sitios que usan la biblioteca resize. Para el resultado que queríamos el primero hay que dejarlo usando la original (con resize) y el segundo el resize2. Así: ImageManager::resize($tmpfile, $path.’.jpg’, null, null, ‘jpg’, false, $error, $tgt_width, $tgt_height, 5, $src_width, $src_height); $images_types = ImageType::getImagesTypes($entity, true); if ($regenerate) { $previous_path = null; $path_infos = array(); $path_infos[] = array($tgt_width, $tgt_height, $path.’.jpg’); foreach ($images_types as $image_type) { $tmpfile = self::get_best_path($image_type[‘width’], $image_type[‘height’], $path_infos); if (ImageManager::resize2( $tmpfile, $path.’-‘.stripslashes($image_type[‘name’]).’.jpg’, $image_type[‘width’], $image_type[‘height’], ‘jpg’, false, $error, $tgt_width, $tgt_height, 5, $src_width, $src_height Con esto nuestra imágenes han mejorado notablemente. Puedes

Scroll al inicio