kiritti Posted September 14, 2021 Share Posted September 14, 2021 Bonjour, Je suis en train de créer un module qui me permet d'ajouter un champ dans une catégorie. Mon champ s'affiche bien dans le BO, par contre impossible d'enregistrer le contenu de ce champ dans la base de donnée. J'ai l'erreur suivante qui apparait : Quote Une erreur inattendue s'est produite. [Symfony\Component\Debug\Exception\ContextErrorException code 0] : Notice: Undefined index: footer_description. Pourtant mon champ existe bien dans la base de donnée. J'ai bien fait un override de ma classe Category.php mais rien à faire j'ai toujours la même erreur. J'ai même essayer en ajoutant mon nouveau champ directement dans la classe de base de prestashop mais ça n'y change rien. Je pense que le problème vient de mon module. <?php /** /override/classes/Category.php */ class Category extends CategoryCore { /** @var mixed string or array of Description */ public $footer_description; public function __construct($idCategory = null, $idLang = null, $idShop = null) { self::$definition['fields']['footer_description'] = array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'); parent::__construct($idCategory, $idLang, $idShop); } } Puis le code de mon module <?php /** * 2007-2021 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License (AFL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/afl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2021 PrestaShop SA * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA */ if (!defined('_PS_VERSION_')) { exit; } class Categorycustomfields extends Module { protected $config_form = false; public function __construct() { $this->name = 'categorycustomfields'; $this->tab = 'administration'; $this->version = '1.0.0'; $this->author = 'RC'; $this->need_instance = 0; $this->bootstrap = true; parent::__construct(); $this->displayName = $this->l('Category Custom Fields'); $this->description = $this->l('Add custom fields to category'); $this->confirmUninstall = $this->l(''); $this->ps_versions_compliancy = array('min' => '1.7', 'max' => _PS_VERSION_); } /** * Don't forget to create update methods if needed: * http://doc.prestashop.com/display/PS16/Enabling+the+Auto-Update */ public function install() { if (!parent::install() || !$this->alterCategorylangTable() //Installation des hooks || !$this->registerHook([ 'actionCategoryFormBuilderModifier', 'actionAfterCreateCategoryFormHandler', 'actionAfterUpdateCategoryFormHandler', ]) ) { return false; } return true; } /** * Alter category_lang table, add module fields * * @return bool true if success or already done. */ protected function alterCategorylangTable() { Db::getInstance()->execute('ALTER TABLE `'. _DB_PREFIX_.'category_lang` ADD `footer_description` text'); return true; } public function uninstall() { include(dirname(__FILE__).'/sql/uninstall.php'); return parent::uninstall(); } /** * Modification du formulaire de la catégorie * @param array $params */ public function hookActionCategoryFormBuilderModifier(array $params) { //Récupération du form builder $formBuilder = $params['form_builder']; $locales = $this->get('prestashop.adapter.legacy.context')->getLanguages(); $formBuilder->add($this->name . '_footer_description', \PrestaShopBundle\Form\Admin\Type\TranslateType::class, [ 'type' => \PrestaShopBundle\Form\Admin\Type\FormattedTextareaType::class, 'label' => $this->l('Footer Description'), 'required' => false, 'locales' => $locales, 'hideTabs' => false, ] ); //Définition des données du champ langue $languages = Language::getLanguages(true); foreach ( $languages as $lang){ $params['data'][$this->name . '_footer_description'][$lang['id_lang']] = 'Custom value for lang '.$lang['iso_code']; } $params['data']['active'] = false; $formBuilder->setData($params['data']); } /** * Action effectuée après la création d'une catégorie * @param array $params */ public function hookActionAfterCreateCategoryFormHandler(array $params) { $this->updateData($params['form_data'], $params); } /** * Action effectuée après la mise à jour d'une catégorie * @param array $params */ public function hookActionAfterUpdateCategoryFormHandler(array $params) { $this->updateData($params['form_data'], $params); } /** * Fonction qui va effectuer la mise à jour * @param array $data */ protected function updateData(array $data, $params) { $cat = new Category((int)$params['id']); $cat->footer_description = $data['footer_description']; $cat->update(); } } Si vous avez une piste je prends.Merci par avance 1 Link to comment Share on other sites More sharing options...
Knowband Plugins Posted September 20, 2021 Share Posted September 20, 2021 Nous souhaitons vous informer que vous devez modifier le tableau des catégories, c'est-à-dire ajouter une définition de colonne et de classe de catégorie pour enregistrer les données de champ. En outre, vous pouvez enregistrer les données de champ dans une nouvelle table que vous avez créée et mappée avec l'ID de catégorie en conséquence. Link to comment Share on other sites More sharing options...
Meizi Posted February 13, 2022 Share Posted February 13, 2022 Bonjour @kiritti, D'abord je vous remercie parque votre code m'a aide pour sur un problème que j'ai eu. Ici le souci c'est au niveau de la fonction updateData(): au lieu de $data['footer_description'] vous devez avoir $data[this->name . '_footer_description'] comme définit dans la fonction hookActionCategoryFormBuilderModifier(array $params). Ça a fonctionné pour moi Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now