theduder Posted February 5, 2020 Share Posted February 5, 2020 Hola estoy realizando un módulo que permite con un toggle destacar uno de los manufacturers, bien el caso es que siguiendo este manual: https://devdocs.prestashop.com/1.7/modules/sample_modules/grid-and-identifiable-object-form-hooks-usage/ Y esto: https://github.com/PrestaShop/demo-cqrs-hooks-usage-module/blob/master/ps_democqrshooksusage.php (y ejecutado composer dumpautoload ) He llegado a la parte donde se me añade el toggle con éxito: Pero ese campo no se me guarda en el crear o update, en los siguientes hooks: && $this->registerHook('actionManufacturerFormBuilderModifier') && $this->registerHook('actionAfterCreateManufacturerFormHandler') && $this->registerHook('actionAfterUpdateManufacturerFormHandler') ; } Aunque el móduo está registrado en esos 3 hooks: El código completo es el siguiente: <?php use PrestaShopBundle\Form\Admin\Type\SwitchType; if (!defined('_PS_VERSION_')) { exit; } class ExtraManufacturer extends Module { public function __construct() { $this->name = 'extramanufacturer'; $this->tab = 'administration'; $this->version = '1.0.0'; $this->author = 'XXX'; $this->need_instance = 0; $this->ps_versions_compliancy = [ 'min' => '1.7', 'max' => _PS_VERSION_ ]; $this->bootstrap = true; $this->table_name = 'manufacturer'; parent::__construct(); $this->displayName = $this->getTranslator()->trans( 'Manufacturer extra', [], 'Modules.Extramanufacturer.Admin' ); $this->description = $this->getTranslator()->trans( 'Manufacturer extra', [], 'Modules.Extramanufacturer.Admin' ); $this->confirmUninstall = $this->l('Are you sure you want to uninstall?'); if (!Configuration::get('MYMODULE_NAME')) { $this->warning = $this->l('No name provided'); } } public function install() { return parent::install() && $this->registerHook('actionManufacturerFormBuilderModifier') && $this->registerHook('actionAfterCreateManufacturerFormHandler') && $this->registerHook('actionAfterUpdateManufacturerFormHandler') ; } public function uninstall() { return parent::uninstall(); } public function hookActionManufacturerFormBuilderModifier(array $params) { /** @var FormBuilderInterface $formBuilder */ $formBuilder = $params['form_builder']; $formBuilder->add('is_highlighted', SwitchType::class, [ 'label' => $this->getTranslator()->trans('Hightlight', [], 'Modules.Extramanufacturer'), 'required' => false, ]); $manufacturerId = $params['id']; if(isset($manufacturerId)){ $params['data']['is_highlighted'] = (bool)$this->getIsHighlighted($manufacturerId); }else{ $params['data']['is_highlighted'] = false; } $formBuilder->setData($params['data']); } private function getIsHighlighted($manufacturerId){ return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue( 'SELECT highlight FROM ' . _DB_PREFIX_ .$this->table_name. ' WHERE id_manufacturer = '.$manufacturerId ); } private function setHighlight($manufacturerId, $value = 0){ if($value){ Db::getInstance()->update($this->table_name, array('highlight' => 0), '1 = 1'); } Db::getInstance()->update($this->table_name, array('highlight' => (int)$value), 'id_manufacturer = '.$manufacturerId); } public function actionAfterCreateManufacturerFormHandler(array $params){ $manufacturerId = $params['id']; $highlight = (bool)$params['form_data']['is_highlighted']; $this->setHighlight($manufacturerId, $highlight); } public function actionAfterUpdateManufacturerFormHandler(array $params){ $manufacturerId = $params['id']; $highlight = (bool)$params['form_data']['is_highlighted']; $this->setHighlight($manufacturerId, $highlight); } } Agradezco de antemano cualquier ayuda. ¡¡Gracias!! Link to comment Share on other sites More sharing options...
ventura Posted February 6, 2020 Share Posted February 6, 2020 Entiendo que el nuevo registro esta creado en la tabla manufacturer, tipo TINYINT(1) Link to comment Share on other sites More sharing options...
theduder Posted February 7, 2020 Author Share Posted February 7, 2020 ¡Correcto! y en el Entity correspondiente (Manufacturer) , de hecho en bbdd tengo marcado uno con su "1" correspondiente y se refleja perfectamente en el toggle, lo que no me funciona es el update y save de ese campo.. pero no le encuentro el motivo. Link to comment Share on other sites More sharing options...
ventura Posted February 10, 2020 Share Posted February 10, 2020 Con este Modulo de prueba para el nuevo CQRS( Command Query Responsibility Segregation) de Symfony en el backoffice de Prestashop puedes añadir el campo nuevo tanto en el formulario del backoffice con el listado de Manufacturers 1 Link to comment Share on other sites More sharing options...
theduder Posted February 12, 2020 Author Share Posted February 12, 2020 Hola Ventura, el módulo funciona a la perfección para el backoffice. ¡Muchas Gracias! Ahora cuando voy a la plantilla para hacer que los destacados salgan primero, no veo el campo añadido al objeto. Lo que me ha hecho ir a la tabla manufacturer a ver si estaba ahí el nuevo Me imagino que tendré que modificar getManufaturers en la clase para hacer un join con ese campo... Pero ciertamente no sé dónde se guarda esa configuración. Link to comment Share on other sites More sharing options...
ventura Posted February 13, 2020 Share Posted February 13, 2020 El modulo al instalarse crea una tabla propia, asociada a la de manufacturers.Nueva version del modulo para que el nuevo campo se muestre en frontend Utiliza la lógica de ejemplo de mostrar en el producto si el fabricante esta registrado como destacado y si es asi lo muestra en frontend Link to comment Share on other sites More sharing options...
theduder Posted February 21, 2020 Author Share Posted February 21, 2020 Hola Ventura, perdona por contestar tan tarde, he tenido otros proyectos prioritarios.. que se han comido mi tiempo. Quería agradecerte la ayuda, finalmente hice un left join con la tabla y ya me funciona correctamente.. Ahora que tengo tiempo para este proyecto volveré a intentar averiguar la razón porque no funcionaba mi módulo y ver las diferencias con los módulos de ejemplo. ¡¡Muchas gracias!! 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