2013-04-03 31 views
0

我添加URLSegments到數據對象(產品)所以後來我可以顯示產品名稱爲URL ....代碼工作正常:Silverstripe批量保存所有數據對象

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

我開始實施drzax解決方案,然後找到它,將其作爲一項任務實施。創建此任務是爲了將URLSegments添加到產品中,因此完美地滿足了我的需求...

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

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的產品纔會被更新。