模板无法在Silverstripe中识别

问题描述:

我不知道我的老开发人员是如何做到的,但他能够创建一些自定义模板,可以在我的网站上工作。我试图自己创建一个,但没有成功,我的老开发人员似乎太忙,不能告诉我该怎么做。模板无法在Silverstripe中识别

我在/模板/布局模板

我的布局(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 %> 

已使用的PHP文件(InstitutionCoursesPage.php)创建页类型存储在/代码/ PageTypes具有下面的代码:

<?php 

class InstitutionCoursesPage extends Page 
{ 

} 

class InstitutionCoursesPage_Controller extends Page_Controller 
{ 

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

} 

并在/模板文件/包括通过文件名云:InstitutionCoursesList.ss

Pge类型工作,但不是模板和我的开发人员创建的模板,所有工作都与我制作的模板位于同一目录中。不知道为什么我的工作不正常。我尝试做同花顺但没有用。

我不知道,如果你贴错了,但你有没有你的循环:

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

也许<% include InstitutionCoursesList %>是假设在循环中去?

+0

就算我摆在那里的东西,它无法识别。我尝试了一些HTML代码添加到该文件,然后做了冲洗,并没有出现在页面的源代码。不知道为什么文件本身不被识别。 – Thomas

好的,这里可能会出现很多错误。

首先,只要有课程可以显示,看起来模板/控制器的那一部分是可以的。另一件可能出错的事情是模板没有完全加载。因此,放置一些文本,无论显示什么内容(例如模板文件的顶部)。如果可以的话,让我们来看看您的模板,从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

它仍然是,如果内,但还好,似乎模板不会加载。现在我们在模板继承国,这对我来说也有点模糊。我会更新我的答案 – jberculo

存在调试信息可能插入所有模板的文件名在开发模式的渲染输出,请参阅我们的谈话在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

这样你可以看到,如果您的模板被选中。另外请确保您的课程名称或模板文件名没有错别字。

注意:此遗址AJAX调用输出纯净模板JSON