All posts by josejavierfm

Mostrar imagen de combinación en carrito de la tienda en Prestashop

Si tenemos una tienda con combinacion de productos, cada uno de ellos puede tener asociada una o mas imagenes

si elegimos una en concreto con combinacion, al añadir al carrito muestra la foto del producto por defecto

Para solucionarlo hay que cambiar un par de templates y añadir unas funciones a la clase producto.

en Product.php

public static function getProducImage($id_product_attribute,$id_product) { if (isset($id_product_attribute) && $id_product_attribute) { $id_image = Db::getInstance()->getValue(' SELECT `image_shop`.id_image FROM `'._DB_PREFIX_.'product_attribute_image` pai'. Shop::addSqlAssociation('image', 'pai', true).' LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_image` = pai.`id_image`) WHERE id_product_attribute = '.(int)$id_product_attribute. ' ORDER by i.position ASC'); } if (!isset($id_image) || !$id_image) { $id_image = Db::getInstance()->getValue(' SELECT `image_shop`.id_image FROM `'._DB_PREFIX_.'image` i'. Shop::addSqlAssociation('image', 'i', true, 'image_shop.cover=1').' WHERE i.id_product = '.(int)$id_product ); } return $id_image; } public static function getProducImageUrl($id_product_attribute,$id_product) { if (isset($id_product_attribute) && $id_product_attribute) { $id_image = Db::getInstance()->getValue(' SELECT `image_shop`.id_image FROM `'._DB_PREFIX_.'product_attribute_image` pai'. Shop::addSqlAssociation('image', 'pai', true).' LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_image` = pai.`id_image`) WHERE id_product_attribute = '.(int)$id_product_attribute. ' ORDER by i.position ASC'); } if ($id_image!=""){ $aux=str_split($id_image); $salida="img/p/"; foreach($aux as $n){ $salida.=$n."/"; } $salida.=$id_image.".jpg"; return $salida; }else{ return ""; } }

en templated/checkout/_partials/cart-detailed-product-line.tpl

 {assign var='attributoimageid' value=Product::getProducImage($product.id_product_attribute,$product->id)}
     {assign var='attributoimage' value=Product::getProducImageUrl($product.id_product_attribute,$product->id)}
      {if $attributoimage}
       
       
        
         
          <img src="{$attributoimage}" data-full-size-image-url="{$product.cover.large.url}" />
      {else}
          {if $product.cover}
              <img src="{$product.cover.bySize.cart_default.url}" alt="{$product.name|escape:'quotes'}">
            {else}
            <img src="{$urls.no_picture_image.bySize.cart_default.url}" />
          {/if}
      {/if}

En modules/ps_shoppingcart/ps_shoppingcart.tpl

{assign var='attributoimageid' value=Product::getProducImage($product.id_product_attribute,$product->id)}
                          {assign var='attributoimage' value=Product::getProducImageUrl($product.id_product_attribute,$product->id)}
                            {if $attributoimage}
                            
                                <img src="{$attributoimage}" style="max-width:90px" data-full-size-image-url="{$product.cover.large.url}" />
                            {else}
                                {if $product.cover}
                                    <img src="{$product.cover.bySize.cart_default.url}" alt="{$product.name|escape:'quotes'}">
                                  {else}
                                  <img src="{$urls.no_picture_image.bySize.cart_default.url}" />
                                {/if}
                            {/if}

Cookies en javascript

function setCookie(key, value, expirydays)

{

var expires = new Date(); expires.setTime(expires.getTime() + (expirydays * 24 * 60 * 60 * 1000)); document.cookie = key + ‘=’ + value + ‘;expires=’ + expires.toUTCString();

}
function getCookie(key) {

var keyValue = document.cookie.match(‘(^|;) ?’ + key + ‘=([^;]*)(;|$)’); return keyValue ? keyValue[2] : null;

}

Borrar millones de lineas de un fichero de cientos de megas

Tenia un archivo de +500mb de texto ( un sql para ser exacto ) , y quería eliminar 4 millones de lineas, para ser exacto entre la 80.079 y la 4.130.924 de los más de 10 millones que tenia el archivo.

Al intentar abrir el archivo con programas como Visual Studio Code o Sublime text ( trabajando en MAC ) , tardaba mas de 2 minutos en abrir el fichero y luego era inviable intentar seleccionar con el ratón todas las lineas para eliminar.

El terminal llega al rescate, utilizando la herramienta «sed» en menos de 10 segundos el fichero baja hasta los 288mb

Al final con un par de pasadas el fichero termina con menos de 60mb

Capturas trazas android linea comandos MAC

Para capturar trazas de Android lo primero es tener instaladas las herramientas platform-tools que vienen con el sdk

Abrimos un terminal y con el telefono conectado ( y habilitadas las herramientas de desarrollador ) para permitir la depuracion miramos si aparece el dispositivo conectado:

adb devices

Para empezar a capturar trazas: adb logcat

Si queremos filtrar para que solo nos aparezcan los de un paquete

Y si queremos pasarlo a un fichero:

Número de visitas en cada entrada

Para añadir al lado de la informacion del post, el numero de visitas que tiene ( tal y como se hace en este blog ) hay que modificar el fichero content.php

<?php echo ‘ visto’; ?> <?php echo_views(get_the_ID()); ?> <?php echo ‘veces’; ?>

Justo antes de que acabe el bloque <div class=»entry-meta»>

Rellenar valores a todas las cajas de texto rapidamente jquery

Estamos trabajando para rellenar y guardar un formulario y queremos ver si todos los valores persiten en bbdd y se recuperan correctamente.

Para ellos abrimos la consola del navegador:

Y ejecutamos el siguiente código:

var i=1;$('input[type=text]').each(function(){ $(this).val(i);i++;})

Así no tenemos que ir campo por campo rellenandolo.
Para marcar el segundo elemento de todos los select:

$('select').each(function(){ 
   this.selectedIndex=1;
    
})

Y para marcar el ultimo de los radio

$('input[type=radio]').each(function(){ 
  $(this).attr('checked', true );
    
})

Cambiar de equipo

Lista de programas que considero imprescindibles para poder trabajar, son lo primero que instalo en un equipo:

Ditto
Greenshoot
TreeSize
Beyond Compare
Notepad++
Visual Studio Code
Paint.net
Irfanview
Dropbox
Filezilla
PeaZip
TortoiseSVN

Usar eventos en javascript

De cara a optimizar el código tengo un fichero con varias funciones js, que las utilizo en varias paginas, pero quiero poder variar algún comportamiento para la misma acción en distintas paginas, por lo que para evitar tener que pasar algún parámetro o duplicar funciones voy a utilizar eventos.

Así en la función del fichero js lanzo el evento:

function guardarx(){
//guardo con ajax...
.ajax(....
// Creo el evento
var event = new CustomEvent("evento-guardar-x", { "Parametro": "Valor" });
//Lanzo el evento
document.dispatchEvent(event);
}

Y luego en cada una de las paginas que utilizan el js puedo añadir un listener si deseo añadir funcionalidad especial.

document.addEventListener("evento-guardar-x", function(e) {
console.log(e);
});

Podeis ver una demo aqui

tunel ssh como proxy

Realmente es un recopilatorio de distintas paginas para poder configurar una  raspberry como servidor ssh ( en casa ) para utilizarlo como proxy en las conexiones desde lugares públicos y evitar problemas de filtrado de paginas:

Create a SOCKS proxy on a Linux server with SSH to bypass content filters

En Windows se puede utilizar putty 

para cambiar el puerto de ssh de la raspberry por uno que no esté filtrado (443 que se utiliza para conexiones seguras )

https://www.raspberrypi.org/forums/viewtopic.php?t=57697

En ese caso hay que añadir un paraáetro mas si se utiliza ssh por linea de comandos

ssh -p XXX urldelservidor

 

Para poder conectar por nombre en lugar de por ip ( por si cambia, que es lo normal cada cierto tiempo)

https://www.noip.com/support/knowledgebase/install-ip-duc-onto-raspberry-pi/

Como plugin para chrome yo uso SwitchyOmega

 

 

Cambiar tamaño imagenes en mac con script

Ultimamente tengo que subir muchas imágenes por trabajo y se generan con una resolución demasiado grande para lo que necesito.
Hasta ahora utilizaba el propio vista previa de mac para cambiar el tamaño pero me parecía lento, y he creado un script que me automatiza el trabajo.
Cambia la resolución a 1024 px, bien de alto o de ancho, manteniendo la proporción, borra la original y le añade un sufijo a la foto para que la ignore si se vuelve a lanzar el script.

#!/bin/bash  
MAX=1024
testseq="resize"
EXT=jpg
for i in *; do
    
    if [ "${i}" != "${i%.${EXT}}" ]; then
        if [[ $i =~ $testseq ]]; then
            continue
        else
            salida=${i//" "/"_"}
            h=$(sips -g pixelHeight "$i" | tail -n1 | cut -d" " -f4)
            w=$(sips -g pixelWidth "$i" | tail -n1 | cut -d" " -f4)
            h=$(($h+0))
            w=$(($w+0))
            if [ $h -gt $MAX ] || [ $w -gt $MAX ]; then
                 echo "Redimensionamos la imagen $i"
                 sips -Z $MAX  "$i" --out "$salida".$testseq.$EXT
                 rm "$i"
           
            fi
        fi
    fi
    
done

Con el consiguiente ahorro de tamaño.


Y después del proceso:

El código lo he puesto solo para jpg pero yo lo aplico a los png también.

El proceso va mostrando por pantalla el progreso.