– Créer les produits avec 2 déclinaisons : une avec attribut format vierge et l’autre avec attribut format personnalisé
– Ajouter les règles de prix dans la fiche produit
– Ajouter la personnalisation. 1 de type fichier, 3 de type texte (personnalisation,Texte et Adresse et coordonnées)
étendre la perso à tous les produits (aen-admin/genererSQL.php):
ini_set('display_errors','on');
error_reporting(E_ALL);
define('_PS_ADMIN_DIR_', getcwd());
define('PS_ADMIN_DIR', _PS_ADMIN_DIR_); // Retro-compatibility
include(PS_ADMIN_DIR.'/../config/config.inc.php');
$products = Db::getInstance()->ExecuteS('SELECT id_product FROM '._DB_PREFIX_.'product p');
foreach($products as $product)
{
#image
$sql = 'INSERT INTO '._DB_PREFIX_.'customization_field (`id_product`, `type`, `required`)
VALUES ('.$product['id_product'].',0,0)';
Db::getInstance()->ExecuteS($sql);
$id_custom = Db::getInstance()->Insert_ID();
$sql = 'INSERT INTO '._DB_PREFIX_.'customization_field_lang (`id_customization_field`, `id_lang`, `name`)
VALUES ('.$id_custom.',1,"")';
Db::getInstance()->ExecuteS($sql);
#perso
$sql = 'INSERT INTO '._DB_PREFIX_.'customization_field (`id_product`, `type`, `required`)
VALUES ('.$product['id_product'].',1,0)';
Db::getInstance()->ExecuteS($sql);
$id_custom = Db::getInstance()->Insert_ID();
$sql = 'INSERT INTO '._DB_PREFIX_.'customization_field_lang (`id_customization_field`, `id_lang`, `name`)
VALUES ('.$id_custom.',1,"personnalisation")';
Db::getInstance()->ExecuteS($sql);
#Texte
$sql = 'INSERT INTO '._DB_PREFIX_.'customization_field (`id_product`, `type`, `required`)
VALUES ('.$product['id_product'].',1,0)';
Db::getInstance()->ExecuteS($sql);
$id_custom = Db::getInstance()->Insert_ID();
$sql = 'INSERT INTO '._DB_PREFIX_.'customization_field_lang (`id_customization_field`, `id_lang`, `name`)
VALUES ('.$id_custom.',1,"Texte")';
Db::getInstance()->ExecuteS($sql);
#Adresse et coordonnées
$sql = 'INSERT INTO '._DB_PREFIX_.'customization_field (`id_product`, `type`, `required`)
VALUES ('.$product['id_product'].',1,0)';
Db::getInstance()->ExecuteS($sql);
$id_custom = Db::getInstance()->Insert_ID();
echo $sql = 'INSERT INTO '._DB_PREFIX_.'customization_field_lang (`id_customization_field`, `id_lang`, `name`)
VALUES ('.$id_custom.',1,"Adresse et coordonnées")';
Db::getInstance()->ExecuteS($sql);
}
Puis
UPDATE `avps_product` SET `customizable` = 1,`uploadable_files` = 1,`text_fields` = 3 WHERE 1 ;
UPDATE `avps_product_shop` SET `customizable` = 1,`uploadable_files` = 1,`text_fields` = 3 WHERE 1;
Pour modifier les prix de base des déclinaisons
UPDATE `avps_product_attribute` pa
INNER JOIN avps_product p ON pa.`id_product`= p.`id_product`
INNER JOIN avps_product_attribute_combination pac ON pa.`id_product_attribute`=pac.`id_product_attribute`
SET pa.price = 0.84
WHERE id_category_default IN(12,13) AND `id_attribute` IN(7,10) AND p.id_product IN (SELECT `id_product` FROM `avps_category_product` WHERE `id_category`=9 )
UPDATE `avps_product_attribute_shop` pas
INNER JOIN avps_product_attribute pa ON pas.`id_product_attribute`= pa.`id_product_attribute`
SET pas.price = pa.price
– Recopier les prix spécifiques à partir d’un produit modèle vers tous les autres (aen-admin/genererSQL.php)
## Insertion des prix spécifiques
# vierge 11 / perso 7,10
$product_modele = 5;
$product_attribute_modele = 23;
$attribute_modele = '7,10';
$sql = 'SELECT pa.id_product,pa.id_product_attribute
FROM `'._DB_PREFIX_.'product_attribute` pa
INNER JOIN '._DB_PREFIX_.'product p ON pa.`id_product`= p.`id_product`
INNER JOIN '._DB_PREFIX_.'product_attribute_combination pac ON pa.`id_product_attribute`=pac.`id_product_attribute`
WHERE id_category_default IN(12,13) AND `id_attribute` IN('.$attribute_modele.') AND p.id_product
IN (SELECT `id_product` FROM `'._DB_PREFIX_.'category_product` WHERE `id_category`=9 )
AND p.id_product<>'.$product_modele.'
ORDER BY `pa`.`id_product` ASC ';
$products = Db::getInstance()->ExecuteS($sql);
foreach($products as $product)
{
echo $sql = "INSERT INTO `"._DB_PREFIX_."specific_price`(`id_product`, `id_product_attribute`, `price`, `from_quantity`, `reduction`, `reduction_type`)
SELECT '".$product['id_product']."', '".$product['id_product_attribute']."', `price`, `from_quantity`, `reduction`, `reduction_type`
FROM `"._DB_PREFIX_."specific_price`
WHERE id_product=".$product_modele." AND id_product_attribute = ".$product_attribute_modele.";\r\n";
//Db::getInstance()->ExecuteS($sql);
}
Pour le regroupement des quantités sur l’ensemble des cartes :
Modifier le calcul de la quantité dans le fichier class/Product.php
$cat_cumul = array(12,13);
$id_category_default = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('SELECT id_category_default FROM `'._DB_PREFIX_.'product` WHERE `id_product` = '.(int)($id_product));
if (in_array($id_category_default,$cat_cumul))
{
$quantity_cumul = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('SELECT SUM(c.`quantity`)
FROM `'._DB_PREFIX_.'cart_product` c INNER JOIN `'._DB_PREFIX_.'product` p USING ( id_product )
WHERE `id_category_default` IN('.implode(',',$cat_cumul).') AND `id_cart` = '.(int)($id_cart));
$cart_quantity = $quantity_cumul ? $quantity_cumul : $cart_quantity;
}
Pour ajouter sauver les paramètres de personnalisation directement en appelant le panier et pas dans la page produit. Dans le fichier CartController.php:
$perso_rapido = Tools::getValue('perso_rapido');
if ($perso_rapido & Tools::isSubmit('submitCustomizedDatas'))
{
/* Product pictures management */
require_once('images.inc.php');
$this->pictureUpload($product, $this->context->cart);
$this->textRecord($product, $this->context->cart);
}