2010-10-27 4 views
0

J'ai une liste de bâtiments que je charge depuis mon modèle. Ces bâtiments sont montré dans une boucle dans mon point de vue comme si:Codeigniter: Chargement d'une vue différente dans une boucle en fonction du segment URI

Contrôleur

public function index() { 
$data['buildings'] = $this->Base_Model->getUserBuildings(); 
$this->load->view('game', $data); } 

Voir

<?php foreach($buildings as $b): ?> 
    <div class="building">[...]</div> 
<?php endforeach; ?> 

Chaque build a quelques "actions" possibles, telles que « info "," prix "," couleur ". l'état par défaut affiche "info".

Je veux être en mesure de charger une action spécifique pour un bâtiment spécifique.

Par exemple, j'ai une usine et une pharmacie, par défaut, les deux affichent l'onglet "info". Comment, si je clique pour l'onglet "prix" de la pharmacie, montre l'onglet "info" pour l'usine ET l'onglet "prix" pour la pharmacie?

Mes URL ressemble ces:

par défaut

site/bâtiments

prix du spectacle de la pharmacie

site/bâtiments/prix/pharmacie

Peut-être que je devrais chercher une solution vue partielle, mais je vraiment besoin d'un conseil ou d'une solution;)

Merci beaucoup à l'avance (je suis désolé pour mon mauvais anglais aussi)

Répondre

0

sans knowi ng plus sur la mise en place de son difficile à dire, mais vous voulez une sorte de conditionnel dans votre prix() fonction

sont les actions info/prix obtenus à partir de la base de données?

si donc quelque chose comme

<?php foreach($buildings as $b): ?> 
    <div class="building"> 
    <?php if($this->uri->segment(3)==$b['building_name']) { 
     echo 'Price'; 
    } else { 
     echo 'Info'; 
    } 
    ?>  
    </div> 
<?php endforeach; ?> 

mais comme il est dit sans en savoir plus sur le système, il est difficile de donner une réponse décente.

+0

Merci Ross, ça m'a convaincu que faire un test dans la vue était la "meilleure" solution à mettre en place. – Magikman

0

Quelque chose comme ça alors :

$this->Base_Model->getUserBuildingFromWebname($webname); 

Ensuite, dans votre contrôleur Buildings vous pouvez ajouter ceci:

public function index($webname = null) 
{ 
    if(!is_null($webname)) 
    $buildingId = $this->Base_Model->getUserBuildingFromWebname($webname); 
    else 
    $buildingId = null; 

    $data["showBuildingDetails"] = $buldingId; 

    //the rest of your index() function 
} 

public function price ($webname) 
{ 
    return $this->index($webname); 
} 
+0

Merci Repox pour votre réponse, mais en fait, je reçois la liste complète des bâtiments dans la fonction d'index. Ensuite, à mon avis, je parcourir et montrer par défaut le "info". Est-ce que je veux faire est de montrer l'information mais si un bâtiment est passé dans l'URL, alors je montrerai l'information pour les autres et le prix pour le passé. J'ai réalisé de manière «moche» en faisant un test à mon avis mais je n'aime pas vraiment ça. Toute idée est appréciée, merci encore! – Magikman

Questions connexes