【问题标题】:Silverstripe 3.0 customize tools panelSilverstripe 3.0 自定义工具面板
【发布时间】:2014-09-03 11:25:19
【问题描述】:

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

由于此面板中的内容将是一个可编辑的 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
    

面板现在出现在我的 CMS 中,但它只包含“一些文本”。所以 Test.ss 的包含工作得很好,但是将变量从 Test.php 传递到 Test.ss 却不行。

有人可以帮忙吗?

问候

【问题讨论】:

  • $testfunction 在您调用 $EditFormTools 后将不在范围内。 EditFormTools 是你的 testfunction 应该在的地方。

标签: content-management-system panel silverstripe


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多