我正在为我的项目使用Codeigniter。 我需要获得这样的URL结构:
主要产品页面
example.com/language-prefix/products /
按类别选择产品
example.com/language-prefix/products/category
按类别和子类别选择产品:
example.com/language-prefix/products/category/sub-category
在类别AND子类别下选择特定产品:
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
什么可以是产品或子类别以及如何决定 - 应该返回哪些数据和视图?
在我的数据库表结构中,我在产品和类别之间存在多对多的关系。这意味着,可以将一种产品分配给许多类别。每个类别都有一个自我引用的外键(父)。
也许我需要为产品类别添加一些限制?或指定一个主要类别或什么?
我有几个想法:
/产品/手表/换男人/ /产品/手表/换男人/劳力士-ABC-任何副产物
等等,等等。但是,我觉得这可能会很慢。
/产品/分类/什么有史以来
然后首先检查是否存在这样的产品,如果是,则返回product_view和数据,如果没有,检查是否有这样的子类别,如果有,则返回产品网格或如果没有则返回404。
我假设一个简单的解决方案可以是在/ products /之后保留所有类别和子类别,并添加category-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
我需要返回名称为产品名称的产品,并检查它是否属于这两个类别,例如URL:
example.com/language-prefix/products/hello-kity/bla-bla/product-name
不会退回该产品。
有更好的/其他解决方案吗?
答案 0 :(得分:0)
“保留数据库中的类别/子类别和产品的每条路线”
上述想法在CI中不会很好用,你可能会破坏CI路由的工作方式。记住路线指向控制器/功能。只有当你到达那里才能开始调用数据库...所以这个想法会很奇怪,因为你必须先调用数据库以匹配路由。
“创建一个到产品控制器的简单路径 - &gt;方法视图(),并在方法中通过所有传递的段,当涉及到/ products / category / what-ever” < / p>
上述想法更好,您可以使用类似$route['[a-z]{2}/products/(:any)'] = "product/index/$1";
的路线,因此http://www.example.com/sg/products/gems/ruby和http://www.example.com/sg/products/gems/red/ruby都将转到产品控制器的索引功能
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
}
}
of cuz这只是解决问题的众多方法之一...... 但是,如果您不必坚持使用该URL结构...... 我建议你将“/ products /”命名空间下的产品/类别/子类别放在“列表视图”的URL中。并将产品放在“/ p / something”命名空间下以获取详细信息视图
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而不会堵塞网址而只是简单地只放置产品名称,它也会更短,更具可读性。