2016-03-23 3 views
0

UploadDate(常に現在の日付に設定されています)とintのTotalの2つの変数を格納するAdminUploadというDataObjectクラスがあります。アップロード時にデータオブジェクト関数を呼び出す(SilverStripe)

関数updateUploads()が呼び出され、現在の日付が格納され、呼び出されるたびにTotalが1ずつインクリメントされます。誰かが管理者ビューで新しい画像をアップロード

<?php 

class AdminUpload extends DataObject { 

    private static $db = array(
     'UploadDate' => 'Date', 
     'Total' => 'int' 
    ); 

    // Tell the datagrid what fields to show in the table 
    private static $summary_fields = array(
     'ID' => 'ID', 
     'UploadDate' => 'Current Date', 
     'Total' => 'Version Number' 
    ); 

    public function updateUploads(){ 
     $uploadDate = SS_Datetime::now(); 
     $this->UploadDate = $uploadDate; 
     $this->Total++;//increment the value currently stored in the database each time 

     $this->write(); 
    } 

}私はあるしたいこと

は、その後、updateCache()機能はonAfterWrite()プロセス中に呼び出されます。しかし、データベースに1つのエントリしか残したくないので、イメージをアップロードするたびに、AdminUploadデータベーステーブルに1つのエントリが必要です。私はこのようなSilverStripeで関数呼び出しを実行しようとしましたことがありません

public function onAfterWrite(){ 
     $updateGallery = parent::onAfterWrite(); 

     $adminUploading = AdminUpload::get(); 
     $adminUploading -> updateUploads(); 

     return $updateGallery; 
    } 

- 私はupdateUploads()関数への各呼び出しで、データベースに新しいエントリを追加するつもりはないので、それは十分に単純だと思われます、それは私が立ち往生している場所です。すべてのヒントは役に立ちます...

答えて

2

1つのレコードに対してテーブル全体を作成するのは間違っています。ページ上で2つのフィールドを使用する場合は、それらをページに追加する(新しいページタイプを作成する)方が良いでしょう。

ファイルのアップロードについては、いつでもデータベースから直接この情報を照会することができます。

$uploadedFilesCount = File::get()->count(); 
$lastUploadedFileDate = File::get()->sort('CreatedDate', 'DESC')->first()->CreatedDate; 

onAfterWriteフックとDataExtensionから使用されています。フックがDOで直接呼び出され、次に拡張で呼び出される場合があります。

個人用サイト/ _config:あなたはたとえば、あなたがカウントしようとしているデータオブジェクトにUploadsCounter拡張を定義する必要があり

class UploadsCounter extends DataExtension { 
    protected $isCreating = false; 

    public function onBeforeWrite() { 
     if (!$this->owner->isInDB()) { 
      $this->isCreating = true; 
     } 
    } 

    // called on validation or database error 
    public function onAfterSkippedWrite() { 
     $this->isCreating = false; 
    } 

    public function onAfterWrite() { 
     if (!$this->isCreating) return; 

     $this->isCreating = false; 
     $adminUploading = AdminUpload::get()->first(); 

     if (!$adminUploading) { 
      $adminUploading = new AdminUpload(); 
      $adminUploading->write(); 
     } 

     $adminUploading->updateUploads(); 
    } 
} 

あなたの延長コードは「onCreated」状態を処理するために、次のようになります。 /config.yml

File: 
    extensions: 
    - UploadsCounter 
関連する問題