Concrete5 - 如何手动渲染单个页面

时间:2014-03-03 00:19:37

标签: concrete5

所以我正在开发一个想要在主页上显示所有页面的网站(大部分时间)。在这样做的过程中,我试图通过为客户提供实际页面来为网站的每个“部分”进行编辑,从而轻松管理客户端。然而,这比我想象的更具挑战性。

我目前的代码是:

<?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肯定是空的。

过去我曾经问过类似的事情而且没有任何快乐,但是看到我只是浪费了几个小时的生命,我觉得我至少要问。所以如果你有任何想法,听到它们会很棒。

感谢您抽出宝贵时间阅读。

1 个答案:

答案 0 :(得分:0)

我找到了答案,我在C5论坛上找到了答案,可以在这里找到http://www.concrete5.org/community/forums/customizing_c5/manually-render-a-single-page-how/#604028