2017-01-23 60 views
0

我不知道我的老開發人員是如何做到的,但他能夠創建一些自定義模板,可以在我的網站上工作。我試圖自己創建一個,但沒有成功,我的老開發人員似乎太忙,不能告訴我該怎麼做。模板無法在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類型工作,但不是模板和我的開發人員創建的模板,所有工作都與我製作的模板位於同一目錄中。不知道爲什麼我的工作不正常。我嘗試做同花順但沒有用。

回答

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

它仍然是,如果內,但還好,似乎模板不會加載。現在我們在模板繼承國,這對我來說也有點模糊。我會更新我的答案 – 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

這樣你可以看到,如果您的模板被選中。另外請確保您的課程名稱或模板文件名沒有錯別字。

注意:此遺址AJAX調用輸出純淨模板JSON