Version actuelle
0.8.4.2
 

Forums

Un problème, une idée d'amélioration ?
C'est ici que ça se passe !

You are not logged in.

Announcement

Suivez l'actualité du développement de Hyla sur son blog : http://blog.hyla-project.org/
  • Index
  •  » Aide
  •  » hyla template -probleme d'objet

#1 2011-05-03 21:35:15

Beber
Membres
Registered: 2011-05-03
Posts: 9

hyla template -probleme d'objet

Bonjour,

voila je dois injecter dans un template une fonction qui me permet d'afficher mon menu celle-ci provient d'un objet.

J'ai essayer de lui fournir l'objet et d'enregistrer une fonction pour l'afficher dans le template,
j'ai essayer de juste passer l'objet et d’utiliser sa fonction dans le template,
j'ai essayer pas mal de chose et quand j'arrive à l'afficher il me l'affiche au tt debut et pas dans la div que jlui est indiquer

est-ce que quelqu'un pourrait m'aider ?

Merci beaucoup pour votre temps !

Offline

 

#2 2011-05-05 14:20:22

hugo
Administrateur
Registered: 2007-04-10
Posts: 807

Re: hyla template -probleme d'objet

Salut,

pourrais-tu mettre ici un exemple de code histoire de mieux comprendre ce que tu essaies de faire...

Offline

 

#3 2011-05-06 19:12:45

Beber
Membres
Registered: 2011-05-03
Posts: 9

Re: hyla template -probleme d'objet

salut,

ok pas de soucis !

Alors voila j'ai mon template par défaut

Code:

<div id="global">

    <div id="header">
        
        <div>
            <div id="logo">
                <a href="index.php" id="lien_logo"><img src="images/images/logo.png" width="182" height="69" border="0"/></a>
              </div>
            <div id="name-util">{$user-name} (<a href="" id="deconnexion">Déconnexion</a>)</div>
         </div>
        <div id="menu-Global">
            {$menu.getMenuUtilisateur}
        </div>
    </div>
    
    <div id="container">
        
        <div id="wrapper-h"></div>

        <div id="wrapper">
        
            <!-- SSousMenu -->
        
            <div id="SSousMenu-Global">
                <div id="SSousMenu-up">
                    <a href="#" id="lien-closeSSousMenu">fermer</a>
                </div>
                
                <div id="SSousMenu"></div>
            </div>
            
            <!-- End SSousMenu -->
            
            {!include:'../views/{$node}'}
                        
          </div>
        
        <div id="wrapper-b"></div>

    </div>
    
    <div id="footer">
    
    </div>

</div>

j'ai mon index qui appelle mon template

Code:

        $tpl = new Template('../www/');
        $tpl->importFile('default', 'default.tpl.php');
        $menu = new Menu();
        $tpl->setVar('menu', $menu);
        $tpl->setVar('user-name', '***');
        $tpl->setVar('node', 'node-informations.php');
        //$tpl->registerFunction('getMenuUtilisateur', '$menu->getMenuUtilisateur()');

        echo $tpl->render();

J'ai un objet menu dans lequel il y a une méthode getMenuUtilisateur qui me permet d'afficher mon menu
mais j'arrive pas à l'afficher dans mon template, j'ai essayer plein de truc !
Si je retire le commentaire //$tpl->registerFunction('getMenuUtilisateur', '$menu->getMenuUtilisateur()');,
mon menu s’affiche mais tout en haut de ma page et non pas dans la div "menuGlobal"

voila j’espère avoir été plus précis !

Vous avez fais du super taff avec cette class php !! wink

Merci encore !

Last edited by Beber (2011-05-06 20:36:26)

Offline

 

#4 2011-05-09 12:30:59

hugo
Administrateur
Registered: 2007-04-10
Posts: 807

Re: hyla template -probleme d'objet

Salut,

tu ne peux pas appeler une méthode avec ceci {$menu.toto}, cela te permet uniquement d'afficher le contenu de variable ou d'index de tableau.

utilise plutot :

$tpl->registerFunction('getMenuUtilisateur', array($menu, 'getMenuUtilisateur');

++

Offline

 

#5 2011-05-09 23:02:55

Beber
Membres
Registered: 2011-05-03
Posts: 9

Re: hyla template -probleme d'objet

T'avais oublier une ')' ^^

J'ai essayer :

Code:

        $tpl = new Template('../www/');
        $tpl->importFile('default', 'default.tpl.php');
        $menu = new Menu();
        $tpl->setVar('menu', $menu);
        $tpl->setVar('user-name', '***');
        $tpl->setVar('node', 'node-informations.php');
        $tpl->registerFunction('getMenuUtilisateur', array($menu, 'getMenuUtilisateur'));

        $tpl->render('line');
        echo $tpl->render();

et j'ai écrit ca dans le template :

Code:

        <div id="menu-Global">
        <!-- BEGIN line -->
            {!getMenuUtilisateur}
        <!-- END line -->
        </div>

Pour le block c'est un essai, pourrait-tu m'expliquer à quoi ca sert ?
J'utilise les block avec drupal mais je pense pas que ca soit pareil !

Avec ça j'arrive à afficher mon menu mais il s'affiche au même endroit en haut de la page et non dans la div que je demande !

Une bonne soirée !

Merci !

Offline

 

#6 2011-05-10 16:20:21

hugo
Administrateur
Registered: 2007-04-10
Posts: 807

Re: hyla template -probleme d'objet

Que fais ta fonction getMenuUtilisateur ?

Elle fait un echo (pas bon) ou elle renvoie son contenu par le return (bonne méthode) ?

Offline

 

#7 2011-05-10 20:00:37

Beber
Membres
Registered: 2011-05-03
Posts: 9

Re: hyla template -probleme d'objet

Elle va chercher les données du menu et fait des echo de l'html en fonction du menu!
Donc ca doit être ça, jvais essayer de réécrire ça autrement alors !
Je te tiens au courant du résultat!

Pourrait-tu m'expliquer la fonction des bloc dans hyla ?

En tout cas, je te remercie beaucoup, tu ou vous avez fait du bon travail et tu es tous les jours présent pour répondre aux questions !! wink

à bientôt !

Bonne continuation !

Last edited by Beber (2011-05-10 21:24:13)

Offline

 

#8 2011-05-11 17:08:09

hugo
Administrateur
Registered: 2007-04-10
Posts: 807

Re: hyla template -probleme d'objet

Salut beber,

Merci wink

les blocs, c'est si tu dois avoir plusieurs bloc de code qui se répète, par exemple, pour afficher plusieurs lignes d'un tableau, tu mets les balises de lignes du tableau dans un bloc et après, quand tu appeleras la fonctions render avec le nom du bloc en paramètre, ça te créera un bloc.

Regarde l'exemple « Listage de données » ici : http://tpl.hyla-project.org/fr/exemples

++

Offline

 

#9 2011-05-17 21:02:10

Beber
Membres
Registered: 2011-05-03
Posts: 9

Re: hyla template -probleme d'objet

Bonsoir,

Voila je reviens vers toi pour te dire que tu avais raison ! wink
J'ai conquatainer  mes echo et je l'ai mis dans une variable en return et c'est tout bon ! smile

enfin faut que je revois ma méthode quand même ^^

Merci beaucoup pour ton aide !

Offline

 

#10 2011-05-18 16:10:28

hugo
Administrateur
Registered: 2007-04-10
Posts: 807

Re: hyla template -probleme d'objet

Salut Beber !

Super si ça marche alors !

++

Offline

 

#11 2012-09-02 19:12:23

Beber
Membres
Registered: 2011-05-03
Posts: 9

Re: hyla template -probleme d'objet

Salut,

Me revoilà !

J'ai compliqué un peu la chose,

J'aimerai faire de la récursivité avec les templates...

Voila on en était :

Code:

        $tpl = new Template('../www/');
        $tpl->importFile('default', 'default.tpl.php');
        $menu = new Menu();
        $tpl->setVar('menu', $menu);
        $tpl->setVar('user-name', '***');
        $tpl->setVar('node', 'node-informations.php');
        $tpl->registerFunction('getMenuUtilisateur', array($menu, 'getMenuUtilisateur'));

        $tpl->render('line');
        echo $tpl->render();

Cette fonction "getMenuUtilisateur"
est composé de trois arguments :
    - le nom du menu
    - le niveau du menu
    - Si on doit afficher ou non les menus enfants

Il appelle un template :

Code:

<nav class="{$menu.nomMachMenu} {$menu.type} <!-- BEGIN attr -->{$attr.class}<!-- END attr -->">
            <ul class="menu">    
                <!-- BEGIN item -->
                <li class="item item-{$item.idElem}">
                    <a href="{$item.lienElem}">{$item.labelElem}</a>
                    {!getMenuUtilisateur:{$menu.nomMachMenu},{$full},SousMenu}
                </li>
                <!-- END item -->
            </ul>
        </nav>

Qui rappelle cette même fonction avec des argument différents

Cette fonction fais parti de l'objet Menu
et donc je l'ai instancié comme ceci dans la fonction de l'objet même :

Code:

/* S'il y a un sous-menu à afficher */
if ($full) {
    $sousmenu = New Menu();
    $tpl->registerFunction('getMenuUtilisateur', array($sousmenu, 'getMenuUtilisateur'));
}

Le problème c'est qu'il me répète ça :

Template error : Invalid "getMenuUtilisateur" function !

Est-ce quelqu'un aurait une idée du problème ?

Merci à vous !

Bonne soirée.

Offline

 

#12 2012-09-11 17:42:05

hugo
Administrateur
Registered: 2007-04-10
Posts: 807

Re: hyla template -probleme d'objet

Salut,

bizarre, pour être sûr que ta fonction est valide, tu pourrais l'appeler avec la fonction func_user_call, vérifie si elle est bien appelée pour commencer...

Offline

 

#13 2012-09-12 23:37:47

Beber
Membres
Registered: 2011-05-03
Posts: 9

Re: hyla template -probleme d'objet

Salut,

J'suis pas bien sur de l'utiliser mais je pense qu'elle est bien appeler.
J'ai testé comme ca :

Code:

if ($full) {
    $sousmenu = New Menu();
    call_user_func($sousmenu->getMenuUtilisateur('menu-primary', false, 'SousMenu'));
    $tpl->registerFunction('getMenuUtilisateur', array($sousmenu, 'getMenuUtilisateur'));
}
$tpl->setVar('menu', $menu['system']);
$tpl->setVar('full', $full);
                        
return $tpl->render();

Mais ce bout de code là est dans la fonction même 'getMenuUtilisateur' de l'objet Menu, Lequel j'ai déjà instancié pour le menu, étant arrivé ici à l'état du sous-menu rempli donc avec le sous sous menu. Du coup au moment du rappel de la fonction j'sais pas si le New Menu() est utile vu que normalement il a déjà était instancié! est-ce que je peu écrire :

$tpl->registerFunction('getMenuUtilisateur', array($this, 'getMenuUtilisateur')); ?

Mais j'vois que ça me fais le même résultat.

J'comprend pas parce que ça marche pour le menu, le sous menu et pour le sous sous menu il ne veux pas utilisé la récursivité pour le rappel de la fonction 'getMenuUtilisateur'!

Pourrait-tu m'éclairer sur la fonction que tu m'a proposé ?

Merci.

Last edited by Beber (2012-09-12 23:43:15)

Offline

 

#14 2012-09-18 14:13:10

hugo
Administrateur
Registered: 2007-04-10
Posts: 807

Re: hyla template -probleme d'objet

Salut,

il faut que tu testes ainsi :

Code:

call_user_func(array($sousmenu, 'getMenuUtilisateur'), 'menu-primary', false, 'SousMenu');

Offline

 

#15 2012-12-14 20:19:53

Beber
Membres
Registered: 2011-05-03
Posts: 9

Re: hyla template -probleme d'objet

Salut,

J'ai eu le temps d'avancer un peu plus sur mon projet,

J'ai bien compris comment fonctionne la fonction, j'avais juste un problème de développement, j'ai repris de zéros et j'ai utilisé ma fonction récursive avant l'envoi au template. j'ai, du coup, envoyé un tableau à mon template.

ce qui me donne :

Code:

    private function renderItems($items, $niveau, $full, $display) {

        $base_url = $this->config->base_url();
        $output = '';
        $niveau++;

        if ($niveau >= $display) $output .= "<ul class='menu niveau-".($niveau)." view-".$display."'>";
        foreach($items as $id => $item) {
            if ($niveau >= $display) {
                if ($item['view'] == 0) {
                    $output .= str_repeat(Tab, 3)."<li class='item item-".$item['itmid']."'>".NL;
                    $output .= str_repeat(Tab, 4)."<a href='".$base_url.$item['item_path']."'>".$item['item_title']."</a>".NL;
                    if ($full <> 'false') {
                        if (!empty($item['Children']) && (isset($item['active']))) {
                            $output .= $this->renderItems($item['Children'], $niveau, $full, $display);            
                        }
                    }
                    $output .= str_repeat(Tab, 3)."</li>".NL;
                }
            } else {
                if (!empty($item['Children']) && (isset($item['active']))) {
                    $output .= $this->renderItems($item['Children'], $niveau, $full, $display);
                }
            }
        }
        if ($niveau >= $display) $output .= "</ul>";
        return $output;
    }

et un template comme ça :

Code:

<nav class="{$menu.menu_name} {$menu.type} <!-- BEGIN attr -->{$attr.class}<!-- END attr -->">
{$items}
        </nav>

En voulant utiliser cette même méthode à un template de nœud qui représente en faite un type de contenu et une question m'est venu à l'esprit :

Comment je peux utilisé les conditions dans un template ?

par exemple :

Code:

<div id="node-{node.id}" class="node {$node.type}">

<!-- J'aimerai ici faire des conditions pour afficher le container des blocks ici d'une liste que s'il existe dans le tableau $tabs -->
<div class="tabs">
<ul>
<!-- BEGIN tabs -->
<li>{$tabs.name}</li>
<!-- END tabs -->
</ul>
</div>

</div>

Merci pour tes précisions.

Bonne soirée.

Offline

 

#16 2012-12-18 10:04:15

hugo
Administrateur
Registered: 2007-04-10
Posts: 807

Re: hyla template -probleme d'objet

Bonjour,

avec Hyla Tpl, tu ne peux pas faire de condition dans un template, ce genre de traitement doit être fait dans le controlleur.

++

Offline

 
  • Index
  •  » Aide
  •  » hyla template -probleme d'objet

Board footer

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson