2014-09-03 12 views
0

我想使用GridField來查看和創建新的子頁面。父是DocumentHolder,孩子是Document。兩者都擴展SiteTree。當我點擊「添加文檔」(按網格生成的按鈕)時,填寫字段並確認表單,忽略父頁面並以root創建頁面。當我使用DataObject時,它運行良好。代碼如下所示:使用GridField添加新頁面 - 在根文件夾中創建子項

class DocumentHolder extends SiteTree 
{ 

    private static $allowed_children = array(
     'Document' 
    ); 

    private static $default_child = "Document"; 


    public function getCMSFields() 
    { 
     $fields = parent::getCMSFields(); 

     $gridField = new GridField('Documents', 'Documents', SiteTree::get('Document')->filter('ParentID', $this->ID), GridFieldConfig_RecordEditor::create()); 

     $fields->addFieldToTab("Root.Uploads", $gridField); 

     return $fields; 
    } 

} 



class Document extends SiteTree 
{ 

    private static $db = array(
    ); 
    private static $has_one = array(
    ); 
} 

感謝您的幫助。

回答

0

由於SiteTree已經與其子頁面建立關係,所以您最好使用它!由於allowed_children將永遠只能是文件,試試這個來代替:

$gridField = new GridField('Documents', 'Documents', $this->Children(), GridFieldConfig_RecordEditor::create()); 
+0

嗨艾略特,感謝答案,我也嘗試過這一點,但同樣的結果... – 2014-09-04 09:16:35

0

我跑到前面這個問題我holderpage模塊上工作。您需要默認設置ParentID。這裏有兩個策略。

您可以在子類上使用populateDefaults。例如。

class Document extends SiteTree 
{ 

    private static $default_parent = 'DocumentHolder'; 
    private static $can_be_root = false; 

    public function populateDefaults(){ 
     parent::populateDefaults(); 
     $this->ParentID = DataObject::get_one(self::$default_parent)->ID; 
    } 

    ... 

或者你可以操縱在gridfield記錄使用自定義GridFieldDetailForm實現或通過updateItemEditForm回調。

<?php 

class MyGridFieldDetailForm_ItemRequest extends GridFieldDetailForm_ItemRequest 
{ 

    public function ItemEditForm() 
    { 
     $form = parent::ItemEditForm(); 

     if (! $this->record->exists() && $this->record->is_a('SiteTree')) { 
      $parent_page = $this->getController()->currentPage(); 
      if ($parent_page && $parent_page->exists()) { 

       $this->record->ParentID = $parent_page->ID; 

       // update URLSegment @TODO perhaps more efficiently? 
       $field = $this->record->getCMSFields()->dataFieldByName('URLSegment'); 
       $form->Fields()->replaceField('URLSegment', $field); 
      } 
     } 

     return $form; 
    } 
} 

這是比較複雜的,雖然它讓我創造一個輕鬆的模塊/插件(https://github.com/briceburg/silverstripe-holderpage

相關問題