Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] réponse/controleur

Posted by Arnall on 06/13/2008 11:22

Bonjour,

en préambule j'indique que je peux contourner mon problème mais j'essaye de comprendre correctement le fonctionnement de Jelix, je soumets donc un cas d'école.

Je voulais savoir s'il était possible de gérer un site avec un template minimaliste du type : {$header} {$content} {$footer}

le {$content} étant variable selon la page du site ou je me trouve. Je souhaite utiliser une seule réponse de ce type :

 class myHtmlResponse extends jResponseHtml {

    public $bodyTpl = 'le_site~site';
	
	public function __construct() {
        parent::__construct();
        global $gJConfig;
        $this->addCSSLink($gJConfig->urlengine['basePath'].'style.css');
 
    }

    protected function _commonProcess() {
		$tpl=new jTpl();
        $this->body->assign('header',$tpl->fetch('le_site~header'));
		$this->body->assignZone('monprofil','user~monprofil');
		$this->body->assignZone('liste_depeches','depeches~liste_depeches',array('nb_liens'=>'60'));
		$this->body->assignZone('select_une','articles~select_une',array('nb_articles'=>'4'));
		$this->body->assignZone('derniers_posts','forum~derniers_posts');
        $this->body->assign('footer',$tpl->fetch('le_site~footer'));
    }
 }

$content n'apparait puisque je le veux différent en fonction du controleur, dans le cas de la homepage :

     function index() {
		$rep = $this->getResponse('html');
		$rep->body->assign('content',$rep->body->fetch('le_site~homepage'));
		$rep->title = ('mon site');
		$rep->body->assignZone('la_une','articles~la_une',array('nb_articles'=>'1')); 
		$rep->body->assignZone('tdw','tdw~tdw',array('nb_liens'=>'20'));    
        return $rep;
    }

La ou se situe mon problème ( problème dans le cadre de la compréhension de Jelix ) c'est que j'assigne $content après $rep = $this->getResponse('html'); , or les zones qui se trouvent dans la réponse ( 'liste_depeches' par ex. ) sont des zones qui se trouvent dans le template de $content, du coup comme la fonction _commonProcess()est déclenché en premier lieu, les zones ne sont pas affectées dans $content. Ma question est donc y a t-il un moyen d'affecter $content avant de lancer le getResponse. ( je peux utiliser la déclaration de zone directement dans le $content : {zone 'depeches~liste_depeches',array('nb_liens'=>'60')} mais je voudrais que le template soit le plus sobre possible ).

Autre question, il est indiqué que _commonProcess() n'est déclenché qu'après les "actions", de quelles action parle-t-on ? S'il s'agit des actions du contrôleur il semble que _commonProcess() est déclenché dès lors que l'on fait appel à getResponse ?

Pour finir est-il raisonable de passer un paramère à la réponse depuis le controleur ? Et si oui qu'elle est la bonne façon de faire.

PS : je précise encore, il s'agit d'un cas d'école, je sais que je peux créer plusieurs réponses, que je ne suis pas obligé d'utiliser un template minimaliste etc...

  [Opened] Re: réponse/controleur

Reply #1 Posted by laurentj on 06/13/2008 13:36

Salut,

  $rep->body->assign('content',$rep->body->fetch('le_site~homepage'));

Tu utilises un autre template, il faut donc utiliser un nouvel objet template

  $tpl = new jTpl();
  $rep->body->assign('content',$tpl->fetch('le_site~homepage'));

Tu risque sinon d'avoir de sacrées surprises.

or les zones qui se trouvent dans la réponse ( 'liste_depeches' par ex. ) sont des zones qui se trouvent dans le template de $content

Pourquoi se trouve-t-elle dans le template de $content ?? Ce que tu assigne dans le commonProcess, c'est en toute logique des choses qui vont être incluses dans le template "lesite~site", et pas les templates spécifiques à chaque action. Le template "le_site~homepage" ne devrait contenir QUE des choses de la homepage qui ne sont pas défini par défaut dans la réponse.

du coup comme la fonction _commonProcess()est déclenché en premier lieu,

Non, la fonction _commonProcess est appelé après ton action (après le return $rep...). C'est pourquoi d'ailleurs dans jelix 1.1, cette méthode a été renommée en "doAfterActions", pour plus de clareté.

de quelles action parle-t-on ?

de toutes les méthodes de tes contrôleurs. Une méthode publique d'un controleur = une action jelix.

 
Page
  1. réponse/controleur