在 Joomla 2.5 中更改视图布局

Posted

技术标签:

【中文标题】在 Joomla 2.5 中更改视图布局【英文标题】:Changing layout of view in 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();

【问题讨论】:

【参考方案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();

【讨论】:

以上是关于在 Joomla 2.5 中更改视图布局的主要内容,如果未能解决你的问题,请参考以下文章

在自定义组件中更改 joomla 2.5 默认编辑器

如何在模态窗口中放置 Joomla 2.5 后端视图

Joomla 2.5 高级参数

Joomla! 2.5 生成的URL中的组件菜单类型参数

Joomla 2.5 组件更新

如何自定义 Joomla 2.5 联系人组件?