Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'avais un code sur ma page d'accueil, qui fonctionnait a merveille.
Je sors cette brique de code pour la mettre dans un fichier a part et plus rien ne fonctionne.
Pour la connexion a la base je lui rajoute même un require pour mon bootstrap et rien n'y fait.
Voila mon include:
<?= $this->partial('./includes/recruteAgence.phtml'); ?>
Voilà la page en question:
<?php try { require './application/bootstrap.php'; } catch (Exception $exception) { echo '<html><body><center>' . 'An exception occured while bootstrapping the application.'; mail('test@test.fr','An exception occured while bootstrapping the application',nl2br(htmlentities(print_r($exception,true)))); if (defined('APPLICATION_ENVIRONMENT') && APPLICATION_ENVIRONMENT != 'production' ) { echo '<br /><br />' . $exception->getMessage() . '<br />' . '<div align="left">Stack Trace:' . '<pre>' . $exception->getTraceAsString() . '</pre></div>'; } echo '</center></body></html>'; exit(1); } ?> <div class="title_block side-box last" style="padding-top: 0;"><h2 class="header-blue" style="text-align: center;color: #888">Les agences qui recrutent</h2></div> <?php $col[] = array_slice($this->postes,0,7); $col[] = array_slice($this->postes,7,7); print_r ($col); $new_array = array(); foreach ($col as $co) { print '<div style="width:45%;float: left; margin: 0 1% 0 1%;display: inline"><ul>'; foreach ($co as $poste) { $key = $poste['cli_id']; /*** 30/08/2010 1 annonce par client **/ if(!isset($new_array[$key] )){ /*** 30/08/2010 1 annonce par client **/ $new_array[$key] = $poste['cli_id']; /*** 30/08/2010 1 annonce par client **/ $url_fiche_detail = $this->baseUrl() . '/index/fiche/id/' . $poste['poste_id'].'/'.str_replace('é','e',$poste['contrat_nom']).'/'.$poste['poste_intitule']; //$url_lieu = $this->baseUrl() . '/index/recherche?cr=poste&loc='.$poste['agence_ville']; print '<li onclick="window.location = \''.$url_fiche_detail.'\';" style="cursor: pointer">'; print '<a class="job_title" href="'.$url_fiche_detail.'">'; print $poste['poste_intitule']; print '</a><br />'; print '<a class="job_place" href="'.$url_fiche_detail.'">'; print $poste['agence_ville']; print '</a>'; print '<a class="job_place" style="padding: 0 .5em" href="'.$url_fiche_detail.'">'; print $poste['cli_rs']; print '</a>'; print '</li>'; } } print '</ul></div>'; } ?> <div class="clear"></div> </div>
Le print_r me renvoit
Array ( [0] => [1] => )
Si vous voyez d'ou ça peut venir. Merci
Mon bootstrap inclut un fichier config.ini qui contient les logs de connexion a la base de données.
Pourquoi je perds la connexion à la base de données quand je fais mon include??
Merci d'avance pour votre aide.
Hors ligne
c'est du Zend ?
Hors ligne
Ca execute l'action de mon controlleur:
<code>
public function indexAction() {
/**
* HOME PAGE
*/
if ($this->_request->getParam('norender')) {
$this->_helper->viewRenderer->setNoRender();
Zend_Layout::getMvcInstance ()->disableLayout ();
return true;
}
$this->render('box/tags','left',True);
$this->view->link = $this->_request->getParam('link');
//Layout personnalisé
// $this->_helper->viewRenderer->setNoRender();
$tAgences = new Agences();
$agences = $tAgences->getAllAgences(null,'agence_id');
$this->view->devinfo = array();
//print_r ($agences);
$paginate = array();
$paginate['currentPage']=1;
$paginate['rowPerPage']=1;
$tPostes = new Postes();
foreach ($agences as $agence) {
$poste=$tPostes->getByAgId($agence['agence_id'],$paginate);
if (count($poste)) $postes[$poste[0]['poste_date_update']] = $poste[0];
}
krsort($postes);
$tmpPostes = array_chunk($postes,14);
$postes = $tmpPostes[0];
$this->view->postes = $postes;
$this->_helper->layout->setLayout('accueil');
}
</code>
Hors ligne
Je ne comprends pas trop pourquoi tu tentes d'inclure ton fichier bootstrap dans ta vue?
et si tu print_r($postes) dans ton contrôleur?
Hors ligne
J'ai bien un résultat.
Hors ligne
Je passe par une action-contrôleur que j'appelle ensuite dans un script pour résoudre mon problème mais là aussi le script ne semble pas apprécier mon:
echo $this->action('recruteagence', 'index', 'default');
Voici monscript: recruteagence.phtml
<div class="container maxheight last_jobs"> <div class="title_block side-box last" style="padding-top: 0;"><h2 class="header-blue" style="text-align: center;color: #888">Les agences qui recrutent</h2></div> <?php echo $this->action('recruteagence', 'index', 'default'); $col[] = array_slice($this->postes,0,7); $col[] = array_slice($this->postes,7,7); $new_array = array(); foreach ($col as $co) { print '<div style="width:45%;float: left; margin: 0 1% 0 1%;display: inline"><ul>'; foreach ($co as $poste) { $key = $poste['cli_id']; /*** 30/08/2010 1 annonce par client **/ if(!isset($new_array[$key] )){ /*** 30/08/2010 1 annonce par client **/ $new_array[$key] = $poste['cli_id']; /*** 30/08/2010 1 annonce par client **/ $url_fiche_detail = $this->baseUrl() . '/index/fiche/id/' . $poste['poste_id'].'/'.str_replace('é','e',$poste['contrat_nom']).'/'.$poste['poste_intitule']; //$url_lieu = $this->baseUrl() . '/index/recherche?cr=poste&loc='.$poste['agence_ville']; print '<li onclick="window.location = \''.$url_fiche_detail.'\';" style="cursor: pointer">'; print '<a class="job_title" href="'.$url_fiche_detail.'">'; print $poste['poste_intitule']; print '</a><br />'; print '<a class="job_place" href="'.$url_fiche_detail.'">'; print $poste['agence_ville']; print '</a>'; print '<a class="job_place" style="padding: 0 .5em" href="'.$url_fiche_detail.'">'; print $poste['cli_rs']; print '</a>'; print '</li>'; } } print '</ul></div>'; } ?> <div class="clear"></div> </div>
et voici mon action-contrôleur:
public function recruteagenceAction () { $tAgences = new Agences(); $agences = $tAgences->getAllAgences(null,'agence_id'); $paginate = array(); $paginate['currentPage']=1; $paginate['rowPerPage']=1; $tPostes = new Postes(); foreach ($agences as $agence) { $poste=$tPostes->getByAgId($agence['agence_id'],$paginate); if (count($poste)) $postes[$poste[0]['poste_date_update']] = $poste[0]; } krsort($postes); $tmpPostes = array_chunk($postes,14); $postes = $tmpPostes[0]; $this->view->postes = $postes; print_r ($agences); }
Quand j'intègre le code de "recruteagenceAction" directement dans mon script recruteagence.phtml, ça fonctionne bien.
Y a vraiment quelque chose qui m'échappe.
Hors ligne
C'est normal que t'a vue n'aime pas ça tu lui fais faire une boucle infini
si tu fais print_r($this->postes) dans ta vue ta le même résultat que dans ton contrôleur? sinon essaie print_r($this) dans ta vue et essaie de repérer les données de la vue
Hors ligne
Tout d'abord merci de me venir en aide.
Pareil, j'ai une boucle infini avec le print_r($this->postes) et le print_r($this).
Je comprends plus rien à part peut être le chemin des répertoire qui peut poser problème.
Bon je reprends, j'ai une action indexAction qui place un layout sur mon template accueil.
Dans mon template accueil.phtml je fais:
<?= $this->partial('./includes/recruteagence.phtml'); ?>
Pour ce qui est de mon action et de ma vue recruteagence vous avez le code plus haut.
Accueil.phtml se trouve dans les répertoires: view/layout
recruteagence.phtml: view/layout/includes
Merci d'avance pour votre aide.
Hors ligne
J'ai trouvé une solution qui fonctionne. Je ne pense pas que ce soit la meilleure façon de gérer mon problème...mais bon...ça fonctionne...
Alors dans ma vue: accueil.phtml
<?= $this->partial('./includes/recruteagence.phtml'); ?>
Dans mon ./includes/recruteagence.phtml
<?php echo $this->action('recruteagence', 'index', 'default'); ?>
Dans mon IndexControlleur, j'ai l'action:
public function recruteagenceAction () { $tAgences = new Agences(); $agences = $tAgences->getAllAgences(null,'agence_id'); $paginate = array(); $paginate['currentPage']=1; $paginate['rowPerPage']=1; $tPostes = new Postes(); foreach ($agences as $agence) { $poste=$tPostes->getByAgId($agence['agence_id'],$paginate); if (count($poste)) $postes[$poste[0]['poste_date_update']] = $poste[0]; } krsort($postes); $tmpPostes = array_chunk($postes,14); $postes = $tmpPostes[0]; $this->view->postes = $postes; }
Et dans mon ./views/scripts/index/recruteagence.phtml
<div class="container maxheight last_jobs"> <div class="title_block side-box last" style="padding-top: 0;"><h2 class="header-blue" style="text-align: center;color: #888">Les agences qui recrutent</h2></div> <?php $col[] = array_slice($this->postes,0,7); $col[] = array_slice($this->postes,7,7); $new_array = array(); foreach ($col as $co) { print '<div style="width:45%;float: left; margin: 0 1% 0 1%;display: inline"><ul>'; foreach ($co as $poste) { $key = $poste['cli_id']; /*** 30/08/2010 1 annonce par client **/ if(!isset($new_array[$key] )){ /*** 30/08/2010 1 annonce par client **/ $new_array[$key] = $poste['cli_id']; /*** 30/08/2010 1 annonce par client **/ $url_fiche_detail = $this->baseUrl() . '/index/fiche/id/' . $poste['poste_id'].'/'.str_replace('é','e',$poste['contrat_nom']).'/'.$poste['poste_intitule']; //$url_lieu = $this->baseUrl() . '/index/recherche?cr=poste&loc='.$poste['agence_ville']; print '<li onclick="window.location = \''.$url_fiche_detail.'\';" style="cursor: pointer">'; print '<a class="job_title" href="'.$url_fiche_detail.'">'; print $poste['poste_intitule']; print '</a><br />'; print '<a class="job_place" href="'.$url_fiche_detail.'">'; print $poste['agence_ville']; print '</a>'; print '<a class="job_place" style="padding: 0 .5em" href="'.$url_fiche_detail.'">'; print $poste['cli_rs']; print '</a>'; print '</li>'; } } print '</ul></div>'; } ?> <div class="clear"></div> </div>
Encore merci pour votre patience et votre aide!
Hors ligne
Je crois que tu mélanges beaucoup de chose.
Tu devrais revoir les bases de l'architecture MVC de Zend
Hors ligne
Non j'ai bien saisi l'architecture MVC, ce que j'ai pas vraiment compris c'est la nuance entre une vue et un layout.
Le layout ne sert qu'a la disposition, ou mise en page de ma vue?
Dernière modification par Hall (15-10-2010 09:14:14)
Hors ligne
Heu, tu as une vue qui appelle une action. Ca n'est pas très MVC.
Dans un système MVC, le controlleur appelle la couche de traitement qui appelle ou indique les vues à utiliser. La vue elle n'appelle ni les controlleurs ni les couches de traitements, elle se contente d'utiliser les informations qui lui ont été adressé.
Pour la différence entre une vue et un "layout", en gros, la vue sert à afficher le résultat d'un traitement et le layout sert de modèle de page : il contient tout ce qui ne sera pas généré par une vue.
Hors ligne
Pages: 1