Queremos añadir una columna que muestre los valores personalizados de una característica para los productos mostrados en la parrilla de productos.
Esto nos permitirá mostrar y editar el texto del valor personalizado para los productos.
Para añadir el campo a la lista de campos disponibles para sus rejillas de productos, haga clic en el botón desde la interfaz "Añadir campo", e introduzca la siguiente información:
¿Cuál es el ID del campo? myfeature
SC crea el campo, ahora debe rellenar la cuadrícula:
Nombre del campo: Autor
Tabla: Another Table
Tipo: Editable
Actualizar las combinaciones: No
En el panel de propiedades avanzadas de la derecha:
- seleccione el menú SQL Select e introduzca :
return ' , (SELECT fvl_cus.value FROM `' . _DB_PREFIX_ . 'feature_product` fp1_cus
INNER JOIN `' . _DB_PREFIX_ . 'feature_value_lang` fvl_cus ON (fp1_cus.id_feature_value=fvl_cus.id_feature_value AND fvl_cus.id_lang='.(int)$id_lang.')
WHERE fp1_cus.id_feature = "36"
AND fp1_cus.id_product = p.id_product LIMIT 1) as myfeature';
- seleccione el menú PHP onAfterUpdateSQL y rellene:
if (isset($_POST["myfeature"])) {
$feature_value = Tools::getValue('myfeature', 0);
$sql = "SELECT * FROM " . _DB_PREFIX_ . "feature_product WHERE id_product='" . (int)$idproduct . "' AND id_feature='36'";
$res = Db::getInstance()->ExecuteS($sql);
if (count($res)) {
$sql = "SELECT custom FROM "._DB_PREFIX_."feature_value WHERE id_feature_value=".intval($res[0]['id_feature_value'])." AND id_feature=36";
$fv=Db::getInstance()->getRow($sql);
if ($feature_value) {
$sql = "UPDATE " . _DB_PREFIX_ . "feature_value_lang SET value='" .pSQL($feature_value). "' WHERE id_feature_value=".intval($res[0]['id_feature_value'])."";
Db::getInstance()->Execute($sql);
} else {
$sql = "DELETE FROM " . _DB_PREFIX_ . "feature_product WHERE id_product='" . (int)$idproduct . "' AND id_feature='36'";
Db::getInstance()->Execute($sql);
if ($fv['custom'])
{
$sql = "DELETE FROM " . _DB_PREFIX_ . "feature_value WHERE id_feature_value='" . (int)$res[0]['id_feature_value'] . "'";
Db::getInstance()->Execute($sql);
$sql = "DELETE FROM " . _DB_PREFIX_ . "feature_value_lang WHERE id_feature_value='" . (int)$res[0]['id_feature_value'] . "'";
Db::getInstance()->Execute($sql);
}
}
} else {
if ($feature_value) {
$sql="INSERT INTO "._DB_PREFIX_."feature_value (id_feature,custom) VALUES (36,1)";
Db::getInstance()->Execute($sql);
$id_value = Db::getInstance()->Insert_ID();
$sql="INSERT INTO "._DB_PREFIX_."feature_value_lang (id_feature_value,id_lang,value) VALUES (".intval($id_value).",".intval($id_lang).",'".pSQL($feature_value)."')";
Db::getInstance()->Execute($sql);
$sql = "INSERT INTO " . _DB_PREFIX_ . "feature_product (id_feature,id_product,id_feature_value) VALUES ('36','" . (int)$idproduct . "','" . (int)$id_value . "')";
Db::getInstance()->Execute($sql);
}
}
}
Aquí tomamos la característica ID 36. Se puede cambiar la característica buscando el ID deseado en la ventana de características (menú Catálogo > Características SC).
Cierre la ventana de edición de los campos personalizados.
El nuevo campo está ahora en la lista de campos disponibles, y puede añadirlo a sus rejillas de productos.