Ocultar método de pago a un producto en Prestashop

En esta guía, vamos a ocultar el método de pago de transferencia bancaria en Prestashop a un producto que se llama “Chorizos de Alcantarilla”.

En este ejemplo, vamos a editar a manorra (pero recordar que lo ideal es hacer un override de la clase del módulo):

Dentro del fichero: modules/bankwire/bankwire.php y dentro de la función del hook -> hookPayment

Recogemos los productos del carrito, comprobamos el ID de un producto en concreto coincide con el que queremos ocultar ese método de pago para ese producto  y dejamos de mostrar el método de pago en Prestashop para el producto “Chorizos de Alcantarilla”:

La función del hookPayment por defecto esta así en el módulo de transferencia bancaria.


public function hookPayment($params)
{
if (!$this->active)
return;
if (!$this->checkCurrency($params['cart']))
return;

$this->smarty->assign(array(
'this_path' => $this->_path,
'this_path_bw' => $this->_path,
'this_path_ssl' => Tools::getShopDomainSsl(true, true).__PS_BASE_URI__.'modules/'.$this->name.'/'
));
return $this->display(__FILE__, 'payment.tpl');
}

Dentro vamos añadir, la siguiente línea:


$products = $this->context->cart->getProducts();

Para obtener los productos del carrito.

Y para recorrer los productos del carrito, usaremos (un foreach), si alguno de los productos del carrito coincide con el ID del producto que hemos puesto en la comparación, no retornamos nada, y por tanto no se muestra el método de pago del módulo de transferencia bancaria.

if($products)
{
foreach ($products as $productos) {
if ($productos['id_product'] == 'X')
{
return;
}
}
}

Recordar que donde he puesto ‘X’, vosotros tenéis que colocar el ID del producto a ocultar

La función quedaría así:


public function hookPayment($params)
{
$products = $this->context->cart->getProducts();

if($products)

{
foreach ($products as $productos) {
if ($productos['id_product'] == 2)
{
return;
}
}
}

if (!$this->active)
return;
if (!$this->checkCurrency($params['cart']))
return;

$this->smarty->assign(array(
'this_path' => $this->_path,
'this_path_bw' => $this->_path,
'this_path_ssl' => Tools::getShopDomainSsl(true, true).__PS_BASE_URI__.'modules/'.$this->name.'/'
));
return $this->display(__FILE__, 'payment.tpl');
}
Código para ocultar método de pago por producto en Prestashop

Recordar que lo ideal es hacer un override de la clase del módulo. ¿Cómo se hace un override de la clase de un módulo?

Documento testeado en PrestaShop 1.6.1.14

Print Friendly, PDF & Email

Limitar número de productos en el carrito en Prestashop

Traducción de la guía realizada por el usuario Nemo de la Comunidad de Prestashop

Limitar números de productos en el carrito en Prestashop 1.6
Limitar número de productos en el carrito en Prestashop 1.6

Según nos indica Nemo, el tutorial es para Prestashop 1.6

Imaginemos que queremos que, en el carrito, no puedan existir más de 5 productos en total.

Recordamos que lo mejor es hacer un override de los Clases y Controladores que se vayan a modificar.

En el fichero:

/controllers/front/CartController.php

Dentro de la función:

processChangeProductInCart


Debajo de la línea: (En Prestashop 1.6.1.12, sobre la línea 241)

$cart_products = $this->context->cart->getProducts();

Añadimos la siguiente


$total_cart_produtcs_count=0;

Ahora un poco más abajo, donde tenemos esta línea:


foreach ($cart_products as $cart_product) {

Añadimos:


$total_cart_produtcs_count+=$cart_product['cart_quantity'];

Almacenamos en la variable total_cart_produtcs_count el número total de productos que se van añadiendo al carrito.

Ahora justo antes de este comentario:

// Check product quantity availability

Añadimos:


$max_qty = 5;
		if(Tools::getValue('op', 'up')=='up' && $mode=='add')
		{
			if (count($cart_products) == $max_qty || $total_cart_produtcs_count + $this->qty > $max_qty)
				$this->errors[] = sprintf(Tools::displayError('El limite de productos en el carrito son %s'), $max_qty);
			
		} 

  • En la variable “max_qty” indicamos el límite máximo de productos que se pueden añadir al carrito.
  • En el primero IF se chequea cuando se añade/actualiza productos al carrito.
  • En el segundo IF contamos los productos añadidos al carrito y los comparamos con el límite que hemos establecido
  • Si se cumplen los dos IF, imprimimos el mensaje de que se ha llegado al límite de productos que se pueden añadir al carrito.

Esta traducción, puede contener errores o quedar desactualizada en el momento en el que vayáis a ver este post, revisarla siempre con el tutorial de Nemo:

Imagen de previsualización de YouTube
Print Friendly, PDF & Email

Editor de textos avanzado en Prestashop 1.7

Gracias al usuario Vekia de la Comunidad de Prestashop, tenemos disponible una guía que nos permite habilitar funciones adicionales al editor de texto que tiene integrado Prestashop, cuando por ejemplo estamos escribiendo la descripción de la categoría, producto, etc..

Vekia, nos propone en su Guía, los siguientes cambios:

1º Paso – Editar fichero JS

Editamos el siguiente fichero “ /js/admin/tinymce.inc.js” y cambiamos el contenido del fichero por el siguiente código:


/**
* Change default icons to marerial icons
*/
function changeToMaterial() {
var materialIconAssoc = {
'mce-i-code': '<i class="material-icons">code</i>',
'mce-i-visualblocks': '<i class="material-icons">dashboard</i>',
'mce-i-charmap': '<i class="material-icons">grade</i>',
'mce-i-hr': '<i class="material-icons">remove</i>',
'mce-i-searchreplace': '<i class="material-icons">find_replace</i>',
'mce-i-none': '<i class="material-icons">format_color_text</i>',
'mce-i-bold': '<i class="material-icons">format_bold</i>',
'mce-i-italic': '<i class="material-icons">format_italic</i>',
'mce-i-underline': '<i class="material-icons">format_underlined</i>',
'mce-i-strikethrough': '<i class="material-icons">format_strikethrough</i>',
'mce-i-blockquote': '<i class="material-icons">format_quote</i>',
'mce-i-link': '<i class="material-icons">link</i>',
'mce-i-alignleft': '<i class="material-icons">format_align_left</i>',
'mce-i-aligncenter': '<i class="material-icons">format_align_center</i>',
'mce-i-alignright': '<i class="material-icons">format_align_right</i>',
'mce-i-alignjustify': '<i class="material-icons">format_align_justify</i>',
'mce-i-bullist': '<i class="material-icons">format_list_bulleted</i>',
'mce-i-numlist': '<i class="material-icons">format_list_numbered</i>',
'mce-i-image': '<i class="material-icons">image</i>',
'mce-i-table': '<i class="material-icons">grid_on</i>',
'mce-i-media': '<i class="material-icons">video_library</i>',
'mce-i-browse': '<i class="material-icons">attachment</i>',
'mce-i-checkbox': '<i class="mce-ico mce-i-checkbox"></i>',
};

$.each(materialIconAssoc, function (index, value) {
$('.' + index).replaceWith(value);
});
}

function tinySetup(config) {
if (!config) {
config = {};
}

if (typeof config.editor_selector != 'undefined') {
config.selector = '.' + config.editor_selector;
}

var default_config = {
selector: ".rte",
browser_spellcheck: true,
plugins : "visualblocks, preview searchreplace print insertdatetime, hr charmap colorpicker anchor code link image paste pagebreak table contextmenu filemanager table code media autoresize textcolor emoticons",
toolbar2 : "newdocument,print,|,bold,italic,underline,|,strikethrough,superscript,subscript,|,forecolor,colorpicker,backcolor,|,bullist,numlist,outdent,indent",
toolbar1 : "styleselect,|,formatselect,|,fontselect,|,fontsizeselect,",
toolbar3 : "code,|,table,|,cut,copy,paste,searchreplace,|,blockquote,|,undo,redo,|,link,unlink,anchor,|,image,emoticons,media,|,inserttime,|,preview ",
toolbar4 : "visualblocks,|,charmap,|,hr,",
external_filemanager_path: baseAdminDir + "filemanager/",
filemanager_title: "File manager",
external_plugins: {"filemanager": baseAdminDir + "filemanager/plugin.min.js"},
language: iso_user,
skin: "prestashop",
menubar: false,
statusbar: false,
relative_urls: false,
convert_urls: false,
entity_encoding: "raw",
valid_children: "+body[style|script|iframe|section],pre[iframe|section|script|div|p|br|span|img|style|h1|h2|h3|h4|h5],*[*]",
valid_elements : '*[*]',
force_p_newlines : false,
cleanup: false,
forced_root_block : false,
force_br_newlines : true,
convert_urls:true,
relative_urls:false,
remove_script_host:false,
init_instance_callback: "changeToMaterial"
};

$.each(default_config, function (index, el) {
if (config[index] === undefined)
config[index] = el;
});

// Change icons in popups
$('body').on('click', '.mce-btn, .mce-open, .mce-menu-item', function () {
changeToMaterial();
});

tinyMCE.init(config);
}

Continúa leyendo Editor de textos avanzado en Prestashop 1.7

Print Friendly, PDF & Email

Mostrando información del proveedor en la ficha del producto en Prestashop 1.6

Es cierto que tenemos módulos disponibles en la Comunidad, que nos pueden servir para mostrar “parte” de la información de los proveedores en la ficha del producto en Prestashop 1.6

Otra opción que nos propone “Nemo” en la que no trabajamos con módulos es la siguiente: (Hemos traducido la guía al idioma de Cervantes)

Crear un override en el directorio:

/override/controllers/front/

con el nombre “ProductController.php” y el siguiente contenido

< ?php
class ProductController extends ProductControllerCore
{
public function initContent()
{
parent::initContent();

if($this->product->id_supplier) {
$id_supplier_address = Address::getAddressIdBySupplierId($this->product->id_supplier);
$supplier_address = new Address($id_supplier_address);
}

if (Validate::isLoadedObject($supplier_address))
{
$this->context->smarty->assign(array(
'supplier_country'=> $supplier_address->country,
'supplier_company'=> $supplier_address->company,
'supplier_address1'=> $supplier_address->address1,
'supplier_postcode'=> $supplier_address->postcode,
'supplier_city'=> $supplier_address->city,
'supplier_phone'=> $supplier_address->phone,
'supplier_state' => State::getNameById($supplier_address->id_state),
'supplier_vat_number'=> $supplier_address->vat_number,
));
}
}
}

El siguiente paso, es ir al fichero: “/themes/tu-plantilla/product.tpl” y añadir el siguiente código: Continúa leyendo Mostrando información del proveedor en la ficha del producto en Prestashop 1.6

Print Friendly, PDF & Email

¿Dónde se guardan los datos de conexión a la base de datos en Prestashop 1.7?

Sorpresa… sorpresa… no es igual que en antaño ni en el mismo fichero…ni en la misma ruta, en Prestashop 1.7 cambia….

En este caso, para acceder al fichero que contiene los datos de conexión a la base de datos en Prestashop 1.7, tenemos que acceder al fichero:

Configuración Base de datos Prestashop 1.7
Configuración Base de datos Prestashop 1.7

/app/config/parameters.php

Donde entre otros datos referentes a la conexión de base de datos, nos podemos encontrar:

Continúa leyendo ¿Dónde se guardan los datos de conexión a la base de datos en Prestashop 1.7?

Print Friendly, PDF & Email

Mostrar numero de pedidos por cliente en Prestashop

Con este TIP cuando vayamos a la pestaña Clientes -> Clientes del panel de administración veremos en los listados de los clientes una columna llamada “Pedidos” con el número de pedidos de cada cliente.

Listado Clientes

Aunque vamos a editar los controladores directamente, recordar que lo más optimo y recomendable es hacer un override.

  • Fichero: /controllers/admin/AdminCustomersController.php

Buscamos la siguiente consulta SQL:

Consulta SQL

Y justo después de -> as connect añadimos:

(SELECT COUNT(*) FROM '._DB_PREFIX_.'orders o where o.valid =1 AND (o.id_customer = a.id_customer)) AS nb_of_orders

Quedando del siguiente modo:

Consulta modificada

De esta forma en la consulta vamos a poder obtener el número de pedidos por cliente.

El siguiente paso consiste en el mismo fichero:

Buscamos el siguiente código:

$this->fields_list = array(
'id_customer' => array(
'title' => $this->l('ID'),
'align' => 'text-center',
'class' => 'fixed-width-xs'
),

Correspondiente a la columna de ID cliente en el listado clientes y debajo añadimos:

'nb_of_orders' => array(
'title' => $this->l('Num Pedidos')
),

Quedando del siguiente modo:

Columna número de pedidos

Al acceder al listado de Clientes desde la pestaña Clientes -> Clientes veremos la columna de los pedidos.

Columna pedidos

Documento basado en Prestashop 1.6

 

Print Friendly, PDF & Email

Cambiar grupo por defecto en el registro de clientes en Prestashop 1.5

En esta guía, explicaremos como cambiar el grupo por defecto en el registro de clientes en Prestashop 1.5.

Los pasos son los siguientes:

Ir al fichero:

/config/defines.inc.php

Buscar la siguiente línea:

define('_PS_DEFAULT_CUSTOMER_GROUP_', 3);

Y cambiamos el 3, por el id del grupo, que queramos que se asigne por defecto. (Recordamos que los grupos los podemos crear en la pestaña Clientes -> Grupos del panel de administración en Prestashop 1.5)

El siguiente paso, es ir a la base de datos y buscar la tabla:

ps_configuration

psconfig

Dentro de la tabla, en el campo:

name

Buscamos el valor:

PS_CUSTOMER_GROUP Continúa leyendo Cambiar grupo por defecto en el registro de clientes en Prestashop 1.5

Print Friendly, PDF & Email

Guía – Crear constantes en Prestashop 1.5

En esta guía, explicaremos como crear “variables” constantes en Prestashop 1.5.

El primero paso es ir al fichero:

/config/defines.inc.php

Si nos damos cuenta, veremos vemos que tiene líneas como por ejemplo esta:

define('_PS_CLASS_DIR_', _PS_ROOT_DIR_.'/classes/');

En este caso se indica que la el valor de la variable “_PS_CLASS_DIR_”, está compuesto por el valor de la variable “_PS_ROOT_DIR_” (que en este caso podríamos decir que es el directorio raíz (_PS_ROOT_DIR_ es otra variable que hay definida que hace referencia al directorio raíz, lo que hace en este caso es una concatenación), acompañado de la carpeta “classes”.

¿Cómo definir nuestra propia variable constante? Continúa leyendo Guía – Crear constantes en Prestashop 1.5

Print Friendly, PDF & Email

Guía – Uso de la clase Cookie en Prestashop 1.5

Recordamos que la clase “Cookie.php” en Prestashop 1.5 se encuentra en el directorio:

/classes/Cookie.php

Podemos leer “Determinados datos” en Prestashop, determinados por la Cookie, que serían lo siguientes:

Datos Cliente / Visitante – Front-End

  • date_add (Fecha creación de la cookie)
  • id_lang (El ID del idioma seleccionado)
  • id_currency (El ID de la moneda seleccionada)
  • last_visited_category (ID de la última categoría visitada en el listado de productos)
  • ajax_blockcart_display (Para conocer si el carrito se encuentra “Expandido” o no lo está)
  • viewed (ID de los productos recién vistos (separados por comas)
  • id_wishlist (ID actual de la lista en el Bloque de wishlist)
  • checkedTOS ( Para saber si han marcado las condiciones del servicio (Condiciones generales de venta) en el checkbock  (“0” si no ha señalado nada, “1” si las ha aceptado)
  • id_guest (EL ID del usuario “invitado”)
  • id_connections (ID de la conexión actual  de la sección del usuario)
  • id_customer (El id del cliente)
  • customer_lastname (Nombre Cliente)
  • customer_firstname (Apellidos Cliente)
  • logged (Sirve para comprobar si estas logeado) Continúa leyendo Guía – Uso de la clase Cookie en Prestashop 1.5
Print Friendly, PDF & Email

Guía – Listado de controladores del Front-End en Prestashop 1.5

Recordamos que los “Controladores” del FrontEnd de tu tienda Prestashop, bajo la versión 1.5, se encuentran en el directorio:

/override/controllers/front/

(No es una lista completa, se está completando)

  • AddressController.php – Usado por “address.php” para que los clientes modifiquen su dirección.
  • AddressesController.php – Usado por “addresses.php” para obtener las direcciones de los clientes
  • AuthController.php – Usado por “authentication.php” para la autentificación del usuario.
  • BestSalesController.php – Usado por “best-sales.php” para obtener el listado de productos más vendidos.
  • CartController.php – Usado por “cart.php” para administrar el carrito de los clientes
  • CategoryController – Usado por “category.php” para obtener los listados de productos por categorías
  • CMSController.php – Usado por “cms.php” para obtener las páginas de CMS (Contenidos)
  • CompareController.php – Usado por “productscomparison.php” para la comparación de productos.
  • ContactController.php – Usado por “contactform.php” para el funcionamiento del formulario de contacto en el FrontEnd.
  • DiscountController.php – Usado por “discount.php” para obtener los vales de descuento de los clientes. Continúa leyendo Guía – Listado de controladores del Front-End en Prestashop 1.5
Print Friendly, PDF & Email