2015-11-15 2 views
0

Je tente de remplacer un module dans Prestashop, mais les modifications n'apparaissent tout simplement pas.Remplacer les modifications du module Prestashop non visibles

Je substituée un fichier modèle et un contrôleur, donc je l'ai ajouté les fichiers suivants:

\ modules override \ examples \ blockwishlist \ vues \ templates \ avant \ mywishlist.tpl
\ override \ modules \ blockwishlist \ controllers \ front \ mywishlist.php

Ce sont des changements très simples où j'ajoute une autre colonne à une table qui contient un bouton. Lorsque le bouton est cliqué, le contrôleur génère un fichier CSV.

Une idée de pourquoi ces changements ne sont tout simplement pas affichés?

Remarque: J'ai activé 'Force Compile' et désactivé la mise en cache.

Modifier: Re overridding un contrôleur est-il:

class BlockWishListMyWishListModuleFrontController extends BlockWishListMyWishListModuleFrontControllerCore // extends ModuleFrontController 

ou

class BlockWishListMyWishListModuleFrontControllerOverride extends BlockWishListMyWishListModuleFrontController 

Répondre

1

d'accord, je l'ai fait des recherches de code (peut-être thre existe façon, pas la plus simple est sûr), ainsi:

dans le code Dispatcher classe nous avons

// Dispatch module controller for front office 
      case self::FC_MODULE : 
       $module_name = Validate::isModuleName(Tools::getValue('module')) ? Tools::getValue('module') : ''; 
       $module = Module::getInstanceByName($module_name); 
       $controller_class = 'PageNotFoundController'; 
       if (Validate::isLoadedObject($module) && $module->active) { 
        $controllers = Dispatcher::getControllers(_PS_MODULE_DIR_.$module_name.'/controllers/front/'); 
        if (isset($controllers[strtolower($this->controller)])) { 
         include_once(_PS_MODULE_DIR_.$module_name.'/controllers/front/'.$this->controller.'.php'); 
         $controller_class = $module_name.$this->controller.'ModuleFrontController'; 
        } 
       } 
       $params_hook_action_dispatcher = array('controller_type' => self::FC_FRONT, 'controller_class' => $controller_class, 'is_module' => 1); 
      break; 

où l'on voit que les contrôleurs chargés sans les modifier, mais de l'autre côté en dessous dans le code, nous voyons l'exécution du crochet:

// Loading controller 
      $controller = Controller::getController($controller_class); 

      // Execute hook dispatcher 
      if (isset($params_hook_action_dispatcher)) { 
       Hook::exec('actionDispatcher', $params_hook_action_dispatcher); 
      } 

si une des solutions possibles (sans écraser classe de base):

  1. how to override module et espérons que vous avez la version de base> = 1.6.0.11

  2. à blockwishlist.php dans install() méthode ajouter

    this->registerHook('actionDispatcher')

à état avec d'autres crochets, donc il ressemble ... !this->registerHook('actionDispatcher') || ... parce que ce crochet non enregistré par défaut et nous ne pouvons pas y placer le module.

  1. méthode de création (ne peut pas embellir le code ici)

    public function hookActionDispatcher($params) { if ('blockwishlistmywishlistModuleFrontController' == $params['controller_class']) { include_once(_PS_OVERRIDE_DIR_ . 'modules/' . $this->name . '/controllers/front/mywishlist.php'); $controller = Controller::getController('BlockWishListMyWishListModuleFrontControllerOverride'); } }

  2. vous avez déjà override/modules/blockwishlist/controllers/front/mywishlist.php fichier par ce chemin

  3. module Réinstaller.

  4. cela fonctionne!

plus sur le remplacement des comportements dans docs

+0

Merci pour la réponse, mais cela n'a pas fonctionné. J'ai fait une modification à ma question sur les contrôleurs de dépassement de capacité qui est la bonne méthode? –

+0

Merci pour votre modification. Pensez-vous que si je place simplement la classe contrôleur dans le répertoire '~/overrides/modules/.....' cela fonctionnera - au lieu de devoir faire ce que vous suggérez? –

+0

vous pouvez essayer et verra résultat (je pense - pas) –

0

Transforme que pour outrepasser un module de vous ne placez vos fichiers:

~/overrides/module/MODULE_NAME

A la place, vous le placez dans:

~/thèmes/mon_theme/modules/MODULE_NAME

Maintenant, les changements sont eux-mêmes exposantes.

Est-ce que quelqu'un sait si/quand le module est mis à jour automatiquement, mes modifications seront-elles perdues/écrasées?

+0

fichiers dans le dossier de thème ne sera pas écrasé sur la mise à jour du module, mais êtes-vous sûr que la classe de contrôleur a été outrepassée en y plaçant le fichier mywishlist.php? –