10

默认 parent::display($tpl);加载components/com_my_component/views/my_component/tmpl/default.php,但在某些情况下,我需要加载位于附近同一文件夹中的其他 php 文件default.php(例如components/com_my_component/views/my_component/tmpl/lol.php)。如何从view.html.php.

附言

尝试加载loadTemplatesetLayout方法没有运气。

4

3 回答 3

12

自己解决了问题。需要使用方法setLayout并注意输入语法

$this->setLayout('dafault:lol');
parent::display($tpl);
于 2012-11-14T13:42:11.753 回答
3

默认情况下,joomlalayout在 URL 中查找关键字来决定要显示的布局。如果此变量为空或不存在,tmpl/default.php则将加载布局。

通过编辑您的view.html.php文件,您可以使用 JView API 设置默认布局,例如$this->setLayout('lol')将使 URLexample.com/yourview等效于example.com/yourview?layout=lol.

但是,仅此更改将导致 Joomla 覆盖其默认行为,以便忽略该layout请求。这意味着该请求example.com/yourview?layout=lmao还将显示example.com/yourview=example.com/yourview?layout=lol

您可以通过在函数周围添加条件来轻松解决此问题,setLayout这样只有当layout关键字不存在时,您才会将默认布局设置为lol,例如

    <?php 
    # ...

      function display($tpl = null) {
        # ...

        # Edit : Set the default layout to 'lol'
        $layout = JRequest::getWord('layout', '');
        if (empty($layout)) $this->setLayout("lol");

        // Display the view
        parent::display($tpl);
      }

    # ...
于 2015-08-05T13:09:10.427 回答
2

我不断地回到这个问题上,但我还没有找到令人满意的解决方案。

从 J1.5 一直到 J3.4,对我来说有效的方法一直是在 view.html.php 中设置 $tpl 变量

如果 $tpl 为空或 "" 则默认显示 tmpl/default.php。

如果您将 $tpl 更改为字符串,例如 $tpl="stacker" 那么它将查找并显示 tmpl/default_stacker.php

我已经在 MVC 中看到了关于更改它的各种不同理论,因此它不需要 default_ 借口。例如 tmpl/stacker.php 没有一个对我有用。

于 2015-11-05T06:55:02.580 回答