Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Si, il est dans la vue de mon action.
Mais tu m'as dis que
$this->_helper->layout->disableLayout();
ne se faisait que pour une action. Ce code ($this->_helper->layout->disableLayout() je l'ai placé dans loginAction de AuthController. Et l'action que je n'arrive pas à afficher est l'action indexAction de SaisiesController. Donc, d'après tes dires, le layout ne devrait pas être désactivé pour indexAction de SaisiesController. Donc, il y a un soucis quelquepart, et je n'arrive pas à en déterminer la cause.
Hors ligne
je pense que c'est pour de l'ajax, je te conseil de faire d'abord de faire fonctionner ton site sans ajax, javascript
(au cas ou un utilisateur aurrai désactiver le js, pas de polémique ) et ensuite de rajouter le javascipt, c'est plus simple à débugger.
montre le code de tes controllers et de ton layout.
Dernière modification par baboune (27-02-2009 12:34:31)
Hors ligne
Je veux bien te montrer le code de mon controller SaisiesController, mais y a environ 1000 lignes de code...
Voici mon code de mon layout :
<?php if($_SESSION['acl']['role'] != 'visiteur') { //Définition du Doctype, des balises meta/title/script/link echo $this->doctype(); $this->headTitle($this->escape($this->title)); $this->headScript()->appendFile('http://localhost:9009/document_root/scripts/extjs/adapter/ext/ext-base.js'); $this->headScript()->appendFile('http://localhost:9009/document_root/scripts/extjs/ext-all.js'); $this->headScript()->appendFile('http://localhost:9009/document_root/js/prototype.js'); $this->headLink()->appendStylesheet('http://localhost:9009/document_root/styles/site.css'); $this->headLink()->appendStylesheet('http://localhost:9009/document_root/scripts/extjs/resources/css/ext-all.css'); $this->headLink()->appendStylesheet('http://localhost:9009/document_root/styles/print.css', 'print'); ?> <html> <head> <?php echo $this->headTitle(); echo $this->headMeta(); echo $this->headLink(); echo $this->headScript(); ?> <script type="text/javascript"> Ext.onReady(function(){ new Ext.ToolTip({ target: 'tip_change_profil', title: 'Changer de profil', width:200, html: 'Cliquez ici pour emprunter un autre profil', trackMouse:true }); new Ext.ToolTip({ target: 'tip_connexion', title: 'Déconnexion', width:150, html: 'Cliquez ici pour vous déconnecter', trackMouse:true }); new Ext.ToolTip({ target: 'tip_revenir', title: 'Profil', width:150, html: 'Revenir au profil d\'origine', trackMouse:true }); Ext.QuickTips.init(); }); function refreshMonth() { var url = "<?php print ROOT_URL; ?>/check-year/"; var myAjax = new Ajax.Request( url, { method: 'get', parameters: {year: $('menu_selected_year').value}, onComplete: renderResults, onFailure: function(){ alert('Erreur'); } }); } function renderResults(response) { eval(response.responseText); } </script> <?php } ?> </head> <body onLoad="hide_loading_layer();"> <?php if ($_SESSION['acl']['role'] != 'visiteur') { /*On affiche le header et le menu commun à toutes les pages, sauf pour la page d'authentification.*/ echo $this->partial('header.phtml'); echo $this->partial('menu.phtml', array('menu' => $this->menu)); } //On affiche la vue de l'action en cours. echo $this->layout()->content ; ?> </body> </html>
Je te mets quand même mon code du controller SaisiesController ?
Edit :
Voici la partie où je gère le rendu de l'action indexAction de SaisiesController
$this->view->menu = 'saisies'; $this->view->commentairesTemplate = 'scripts/saisies/commentaires.phtml'; $this->view->navigationTemplate = 'scripts/saisies/navigation.phtml'; if($tpl == 'index_statistique') $this->view->actionTemplate = 'scripts/saisies/index_statistique.phtml'; else $this->view->actionTemplate = 'scripts/saisies/index.phtml'; if ($window == 'popup') print $this->view->render('scripts/site-popup.phtml');
Et voici mon AuthController loginAction où j'insère le disableLayout()
public function loginAction() { $this->_helper->layout->disableLayout(); $view = Zend_Registry::get('view'); /** Remet à jour la session (en cas de déconnexion) */ if(isset($_SESSION[APP])) unset($_SESSION[APP]); if(isset($_SESSION['nav'])) unset($_SESSION['nav']); $feedback = $login = $password = null; if (strtolower($_SERVER['REQUEST_METHOD']) == 'post') { try { /** Bride silencieusement l'authentifiant et le mot de passe */ $login = trim($_POST['login']); $password = trim($_POST['password']); if(!isset($_POST['login']) || !$_POST['login']) throw new Exception('Identifiant manquant, merci de compléter votre saisie pour continuer'); if(!isset($_POST['password']) || !$_POST['password']) throw new Exception('Mot de passe manquant, merci de compléter votre saisie pour continuer'); $auth = new AuthAdapter($login, $password); $res = $auth->authenticate($login, $password); switch ($res->getCode()) { case Zend_Auth_Result::FAILURE: throw new Exception('Mot de passe incorrect, merci de vérifier votre saisie pour continuer'); break; case Zend_Auth_Result::SUCCESS: header("Cache-control: private, no-cache"); header("Expires: Mon, 25 Feb 2002 01:00:00 GMT"); header("Pragma: no-cache"); header("content-type: text/html; charset=iso-8859-1"); print "{success:true}"; //exit; break; default: throw new Exception('Erreur lors de l\'authentification'); print $view->render('scripts/auth/authentification.phtml'); break; } /** Affiche un message de rappel pour les responsables (avec un lien vers la validation des saisies) chaque lundi précédent la date limite de validation des saisies du mois */ /** Positionne un calendrier sur la date du jour */ require_once('Agrica/Date/CalendarPeriodHelper.class.php'); $ch = new CalendarHelper(); /** Quel mois traite-t-on ? Si nous sommes en début de mois il s'agit du mois précédent, si nous sommes en fin de mois il s'agit du mois courant. Le battement est d'une semaine, dans tous les cas le test passe par rapport à 15 (15 - 7 = 8 15 + 7 = 22) Sinon pour des cours de mandarin... */ if ($ch->getDay() < 15) { $ch->previousMonth(); } /** Sommes nous le lundi qui précède le vendredi de la semaine suivant le dernier jour du mois ? Ou plus simplement sommes nous le lundi qui précède la date butoir du mois écoulé ? */ $ch->setDay(1); $bornes = $ch->getMonthLimits(); $ch->setDay($bornes[1][2]); /** Avance pour mieux reculer le calendrier tant que l'on est pas vendredi */ $ch->nextDay(); while (5 != $ch->getDayOfWeek()) { // 5 est la position de vendredi dans la semaine $ch->nextDay(); } /** Recule de la difference entre vendredi et lundi (5 -1) */ for ($i = 0; $i < 4; $i++) { $ch->previousDay(); } /** Récupère l'identifiant et le profil de l'utilisateur courant */ $infos = $_SESSION['informations']; $PER_ID = $infos->PER_ID; $profil = $_SESSION['acl']['role']; $vasOnStandBy= false; /** Le profil connecté gère-t-il des sections ? */ $seg = new SectionsGestion (); if ($profil = 'user') $segIdsList = $seg->getSegIdsForDptHead ($PER_ID);
Dernière modification par Nikko (27-02-2009 13:32:28)
Hors ligne
quand tu enleve $this->_helper->layout->disableLayout() de loginAction, indexAction est correctement affiché avec le header et le footer ?
ce que je ne comprend pas c'est ton
$view = Zend_Registry::get('view'); et apres print $view->render('scripts/auth/authentification.phtml');
ton objet view n'est pas initialisé dans le bootstrap
pourquoi pas directement :
print $this->view->render('scripts/auth/authentification.phtml');
Hors ligne
Lorsque j'enlève ce morceau de code, je n'arrive pas à passer ma page d'authentification qui est remplie de JS... j'ai une barre de loading qui tourne en rond sans jamais me rediriger vers la page d'accueil... C'est pour cela que j'ai utilisé le disableLayout().
Pour la partie de code que tu ne comprends pas, c 'est simplement une "erreur de jeunesse"... Je suis nouveau sur PHP et Zend et je reprends un programme que je n'ai pas créé. Donc il est possible que je laisse passer certaines choses comme celle que tu viens de souligner. Je corrige celà de suite...
Hors ligne
Lorsque j'enlève ce morceau de code, je n'arrive pas à passer ma page d'authentification qui est remplie de JS... j'ai une barre de loading qui tourne en rond sans jamais me rediriger vers la page d'accueil... C'est pour cela que j'ai utilisé le disableLayout().
c'est bien cela, ca n'a rien a voir avec $this->_helper->layout->disableLayout(); qui active ou non ton layout
(gestion de la vue), alors que tu un probleme de fonctionnement (controlleur, js).
Essaye en debuggant (xdebug) ou rien qu'avec firefox -> firebug -> firephp et
ça dans ton bootstrap :
$profiler1 = new Zend_Db_Profiler_Firebug('All DB Queries'); $profiler1->setEnabled(true); $db1->setProfiler($profiler1);
Hors ligne
En ajoutant ton code dans mon boostrap et en retirant le disablelayout de mon AuthController, j'ai cette erreur là dans l'onglet script de Firebug :
Failed to load source for sourceFile top-level http://localhost:9009/auth script.tags( X| 1197064 1197065 1197066 )(1 invalid)
Qu'est-ce que ca veut dire mis à part qu'il ne peut charger une source ?
Hors ligne
pas de chance c'est une erreur de firebug, essaie le version : ->1.3.3 b4
Hors ligne