Silverstripe:从多个关系自定义上载获取var
我想知道如何定制这个上传字段,以便从$BETHENS\u MUN\u MUN Act表中获取 代码的一部分Silverstripe:从多个关系自定义上载获取var,silverstripe,relation,Silverstripe,Relation,我想知道如何定制这个上传字段,以便从$BETHENS\u MUN\u MUN Act表中获取 代码的一部分 <? class MultipleBlock extends DataObject { private static $db = array( 'Act' => 'Varchar', private static $many_many = array( 'MultipleBlockColumns' => 'Mult
<?
class MultipleBlock extends DataObject {
private static $db = array(
'Act' => 'Varchar',
private static $many_many = array(
'MultipleBlockColumns' => 'MultipleBlockColumn'
);
}
class MultipleBlockColumn extends DataObject {
static $belongs_many_many = array(
'MultipleBlocks' => 'MultipleBlock'
);
private static $has_one = array(
'Image' => 'Image',
);
$fields->addFieldToTab('Root.Image',$uploadField = new UploadField(
$name = 'Image',
$title = 'Image'
)
);
enter code here
$uploadField->setFolderName('Uploads/Subsite'.Subsite::currentSubsiteID().'/images/'.$var);
}
有什么想法吗?
提前谢谢 如果我正确读取了您的代码,那么您无法访问
Act
变量的原因是您没有遍历多块
关系。如何为相关的多块
获取Act
变量的示例如下(在模板/布局文件中):
当您像在$this->MultipleBlocks->Act
中那样引用多块
时,它将不起作用,因为多块
是一个多关系,因此它实际上是一个数据列表
,而不是一个单独的对象
使现代化
以下是has_many/has_one示例:
class MultipleBlock extends DataObject {
private static $db = array(
'Act' => 'Varchar',
);
private static $has_many = array(
'MultipleBlockColumns' => 'MultipleBlockColumn'
);
}
class MultipleBlockColumn extends DataObject {
private static $has_one = array(
'MultipleBlock' => 'MultipleBlock'
);
private static $has_one = array(
'Image' => 'Image',
);
public function getBlockAct(){
return $this->MultipleBlock()->Act;
}
}
哇。。。经过几天的学习,我发现了我的解决方案。要从“多块”列实现多块,请执行以下操作:
parent::MultipleBlocks();
要自定义“保存到文件夹”,请输入我的代码。。。它工作得非常好。必须首先创建MultiBlockColumns的ID
$parent = parent::MultipleBlocks();
$uploadField->setFolderName('Uploads/Subsite'.Subsite::currentSubsiteID().'/images/'.$parent['MultipleBlock']->Act);
就这样!感谢您提交想法。php示例仅显示如何循环通过块并访问
Act
变量。在模板/布局中渲染它不会处理任何事情。如果我理解。。。这是不可能的。但是,如果关系有多个,并且有一个,您认为我能用$this->MultipleBlocksID->Act获得表变量Act吗?不是为模板获取变量,而是为上载字段进行自定义。如果您的MultipleBlock有多个MultipleBlockColumns,而其中一个是相反的,那么您可以执行$yourMultipleBlockColumns->MultipleBlockRelationName()->Act
来获取该变量。我已经更新了上面的答案,以显示如何更完整地完成这项工作。
class MultipleBlock extends DataObject {
private static $db = array(
'Act' => 'Varchar',
);
private static $has_many = array(
'MultipleBlockColumns' => 'MultipleBlockColumn'
);
}
class MultipleBlockColumn extends DataObject {
private static $has_one = array(
'MultipleBlock' => 'MultipleBlock'
);
private static $has_one = array(
'Image' => 'Image',
);
public function getBlockAct(){
return $this->MultipleBlock()->Act;
}
}
parent::MultipleBlocks();
$parent = parent::MultipleBlocks();
$uploadField->setFolderName('Uploads/Subsite'.Subsite::currentSubsiteID().'/images/'.$parent['MultipleBlock']->Act);