【问题标题】:How to show two views of one controller in the same page CAKEPHP如何在同一页面中显示一个控制器的两个视图 CAKEPHP
【发布时间】:2013-04-30 11:57:31
【问题描述】:

几天前我有一个疑问。我希望能解释清楚,对不起我的英语。

我正在使用 CakePHP,嗯,我有一些控制器有自己的视图,等等。发生的事情是:我的控制器中有两个函数,我想要那个,当我用鼠标点击一个元素时(在这个例如,我的视图“ONE”的谷歌图表饼图),我想从视图 ONE 执行控制器的其他功能(呈现视图“TWO”),但是,在同一页面中。

我知道如何处理点击饼图,这不是问题。问题是,当我点击它并转到另一个视图二时,如何保持视图一可见。所以我的意思是,我想最后,页面默认有两个视图,一个和两个,每个在控制器中都有自己的功能,它不是一个简单的视图,比如文本、表格......

我尝试了一些解决方案:requestaction、javascript 的 href、助手...但我没有得到解决方案。

如果您能帮助我,我将不胜感激!任何问题都可以问我,我希望能很好地解释并且你能理解我的英语!

您好!

【问题讨论】:

标签: php cakephp view controller


【解决方案1】:

您可以做到这一点的唯一方法是使用您的一个视图制作元素,然后将该元素添加到另一个视图中。您可以使用$his->element('ElementName'); 在您的视图中简单地添加一个元素。有关 cakephp 中元素的更多信息,请参阅 http://book.cakephp.org/1.3/en/The-Manual/Developing-with-CakePHP/Views.html

$this->element('name'); 放在一个 div 中并使用 ajax 你可能会调用我猜的函数。所以在控制器函数中写这样的东西:

$this->set('set your variables for the elements here');
$view = new View($this, false);
$content = $view->element('my-element');
json_encode($content);

并在您的 ajax 调用的成功部分捕获此响应。

success: function (data){
    $("#div_id").html(data);
}

我希望这是有道理的。

【讨论】:

  • 非常感谢!那么它是唯一的解决方案吗?我知道这些元素,但我不知道它们是否适合这样做。我认为这是一个解决方案,是的,我可以使用.. 但是如果我这样做,来自控制器视图 TWO 功能的所有逻辑都将在元素上进行,不是吗?另一个问题:通过这种方式,我不能使用“$this->element('ElementName');”行在javascript中以正确的方式(当我点击鼠标时),知道怎么做吗?谢谢
  • @Preetam 如果您为第二个视图进行 Ajax 调用,为什么要将其渲染为元素?可以直接渲染。但实际上,在鼠标单击后使用 AJAX 调用第二个函数似乎是正确的方法。
  • @Chris:如果元素渲染是一个更大的 html,并且如果它有更多的条件和循环,那么按元素渲染它不是比在响应中再次编写它更好的方法吗?
  • 非常感谢 Preetam!也谢谢你,克里斯。我想这对我有用!我星期四去办公室,然后我会尝试一下,但我或多或少明白你的解释。但是我在ajax方面不是很有经验;什么时候该放“成功:有趣……”部分?无论哪种方式,我都必须尝试对您说任何话!再一次非常感谢你!问候。
  • 我的意思是“哪里”,不是“何时” ^^
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
  • 2015-11-06
  • 2023-03-03
相关资源
最近更新 更多