Silverstripe 3,产品目录友好的URL和子类别


Silverstripe 3, ProductCatalog - friendly URL and Sub Categories

我正在使用这个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方法添加到扩展ProductDataObject中。您可以使用一些DataExtension魔法来完成此操作。

2)对于URL问题中的URLSegment类别:

你必须在你的Category类上重载Link()方法。您需要更改它(或在扩展Category的自定义DataObject中重载该方法):

$Action = 'category/' . $this->URLSegment;

并添加generateURLSegment方法和onBeforeWrite调用,就像您在#1中所做的那样。