2013-06-02 57 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个部分...否则你只能限制到两个层次,可能是?通过将其保留在一个区段中,您可以在技术上拥有无限级别。再次搜索引擎优化不会受到太多影响。 –

    相关问题