Silverstripe 3,ProductCatalog - 友好的URL和子类别

时间:2014-05-31 12:04:39

标签: php friendly-url silverstripe product catalog

我正在使用此Silverstripe模块创建产品目录:

https://github.com/luisdias/silverstripe-productcatalog 这是基于这个模块 https://github.com/arambalakjian/DataObject-as-Page

我遇到一个问题,友情网址显示为:www.mysite.com/product-page/category/ 1 要么 www.mysite.com/product-page/show/ 1/1 与其标题或网址段相关联。 www.mysite.com/product-page/show/my-category/my-product

我尝试将代码从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而不是_。

这似乎是一个简单的改变,我无法解决..


我也希望能够有子类别。因此,一个类别中的所有内容都可以分为“" Size"”。目前所有产品只分一次。产品>我想要的产品类别>分类>子类别可以帮助我实现这一目标吗?感谢

1 个答案:

答案 0 :(得分:2)

1)对于URL问题中的空格:

URLSegment是产品DataObject上的一个字段,可以在CMS中手动输入,对吗?如果是这样,您必须输入URLSegment作为URL友好字符串,例如my-awesome-product

如果您希望自动生成URLsegment,请DataObject As Page module you mentioned handles that。我会将该方法以及关联的onBeforeWrite方法添加到DataObject扩展Product。你可以通过一些DataExtension魔法来实现这一目标。

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

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

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

并按照您在#1中的操作添加generateURLSegment方法和onBeforeWrite来电。