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

{$currency.name} -> Name of the active currency. 
{$currency.iso_code} -> ISO language code enabled. 
{$currency.sign} -> Symbol of the active currency 
{$currency.iso_code_num} -> Active Currency ISO Code

{$shop.name} -> Store name in Prestashop 1.7 
{$shop.email} -> Store Email in Prestashop 1.7 
{$shop.logo} -> Image routing store logo in Prestashop 1.7 
{$shop.favicon} -> Route favicon image of the store in Prestashop 1.7 
{$shop.address.address1} -> Store address 1 in Prestashop 1.7 
{$shop.address.address2} -> Store address 2 in Prestashop 1.7 
{$shop.address.postcode} -> Store Zip Code in Prestashop 1.7 
{$shop.address.city} -> Store City in Prestashop 1.7 
{$shop.address.state} -> Province of the store in Prestashop 1.7 
{$shop..address.country} -> Shop Country in Prestashop 1.7 
{$shop.phone} -> Store phone in Prestashop 1.7 
{$shop.fax} -> Store Fax in Prestashop 1.7

{$language.name} -> Language name enabled 
{$language.iso_code} -> ISO language code enabled 
{$language.language_code} -> Language code enabled (for Spanish, fr for French, tc ..) 
{$language.is_rtl} -> (1 -> On / 0 Off (for when language is written from right to left) 
{$language.format_lite} and {$ language.format_full} -> Simulated date format and full date format 
{$language.id} -> Language ID enabled

{$customer.lastname} -> Customer Last Name in Prestashop 1.7
{$customer.firstname} -> Client Name Prestashop 1.7
{$customer.email} -> Prestashop Customer Email 1.7
{$customer.birthday} -> Prestashop client birthday 1.7
{$customer.newsletter} -> Subscribed to the newsletter in Prestashop 1.7 (1 subscribed / 0 unsubscribed)
{$customer.newsletter_date_add} -> Newsletter subscription date
{$customer.ip_registration_newsletter} -> IP Registration Customers newsletter
{$customer.optin} -> Subscribed to offers from our partners in Prestashop 1.7 
{$customer.date_add} -> Client creation date in Prestashop 1.7
{$customer.date_upd} -> Last updated client update in Prestashop 1.7
{$customer.id} -> Customer ID in Prestashop 1.7
{$customer.id_default_group} -> Default group to which the client is associated in Prestashop 1.7
{$customer.is_logged } -> Check if the client is «logged in» in Prestashop 1.7
{$customer.gender.name [$ customer.gender.id]} -> Client Gender (Mr / Ms)
{$customer.addresses [Address ID] .city} -> Client city of address ‘X’ that has partner. (Address ID, because a client can theoretically have multiple addresses)
{$customer.addresses [Address ID] .alias} -> Address alias
{$customer.addresses [Address ID] .firstname} -> Addressholder last name
{$customer.addresses [Address ID] .lastname} -> Name of address holder
{$customer.addresses [Address ID] .company} -> Company name of address holder
{$customer.addresses [Address ID] .address1} -> Address 1
{$customer.addresses [Address ID] .address2} -> Address 2
{$customer.addresses [Address ID] .postcode} -> Mailing address
{$customer.addresses [Address ID] .id_state} -> Address Province ID
{$customer.addresses [Address ID] .state} -> Province address
{$customer.addresses [Address ID] .state_iso} -> ISO address province code
{$customer.addresses [Address ID] .id_country} -> Country address ID
{$customer.addresses [Address ID] .country} -> Country of address
{$customer.addresses [Address ID] .country_iso} -> ISO country address code
{$customer.addresses [Address ID] .phone} -> Address phone
{$customer.addresses [Address ID] .phone_mobile} -> Mobile phone address
{$customer.addresses [ID Address] .dni} -> Address ID
{$customer.addresses [Address ID] .vat_number} -> Customer VAT number
{$customer.addresses [Address ID] .formatted} -> Client formatted address

{$urls.base_url} -> Store address 
{$urls.current_url} -> Current address (url) where we are 
{$urls.shop_domain_url} -> Store domain 
{$urls.img_ps_url} -> Image root directory url 
{$urls.img_cat_url} -> Url directory of images of the categories 
{$urls.img_lang_url} -> Url of the language images directory 
{$urls.img_prod_url} -> Url of the product images directory 
{$urls.img_manu_url} -> Url directory of manufacturers images 
{$urls.img_sup_url} -> Url of the providers directory 
{$urls.img_ship_url} -> Url directory of images of carriers 
{$urls.img_store_url} 
{$urls.img_url} -> Url of the image directory of the template 
{$urls.css_url} -> Template URL directory url 
{$urls.js_url} -> Template JS directory url 
{$urls.pic_url} -> Url file directory uploaded 
{$urls.pages.address} -> Url from the «My Address» section 
{$urls.pages.addresses} -> Url from the «My addresses» section 
{$urls.pages.authentication} -> Url section of the authentication page 
{$urls.pages.cart} -> Cart section url (order summary) 
{$urls.pages.category} -> Url section of categories 
{$urls.pages.cms} -> Url of the content section 
{$urls.pages.contact} – > Url section of the contact form 
{$urls.pages.discount} -> Url of the discount voucher section 
{$urls.pages.guest_tracking} -> Tracking url for unregistered clients 
{$urls.pages.history} -> Url from the order history section 
{$urls.pages.identity} -> Url of the section «Personal data» 
{$urls.pages.index} -> Page url 
{$urls.pages.my_account} -> Url section of my account 
{$urls.pages.order_confirmation} -> Url section of the order confirmation page. 
{$urls.pages.order_follow} – > Url in the «Order Tracking» 
{$urls.pages.order} 
{$urls.pages.order_return} 
{$urls.pages.order_slip} 
{$urls.pages.pagenotfound} -> Url of section «404 (Page not found)» 
{$urls.pages.password} -> Url of the section «Recover Password» 
{$urls.pages.pdf_invoice} -> 
{$urls.pages.pdf_order_return} 
{$urls.pages.pdf_order_slip} 
{$urls.pages.prices_drop} -> Url section we lowered prices / products discount / discounts 
{$urls.pages.product} -> Product tab url 
{$urls.pages.search} -> Url of the searcher section 
{$urls.pages.sitemap} -> Site Map section url 
{$urls.pages.stores} -> Url of the section «Shops / Our stores» 
{$urls.pages.supplier} -> Url from the providers section 
{$urls.pages.register} -> Url log page 
{$urls.pages.order_login} 
{$urls.theme_assets} -> Url of the «assets» directory of the template / themes / template / assets / 
{$urls.actions.logout} -> Url to close section in the store

{if $page.page_name==’product’ OR $page.page_name==’cart’}

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>';
}