我正在使用这个Silverstripe模块创建一个产品目录:
https://github.com/luisdias/silverstripe-productcatalog哪个是基于这个模块的https://github.com/arambalakjian/DataObject-as-Page
我有一个问题,友好的url显示为:www.mysite.com/product-page/category/1或www.mysite.com/product-page/show/1/1相对于他们的标题或url段。www.mysite.com/product-page/show/ category/我的产品
我试过把Product.php改成
//Return the link to view this category
public function Link() {
$Action = 'show/' . $this->ID . '/' . $this->URLSegment;
return $Action;
}
从//Return the link to view this category
public function Link() {
$Action = 'show/' . $this->ID . '/' . $this->CategoryID;
return $Action;
}
可以工作,但不适用于类别标题,并且如果url有空格,则生成%20而不是_。
这似乎是一个简单的改变,我无法解决…我还希望能够有子类别。因此,一个类别中的所有东西都可以按照它们的"大小"来划分。目前所有的产品都是一次性划分的。产品>类别我想要产品>类别>子类别谁能帮助我实现这一点?由于
1)对于URL中的空格问题:
URLSegment是产品数据对象上的一个字段,在CMS中手动输入,对吗?如果是这样,您必须在URLSegment中键入URL友好字符串,如my-awesome-product
。
如果您想要自动生成url段,您提到的DataObject As Page模块可以处理它。我会将该方法以及相关的onBeforeWrite
方法添加到扩展Product
的DataObject
中。您可以使用一些DataExtension
魔法来完成此操作。
2)对于URL问题中的URLSegment类别:
你必须在你的Category
类上重载Link()
方法。您需要更改它(或在扩展Category
的自定义DataObject
中重载该方法):
$Action = 'category/' . $this->URLSegment;
并添加generateURLSegment
方法和onBeforeWrite
调用,就像您在#1中所做的那样。