0

我已将 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 手动保存每个?

4

2 回答 2

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 的产品将被更新。

于 2013-04-04T04:44:38.387 回答
0

我开始实现 drzax 解决方案,然后找到了这个,它将它作为一个任务来实现。创建此任务是为了将 URLSegments 添加到产品中,因此非常适合我的需求...

http://www.balbuss.com/creating-tasks/

于 2013-04-04T08:41:01.827 回答