cakephp为Controller中的元素指定主题

时间:2014-05-14 05:17:58

标签: php cakephp cakephp-2.0

在cakephp中,我们如何指定要用于Element的主题。我在Controller中初始化View对象。我需要将元素内容作为ajax响应传递。

控制器:

$view = new View($this);        
        $view->layout = 'theme2';
        $view->theme = 'newNav';
        foreach($ctps as $ctpName)
        {
             $ctp[] = $view->element($ctpName);
        }

起初我想把它作为

来访问
         $ctp[] = $view->element('../Themed/new/Elements/'.$ctpName);

但它显然不关心元素的目录。由于某些元素位于app / View / Elements中,而某些元素位于app / ViewThemed / new / Elements /目录中。

请建议。

根据Arilia的建议,我现在正在尝试

     $this->viewClass = "Theme";
     $this->viewPath = 'Elements';
     $view = new View($this);   
     $view->theme = "new";   
     $view->layout = "theme";

     $ctp = $view->element('userprofile');
     echo json_encode($ctp);
     die;

我正在对此代码进行ajax调用。然后它回来了 "未找到元素:Elements / userprofile.ctp"

1 个答案:

答案 0 :(得分:0)

我试图开发的是首先渲染基本页面,以便可以缓存它。然后使用ajax调用获取与会话相关的UI部分,然后替换浏览器上的相应元素。

为了实现这一点,我尝试在控制器中获取cakephp元素,json对它们进行编码并回显它们。上面的代码虽然适用于普通的动态页面,但它不适用于ajax调用。 Cakephp不知何故在这里行为不端。

现在,作为一个更好的选择,我已将代码移动到View本身,并且我正在回显从那里编码的json。正如预期的那样,它运作良好。代码是

app / View / Themed / new / Elements / get_ctps.ctp:

<?php
foreach($ctps as $ctpName)
{
      $ctp[] = $view->element($ctpName);
}
echo json_encode($ctp);

模具; ?&GT;

这不是一般情况。但是,它可能对某人有帮助。