Bonjour,

Je suis un grand débutant!!

J'arrive faire un lien avec

echo $this->Html->link($v'Category']'name'] ,$v'Category']'link']);

Simplement j'ai fait une fonction comme ceci

function sous_menu($tableau){
        ?><ul><?php
        foreach($tableau as $k => $v){
        ?><li><?php 
            echo $v'Category']'post_count'];
            echo $this->Html->link($v'Category']'name'] ,$v'Category']'link']);
            if(is_array($v'children']) && !empty($v'children'])){
                sous_menu($v'children']);
            }
        ?></li><?php
    }
    ?></ul><?php
    }

le $this->Html... me génère une erreur et je ne vois pas comment résoudre ce problème.

J'ai essayé de passer le $this dans ma fonction

function sous_menu($tableau,$this){}
sous_menu($array,$this);

mais rien y fait.

Pouvez-vous m'aiguiller?

merci

12 réponses


Bonsoir,

ou as-tu mis cette fonction?

Hello,
Dans mon élément /View/Elements/monelement.ctp

Je me demandais à l'instant si je ne dois pas faire en Helper du genre /View/Helper/MonelementHelper.php ?

J'ai suivi un tuto sur les date, et il a créé un DateHelper.php, mais je ne me souviens plus trop comme ca été fait

<?php
class DateHelper extends AppHelper{
    public $days = array('Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi','Dimanche');
    public $months = array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre');
    function french($datetime){
        $timestamp = strtotime($datetime);
        $date = $this->days[date('N',$timestamp)-1]." ".date('d',$timestamp)." ".$this->months[date('m',$timestamp)-1]." ".date('Y',$timestamp);
        $date .= " à ".date('H:i',$timestamp);
        return $date;
    }
}

La dedand il y a un $this qui est dans une fonction...
Chais pas trop..

Et si tu fais :

Dans ton élement:

<ul><?php
    foreach($tableau as $k => $v){
    ?><li><?php 
        echo $v'Category']'post_count'];
        echo $this->Html->link($v'Category']'name'] ,$v'Category']'link']);
        if(is_array($v'children']) && !empty($v'children'])){
            sous_menu($v'children']);
        }
    ?></li></ul>

Et dans ta vue:

echo $this->Element('sous-menu',array('tableau' => $array));

Ou la j'ai rein compris :o)
J'ai pas de vue.

En fait j'essaye d'afficher des categories et j'essaye de contruire les sous-catégoire. Je n'ai pas de vue pour ca

Dans mon template j'ai deja ca

echo $this->element('categoriesList',array(),array('cache'=> array('config'=>'week')));

@pierrot =>

Dans cet exemple, on est dans un helper, qui est une classe comprenant une variable days et une variable mounth (+ tout ce qui est hérité de la classe mère AppHelper ici)

Le $this référence à la classe dans laquelle on se trouve.

En faisant $this->mounth , on accède à la variable mounth de la classe.

Comment récupères tu la liste des categories?

En faisant $this->mounth , on accède à la variable mounth de la classe.

Ha oui, c'est juste. Donc je laisse tombe le Helper....
Attends je viens avec plus d'explication

Voici le code complet de mon element
categoryList.ctp

<?php
function subMenu($tableau){
        ?><ul><?php
        foreach($tableau as $k => $v){
        ?><li><?php 
            echo $v'Category']'post_count'];
                //echo $v'Category']'name'];
            echo $this->Html->link($v'Category']'name'] ,$v'Category']'link']);
            if(is_array($v'children']) && !empty($v'children'])){
                sunMenu($v'children']);
            }
        ?></li><?php
    }
    ?></ul><?php
    }
?>

<div class="panel panel-default">
  <!-- Default panel contents -->
  <div class="panel-heading">Category</div>
    <?php 
        // Ici je recupere le donnée du controller de l'action categorylist
    $categories = $this->requestAction(array(
                                        'controller'=>'categories',
                                        'action'    =>'categoriesList',
                                        'admin' =>false
                                        ),
                                        array('pass' => array('dog'))
                                );
    ?>
    <?php
    //debug($categories);
    ?>
// Ici j'affiche mon menu, Ca fonction. Sauf depuis que j'ai créé la fonction
<ul class="list-group">
        <?php foreach($categories as $k => $v): ?>
        <li class="list-group-item">
            <span class="badge"><?php echo $v'Category']'post_count']; ?></span>
            <?php echo $this->Html->link($v'Category']'name'] ,$v'Category']'link']); ?>
            <?php
                if(is_array($v'children']) && !empty($v'children'])){
                    subMenu($v'children']);
                }
            ?>
        </li>
        <?php endforeach; ?>
    </ul>
</div>

Si, dans ma fonction, je décommente
//$v'Category']'name']
et je commente, la ligne suivant. Mon menu s'affiche très bien. Sauf que j'aimerais avoir mes liens :o)

Voilà :o)

Tu peux me copier le contenu de $categories?

Affiché par debug($categories) ?

VOilà, mais je pense pas que c'est le problème, quoi je pense...

array(
    (int) 0 => array(
        'Category' => array(
            'id' => '25',
            'name' => 'Root',
            'lft' => '1',
            'rght' => '16',
            'parent_id' => '0',
            'slug' => 'categories',
            'post_count' => '0',
            'link' => array(
                'controller' => 'posts',
                'action' => 'category',
                'slug' => 'categories'
            )
        ),
        'children' => array(
            (int) 0 => array(
                'Category' => array(
                    'id' => '26',
                    'name' => 'Publications',
                    'lft' => '2',
                    'rght' => '9',
                    'parent_id' => '25',
                    'slug' => 'publications',
                    'post_count' => '1',
                    'link' => array(
                        'controller' => 'posts',
                        'action' => 'category',
                        'slug' => 'publications'
                    )
                ),
                'children' => array(
                    (int) 0 => array(
                        'Category' => array(
                            'id' => '29',
                            'name' => 'Article',
                            'lft' => '5',
                            'rght' => '6',
                            'parent_id' => '26',
                            'slug' => 'article',
                            'post_count' => '0',
                            'link' => array(
                                'controller' => 'posts',
                                'action' => 'category',
                                'slug' => 'article'
                            )
                        ),
                        'children' => array()
                    ),
                    (int) 1 => array(
                        'Category' => array(
                            'id' => '28',
                            'name' => 'Books',
                            'lft' => '3',
                            'rght' => '4',
                            'parent_id' => '26',
                            'slug' => 'book',
                            'post_count' => '1',
                            'link' => array(
                                'controller' => 'posts',
                                'action' => 'category',
                                'slug' => 'book'
                            )
                        ),
                        'children' => array()
                    ),
                    (int) 2 => array(
                        'Category' => array(
                            'id' => '30',
                            'name' => 'Poster',
                            'lft' => '7',
                            'rght' => '8',
                            'parent_id' => '26',
                            'slug' => 'posters',
                            'post_count' => '0',
                            'link' => array(
                                'controller' => 'posts',
                                'action' => 'category',
                                'slug' => 'posters'
                            )
                        ),
                        'children' => array()
                    )
                )
            ),
            (int) 1 => array(
                'Category' => array(
                    'id' => '27',
                    'name' => 'Researches',
                    'lft' => '10',
                    'rght' => '15',
                    'parent_id' => '25',
                    'slug' => 'researches',
                    'post_count' => '0',
                    'link' => array(
                        'controller' => 'posts',
                        'action' => 'category',
                        'slug' => 'researches'
                    )
                ),
                'children' => array(
                    (int) 0 => array(
                        'Category' => array(
                            'id' => '32',
                            'name' => 'Actived',
                            'lft' => '13',
                            'rght' => '14',
                            'parent_id' => '27',
                            'slug' => 'actived',
                            'post_count' => '0',
                            'link' => array(
                                'controller' => 'posts',
                                'action' => 'category',
                                'slug' => 'actived'
                            )
                        ),
                        'children' => array()
                    ),
                    (int) 1 => array(
                        'Category' => array(
                            'id' => '31',
                            'name' => 'Unactived',
                            'lft' => '11',
                            'rght' => '12',
                            'parent_id' => '27',
                            'slug' => 'unactived',
                            'post_count' => '0',
                            'link' => array(
                                'controller' => 'posts',
                                'action' => 'category',
                                'slug' => 'unactived'
                            )
                        ),
                        'children' => array()
                    )
                )
            )
        )
    )
)

Si je modifie ma fonction ainsi, ca marche bien:

function subMenu($tableau){
        ?><ul><?php
        foreach($tableau as $k => $v){
        ?><li><?php 
            echo $v'Category']'post_count'];
            echo $v'Category']'name'];
            if(is_array($v'children']) && !empty($v'children'])){
                subMenu($v'children']);
            }
        ?></li><?php
    }
    ?></ul><?php
    }

ca m'affiche ca :
Root

  • 1Publications
    -- 0Article
    -- 1Books
    -- 0Poster
  • 0Researches
    -- 0Actived
    -- 0Unactived

Ok j'ai résolu mon problème avec un Helper, finalement.
Voir la 3ème réponse
Merci pour tout

quel est l erreur remontée?