Silverstripe — лучший способ заставить модуль расширяться от пользовательского типа страницы

Моя структура сайта — все пользовательские типы страниц с одной родительской страницей, которая простирается от Page.php.

class CustomPage extends Page {}

class  Custom_Controller extends Page_Controller {
//load all javascript/css for entire site here etc
}class SomeClass extends CustomPage {}

class SomeClass_Controller extends Custom_Controller
{
// etc etc you get the point.
}

Каждая другая страница на сайте теперь начинается с CustomPage и Custom_Controller соответственно. Page.php практически пуст.

Теперь проблема возникает при использовании модулей, которые не написаны внутри. Например, модуль Blog * не будет наследовать javascripts / css / functions, определенные в новом базовом классе Custom_Controller, так как он настроен на расширение Page_Controller.

Какой идеальный метод здесь для того, чтобы в основном заставить Blog_Controller расширять Custom_Controller без изменения модуля Blog?

* Блог модуль является лишь примером. это относится ко всем модулям.

1

Решение

Краткий ответ на прямой вопрос

What is the ideal method here for basically making Blog_Controller extend Custom_Controller without modifying the Blog module?

в том, что это технически невозможно сделать. По сути, у вас есть два варианта;

  1. Внесите изменения в классы Page / Page_Controller напрямую
  2. Наследуйте Page / Page_Controller в ваших пользовательских типах страниц, но вместо непосредственного изменения страницы используйте расширение, привязанное к странице, чтобы обеспечить настраиваемое поведение для всех типов подстраниц. Для конкретного случая предоставления пользовательских init() поведение, вам нужно пользовательское расширение, которое расширяет Extension класс, и связан с Page_Controller

Проверьте в документация расширения для немного больше информации

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector