【问题标题】:Changing layout of view in Joomla 2.5在 Joomla 2.5 中更改视图布局
【发布时间】:2013-09-19 23:20:32
【问题描述】:

我知道周围有几个类似的主题,但我阅读并尝试了其中的大部分,但仍然无法弄清楚如何做到这一点。

我在 Joomla 2.5 中编写了一个组件,到目前为止它可以工作。我有不同的视图,我可以使用 controller.php 加载视图。 其中一个视图显示了我的数据库中的一个表(关于团队的数据)。

现在我想要另一个相同视图的布局,它将数据库表显示为表单,以便更改内容。

这就是文件结构:

观看次数/
- 团队/
- - tmpl/
- - - default.php
- - - 修改.php
--view.html.php

view.html.php 文件中没有:

...
// Overwriting JView display method
function display($tpl = null) {

    ...

    $this->setLayout('modify');
    echo $this->getLayout();
    // Display the view
    parent::display($tpl);
}

我尝试了 setLayout、$tpl = ...、default_modify.php 等的不同组合。 但我总是要么得到默认布局,要么得到一些错误,比如“找不到布局修改”

我使用 .../index.php?option=com_test&task=updateTeams 加载网站

controller.php 看起来像这样:

function updateTeams(){
    $model = $this->getModel('teams');
    $view = $this->getView('teams','html');
    $view->setModel($model);

    $view->display();
}

【问题讨论】:

    标签: php templates joomla joomla2.5 joomla-component


    【解决方案1】:

    我遇到了类似的问题,我创建了某种用户配置文件视图,并希望他们能够编辑字段而无需为其创建新模型(会有类似的功能,讨厌冗余......)。对我有用的是简单地调用这样的布局:

    index.php?option=com_mycomponent&view=myview&layout=edit(在您的情况下,“编辑”将是“修改”)

    为此,我没有接触 view.html.php(我一开始就这样做了,但我不必这样做。)。而且您也不需要使用控制器。如果要加载修改视图,只需在常规视图中添加一个按钮,链接到修改布局。无需更改任何其他内容。

    我碰巧写了一篇关于它的博客文章,如果你想看看:http://violetfortytwo.blogspot.de/2012/11/joomla-25-multiple-views-one-model.html

    希望这会有所帮助。

    【讨论】:

    • 谢谢,今晚我一定会尝试一下,看看它是否适合我。我可能也尝试做一个新的观点,因为我想了解这一切是如何运作的。只是出于兴趣,你能弄清楚如何在不使用不同的 url (...&layout=edit) 而是使用 view.html.php 中的 setLayout() 方法的情况下做同样的事情吗?因为如果我使用 getLayout() 它说“修改”,但它实际上显示了 default.php 布局。
    • 嗯,我记得我也尝试了很多不同的东西,但我最终使用了 URL,因为它有效:-)。但是我刚刚查看了 viewhtml API(这里:api.joomla.org/Joomla-Platform/View/JViewHtml.html),发现有一个名为“setPath()”的方法可以设置布局的路径。除了 setLayout() 之外,您是否尝试过使用这个?我记得的另一件事是:display() 方法没有按我想要的方式运行时遇到了一些问题。我只是将 mydisplay() 方法放入 view.html.php 并让它调用 parent::display()。你可以试着把你的东西放在那里......
    • 到目前为止它对我不起作用。但是我创建了一个新组件,除了显示“default”和显示“alternative”的第二个布局之外什么都不做。两种方法 setLayout() 和 url 都在那里工作得很好。所以肯定有别的东西干扰了我的其他组件?!?
    • 我想通了。我简化了我在这里发布的代码,我错过了我的布局名称实际上是 modifyTeam.php 并且大写的“T”是问题所在。我记得我之前实际上读过,应该避免文件名中的大写字母。我的坏
    【解决方案2】:

    好的,这就是问题所在......您不想要另一个布局,您想要一个基于表单而不是渲染的新 MVC 三元组。因此,如果您查看任何核心内容组件,您将在后端看到它们有一个 mvc 用于 say ...contacts 和一个用于联系和联系的 mvc 是编辑器。如果在前端,您会注意到 com_content 和 com_weblinks 具有用于 artice/weblink 的 mvc,然后将它们分开用于编辑。

    您需要一个完全不同的模型、布局和一组操作来进行编辑,而不仅仅是渲染。

    【讨论】:

    • 对不起,我对 MVC 很陌生,有点困惑。所以我需要控制器中的新模型、新视图和新方法?我想我可能需要一个单独的视图,但为什么要一个额外的模型。很多方法不会是相同的,或者至少是非常相似的吗?
    • 有些可能是相同的,但呈现和与表单交互是完全不同的。
    • 我可以为两个视图使用一个通用模型吗?我想这会起作用,但它会与 MVC 约定冲突吗?我只是无法克服这样一个事实,即我将在两个文件中拥有相同的功能
    【解决方案3】:

    老话题,但它可能仍然有帮助。
    看来要更改布局时,$tpl 一定不能包含在the display() 中,或者必须是null

    所以前面的代码是:

    function display($tpl = null) {
        /* ... */
        $this->setLayout('modify');
        // Display the view without the $tpl (or be sure it is null)
        parent::display();
    }
    

    【讨论】:

      猜你喜欢
      • 2012-08-25
      • 1970-01-01
      • 2013-02-11
      • 2016-12-01
      • 2018-03-16
      • 1970-01-01
      • 2013-02-24
      • 2012-07-21
      • 1970-01-01
      相关资源
      最近更新 更多