2013-06-02 127 views
1

我正在爲我的項目使用Codeigniter。 我需要這樣的URL結構:按類別Codeigniter路由產品,類別和子類別

例如

主要產品頁面

example.com/language-prefix/products/

選擇產品.com/language-prefix/products/category

選擇產品按類別和子類別:根據類別和子類別

example.com/language-prefix/products/category/sub-category

選擇specifict產品:

example.com/language-prefix/products/category/sub-category/product-name

或只在類別

example.com/language-prefix/products/category/product-name

的問題是 - 什麼將是一個很好的解決方案?由於問題從這裏開始:

example.com/language-prefix/products/category/what-ever

什麼有史以來可以是產品或子類,以及如何決定 - 應該返回哪些數據和視圖?

在我的數據庫表結構中,我有產品和類別之間的多對多關係。這意味着,比一個產品可以分配到多個類別。每個類別都有一個自我推薦的外鍵(父母)。

也許我需要對產品類別添加一些限制嗎?或者指定一個主要類別或什麼?

我有幾個想法:

  1. 保持的類別/子類別和產品每路線DB例如:

/產品/手錶/換男人/ /products/watches/for-men/rolex-abc-whatever-product

依此類推,等等。但是,我感覺可能會很慢。

  • 請對產品控制器的簡單路線 - >方法的視圖(),以及在該方法中走線槽全部通過段和當它涉及到
  • /產品/分類/什麼有史以來

    如果存在這樣的產品,如果屬實,則返回product_view和數據,如果沒有,檢查是否有這樣的子類,如果有,則返回,然後第一次檢查產品網格或返回404(如果沒有)。

    我認爲一個簡單的解決方案,可以只保留所有類別和子類別/產品後/添加類別-ID喜歡

    example.com/language-prefix/products/1-watches

    example.com/language-prefix/products/2-for-men

    但我希望有更好的解決方案這一點。

    我也找不出這樣的:

    example.com/language-prefix/products/category/sub-category/product-name

    我需要用名字返回產品產品名稱並檢查它是否是這兩類這樣的網址,例如下:

    example.com/language-prefix/products/hello-kity/bla-bla/product - 名稱

    不會返回該產品。

    任何更好/其他解決方案?

    +0

    我只是不明白這行後面的最後一部分「我也不知道這個......」,請詳細說明一下。你的意思是不會返回那個產品? –

    +0

    任何想法隱藏瀏覽器網址的語言前綴? –

    回答

    0

    「讓每一個路線在DB類別/子類別和產品」

    的想法上面不會CI很好地工作,你可能會打破這樣CI路由的作品。請記住,路線指向您的控制器/功能。只有當你到達那裏,你纔可以開始調用db ...所以這個想法會很奇怪,因爲你必須先調用db來匹配路由。

    「請對產品控制器的簡單路線 - )>法圖(,並在方法走線槽全部通過段和當談到/產品/分類/什麼有史以來」

    的想法以上是更好的,你可以有這樣的$route['[a-z]{2}/products/(:any)'] = "product/index/$1";所以http://www.example.com/sg/products/gems/rubyhttp://www.example.com/sg/products/gems/red/ruby路線都將轉至產品控制器的指數函數

    段(4)可以是「紅色」,這是一個子類或「紅寶石」,這是一種產品。段(3)總是要成爲一個類別。段(5)不是空的就是產品。您現在必須簡單地決定優先的產品或子類別是否更好地在您的代碼邏輯中處理,以避免它們相互衝突。即產品和類別/子類別名稱不能重複。

    public function test($category = NULL, $sub_category_or_product = NULL, $product = NULL) 
    { 
        echo $category.'<br />'; // segment(3) is always your category 
        if ($product) 
        { 
         echo $sub_category_or_product.'<br />'; // segment(4) is a sub-category 
         echo $product.'<br />'; // segment(5) is a product 
        } 
        else 
        { 
         echo $sub_category_or_product.'<br />'; // it's a sub-category or product 
         // call the db and test whether its a sub-category 
         // then test if its a product... or the other way around 
        } 
    } 
    
    的曲子這

    只是許多可能的方法來解決這個問題一個... 但是如果你沒有堅持與URL結構... 我會建議你把產品/類別/「/ products /」命名空間下的「子目錄」/子類別。並把產品下的「/ P /某事」命名空間細節來看

    www.example.com/p/ruby // product details 
    www.example.com/products // product listing 
    www.example.com/products/gems // product listing 
    www.example.com/products/gems/red // product listing 
    

    例如參見:

    http://www.beautylish.com/products 
    http://www.beautylish.com/p/mac-mineralize-skinfinish-natural 
    

    這樣你就不必擔心類別/子類別名稱與產品名稱衝突

    人們可能想要把貓和子貓放在seo的產品網址中......但是如果你檢查beautylish,他們會得到非常好的seo而不會窒息url,只是簡單地放上產品名稱,它也更短,更具可讀性。

    +0

    是的,SEO是我的觀點。但無論如何,你的靈感來源於我爲產品細節創建了一種方法,而另一種方法則是爲了分類視圖。但爲此我已經有了一種情況,我的客戶想要在兩個不同的主要類別下添加兩個同名的子類別。作爲臨時解決方案,我在URL中添加了category_id。所以現在類別可以訪問像 >/products/45-clocks/ 和 >/products/34-clocks/ 從類別名稱自動創建S S。這有什麼好的做法? 謝謝。 – Zulu

    +0

    你不需要把id放在url中(它醜陋的imo)。子貓可以有相同的名稱,沒有問題。因爲你可以檢查貓來區分子貓。我也有任何提示是建議貓/子貓也不需要。只是做產品/貓或產品/子服務器,貓和子服務器都只佔用1個部分...否則你只能限制到兩個層次,可能是?通過將其保留在一個區段中,您可以在技術上擁有無限級別。再次搜索引擎優化不會受到太多影響。 –

    相關問題