Silverstripe:从many_many关系自定义上传中获取var

时间:2015-04-06 17:09:50

标签: silverstripe relation

我想知道如何从$ belongs_many_many法案表中自定义这个uploadfield。

代码的一部分......

<? 

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变量,但没有出现:

$var=$this->Parent->MultipleBlocks->Act;
$var=$this->many_many(MultipleBlocks)->Act;
$var=$this->Parent->Act;

有什么想法吗? 提前谢谢!

2 个答案:

答案 0 :(得分:0)

如果我正确地阅读了您的代码,那么您无法访问Act变量的原因是因为您没有迭代MultipleBlocks关系。如何获取相关Act的{​​{1}}变量的示例如下(在您的模板/布局文件中):

MultipleBlocks

在php中,它将是:

<% loop $MultipleBlocks %>
$Act
<% end_loop %>

当您在$multipleBlocks = $this->MultipleBlocks(); foreach($multipleBlocks as $block){ $act = $block->Act; } 中引用MultipleBlocks时,它将无法正常工作,因为$this->MultipleBlocks->Act是一个很多关系所以它实际上是一个MultipleBlocks而不是一个单独的对象

更新

这是has_many / has_one示例:

DataList

答案 1 :(得分:0)

哇...几天之后,再学习Silverstripe,我找到了解决办法。要从MultiBlock列实现MultiBlocks,请执行以下操作:

parent::MultipleBlocks();

要保存到文件夹自定义,有我的代码......它运行得非常好。必须首先创建MultiBlockColumns的ID。

$parent = parent::MultipleBlocks();
            $uploadField->setFolderName('Uploads/Subsite'.Subsite::currentSubsiteID().'/images/'.$parent['MultipleBlock']->Act);

就是这样!感谢您提交想法。