2014-05-14 30 views
-1

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

控制器:

$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调用此代码。它返回 “找不到元素:元素/ userprofile.ctp”

+0

我认为元素采用了您在控制器中设置的主题。所以在你的控制器中你必须编写'$ this-> theme ='new';' – arilia

+0

'我正在初始化Controller中的View对象 - 你实际上在做什么?这是不正常的(例如,我从来没有这样做)。如果指定了主题,[主题文件如果存在则自动使用](http://book.cakephp.org/2.0/en/views/themes.html#themes)。请用您正在使用的CakePHP版本标记您的问题。 – AD7six

+0

嗨阿里利亚, 根据您的建议,我浏览了视图和控制器Api。现在我正在使用相应的属性。我已经做出了改变,但它没有工作。我编辑了代码更改的问题。 –

回答

0

我想要开发的是首先呈现基本页面,以便它可以被缓存。然后通过ajax调用获取与会话相关的UI部分,然后替换浏览器上的相应元素。

为了实现这个,我尝试在控制器中获取cakephp元素,json对它们进行编码并将它们回显。上面的代码虽然适用于普通的动态页面,但它不适用于Ajax调用。 Cakephp莫名其妙地在这里。

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

应用程序/视图/主题/新/片/ get_ctps.ctp:

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

模具; ?>

它不是一个常见的情况。但是,这可能对某人有帮助。