2015-04-06 99 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