2010-02-04 82 views
4

好吧,所以我很新codeigniter,從我所瞭解到現在我無法弄清楚如何創建一個動態category -> subcategory -> subsubcategory system。你可以給我一些指導方針嗎...一些參考資料,任何指導我應該學會如何完成的內容?謝謝codeigniter類別 - >子類別 - > subsubcategory系統

我應該得到我的URL像這樣www.site.com/category/subcategory/subsubcategory/etc...,你明白我的意思。

+0

您需要添加更多信息 - 你想把它當作eshop嗎? CMS?或純控制器? – 2010-02-04 11:57:55

+0

假設我想要一個文章系統 – kmunky 2010-02-04 11:58:59

回答

1

,你可以:

創建控制器category,重新路由一些URI來它和使用它的內部邏輯來解析它的參數來選擇任何文章客戶要求:

關於網址: http://codeigniter.com/user_guide/general/urls.html

關於URI路由: http://codeigniter.com/user_guide/general/routing.html

+0

「控制器類別」是什麼意思?請問你能更具體嗎?我該怎麼做,你能舉個例子嗎?謝謝 – kmunky 2010-02-04 14:06:55

+0

好像你不知道什麼是MVC。我建議你到谷歌MVC和閱讀,然後去codeigniter,並閱讀它的MVC的實施。 – 2010-02-04 17:42:08

+0

我知道控制器是什麼(我知道如何使用CI,基本知識),我知道MVC的原理,我已經閱讀了關於URL和路由的知識,但是你的建議仍然不會響。雖然我是MVC和CI的新手。 – kmunky 2010-02-04 19:24:47

4

我已經爲PyroCMS中的頁面管理器做了這個,但它不是簡單的任務。

每個頁面都有自己的slug和parent_id,然後閱讀正確的頁面,它循環瀏覽每個頁面slu and並加入孩子。它知道有多少個孩子,所以如果有5個孩子,它會選擇第5個自聯表。

下面是代碼示例:

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(); 
} 

這是一個有點堅果,但它完美。這可能非常慢,所以PyroCMS還維護一個查找表,其中包含id和頁面URI以快速匹配。

你可以看到整個模型在這裏:

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

+0

感謝@Phil你的一段代碼,我會盡力打破它。希望你能幫助我,如果我卡住了;)我不是新來的PHP,只是CI和MVC ...所以我希望我會得到它:) – kmunky 2010-02-09 22:23:51

0

我同意菲爾的想法,我也設想,你可以創建一個單獨的模塊(如果你使用的模塊化擴展爲例)來處理以通用的方式分類。然後你可以在任何其他項目中重用該模塊。基本上,新模塊可能能夠處理類別和子類別(層次結構)。