Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 更改Joomla 2.5中的视图布局_Php_Templates_Joomla_Joomla2.5_Joomla Component - Fatal编程技术网

Php 更改Joomla 2.5中的视图布局

Php 更改Joomla 2.5中的视图布局,php,templates,joomla,joomla2.5,joomla-component,Php,Templates,Joomla,Joomla2.5,Joomla Component,我知道有几个类似的主题,但我读了并尝试了其中的大部分,但仍然不知道如何做到这一点 我已经在Joomla 2.5中编写了一个组件,到目前为止它仍然有效。我有不同的视图,可以使用controller.php加载这些视图。 其中一个视图显示了我的数据库中的一个表(关于团队的数据) 现在,我希望有另一个相同视图的布局,它将数据库表显示为一个表单,以便可以更改内容 这就是文件结构: 视图/ -团队/ --tmpl/ ---default.php ---modify.php --view.html.php

我知道有几个类似的主题,但我读了并尝试了其中的大部分,但仍然不知道如何做到这一点

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

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

这就是文件结构:

视图/
-团队/
--tmpl/
---default.php
---modify.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\u test&task=updateeams加载站点

controller.php如下所示:

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

    $view->display();
}

好的,这就是问题所在。。您不需要另一个布局,而是需要一个基于表单而不是渲染的新MVC空间坐标轴。因此,如果您查看后端中的任何核心内容组件,都会发现它们有一个mvc,例如。。。联系人和联系人的一个是编辑器。如果在前端,您会注意到com_内容和com_Web链接都有mvc for artice/weblink,然后分别进行编辑


编辑需要一个与渲染完全不同的模型、布局和操作集

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

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

    $view->display();
}
index.php?option=com\u mycomponent&view=myview&layout=edit(“edit”在您的情况下是“modify”)

要做到这一点,我没有接触view.html.php(我一开始是这样做的,但我不必这么做)。你也不需要使用控制器。如果要加载修改视图,只需在常规视图中添加一个链接到修改布局的按钮。不需要改变任何其他东西

我碰巧写了一篇关于它的博客文章,如果你愿意,请查看:


希望这能有所帮助。

老话题,但可能仍然有用。
似乎当需要更改布局时,
$tpl
不能包含在
显示()中,或者必须为
null

因此,前面的代码是:

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

对不起,我对MVC很陌生,有点困惑。所以我需要控制器中的新模型、新视图和新方法?我想我可能需要一个单独的视图,但为什么需要一个额外的模型呢。许多方法不是相同的,或者至少是非常相似的吗?有些可能是相同的,但是呈现和与表单交互是非常不同的。我可以为这两个视图使用一个共同的模型吗?我想这是可行的,但它会与MVC约定冲突吗?我只是无法忘记我将在两个文件中使用相同的函数。谢谢,我今晚一定会尝试,看看它是否适合我。我可能也会尝试做一个新的视角,因为我想了解这一切是如何运作的。出于兴趣,您是否可以想出如何在不使用不同的url(…&layout=edit)的情况下使用view.html.php中的setLayout()方法来实现相同的功能?因为如果我使用getLayout(),它会显示'modify',但实际上它显示的是default.php布局。我记得我也尝试了很多不同的方法,但我最终使用了URL,因为它有效:-)。但是我刚刚查看了ViewHTMLAPI(这里:),发现有一个名为“setPath()”的方法,用于设置布局的路径。除了setLayout()之外,您还尝试过使用这个吗?我记得的另一件事是:display()方法出现了一些问题,没有按我希望的那样运行。我只是在view.html.php中放了一个mydisplay()方法,让它调用parent::display()。你可以试着把你的东西放在那里……到目前为止,它对我不起作用。但我创建了一个新组件,除了显示“默认”和第二个显示“可选”的布局外,它什么也不做。setLayout()方法和url方法都可以很好地工作。那么一定是别的什么东西干扰了我的另一部分?!?我想出来了。我简化了我在这里发布的代码,我忽略了我的布局名称实际上是modifyTeam.php,大写字母“T”是问题所在。我记得我以前读过,文件名中应该避免使用大写字母。我的错