2010-02-04 5 views
4

ok, donc je suis très nouveau à codeigniter et de ce que j'ai appris maintenant je ne peux pas comprendre comment puis-je créer une dynamique category -> subcategory -> subsubcategory system. Pouvez-vous me donner quelques directives s'il vous plaît ... quelques références, n'importe quoi pour me guider sur ce que dois-je apprendre pour accomplir cela? mercicodeigniter catégorie -> sous-catégorie -> sous-catégorie système

je devrais obtenir mon URL comme ceci www.site.com/category/subcategory/subsubcategory/etc..., vous savez ce que je veux dire.

+0

Vous devez ajouter des informations - Voulez-vous ées ce que vous avez pensé? CMS? ou des contrôleurs purs? –

+0

disons que je veux un système d'article – kmunky

Répondre

1

vous pouvez:

créer contrôleur category, réacheminer certains URIs et de l'utiliser est la logique interne pour l'analyser ses arguments pour choisir quel que soit le client de l'article demandé:

À propos des URL: http://codeigniter.com/user_guide/general/urls.html

A propos Routage URI: http://codeigniter.com/user_guide/general/routing.html

+0

que voulez-vous dire par "catégorie de contrôleur"? Pouvez-vous être plus précis s'il vous plaît? Comment puis-je faire cela, pouvez-vous me donner un exemple s'il vous plaît? merci – kmunky

+0

semble que vous n'avez aucune idée de ce qu'est MVC. Je vous conseille de google MVC et lire sur, puis aller à codeigniter et lire à propos de son implémentation de MVC. –

+0

je sais ce qu'est un contrôleur (et je sais comment utiliser un avec CI, les bases), je connais les principes de MVC, j'ai lu sur les URL et le routage, mais votre suggestion ne sonne toujours pas. Bien que je suis nouveau à MVC et CI. – kmunky

4

Je l'ai fait pour le gestionnaire de page dans PyroCMS mais il est non tache facile.

Chaque page possède son propre slug et parent_id, puis pour lire la page correcte, elle parcourt chacune des limaces de page et rejoint l'enfant. Il sait combien d'enfants il y a donc si il y a 5 enfants il sélectionne la 5ème table auto-jointe.

Voici un exemple du code:

public function get_by_path($segments = array()) 
{ 
// If the URI has been passed as a string, explode to create an array of segments 
if(is_string($segments)) 
    { 
    $segments = explode('/', $segments); 
    } 

// Work out how many segments there are 
    $total_segments = count($segments); 

// Which is the target alias (the final page in the tree) 
    $target_alias = 'p'.$total_segments; 

    // Start Query, Select (*) from Target Alias, from Pages 
    $this->db->select($target_alias.'.*'); 
    $this->db->from('pages p1'); 

    // Loop thorugh each Slug 
    $level = 1; 
    foreach($segments as $segment) 
    { 
     // Current is the current page, child is the next page to join on. 
     $current_alias = 'p'.$level; 
     $child_alias = 'p'.($level - 1); 

     // We dont want to join the first page again 
     if($level != 1) 
     { 
      $this->db->join('pages '.$current_alias, $current_alias.'.parent_id = '.$child_alias.'.id'); 
     } 

     // Add slug to where clause to keep us on the right tree 
     $this->db->where($current_alias . '.slug', $segment); 

     // Increment 
     ++$level; 
    } 

    // Can only be one result 
    $this->db->limit(1); 

    return $this->db->get()->row(); 
} 

Il est une noix de peu, mais il fonctionne parfaitement. Cela peut être très lent, donc PyroCMS maintient également une table de consultation qui a l'ID et l'URI de la page pour correspondre rapidement.

Vous pouvez voir tout le modèle ici:

http://github.com/philsturgeon/pyrocms/blob/master/application/modules/core/pages/models/pages_m.php

+0

merci @Phil pour votre morceau de code, je vais essayer de le casser. j'espère que vous pouvez m'aider si je suis coincé;) je ne suis pas nouveau à PHP, juste CI et MVC ... alors j'espère que je vais l'obtenir :) – kmunky

0

Je suis d'accord avec l'idée de Phil et je aussi Prévoyant que vous pouvez créer un module séparé (si vous utilisez des extensions modulaires par exemple) pour gérer la catégories d'une manière générique. Vous pouvez ensuite réutiliser ce module dans d'autres projets. Fondamentalement, le nouveau module peut être capable de gérer des catégories et sous-catégories (la hiérarchie).

Questions connexes