在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"
答案 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;
这不是一般情况。但是,它可能对某人有帮助。