2017-01-23 2 views
0

Я понятия не имею, как это сделал мой старый разработчик, но он смог создать пару настраиваемых шаблонов, которые работают на моем сайте. Я пытаюсь создать его самостоятельно, но не преуспеваю, и мой старый разработчик, кажется, слишком занят, чтобы показать мне, как это сделать.Шаблон не распознается в Silverstripe

У меня есть шаблоны в/шаблоны/Layout

Мой Layout (InstitutionCoursesPage.ss) имеет следующий код:

<% include HeaderBar %> 
<div class="container"> 
<div class="row"> 
    $setHasLeft(true) 
    <div class="$LeftCssClass"> 
     <% include SideNavigation %> 
     <% loop $WidgetArea(LeftSideBar) %> 
     $WidgetHolder 
     <% end_loop %> 
    </div> 
    <div class="$CenterCssClass"> 
     <% include PageHeader %> 
     <% if $Content %> 
     <article class="content typography glass"> 
      $Content 
    <div>abc</div> 
     </article> 
    <% loop $DisplayCourses %> 
    <% end_loop %> 
     <% end_if %> 
     <% include InstitutionCoursesList %> 
     $PageComments 
    </div> 
    <% include RightSideBar %> 
</div> 
</div> 
<% include FooterBar %> 

РНР файл (InstitutionCoursesPage.php), который был использован для создания Тип страницы хранится в/кода/имеет типов страниц следующий код:

<?php 

class InstitutionCoursesPage extends Page 
{ 

} 

class InstitutionCoursesPage_Controller extends Page_Controller 
{ 

public function DisplayCourses() 
{ 
    return Qualification::get(); 
} 

} 

И файл в/шаблоны/Включает под именем файла: InstitutionCoursesList.s s

Тип Pge работает, но не шаблон и шаблоны, которые мой разработчик создал всю работу и находятся в том же каталоге, что и шаблон, который я создал. Не знаю, почему мой не работает. Я пробовал делать флеш, но безуспешно.

ответ

1

Я не уверен, если вы вставили неправильно, но вы ничего не имеющие свой цикл:

<% loop $DisplayCourses %> 
<% end_loop %> 

Может быть, <% include InstitutionCoursesList %> предполагают, чтобы идти в этом цикле?

+0

Даже если я надену что-то там, она не распознается. Я попытался добавить некоторый html в файл, а затем сделал флеш, и он не появился в исходном коде страницы. Не знаете, почему сам файл не распознается. – Thomas

0

Хорошо, здесь есть много, что может пойти не так.

Во-первых, при условии, что есть курсы для отображения, кажется, что эта часть шаблона/контроллера в порядке. Еще одна вещь, которая может пойти не так, заключается в том, что шаблон не загружен вообще. Поэтому разместите текст, который будет отображаться независимо от того, что (например, в верхней части файла шаблона). Если это хорошо, давайте взглянем на ваш шаблон, и зачистите его от HTML:

<% include HeaderBar %> 
$setHasLeft(true) 
<% include SideNavigation %> 
<% loop $WidgetArea(LeftSideBar) %> 
    $WidgetHolder 
<% end_loop %> 
<% include PageHeader %> 
<% if $Content %> 
    $Content 
    <% loop $DisplayCourses %> 
    <% end_loop %> 
<% end_if %> 
<% include InstitutionCoursesList %> 
$PageComments 
<% include RightSideBar %> 
<% include FooterBar %> 

Вы можете видеть, что петля displaycourses условна, чтобы там быть довольным. Если это поле пустое, IF не будет удовлетворен, и он пропустит показ ваших курсов вообще.

Может быть, проблема? Вы можете просто добавить некоторый фиктивный контент на страницу для проверки ...

Обновление: Так что это не проблема. Теперь я также боролся с системой шаблонов Silvertripe. Иногда он выбирает правильный шаблон, иногда это не так. В этом случае, вы бы ожидать, что система для поиска шаблонов в следующем порядке:

  1. InstitutionCoursesPage_index.ss (потому что, когда ничего не определен, он использует индексный метод
  2. InstitutionCoursesPage.ss
  3. страницу .ss

В вашем случае это, вероятно, будет выбирать page.ss.Если нет, вы делаете что-то еще неправильно, но это выходит за рамки этого вопроса (может быть, что-то такое).

В таких случаях я прибегаю к принуждая использованный шаблон вручную, используя этот фрагмент кода в контроллере:

public function index() { 
     //TODO: why is the normal template engine not picking it up? 
     return $this->renderWith(
      array('InstitutionCoursesPage', 'Page'), 
      array() //here you can add extra data that's then available to the template 
     ); 
    } 

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

+0

Я сделал небольшой тест. Вы видите в моем коде, где говорится «

"? Он также отображается в исходном коде. Я добавил «стекло» в список классов, чтобы сделать его «типографическим стеклом контента». Обновление страницы должно содержать стек в исходном коде, но это не так. Таким образом, он даже не читает файл, независимо от того, работает ли Курс или нет (что он делает, потому что у меня есть раскрывающееся меню на главной странице, где отображается список курсов). – Thomas

+0

Это все еще в пределах if, но все в порядке, кажется, что шаблон не загружается. Теперь мы находимся в стране наследования шаблонов, которая для меня тоже немного туманна. Я обновлю свой ответ – jberculo

1

Существует отладочный возможно, что вставляет имена файлов все шаблона к предоставленному вывода в режиме разработчика, см нашего разговора в 2016 году в StripeCon: https://speakerdeck.com/wernerkrauss/debug-silverstripe-like-a-pro#27

В основном это поместить в файл config.yml и флеш:

--- 
Only: 
    environment: 'dev' 
--- 

SSViewer: 
    source_file_comments: true 

выход должен затем быть что-то вроде:

template comments in SilverStripe

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

Внимание: Это губит Аякс вызовы, которые выводят чистый шаблонный JSON

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