所以我正在开发一个想要在主页上显示所有页面的网站(大部分时间)。在这样做的过程中,我试图通过为客户提供实际页面来为网站的每个“部分”进行编辑,从而轻松管理客户端。然而,这比我想象的更具挑战性。
我目前的代码是:
<?php
defined('C5_EXECUTE') or die("Access Denied.");
global $c;
$old_c = $c;
// render page object
$_v = View::getInstance();
$old_theme = $_v->getTheme();
$oldDirectory = $_v->getThemeDirectory();
// change theme
$theme = PageTheme::getByHandle('blankTheme');
$_v->setTheme($theme);
foreach ($pages as $page) {
if ($page->getCollectionID() != HOME_CID) {
$c = $page;
$page_name = strtolower( $c->getCollectionName() );
// start output buffering
$_v->setCollectionObject($c);
ob_start();
$_v->render('default');
// get page content
$content = ob_get_contents();
// stop output buffering
if (ob_get_level() > OB_INITIAL_LEVEL) {
ob_end_clean();
}
// process page content..
echo "<section id='$page_name'>$content</section>";
}
}
$c = $old_c;
$_v->setTheme($oldTheme); // precaution
$_v->setThemeDirectory($oldDirectory); // precaution
// Because the above doesn't work in resetting it for some crazy reason
$_v->ptHandle = "newTheme";
$_v->theme = str_replace('blankTheme', 'newTheme', $_v->theme);
$_v->themePath = str_replace('blankTheme', 'newTheme', $_v->themePath);
$_v->themeDir = str_replace('blankTheme', 'newTheme', $_v->themeDir);
$_v->themePkgID = 0;
?>
你已经注意到了一些'时髦'的东西 - 即整个主题的变化。让我解释一下 - 这是一个页面列表模板。它接收页面,将它们指定为'$ c',然后继续尝试渲染页面视图。通常,这将包括页眉和页脚,但是我们创建了一个名为“blankTheme”的新主题(我们当前的主题称为“newTheme”),其中包含一个空的页眉和页脚,因为没有真正的方法可以输出它,否则它似乎 - 我尝试在同一个主题中创建'空'模板,但它们永远不会被拾取。
所以至少这似乎有效。但是,我现在有另一个问题,当它尝试渲染单个页面时,它不会拾取任何内容,只返回空内容。我已经尝试了各种方法来显示单页内容,但无论我做什么,它总是空白的。它呈现的唯一时间是通过访问URL加载页面。即使我将渲染动作更改为
$_v->render($c);
我仍然得不到任何回报(我知道在示例中我使用的是'默认',但我已经尝试将其设置为单页名称但仍然无效)。
页面上确实有内容,但它不会呈现任何内容(甚至不是HTML),$ innerContent肯定是空的。
过去我曾经问过类似的事情而且没有任何快乐,但是看到我只是浪费了几个小时的生命,我觉得我至少要问。所以如果你有任何想法,听到它们会很棒。
感谢您抽出宝贵时间阅读。
丹
答案 0 :(得分:0)
我找到了答案,我在C5论坛上找到了答案,可以在这里找到http://www.concrete5.org/community/forums/customizing_c5/manually-render-a-single-page-how/#604028