2016-02-28 4 views
4

У меня есть специальный модуль, который делает несколько вещей, чтобы убрать CMS. Назовем это silverstripe-cleanup.Как продлить срок службы SilverStripe?

Одна из вещей, этот модуль делает это переместить MetaData поля в их собственной вкладке, которые я хочу всегда быть вкладка финал в CMS.

Так что, если мой /httpdocs/silverstripe-cleanup/config/config.yml выглядит, как показано ниже, как я могу обеспечить, чтобы это расширение применялось после всех остальных?

--- 
Name: silverstripe-cleanup 
--- 

SiteTree: 
    extensions: 
    - MetaDataMovementExtension 
+0

I ** думаю ** вы можете сделать '--- Имя: SilverStripe-очистка После: "*" ---' – munomono

ответ

0

Использование конструкций Before: and After: из раздела заголовка конфигурации (бит между линиями перед определениями).

cf. По умолчанию mysite один из silverstripe/installer для подсказок.

+0

Я пытался делать, что, хотя я всегда запутаться До:/После: но у меня есть еще один модуль, который добавляется на другой вкладке, поэтому я попытался сделать оба варианта (с соответствующими отступом/новыми строками) 'Before: - 'other-module'' и' After: -' other-module'' нет эффекта.единственный раз, когда мне удалось что-то получить, это когда я заменил «другой-модуль» на '' * ''на одном из них, но это просто заставило ошибку сказать, что его попросили запустить как до, так и после что-то, что ничто иное не ссылалось на этот модуль напрямую, поэтому я смущен. – Hailwood

3

Для того, чтобы модуль, последний для загрузки мы можем добавить что-то вроде After: "*" в наш файл модуля config.yml:

--- 
Name: silverstripe-cleanup 
After: "*" 
--- 

SiteTree: 
    extensions: 
    - MetaDataMovementExtension 

Это должно обеспечить этот модуль вызывается после того, как все остальные.

Это все еще может не загрузиться после того, как все поля и вкладки будут добавлены в поля CMS страницы. Это связано с точкой, в которой updateCMSFields вызывается в функции getCMSFields страницы.

Скажи это наша updateCMSFields функция:

class MetaDataMovementExtension extends Extension { 

    function updateCMSFields($fields) { 
     if ($metadataFields = $fields->fieldByName('Root.Main.Metadata')) { 
      $fields->removeFieldFromTab('Root.Main', 'Metadata'); 
      $fields->addFieldToTab('Root.Metadata', $metadataFields); 
     } 
    } 
} 

И это один из наших классов:

class HomePage extends Page { 

    // ... 

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

     $slidesField = GridField::create(
      'Slides', 
      'Slide', 
      $this->Slides(), 
      GridFieldConfig_RecordEditor::create() 
     ); 
     $fields->addFieldToTab('Root.Slides', $slidesField); 

     $fields->addFieldToTab('Root.Column', TextField::create('ColumnTitle', 'Title')); 

     return $fields; 
    } 

} 

updateCMSFields крюк вызывается в SiteTree::getCMSFields. Посмотрев на нашу функцию getCMSFields, функция updateCMSFields будет вызываться в верхней части нашей функции в точке, которую мы называем parent::getCMSFields(). После этого добавим дополнительные поля. Это означает, что наше расширение будет вызвано до добавления дополнительных полей. Эти дополнительные поля будут размещены после вкладки перемещенных метаданных.

Что мы можем сделать, это обернуть наши дополнительные поля в каждом из наших getCMSFields с beforeUpdateCMSFields:

public function getCMSFields() 
    { 
     $self =& $this; 
     $this->beforeUpdateCMSFields(function ($fields) use ($self) { 

      $slidesField = new GridField(
       'Slides', 
       'Slide', 
       $self->Slides(), 
       GridFieldConfig_RecordEditor::create() 
      ); 
      $fields->addFieldToTab('Root.Slides', $slidesField); 

      $fields->addFieldToTab('Root.Column', TextField::create('ColumnTitle', 'Title')); 
     }); 

     return parent::getCMSFields(); 
    } 

Это гарантирует, что наши поля добавлены до updateCMSFields называется.

Важная вещь, чтобы обратить внимание при использовании beforeUpdateCMSFields является то, что мы должны использовать $self вместо $this внутри нашего beforeUpdateCMSFields блока.

Смежные вопросы