我已经将URLSegments添加到DataObjects(产品),因此我可以将ProductName显示为URL ....代码工作正常:
public function onBeforeWrite(){
if($this->Name){
$this->URLSegment = SiteTree::GenerateURLSegment($this->Name);
if($object = DataObject::get_one($this->ClassName, "URLSegment='".$this->URLSegment."' AND ID !=".$this->ID)){
$this->URLSegment = $this->URLSegment.'-'.$this->ID;
}
} else {
$this->URLSegment = SiteTree::GenerateURLSegment($this->ClassName.'-'.$this->ID);
}
parent::onBeforeWrite();
}
但是,我有超过1000种产品...有没有办法为代码中的所有产品数据对象生成批量保存(即作为一次性),所以我不必通过CMS手动保存每个? ?
答案 0 :(得分:1)
只需使用索引函数创建一个控制器,并使用或多或少相同的代码。
<?php
class UpdateProducts extends Controller {
public function index() {
$products = DataObject::get('Products');
foreach ($products as $product) {
if (!$product->URLSegment) {
$product->write();
}
}
}
}
然后,您可以在http://example.com/UpdateProducts
的浏览器中调用该功能一次这不是超级高效,所以它真的只是一次性的。如果脚本超时,您可以再次运行它,因为那里的if语句意味着只会更新没有URLSegment的产品。
答案 1 :(得分:0)
我开始实施drzax解决方案,然后找到了这个,它将其作为一项任务实现。创建此任务是为了将URLSegments添加到产品中,因此完全符合我的需求......