Categorías
CSS

Animación degradado background CSS

BODY{
--BotonBackgroundInicio: #FF466A;
--BotonBackgroundFin: #FFAA41;
--BotonBackground:#FF466A;
}
.boton{background:var(--BotonBackground);transition:all 300ms linear 0ms;background:linear-gradient(90deg, var(--BotonBackgroundInicio), var(--BotonBackgroundFin) 51%, var(--BotonBackgroundInicio)) var(--x, 0)/ 200%;padding:1rem 2rem}
.boton:hover{--x: 100%;transition:all 300ms linear 0ms}

Ejemplos

Prueba
Prueba
Categorías
Prestashop

Uncaught Error: Class ‘Tools’ not found. classes/db/Db.php:794

Localize en su servidor el fichero Db.php que se encuentra en /classes/db/Db.php

Busque Tools::nl2br en el código y cambiarlo por nl2br

Antes del cambio

$string = strip_tags(Tools::nl2br($string));

$string = strip_tags(Tools::nl2br($string));

Después del cambio

$string = strip_tags(nl2br($string));

Categorías
Prestashop

Variables globales Prestashop

Información General de la tienda

{$shop.name} Nombre de la tienda 
{$shop.email} Correo electrónico de la tienda 
{$shop.logo} Logotipo de la tienda 
{$shop.favicon} Icono de la tienda (mapa, título de la ventana del navegador, etc.) 
{$shop.address.address1} Dirección de la tienda 1 
{$shop.address.address2} Dirección de la tienda 2 
{$shop.address.postcode} Código postal de la tienda 
{$shop.address.city} Ciudad de la tienda 
{$shop.address.state} Estado (provincia) de la tienda 
{$shop.address.country} País de la tienda 
{$shop.phone} Teléfono de la tienda 
{$shop.fax} Fax de la tienda

Divisas

{$currency.name} Nombre de la moneda en uso (euro, dólar estadounidense, etc.) 
{$currency.iso_code} Moneda Código ISO de la moneda en uso (Eur, USD, etc.) 
{$currency.sign} Símbolo de la moneda en uso (€, $, etc.) 
{$currency.iso_code_num} Número de código ISO de la moneda en uso (978 para euro, 840 para dólar estadounidense, etc.)

Idiomas

{$language.name} Nombre del idioma en uso (ejemplo: inglés) 
{$language.iso_code} Código ISO del idioma en uso (it para italiano, fr para francés, etc.) 
{$language.language_code} Código del idioma en uso (it para italiano, en-us para inglés americano, etc.) 
{$language.is_rtl} (1 cuando el idioma se escribe de derecha a izquierda; 0 si se escribe de izquierda a derecha)   
{$language.id} Valor de ID del idioma en uso

Paginas y elementos del prestashop

{$urls.base_url} Dirección web de la tienda (ejemplo: https://www.themebooster.com) 
{$urls.current_url} Dirección web actual (url), la página que estamos viendo 
{$urls.shop_domain_url} Dominio de la tienda 
{$urls.img_ps_url} Url del directorio raíz de imágenes {$ 
urls.img_cat_url} Url del directorio de imágenes de categorías 
{$urls.img_lang_url} Url del directorio de imágenes de idiomas 
{$urls.img_prod_url} Url del directorio de imágenes de productos 
{$urls.img_manu_url} Url del directorio de imágenes de fabricantes 
{$urls.img_sup_url} Url del directorio de imágenes de proveedores 
{$urls.img_ship_url} Url del directorio de imágenes de transportistas 
{$urls.img_store_url} Url del directorio de imágenes de la tienda física 
{$urls.img_url} Url de directorio de imágenes del tema 
{$urls.css_url} Url del directorio de archivos css que utiliza el tema 
{$urls.js_url} Url del directorio de archivos javascript que utiliza el tema 
{$urls.pic_url} Url del directorio donde se cargaron los archivos 
{$page.page_name} Nombre de la página (plantilla de archivo) 
{$page.meta.title} Título de la página (SEO) 
{$page.meta.description} Contenido de la descripción de la etiqueta (SEO) 
{$page.meta.keywords} Contenido de las palabras clave de la etiqueta (SEO) 
{$page.meta.robots} Regla para buscadores: bloquea o no la indexación de la página (SEO) 
{$page.canonical} Indica la URL canónica (principal) para evitar la duplicación de contenidos (SEO) 
{$urls.pages.address} Url de la sección "Mi dirección" (usuario registrado) 
{$urls.pages.addresses} Url de la sección "Mis direcciones" (usuario registrado) 
{$urls.pages.authentication} Url de la página de autenticación 
{$urls.pages.cart} Url de la página del carrito (resumen del pedido) 
{$urls.pages.category} Url de la categoría 
{$urls.pages.cms} Url de la página (tipo CMS) 
{$urls.pages.contact} Url de la página de contacto 
{$urls.pages.discount} Url de la página de cupones de descuento 
{$urls.pages.guest_tracking} Url de seguimiento para clientes no registrados 
{$urls.pages.history} Url de la página "Historial de pedidos" (usuario registrado) 
{$urls.pages.identity} Url de la página "Datos personales" (usuario registrado) 
{$urls.pages.index} Url de la página de inicio 
{$urls.pages.my_account} Url de la página "Mi cuenta" (usuario registrado) 
{$urls.pages.order_confirmation} URL de la página de "Confirmación de pedido" 
{$urls.pages.order_follow}Url en el "Seguimiento de pedidos" (usuario registrado) 
{$urls.pages.order} Url de la página "Pedido" 
{$urls.pages.order_return} Url de la página "Devolución de pedido" 
{$urls.pages.order_slip} Url de la página "Comprobante de pedido" { 
$urls.pages.pagenotfound} Url del "404 - Página no encontrada" 
{$urls.pages.password} Url de la página "Recuperar contraseña" 
{$urls.pages.pdf_invoice} Url de la factura en PDF 
{$urls.pages.pdf_order_return} Url de devolución de pedido en PDF 
{$urls.pages.pdf_order_slip} Url del comprobante de pedido en PDF 
{$urls.pages.prices_drop} Url de la página "Nuestras ofertas" 
{$urls.pages.product} Url de la página "Producto" 
{$urls.pages.search} Url de la página "Buscar" 
{$urls.pages.sitemap} Url de la página "Mapa del sitio" 
{$urls.pages.stores} Url de la página "Tiendas/Nuestras tiendas" 
{$urls.pages.supplier} Url de la página "Proveedores" 
{$urls.pages.register} Url de la página "Registrarse" 
{$urls.pages.order_login} Url de la página "Login" 
{$urls.theme_assets} Url del directorio "assets" del tema 
{$urls.actions.logout} Url para desconectarse del sitio (usuario registrado)

Carrito

{$cart.totals.total.amount} Importe total del carrito sin moneda (ej: 45,00) 
{$cart.totals.total.value} Importe total del carrito con moneda (ej: 45,00 €) 
{$cart.totals.total_ including_tax.amount} Importe total del carrito, incluidos impuestos, sin moneda (ej: 45,00) 
{$cart.totals.total_ including_tax.value} Importe total del carrito, incluidos impuestos, con moneda (ej: 45,00 €) 
{$cart.totals.total_scribing_tax.amount} Importe total del carrito, excluidos impuestos, sin moneda (ej: 35,70) 
{$cart.totals.total_scribing_tax.value} Importe total del carrito, excluidos impuestos, con moneda (ej: 35,70 €) 
{$cart.products_count} Número de productos en el carrito 
{$cart.subtotals.products.amount} La cantidad de productos en el carrito sin moneda 
{$cart.subtotals.products.value} La cantidad de productos en el carrito con moneda 
{$cart.subtotals.shipping.amount} El monto del envío en el carrito sin moneda 
{$cart.subtotals.shipping.value} El monto del envío en el carrito con moneda

Clientes

{$customer.lastname} Apellido del cliente 
{$customer.firstname} Nombre del cliente 
{$customer.email} Correo electrónico del cliente (proporcionado durante el registro) 
{$customer.birthday} Cumpleaños del cliente 
{$customer.newsletter} Suscrito al boletín informativo (1 si está suscrito, 0 si no está suscrito) 
{$customer.newsletter_date_add} Fecha de suscripción al boletín informativo 
{$customer.ip_registration_newsletter} IP del cliente en el registro del boletín informativo 
{$customer.optin} Suscrito a ofertas de socios (1 si está suscrito, 0 si no está suscrito) 
{$customer.date_add } Registro del cliente 
{$customer.date_upd} Última actualización (registro del cliente) 
{$customer.id} ID del cliente 
{$customer.id_default_group} Grupo de ID al que está asociado el cliente 
{$customer.is_logged} Verificar si el cliente está "conectado" (1 sí, 0 no) 
{$customer.gender.name[$customer.gender.id]} Género del cliente (ejemplo: Sra., Sr., etc.) 
{$customer.addresses[AddressID].city} Ciudad de la dirección del cliente con un ID (AddressID, ejemplo 8, donde 8 es el ID de la dirección del cliente), porque un cliente puede tener varias direcciones 
{$customer.addresses[AddressID].alias} Alias ​​de la dirección 
{$customer.addresses[AddressID].firstname} Nombre del titular de la dirección 
{$customer.addresses[AddressID].lastname} Apellido del titular de la dirección 
{$customer.addresses[AddressID].company} Empresa del titular de la dirección 
{$customer.addresses[AddressID].address1} Dirección 1 del titular de la dirección 
{$customer.addresses[AddressID].address2} Dirección 2 del titular de la dirección 
{$customer.addresses[AddressID].postcode} Código postal del titular de la dirección 
{$customer.addresses[AddressID].id_state} Estado del ID del titular de la dirección 
{$customer.addresses[AddressID].state} Nombre del estado del titular de la dirección 
{$customer.addresses[AddressID].state_iso} Código ISO del estado del titular de la dirección 
{$customer.addresses[AddressID].id_country} País del ID del titular de la dirección {$customer.addresses[ 
AddressID].country} Nombre del país del titular de la dirección 
{$customer.addresses[AddressID].country_iso} País ISO del titular de la dirección 
{$customer.addresses[AddressID].phone} Teléfono del titular de la dirección 
{$customer.addresses[AddressID].phone_mobile} Teléfono móvil del titular de la dirección 
{$customer.addresses[AddressID].dni} DNI del titular de la dirección 
{$customer.addresses[AddressID].vat_number} Número de IVA del titular de la dirección
{$customer.addresses[AddressID].formatted} Dirección Dirección formateada del titular

Ejemplos de condiciones mas utilizadas en prestashop

Si estas en la pagina de Inicio/Home

{if $page.page_name == 'index'}
  contenido a mostrar
{/if}

Si estas en una página de contenido (CMS)

{if $page.page_name == 'cms'}
   contenido a mostrar 
{/if}

Si estas en la página del carrito

{if $page.page_name == 'cart'}
   contenido a mostrar 
{/if}

Si el usuario ha iniciado sesión (login)

{if $customer.is_logged}
   contenido para mostrar 
{/if}

Mostrar un mensaje de bienvenida traducible y el nombre si el usuario que ha iniciado sesión

{if $customer.is_logged && $customer.firstname} 
  {l s='Hi' d='Shop.Theme.Global'} {$customer.firstname}
{/if}

Mostrar un mensaje traducible en función de si el usuario está registrado o no a la Newsletter

{if $customer.newsletter == 0}
  {l s='¡Suscríbete a nuestro boletín!' d='Shop.Theme.Customeraccount'}
{else}
  {l s='Ya estás suscrito a nuestra newsletter' d='Shop.Theme.Customeraccount'}
{/if}

Categorías
Prestashop

Como borrar los datos de la demo de prestashop

Para ello debemos dirigirnos a los módulos y buscar el de «PrestaShop Cleaner» es totalmente gratuito y desarrollado por PrestaShop

Una vez instalado, pulsamos en configurar y podemos elegir que borrar.

Catálogo

Esta parte elimina productos, características, categorías, etiquetas, imágenes, precios, adjuntos, escenas, stock de productos, grupos de atributos y valores, fabricantes, proveedores…

Pedidos y clientes

Este sección eliminará clientes, carritos, pedidos, conexiones, invitados, mensajes, estadísticas …

Limitaciones de la integridad funcional

Comprueba que todas las relaciones/integridad estén correctas

Limpieza de la base de datos

Elimina todos los residuos que han quedado de la demo

Categorías
Prestashop

Activar SSL mediante la base de datos

La solución es entrar en la base de datos y en la tabla de prefijo_configuration (el prefijo va depende de tu configuracion)

Buscar los campos PS_SSL_ENABLED y PS_SSL_ENABLED_EVERYWHERE y poner los 2 valores a 1 que sería activado, con esto activamos el SSL en la tienda y en todas las páginas

Si por el contrario queremos desactivarlo, pondremos los valores de esos campos a 0

Categorías
Python

Fatal error in launcher: Unable to create process using scrapy shell en windows

Ejecutamos la shell de anaconda Anaconda Prompt como administrador.

Desinstalamos scrapy

conda uninstall scrapy

Una vez terminado lo volvemos a instalar

pip install scrapy

NOTA: el fallo parece ser que se instaló sin permisos de administrador.

Categorías
Python

Como instalar scrapy en windows

Instalar Anaconda

Instalar anaconda seleccione la versión correspondiente a su sistema operativo. La versión que instalamos es la Python 3.7 de 64 Bit

Una vez instalado, buscamos en el menú de windows «Anaconda Prompt (anaconda3)» botón derecho y ejecutar como administrador, nos aparecerá una ventana similar al cmd de windows.

Si escribimos python enter, nos dira que python esta corriendo y la version.

Para salir del shell de python, escribimos exit() + enter o Ctrl + Z

Instalar Scrapy

Una vez en la shell de Anaconda escribimos

conda install -c conda-forge scrapy

A continuación cuando nos pregunte pulsamos Y para que empiece a descargarse los paquetes e instalarlos.

Y con esto ya tenemos instalado Scrapy en Windows.

Categorías
woocommerce

Como personalizar la página de producto

Eliminar pestañas/tabs de la página de producto

Por defecto WooCommerce trae las siguientes pestañas o tabs:

  • Description, donde se muestra la descripción larga del producto.
  • Reviews, aquí aparecen las reseñas si las tienes activadas.
  • Aditional_information, muestra los atributos del producto.

Si deseas dejar alguna pestaña, puedes comentar la linea con // o directamente eliminarla

// Eliminar tabs
function woo_eliminar_tab($tab) {
  unset( $tab['description'] ); //Eliminar descripción larga
  unset( $tab['reviews'] ); // Eliminar las reseñas
  unset( $tab['additional_information'] ); // Eliminar información adicional
  return $tab;
}
add_filter( 'woo_eliminar_tab', 'woo_remove_product_tab', 98);

Añadir una pestaña con información extra

// Add tab
add_filter( 'woocommerce_product_tabs', 'woo_new_product_tab' );
function woo_new_product_tab( $tab ) {
  // Adds the new tab
  $tabs['envio_tab'] = array(
    'title'=> __('Título de la pestaña', 'woocommerce' ),
    'priority'=> 50,
    'callback'=> 'woo_new_product_tab_content'
  );
  return $tab;
}
// Añadir el contenido que va dentro de la nueva pestaña
function woo_new_product_tab_content() {
  echo '<h2>Gastos de envío gratis</h2>';
}

Mover los productos relacionados a una pestaña

// Eliminar los productos relacionados de su posición original
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20);
// Agregar una nueva tab
add_filter( 'woocommerce_product_tabs', 'woo_new_product_tab' );
function woo_new_product_tab( $tabs ) {
  $tabs['related_products'] = array(
    'title'     => __( 'Título de la pestaña', 'woocommerce' ),
    'priority'  => 50,
    'callback'  => 'woo_new_product_tab_content'
  );
return $tabs;
}
// Añadir los productos relacionados a la pestaña
function woo_new_product_tab_content() {
  woocommerce_related_products();
}

Como cambiar el numero de productos relacionados

Modificaremos el número de posts_per_page por el numero que queramos de productos relacionados que salgan.

function woo_related_products_limit() {
  global $product;
  $args = array(
    'post_type' => 'product',
    'no_found_rows' => 1,
    'posts_per_page' => 3,
    'ignore_sticky_posts'=> 1,
    'orderby' => $orderby,
    'post__in' => $related,'post__not_in' => array($product->id)
  );
  return $args;
}
add_filter( 'woocommerce_related_products_args', 'woo_related_products_limit' );

Como modificar el orden de las pestañas

add_filter( 'woocommerce_product_tabs', 'woo_reorder_tabs', 98 );
function woo_reorder_tabs( $tabs ) {
  $tabs['reviews']['priority'] = 5; // Reseñas primera
  $tabs['additional_information']['priority'] = 10; // Información adicional la segunda
  $tabs['description']['priority'] = 15; // Descripción la tercera
  return $tabs;
}

Si hemos añadido alguna pestaña extra, tendremos que añadirla con el nombre de la pestaña que hallamos añadido, poniendo el ejemplo anterior, sería.

add_filter( 'woocommerce_product_tabs', 'woo_reorder_tabs', 98 );
function woo_reorder_tabs( $tabs ) {
  $tabs['reviews']['priority'] = 5; // Reseñas primera
  $tabs['additional_information']['priority'] = 10; // Información adicional la segunda
  $tabs['description']['priority'] = 15; // Descripción la tercera
  $tabs['envio_tab']['priority'] = 20; // Gastos de envio la cuarta
  return $tabs;
}

Como cambiar el titulo de las pestañas

add_filter( 'woocommerce_product_tabs', 'woo_rename_tabs', 98 );
function woo_rename_tabs( $tabs ) {
  $tabs['description']['title'] = __( 'Descripción' ); // Cambia el nombre de la pestaña Descripcion
  $tabs['reviews']['title'] = __( 'Reseñas' ); // Cambia el nombre de la pestaña valoraciones/reseñas
  $tabs['additional_information']['title'] = __( 'Otra información' ); // Cambia el nombre de la pestaña Informacion adicional
  return $tabs;
}

Cómo ocultar el número de referencia/SKU

add_filter( 'wc_product_sku_enabled', '__return_false' );

Como cambiar el número de miniaturas/thumbnails que aparece debajo de la imagen principal

Cambiaremos en número que hay detrás del return por el número de thumbnails que deseemos.

add_filter ( 'woocommerce_product_thumbnails_columns', 'xx_thumb_cols' );
function xx_thumb_cols() {
  return 3;
}

Como mostrar el número de unidades vendidas

add_action( 'woocommerce_single_product_summary', 'woo_product_sold_count', 11 );
function woo_product_sold_count() {
  global $product;
  $units_sold = get_post_meta( $product->id, 'total_sales', true );
  echo '<p>' . sprintf( __( 'Unidades vendidas: %s', 'woocommerce' ), $units_sold ) . '</p>';
}