Использование renderWith() для рендеринга основного шаблона с пользовательским макетом

#php #templates #silverstripe

#php #шаблоны #silverstripe

Вопрос:

У меня есть класс

 class ModuleController extends Controller {

    private static $allowed_actions = array( 
        'index'
    );

    public function index(SS_HTTPRequest $request) {
        return $this->renderWith(array("Module/HomePage", "Page"));
    }
}
  

И два шаблона, один Page.ss и другой Layout/Module/Homepage.ss . В Page.ss у меня есть куча html и $Layout . Просматривая другие области онлайн, я бы ожидал, что страница будет отображаться в соответствии с Page.ss , а переменная layout будет отображаться с Layout/Module/HomePage.ss , однако она просто отображается с Page.ss . Как я могу заставить мою страницу рендериться с базовым шаблоном Page.ss и рендерить $Layout с макетом, определенным моим контроллером?

Редактировать

Итак, если я переведу Homepage.ss на один уровень выше (т. Е. без каталога ‘Module’), этот код сработает. Возможно ли иметь каталоги в каталоге Layout, поскольку я думаю, что эта папка со временем станет беспорядочной без какой-либо структуры. Также кажется странным, что путь к папке работает при настройке шаблона, но не макета.

ПРАВКА 2

Похоже, что это основная проблема, которую я только что обнаружил другим способом и, похоже, она решается в SS4, поэтому, похоже, это невозможно сделать в SS3.

Комментарии:

1. При более глубоком рассмотрении документа массив, который может быть передан в renderWith, просто ищет первый используемый шаблон, а не комбинацию шаблон / макет. Есть ли способ, которым я могу это сделать?