2015-04-06 38 views
1

我想知道如何自定义此uploadfield从$ belongs_many_many Act表获得。Silverstripe:var从many_many关系自定义上传

代码的一部分....

<? 

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); 

} 

我曾尝试这些方法来获取变量法,但没有出现:

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

任何想法? 在此先感谢!

回答

0

哇...过了些日子,学习Silverstripe多一点,我发现我的解决方案。为了实现从多块列多嵌段是这样的:

parent::MultipleBlocks(); 

为了让我保存到文件夹定制,有我的代码......它工作得很好。 MultiBlockColumns的ID必须先创建。

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

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

0

如果我正确地读取了您的代码,您无法访问Act变量的原因是由于您未遍历MultipleBlocks关系。

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

在PHP这将是沿着线的东西:

$multipleBlocks = $this->MultipleBlocks(); 
foreach($multipleBlocks as $block){ 
    $act = $block->Act; 
} 
如何获得 Act变量的相关 MultipleBlocks将如下所示(模板/布局文件内)的样本

当您在$this->MultipleBlocks->Act中参考MultipleBlocks时,它将不起作用,因为MultipleBlocks是一个很多关系,所以它实际上是一个DataList而不是单个对象。

更新

这里是的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; 
    } 

} 
+0

php示例仅显示如何遍历块并访问“Act”变量。它不处理任何东西在模板/布局中呈现它。 – muskie9

+0

如果我明白...这是不可能的。但是,如果关系有很多并且有一个,那么你认为我可以用$ this-> MultipleBlocksID-> Act获得表变量Act吗?对模板没有变化,而是对上传字段进行了自定义。 – StefGuev

+0

如果您的MultipleBlock has_many MultipleBlockColumns和has_one以其他方式执行,那么您可以执行'$ yourMultipleBlockColumns-> MultipleBlockRelationName() - > Act'来获取该变量。我已经更新了我的上述答案,以显示如何更完整地完成此操作。 – muskie9