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

问题描述 投票:0回答:1

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

我当前的代码是这样的:

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

我过去问过类似的事情,但并没有感到高兴,但是鉴于我刚刚在这方面浪费了几个小时,我觉得我至少必须问一下。因此,如果您有任何想法,听到它们将会很棒。

感谢您花时间阅读。

丹。

php concrete5
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.