2015-05-08 2 views
1

Я нахожусь в процессе повторного факторинга моего сайта. У меня много типов страниц (i.e pagetype.php), и у каждого типа страницы есть собственный файл .ss. Все работает нормально. Внимательно глядя на них, большинство шаблонов имеют одинаковый макет (например, 2 столбца или 3 столбца). поэтому я решил обобщить шаблон, чтобы я мог уменьшить беспорядок, eazy, чтобы поддерживать его.Silverstripe :: Пользовательские шаблоны

SilverStripe по умолчанию ищет .SS, есть способ, я могу сделать pagetype1.php, pagetype2.php, pagetype3.php, все использовать twocolumn.ss шаблон

R

+3

Вы можете использовать что-то вроде '$ this-> renderWith (" TwoColumn ");' в вашей функции 'index()' в вашем контроллере страницы. Я попытаюсь подробно изложить подробный ответ позже, когда у меня будет время, если кто-то еще не доберется до него. Надеюсь, это поможет вам в правильном направлении. – 3dgoo

+0

спасибо, сделали это :-) – RDRAO

ответ

0

Либо вы определяете (как указано в 3dgoo) $this->renderWith("TwoColumn");, или - если вы не хотите разрешать это в коде, но только в шаблонах - вы можете разделить макет двухколонок в свой собственный файл в Включает dir, скажем, /templates/Включает/TwoColumn.ss.

Затем, например, в /templates/Layout/PageType1.ss сделать

<% include TwoColumn %> 

Таким образом, вы можете определить расположение легко в шаблонах или темы.

1

Мы можем использовать renderWith() в нашей функции index() в нашем контролере страницы, чтобы контролировать, какой шаблон должен использовать тип страницы.

Вот несколько примеров кода:

class PageType_Controller extends Page_Controller { 

    function index() { 
     return $this->renderWith(
      array('TwoColumn', 'Page') 
     ); 
    } 
} 

В этом примере мы говорим контроллер для отображения страницы с array('TwoColumn', 'Page'). Похоже, что с этим Page.ss используется для основного шаблона. Затем для шаблона макета используется TwoColumn.ss.

Одна вещь, которую следует помнить с помощью этого кода, - это если у нас есть какие-либо другие действия на контроллере, которые могут использоваться на передней панели, нам нужно также позвонить renderWith в каждое из этих действий. В противном случае будет использоваться шаблон по умолчанию для страницы.

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