Silverstripe 3.0定制工具面板

时间:2014-09-03 11:25:20

标签: content-management-system panel silverstripe

我想在左侧面板中显示一些通常包含树视图的自定义内容。

由于此面板中的内容将是一个可编辑的Gridfield,它应与EditForm相关,我尝试以这种方式构建一个新的EditFormTools面板:

  1. 我复制了mysite / templates / Includes中的CMSMain_Content.ss并将$ Tools更改为$ EditFormTools
  2. 我使用以下代码在同一目录中创建了CMSMain_EditFormTools.ss文件:

    <div class="cms-content-tools west cms-panel" data-expandOnClick="true" data-layout-type="border" id="cms-content-tools-CMSMain">
       <div class="cms-panel-content west">
         <% include Test %>
       </div>
    </div>
    
  3. 我用:

    创建了一个Test.php
    class Test extends CMSMain{
    
       public $var = 'test';
    
       public  function testfunction(){
          $variable = 'hakuna matata';
          return $variable;
       }
    
    }
    
  4. 然后我使用以下代码创建了一个Test.ss:

    some Text
    $var
    $testfunction
    $variable
    
  5. Panel现在出现在我的CMS中,但它只包含“some text”。因此Test.ss的包含完全正常,但是将变量从Test.php传递给Test.ss则没有。

    有人可以帮忙吗?

    问候

1 个答案:

答案 0 :(得分:0)

它可能无法直接回答您的问题,但可能会给您指示。 您需要扩展控制器类。 然后你可以使用一个被调用的函数告诉控制器它应该使用renderWith()来使用哪个模板文件。 例如,

  public function index(){
     return $this->renderWith("Test");
 }

然后,Test.ss中的函数引用将调用Test.php中的函数,因为它是控制器。 如果Test类不是呈现模板的控制器,则模板不知道变量返回函数的位置。 顺便说一句,您可以将变量从布局传递到包含模板。