1

私のアプリには、ユーザーが販売したい製品の写真を 1 つ以上追加できる販売リスト機能があります。

Join テーブルで ATK の upload/filestore_image を使用して関係を作成しようとしています - 私のモデル:

class Model_Listing extends Model_Table {

public $entity_code='listing';

function init(){
    parent::init();
    $this->addField('name');
    $this->addField('body')->type('text');
    $this->addField('status');

    $this->addField('showStatus')->calculated(true);
}

function calculate_showStatus(){

    return ($this->status == 1) ? "Sold" : "For Sale" ;
}
}

class Model_listingimages extends Model_Table {

public $entity_code='listing_images';

function init(){
    parent::init();
    $this->addField('listing_id')->refModel('Model_Listing');
    $this->addField('filestore_image_id')->refModel('Model_Filestore_Image');
}
}

私のページマネージャークラスでは、ファイルのアップロードをcrudに追加しました:

class page_manager extends Page {
function init(){
    parent::init();

    $tabs=$this->add('Tabs');
$s = $tabs->addTab('Sales')->add('CRUD');
$s->setModel('Listing',array('name','body','status'),array('name','status'));

if ($s->form) {
   $f = $s->form;
   $f->addField('upload','Add Photos')->setModel('Filestore_Image');
   $f->add('FileGrid')->setModel('Filestore_Image');
}
}

}

私の質問:

  1. 「FileGrid.php をインクルードできません」というエラーが表示されます。ユーザーがアップロードした画像を表示できるようにしたいので、これが最善の方法であることを願っています。フォーム。-編集-この質問を無視してください。以下のリンク例のコードに基づいてFileGridクラスを作成しました-問題を修正しました。

  2. 送信によってアップロードされたファイルが保存され、結合テーブルにエントリが作成されるように、CRUD フォーム間の関連付けを作成するにはどうすればよいですか?

ATK4 の最新リリースをインストールし、4 つのファイルストア テーブルをデータベースに追加し、ドキュメントhttp://codepad.agiletoolkit.org/imageの次のページを参照しました。

ティアPG

4

1 に答える 1

0

Filestore_File に基づいてモデルを作成することにより

適切なモデルを指定する必要があります。適切とは、次のことを意味します。

  • Model_Filestore_File を拡張している必要があります
  • エントリにリンクするには、MasterField が設定されている必要があります。

ただし、この場合、画像のアップロード時に参照先の ID を知っている必要があるため、レコードを作成する前に画像をアップロードすると機能しません。コードがどのように見えるかを示すために

$mymodel=$this->add('Model_listingimages');
$mymodel->setMasterField('listing_id',$listing_id);
$upload_field->setModel($mymodel);
$upload_field->allowMultiple();

このようにして、フィールドを介してアップロードされたすべての画像が自動的にリストに関連付けられます。Model_Filestore_File からモデルを継承する必要があります。Model_Filestore_Image は、使用できる非常に優れた例です。関連するエンティティ (結合) を追加し、そのテーブルにフィールドを定義する必要があります。

他の方法もあります:

画像をリンクする際に追加の作業を行うことによって

フォームが送信されると、ファイル ID を取得するだけで、ファイル ID のリストを取得できます。

$form->get('add_photos')

フォーム送信ハンドラー内で、リスト画像への手動挿入を実行できます。

$form->onSubmit(function($form) uses($listing_id){
    $photos = explode(',',$form->get('add_photos'));
    $m=$form->add('Model_listingimages');
    foreach($photos as $photo_id){
        $m->unloadDdata()->set('listing_id',$listing_id)
            ->set('filestore_image_id',$photo_id)->update();
    }
}); // I'm not sure if this will be called by CRUD, which has
    // it's own form submit handler, but give it a try.

アップロード フィールド内でグローバル モデルを制限なしで使用すると、他のユーザーがアップロードした画像にアクセスしたり削除したりできるので注意が必要です。MVCGrid でファイル モデルを使用する場合、理論的にアクセスできるファイルを確認する必要があります。これは正常なことです。そのため、上記の最初の方法を使用することをお勧めします。

注: ファイル名、addField の 2 番目の引数にスペースを使用しないでください。javascript が壊れます。

于 2011-12-10T02:37:38.390 に答える