0

URLSegments を DataObjects (Products) に追加したので、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 以上の製品を持っています...コード内のすべての製品データ オブジェクトの一括保存を生成する方法はありますか?

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でブラウザーから関数を 1 回呼び出すことができます。

これは非常に効率的ではないため、実際には 1 回限りです。スクリプトがタイムアウトした場合、if ステートメントが URLSegment のない製品のみが更新されることを意味するため、スクリプトを再度実行することができます。

于 2013-04-04T04:44:38.387 に答える
0

私はdrzaxソリューションの実装を開始し、それをタスクとして実装するこれを見つけました。このタスクは、URL セグメントを製品に追加するために作成されたので、私のニーズに完全に適合します...

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

于 2013-04-04T08:41:01.827 に答える