Jump to content

Modulo extra manufacturer


theduder

Recommended Posts

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: 

 

image.png.e7df71c667142a977bfbb327739b2c55.png

 

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:

 

image.png.a01cbc9d34caf4dd76027b4926033fc0.png

 

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

¡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

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

  • 2 weeks later...

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...