Aspectos básicos de la herramienta de personalización de la interfaz PRO

La herramienta de personalización de la interfaz PRO le permite añadir campos no nativos de PrestaShop a su herramienta Store Commander (interfaz, importación, exportación, etc.). Esta extraordinaria herramienta está incluida en nuestros paquetes de suscripción premium (SOLO+ y MULTISTORE+).

Es un verdadero «game changer» cuando usted tiene campos personalizados en su tienda PrestaShop o si desea mostrar rápidamente las estadísticas de ventas, por ejemplo.

Acceder a la sección pro

La interfaz principal se refiere a la parte clasica de la herramienta.

  • Para acceder a la parte PRO, haz un clic en el icono de la columna derecha llamada "Campos disponibles":

Añadir un campo

  • Para añadir un campo, en primero, seleccione el lugar donde quiere añadir el campo desde el desplegable de la columna de la izquierda

  • A continuacion, haz un clic en el icono para llamar el campo, la tabla y el tipo

  • Para configurar el nuevo campo, seleccione el panel correspondiente en el que introduciran las consultas SQL.

El uso de esta parte PRO requiere conocimientos en desarrollo PHP/MySQL/Javascript, pero puede ayudarle de estos ejemplos en nuestra base de conocimientos : https://www.storecommander.com/support/es/198-interface-customization-pro

Si no tiene los conocimientos necesarios, puede recurri a nuestro equipo de desarrolladores. Póngase en contacto con nosotros para solicitar un presupuesto.

Código del índice

Seleccionar opciones

Para utilizar esta herramienta, el tipo de celda de su campo debe ser “opción múltiple”. Esta sección le permite establecer las opciones del cuadro de selección cuando el usuario hace clic para editar la celda.

Para establecer las opciones, necesita devolver un array PHP:

return array(1=>'Yes' , 0=>'No');

Puede utilizar un código más complejo para obtener las opciones de una tabla:

$sql = 'SELECT id_logistician,name_logistician FROM ps_logistician ORDER BY name_logistician';
$res = Db::getInstance()->ExecuteS($sql);
$tmparray = array(0 => 'NA');
foreach ($res AS $row) {
    $tmparray[$row['id_logistician']] = $row['name_logistician'];
}
return $tmparray;SQL Select

SQL Select

Aquí necesita devolver el nombre del campo que se mostrará en sus rejillas. Esto será utilizado en nuestra consulta principal para obtener información de productos/pedidos.

Puede utilizar estas variables:

$view - nombre de la vista de la rejilla actual

$cols - array de columnas de la rejilla

$id_lang - idioma utilizado en la interfaz

Ejemplo:

return ' ,myTableAlias.myTableFieldName AS myFieldName';

Puede utilizar un código más complejo para obtener el valor de la característica del producto:

return ' , (SELECT fvl.value FROM `ps_feature_product` fp 
                LEFT JOIN `ps_feature_value_lang` fvl 
                ON (fp.id_feature_value=fvl.id_feature_value and fvl.id_lang=2)
                WHERE fp.id_feature = 3 
                AND fp.id_product = p.id_product) as myFeature ';

Otro ejemplo para añadir el nombre de los productos pedidos en una tabla de pedidos (ejemplo completo disponible en nuestra plataforma de soporte):

return ' , (SELECT GROUP_CONCAT(product_name SEPARATOR '') 
                FROM `'._DB_PREFIX_.'order_detail` od 
                WHERE od.id_order = o.id_order) as orderProductsNames ';

SQL Left Join

No debe utilizar alias correspondientes a tablas estándar de Prestashop para campos procedentes de tablas externas (no utilice "p.", "a.", etc.)

Puede utilizar estas variables

$view - nombre de la vista de la rejilla actual

$cols - matriz de columnas de la rejilla

$id_lang - idioma utilizado en la interfaz.

Ejemplos:

return " LEFT JOIN "._DB_PREFIX_."myTable myTableAlias ON (myTableAlias.id_product= p.id_product) ";

Atención: si utiliza varios campos de la misma tabla externa (miTabla), deberá configurar esta información una sola vez para todos los campos.

Grid JS onBeforeUpdate

Trabajo en curso...

Grid JS onEditCell

Este evento se activa cuando el usuario edita una celda en la interfaz.

// onEditCell(stage,rId,cInd,nValue,oValue)
// rId is the row ID
// cInd is the column INDEX
// nValue is the new value
// oValue is the old value

if (nValue != oValue) {
    idxDeliveryInfo = cat_grid.getColIndexById('DeliveryInfo');
    if (cInd == idxDeliveryInfo) {
// here we truncate the data entered by the user
        cat_grid.cells(rId, idxDeliveryInfo).setValue(cat_grid . cells(rId, idxDeliveryInfo).getValue().substr(0, 100));
    }
}

Grid JS onAfterUpdate

Work in progress...

PHP definition

Cuando añada un campo a la parrilla de combinaciones, deberá declararlo en esta sección.

$combArray[$combinaison['id_product_attribute']]['myFieldName'] = $combinaison['myFieldName'];

PHP onBeforeUpdateSQL

Work in progress...

PHP onAfterUpdateSQL

Este evento se activa cuando el navegador del usuario envía los datos al servidor. En esta sección necesitamos almacenar el nuevo valor en la base de datos.

Puedes utilizar estas variables

$id_producto $id_lang

Ejemplo:

$sql = "SELECT * FROM "._DB_PREFIX_."myTable WHERE id_product=".(int)$id_product;
$res = Db::getInstance()->ExecuteS($sql);
$myFieldName = Tools::getValue('myFieldName', -1);
if (count($res)) {
    if (in_array($myFieldName, array('North', 'East'))) // we check if the new value is in the expected range of values
    {
        $sql = "UPDATE "._DB_PREFIX_."myTable SET myFieldName=".psql($myFieldName)." WHERE id_product=".(int)$id_product;
        Db::getInstance()->Execute($sql);
    } else {
        $sql = "DELETE FROM "._DB_PREFIX_."myTable WHERE id_product=".(int)$id_product;
        Db::getInstance()->Execute($sql);
    }
} else {
    $sql = "INSERT INTO "._DB_PREFIX_."myTable (id_product,myFieldName) VALUES (".(int)$id_product.",'".psql($myFieldName)."')";
    Db::getInstance()->Execute($sql);
}Tablas utilizadas en las consultas

Los campos que se añaden se utilizan en las consultas que ya utilizan determinadas tablas de la base de datos.

Tablas utilizadas en las consultas

Aquí está la lista de tablas utilizadas según la cuadrícula, puede utilizar los alias indicados:

Rejilla de Productos

Tabla Alias

product

p

product_lang

pl

image

i

If Prestashop version is >= 1.5

product_supplier

ps

stock_available

sa

supplier_shop

ss

product_shop

prs

Rejilla de Combinaciones

Tabla Alias

product

p

product_attribute

pa

product_attribute_combination

pac

attribute

a

attribute_group

ag

attribute_lang

al

attribute_group_lang

agl

If Prestashop version is >= 1.5

product_shop

p_shop

product_attribute_shop

pa_shop

product_supplier

ps

stock_available

sa

Rejilla de Combinaciones Multi Tienda

Tabla Alias

product_attribute

pa

product_attribute_shop

pas

Rejilla de Pedidos

Tabla Alias

orders

o

order_history

oh

message (if Message column is used)

m

order_detail (if In Stock column is used)

od

customer

c

address (shipping address)

ad

address (invoice address)

adi

Rejilla de Clientes

Tabla Alias

customer

c

address (if id_address is present in the grid)

a

Modificar el valor introducido en una cuadrícula - Grid JS onEditCell

Prerrequisitos

Siga la guía Rejilla de productos: Añadir un campo de la tabla ps_product_lang para crear el campo "Información de entrega

Objetivo

Queremos cambiar el valor del campo "Información de entrega" introducido para truncarlo si supera los 100 caracteres y luego enviar este valor al servidor para que se almacene en la base de datos.

Configuración

En el panel de propiedades avanzadas de la derecha:

- seleccione el menú Grid JS onEditCell y rellene:

// onEditCell(stage,rId,cInd,nValue,oValue)// rId is the row ID// cInd is the column INDEX// nValue is the new value// oValue is the old valueif (nValue != oValue) { idxDeliveryInfo = cat_grid.getColIndexById('infos_livraison'); if (cInd == idxDeliveryInfo) { cat_grid.cells(rId, idxDeliveryInfo).setValue(cat_grid.cells(rId, idxDeliveryInfo).getValue().substr(0, 100)); }}

Reinicie completamente la página Store Commander para probar los nuevos cambios.