Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
je trouve le concept de modules très interssant et j'artrive bien à faire fonctionner mon module mais je n'arrive pas à le configurer dans application.ini. Par exemple l'instruction ci dessous (dernière ligne) devrait définir mes layout pour le module admin mais ce n'est pas le cas, le module admin garde le layout par défaut. Ai je oublié de déclarer le bootstrap de mon module ?
includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" resources.layout.layoutPath = APPLICATION_PATH "/layout/scripts" resources.layout.layout = "layout" admin.resources.layout.layout= "admin"
Dernière modification par erwanpia (15-06-2009 21:57:00)
Hors ligne
Hello,
@Mr.MoOx : depuis ZF 1.8. C'est l'APPLICATION_PATH qui t'étonnes ?
@erwanpia : je vois pas
A+
Hors ligne
Salut,
@mikaelkael: je crois plutôt que c'est "admin.resources.layout.layout" qui dérange Mr.moox.
@Mr.Moox: un petit tour vers la documentation => Resource modules
@erwanpia: je crois que tu devrais rajouter un "resources.modules[]=" avant ton admin.resources... pour que cela marche. (Pas vérifié)
A+
Hors ligne
Il est vrai qu'il ne faut pas obtenir grand chose de "admin.resources.layout.layout".
N'oubliez pas que le bootstrap, ne sait pas à l'avance quel module/action/controller va être appelé. Il n'est donc pas possible de spécifiier le layout à utiliser. On ne peut spécifier que les options qui ne dépendent pas réellement d'un module.
Par contre, rien n'empeche un plugin (ou autre) de changer le layout via la conf d'un module.
Sinon, je confirme que rajouté "resources.modules[] =" ne serait pas une mauvaise chose
Hors ligne
( Ouais je connaissais pas la syntaxe pour les modules, je suis passé un peu vite sur la doc )
N'oubliez pas que le bootstrap, ne sait pas à l'avance quel module/action/controller va être appelé. Il n'est donc pas possible de spécifiier le layout à utiliser. On ne peut spécifier que les options qui ne dépendent pas réellement d'un module.
Par contre, rien n'empeche un plugin (ou autre) de changer le layout via la conf d'un module.
...
Heu alors à quoi ça servirait ?! Que ce soit un plugin ou "Zend_Application" et sa logique de fonctionnement, c'est du pareille au même... Ou alors j'ai pas assez dormi...
Hors ligne
resources.modules[] =
j'avais bien essayé mais cette instruction n' aucune incidence sur la config du module
quelq'un peut il me donner un piste pour debugger peut etre ? par ou on commence pour débugger le bootstrap ?
Hors ligne
Mr.MoOx a écrit:
( Ouais je connaissais pas la syntaxe pour les modules, je suis passé un peu vite sur la doc
)
N'oubliez pas que le bootstrap, ne sait pas à l'avance quel module/action/controller va être appelé. Il n'est donc pas possible de spécifiier le layout à utiliser. On ne peut spécifier que les options qui ne dépendent pas réellement d'un module.
Par contre, rien n'empeche un plugin (ou autre) de changer le layout via la conf d'un module....
Heu alors à quoi ça servirait ?! Que ce soit un plugin ou "Zend_Application" et sa logique de fonctionnement, c'est du pareille au même... Ou alors j'ai pas assez dormi...
Tu n'es d'accord que tes bootstrap ne peuvent pas anticiper quelle module/controller/action va se charger ?
Le bootstrap veut dire ce qu'il veut dire, c'est le "démarrage" du processus. Sinon, les fonctions de type "predispatch" auraient disparue
Hors ligne
Bon j'avance..
effectivement la ligne
resources.modules = ""
ou
resources.modules[] = ""
est indispensable dans le application.ini
mais surtout il m'a fallu créer dans mon répertoire de module une classe bootstrap spécifique pour ce module
une fois que ce fichier Bootstrap.php est créé alors les paramètres spécifiques du application.ini s'appliquent ... à tous les modules
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap { }
Dernière modification par erwanpia (16-06-2009 18:46:55)
Hors ligne
Je trouve cette ligne bizarre
resources.modules[] = ""
Ca ne ressemble pas au ZF...
@nORKy
Tu n'es d'accord que tes bootstrap ne peuvent pas anticiper quelle module/controller/action va se charger ?
Le bootstrap veut dire ce qu'il veut dire, c'est le "démarrage" du processus. Sinon, les fonctions de type "predispatch" auraient disparue
Si si bien évidement. Je parlais de Zend_Application qui apparement englobe plus de choses qu'un simple boostrap. Dans le cas contraire, je ne comprend vraiment pas l'intérêt de Zend_Application_Resource_Modules ...
Hors ligne
erwanpia a écrit:
Hum... pas encore... le layout du admin s'applique à tous les modules maintenant..
J'en suis au meme point que toi, c'est à dire que le layout du module s'est généralisé...
As tu avancé?
Merci
Hors ligne
Voici un exemple concret de ce que j'essai d'expliquer, ca devrait vous aider :
http://blog.keppens.biz/2009/06/create- … -zend.html
Concernant les resources de modules et admin avec un plugin, c'est vers le milieu du tuto, partie "layout"
Dernière modification par nORKy (19-06-2009 08:41:58)
Hors ligne
Merci nORKY pour ce lien!
Je trouve dommage que le ZF ai prévu (cf Documentation) ces paramètres (moduleName.resources.layout.layout) dans le application.ini sans avoir implémenté ce qui va bien derrière. Bon c'est pas la mère à boire non plus et ca se fait bien rapidement mais je trouve ca dommage
Hors ligne
Parce que le but recherché par les dev n'est pas celui que tu veux.
tu peux espérer plus tard un plugin de la part des dev du ZF plus complet qui fera ce que tu recherches.
Hors ligne
Up de ce sujet
As t on une solution avec la 1.9 ? Moi je n'y arrive toujours pas
En attendant je procede comme ceci :
Aide d'action layoutLoader
<?php class My_Controller_Action_Helper_LayoutLoader extends Zend_Controller_Action_Helper_Abstract { public function preDispatch() { $bootstrap = $this->getActionController() ->getInvokeArg('bootstrap'); $config = $bootstrap->getOptions(); $module = $this->getRequest()->getModuleName(); if (isset($config[$module]['resources']['layout']['layout'])) { $layoutScript = $config[$module]['resources']['layout']['layout']; $this->getActionController() ->getHelper('layout') ->setLayout($layoutScript); } } }
Dans le bootstrap :
protected function _initLayoutHelper() { $this->bootstrap('frontController'); $layout = Zend_Controller_Action_HelperBroker::addHelper( new My_Controller_Action_Helper_LayoutLoader()); }
App.ini
; Layout resources.Layout.layoutPath = APP_PATH "/layouts" resources.Layout.layout = "default" admin.resources.layout.layout = "admin"
Dernière modification par alien7 (01-09-2009 23:08:24)
Hors ligne
Salut Alien7,
Merci pour ton exemple qui me sert, une petite question :
J'ai essayé d'ajouter dans le My_Controller_Action_Helper_LayoutLoader les headLink() et headScript():
$view = $bootstrap->getResource('view'); switch($module){ case "default" : $view->addHelperPath('../application/default/views/helpers','App_View_Helper'); $view->headLink()->appendStylesheet('/css/mainStyle.css'); $view->headScript()->appendFile('/js/scripts.js','text/javascript'); $view->headScript()->appendFile('/js/mainFonctions.js','text/javascript'); break; case "admin" : $view->addHelperPath('../application/admin/views/helpers','Admin_View_Helper'); $view->headLink()->appendStylesheet('/css/mainAdmin.css'); $view->headScript()->appendFile('/js/mainAdmin.js','text/javascript'); break; }
Pour les deux cela fonctione mais pas pour le $view->addHelperPath, il ne prend rien ?
Est ce que tu aurais une idée... ou quelqu'un d'autre ?
Merci d'avance
Hors ligne
Y'a toujours des solutions. Je l'ai déjà écrit, les plugins : c'est bien
http://blog.astrumfutura.com/archives/4 … ators.html
Hors ligne
nORKy a écrit:
Y'a toujours des solutions. Je l'ai déjà écrit, les plugins : c'est bien
http://blog.astrumfutura.com/archives/4 … ators.html
Oui je suis d'accord, mais à la lecture de cette aricle, je ne comprend pas tout de plus je n'ai pas vu comment ajouter les viewHelpers de chaque module?
c'est sûrement du à mon niveau
Hors ligne
Les viewhelpers par modules ?
Si tu as créé un fichier Boostrap.php dans ton module avec la classe qui va avec (meme vide, juste la définition de la classe suffit), tu as juste à les placer dans modules/monmodule/views/helpers
Avec des classes nommées Monmodule_View_Helper_
Comment, je sais ca ?
Regarde le code du ZF dans Zend/Application/Module/Autoloader.php
Dernière modification par nORKy (24-09-2009 11:13:27)
Hors ligne
Effectivement après vérifications, le view helper fonction pour le module admin mais pas pour le default ?
mon arbo:
application
+default
+controllers
+models
+views
-Bootstrap.php
+config
-application.ini
+admin
+controllers
+models
+views
-Bootstrap.php
-Bootstrap.php
chaque bootstrap de modul :
class <moduleName>_Bootstrap extends Zend_Application_Module_Bootstrap
{
}
Hors ligne
nan pas pour le défault. C'est comme ca dans le code. Faut le rajouté toi même.
Car, on consière que le défault, c'est /application et non pas /application/module/default
Hors ligne
J'ai modifier l'arbo,
application
+controllers
+models
+views
+config
-application.ini
+modules
+admin
+controllers
+models
+views
-Bootstrap.php
-Bootstrap.php
Mais cette fois ci il ne trouve plus les classes,
j'avais App_View_Helper_Notice que j'ai modifier en View_Helper_Notice mais il ne trouve toujours pas les helper?
Pourtant il va chercher dans le bon dossier :
Plugin by name 'Notice' was not found in the registry; used paths:
Zend_View_Helper_: Zend/View/Helper/:/var/www/application/views/helpers/
ou se trouvent les classes
Dernière modification par Dede (24-09-2009 14:22:59)
Hors ligne
Je ne comprend pas,
Il charge bien les helpers du module avec le nom de classe prefixé comme ceci <module>_View_Helper_<Nomdeclasse> mais il ne prend pas ceux de "default"?
j'ai essayer de modifier les prefixes : "App_" ou "Default_" ou simplement "View_Helper_<Nomdeclasse>" mais ça ne donne rien ?
Pourtant il va bien dans le bon dossier?
Je fais l'appel depuis le controller de cette façon :
$this->view-><nomdeclasse>($options);
Hors ligne