Développer avec RBS Change : Override un bloc ?
-
10/10/2011 16:58
Bonjour,
Je cherche à savoir s'il est possible d'overrider un bloc. En effet, en copiant l'action du bloc event/news dans override/modules/event/lib/blocks/BlockNewsAction.class.php et en faisant un compile-blocks, rien ne se passe. Qu'est-ce que je loupe ?
Merci -
10/10/2011 17:52
Depuis la version 3.5, il est possible de remplacer un bloc par un autre.
Pour cela, définissez votre nouveau bloc (qui peut étendre l'original ou non) dans un module spécifique et dans le blocks.xml de ce module, utilisez l'attribut inject pour spécifier quel bloc il doit remplacer.
Exemple :<block type="modules_monmodule_monbloc" inject="modules_event_Baseevent" requestModule="event" />
Si vous souhaitez réutiliser les templates du module d'origine, ajouter l'attribut templateModule.
Exemple :<block type="modules_monmodule_monbloc" inject="modules_event_Baseevent" requestModule="event" templateModule="event" />
-
@Jean-michel :
à rajouter dans la doc !
:)
Développe sous linux Ubuntu 12.04 LTS Desktop
Projet ecommerce core 3.6.7 -
et concernant l'action : Block<monNouveauBlock>Action.php ?
Comment faire pour récupérer les nouveaux param et faire de nouveaux traitements ?
J'imagine qu'il faut l'overrider dans le module spé elle aussi.
Dans ce cas, est-ce que l'on extend la class du block overridé ou la classe website_blockAction ?
Est-ce qu'il faut recopier l'intégralité de la fonction execute() ainsi que les fontions protégées et privées, puis ensuite ajouter les nouveaux traitements ?
Ou le nouveau block hérite aussi des méthodes du block overridé ?
Développe sous linux Ubuntu 12.04 LTS Desktop
Projet ecommerce core 3.6.7 -
11/10/2011 11:40
En gros vous avez le choix : soit vous étendez la classe du bloc à remplacer, mécaniquement le bloc héritera alors des méthodes, soit vous étendez website_blockAction et vous devrez alors coder l'intégralité de votre fonctionnel.
Le choix est à faire en fonction des différences que vous souhaitez apporter par rapport au bloc d'origine. Si ça s'intègre bien, préférez l'héritage, sinon, il est plus simple de repartir de zéro (ou d'une copie du code). Inutile de tenter d'étendre à tout prix si ça pose trop de problèmes.
EDIT : Notons qu'en cela l'injection de bloc diffère de l'injection d'un service, puisque dans le cas de l'injection d'un service il faut impérativement étendre la classe injectée. Alors que là il suffit d'hériter de website_blockAction (il faut que ça reste un bloc).Édité par Gaël Port 11/10/2011 11:42
Merci de prendre connaissance et de respecter les règles des forums.