Jump to content

Surcharge & Compatablité Entre Module


Recommended Posts

Bonjour,

 

Je suis sur le développement d'un module pour répondre a la demande d'un client et je début en prestashop (1.6).

 

Je souhaite garantir le plus possible la compatibilité de mon module avec les autres.

 

Jusqu'ici je n'est pas trop eu de questions a me posé pour les fonctionnalité que j'ai ajouté: les Hook faisais très bien l'affaire.

 

Seulement maintenant j'ai besoin d'ajouter des options de trie et de filtre dans la liste des combinaisons d'attribut des produits, dans l'admin. Aucun hook n'existe, la seul solution que je vois donc est de surcharger la méthode "renderListAttributes" de la class AdminProductsController.

 

Mais je m'interroge, cette classe est énorme, et couvre énormément de fonctionnalité...(toute celle concernant les produit en faite ^^).

 

Que ce passe t'il si un autre module surcharge cette class ?

Car à ma grande surprise il n'y a que très peut d'hook dans cette classe. Ou alors il existe d'autre moyen d'ajouter des fonction dans l'admin que de passé par les hook et / ou les surcharge ?

 

EDIT : j'avait peut être  ma solution avec ce hook : displayAdminProductsExtra, évoqué ici https://www.prestashop.com/forums/topic/223032-adding-new-tab-in-product-admin-page-like-features-tab-attributes-tab-etc-in-ps-version-153/

 

Sauf que je ne le trouve pas dans la liste des hook? :s il n'existe plus ?

Edited by Cawet (see edit history)
Link to comment
Share on other sites

en fait quand tu fait un override, il faut surcharger que les fonctions dont tu veux changer le comportement.

La probabilité d'avoir un autre module qui surcharge la même fonction de la même class est très faible.

 

Que ce passe t'il si un autre module surcharge cette class ?

si tu essayes d'installer un module qui override une foncion d'une class qui est déjà overridée, le module ne s'installera pas.

Link to comment
Share on other sites

A d’accord !

C'est quand POO, si  B surcharge A, que C surcharge A aussi, si on appel C, les surcharge de B n'intervient pas, il faudrait que C surcharge B directement ! Je me demande comment prestashop réussi ce tour de passe passe.

 

Cela m'étonnerai effectivement fortement, mais pour mes connaissances admettons que cela arrive quand même ? Mon client me rappel pour que je le rende compatible. Quel solution avons nous?

 

Surchargé le module en conflit?

Link to comment
Share on other sites

 

Il faut modifier manuellement l'override du premier module avec l'override du deuxième module

Pardon cela ne m'empêche pas d'avancer mais j'aimerai être sur de bien comprendre ^^.

 

Un des deux module doit abandonné l'override, c'est bien sa?

et placé le code du premier dans le deuxième? (ou vise versa) ?

En gros fusionné les deux code a la mano ?

Link to comment
Share on other sites

dsl d'y revenir, mais je suis tombé sur ceci dans la doc :

 

 

Keep overrides for your own shop

Overrides in PrestaShop are exclusive. This means that if your module overrides one of PrestaShop's behaviors, another module will not be able to use that behavior properly, or override it in an predictable way.

Therefore, overrides should only be used for your own local modules, when you have a specific need that cannot be applied without it.

It is not recommended to use an override in a module that you intend to distribute (for instance through the PrestaShop Addons marketplace), and they are forbidden in partner modules.

 

En réalité je ne vais pas mettre mon module sur la market place, je continu donc ma discutions uniquement dans le bute d'apprendre.

 

Pour prendre mon cas présent, comment faire?

La seul solution que je vois, c'est créer un nouvelle onglet dans la page produit, avec le hook : 

displayAdminProductsExtra

Mais je ne le trouve pas dans la liste des hook dans la table ? :s

A t'il disparu en 1.6 ?

Link to comment
Share on other sites

En farfouillant le code de AdminControllerCore, je suis tombé sur sa :

Hook::exec('action'.$this->controller_name.'ListingResultsModifier...

Hook::exec('actionAdmin'.ucfirst($this->action).'After', array('controller' => $this, 'return' => $return));

Hook::exec('actionAdmin'.ucfirst($this->action).'Before', array('controller' => $this));

Hook::exec('action'.$this->controller_name.'FormModifier', array(...

 

Et tout plein d'autre.

 

N'aurai-je pas pue simplement créer un hook appeler "actionAdminRenderListAttributesAfter  ?

Link to comment
Share on other sites

Bonsoir,

 

Pour information, il existe en effet une multitude de hooks qui sont existants (surtout les dynamiques) mais qui ne sont pas listés dans la table correspondante du moment où aucun module n'est rattaché à ceux-ci. Ils n'ont pas besoin d'être dans la table pour pouvoir s'y accrocher. Du moment où un module y est accroché, le hook sera présent dans la table.

Link to comment
Share on other sites

Oui c'est ce que j'y est découvert du coup, c'est top ! mais comment ce fait t'il que je ne trouve pas de documentation sur les hook dynamique?

Ou si il en existe, je suis preneur !

 

(parce que c'est peut être parce que je suis habitué a d'autre type de framework & cms mais je trouve le coeur de prestashop assez dure a lire  >.< - même si la logique général s’assimile assez vite)

Link to comment
Share on other sites

Ah bin voila! C'est marrant comment sont construit les doc, parfois...je serrait vraiment pas aller cherchez la...

 

M'enfin bon merci beaucoup !

 

En effet, a force de me bouffer de pelleteuse de code, sa devient plus lisible :)

  • Like 1
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...