我的应用具有销售列表功能,允许用户为他们想要销售的产品添加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');
}
}
}
我的问题:
我收到“无法包含FileGrid.php”错误 - 我希望用户能够看到他们上传的图片,并希望这是最好的方法 - 通过添加文件网格到表单底部。 - 编辑 - 忽略这个问题,我根据下面示例链接中的代码创建了一个FileGrid类 - 修复了问题。
如何在CRUD表单之间建立关联,以便提交将保存上传的文件并在连接表中创建条目?
我已安装最新版本的ATK4,将4个文件存储表添加到数据库并引用文档http://codepad.agiletoolkit.org/image中的以下页面
TIA PG
答案 0 :(得分:0)
您需要指定合适的模型。我的意思是:
在这种情况下,您必须在上传图像时知道引用的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是一个非常好的例子,您可以使用它。您应该添加相关实体(join)并在该表中定义字段。
还有其他方式:
提交表单后,您只需获取文件ID即可检索文件ID列表。
$form->get('add_photos')
在内部表单提交处理程序中,您可以执行一些手动插入到listingimages中。
$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的第二个参数,它会破坏javascript。