Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 05-02-2009 15:00:51

dev21
Membre
Date d'inscription: 06-01-2009
Messages: 23

logique de développement

Bonjour à tous, débutant sous Zend 1.7, j'ai besoin de vos précieux conseils. J'ai parcourus pas mal de tutos et je commence à comprendre l'approche MVC mais j'ai encore un peu de mal.

Je développe un annuaire et j'ai besoin de récupérer dans ma vue index une liste des domaines d'activités et sous domaines d'activités.

1. J'ai une table mysql "ifs_activities" (id, parent_id,name)

2.mon controleur index

Code:

class AnnuaireController extends Zend_Controller_Action
{    
    public function indexAction()    {                
        $activities = new Activity();        
        $this->view->activities = $activities->getParent();        
            
    }

}

3.mon modèle

Code:

class Activity extends Zend_Db_Table_Abstract
{
    protected $_name = 'ifs_activities';            
    protected $_primary = 'id';
    
    public function getChildren(){        
        ...
    }   
    
//je recupere ici les activités parent dont le parent_id = 0
    public function getParent(){                        
        $select = $this->select()->where('parent_id = ?', '0');
        $Activity_Row = $this->fetchAll($select);
        return $Activity_Row;
        
    }
    
}

4. ma vue Index

Code:

<div>
<?php foreach($this->activities as $activity) : ?>
    
    <ul><li><?php echo $this->escape($activity->name);?>
        <ul>
        <?php foreach($activity->getChildren() as $subActivity) : ?>
        
            <li>            
            <?php echo $this->escape($subActivity->name);?>
            </li>
            
        <?php endforeach; ?>
        </ul>
    
    </li></ul>
    
<?php endforeach; ?>
</div>

donc ici par de problème pour afficher les activités parente mais je ne sais pas comment récupérer les enfant de chacune d'elles au niveau de ma fonction getChildren().

merci d'avance et j'espère que j'ai pas tout faux :-)

Dernière modification par dev21 (05-02-2009 15:01:23)

Hors ligne

 

#2 05-02-2009 15:43:50

OsoPardo
Membre
Date d'inscription: 16-09-2008
Messages: 32

Re: logique de développement

La page de documentation suivante devrait t'économiser pas mal de travail, en effet Zend_Db_Table gère les relations et sait donc récupérer les pères et fils pour peu qu'on lui précise ces relations au départ.

http://framework.zend.com/manual/fr/zen … ships.html

Comme précisé en début de page les exemples sont basé sur la bd d'exemple (je te conseille d'imprimer le schéma pour l'avoir sous les yeux, ça facilite pas mal la compréhension des exemples) :

http://framework.zend.com/manual/fr/zen … e-database

Hors ligne

 

#3 05-02-2009 15:45:30

NewSky
Membre
Date d'inscription: 17-12-2007
Messages: 79

Re: logique de développement

Salut,

Alors je suis pas encore rentré dans le vif avec le Zend, mais de tout ce que j'ai pu lire, fetchAll() de Zend_Db_Table te renvoie un object Rowset (Zend_Db_Table_Rowset). Quand tu le parcours (foreach), chaque itération te renvoie un Row (Zend_Db_Table_Row).
Donc, lorsque tu fais ton $activity->getChildren(), c'est un Zend_Db_Table_Row::getChildren() que tu fais. Hors, je ne suis pas sûr que Zend_Db_Table_Row implémente cette méthode (à vérifier quand même).
Donc, toujours à prendre avec précaution, je pense qu'il faudrait que tu fasses ta propre class Row pour un item de Ativity (pour ma part, j'aurais nommé la class qui étent Zend_Db_Table au pluriel (Ativities ou ActivityTable au pire)) dans laquelle tu implémentes ton getChildren().
Il faudra informer ta class qui étend Zend_Db_Table (ici, Ativity en l'occurrence) d'utiliser ta nouvelle table row :

Code:

class Activity extends Zend_Db_Table_Abstract
{
    protected $_name = 'ifs_activities';            
    protected $_primary = 'id';

    protected $_rowClass = 'ma_class_row';
    
    public function getChildren(){        
        ...
    }   
    
//je recupere ici les activités parent dont le parent_id = 0
    public function getParent(){                        
        $select = $this->select()->where('parent_id = ?', '0');
        $Activity_Row = $this->fetchAll($select);
        return $Activity_Row;
        
    }
    
}

Aussi, je t'invite à bien lire la doc de Zend_Db qui t'expliquera tout ça mieu que moi ;-)!!

Hors ligne

 

#4 05-02-2009 16:06:39

dev21
Membre
Date d'inscription: 06-01-2009
Messages: 23

Re: logique de développement

merci à vous,
je vais regarder la doc de plus prêt c'est vrai que je ne m'y suis pas assez attardé.

D'autant plus que je m'aperçois que j'appelle la fonction getChildren() de mon modèle directement depuis la vue sans passé par le contrôleur, ce n'est pas conseillé c'est exact ?

Dernière modification par dev21 (05-02-2009 16:27:15)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages