Concrete5单页主题

时间:2014-12-16 18:15:33

标签: php concrete5

我试图实现一个Concrete5主题,将所有子页面加载到主(索引)页面中。到目前为止,我只是循环遍历我的子页面数组,抓取类型,上下文(区域等),然后为每个页面加载带有页面模板标记的元素。不幸的是,这很容易出错,而且必须有另一种方式 - 这是我的主页标记:

global $cp;

if(!$cp->canWrite()) {
    $childPages = $c->getCollectionChildrenArray(1);

    foreach($childPages as $childPage) {

        $page = Page::getByID($childPage);
        $cPages = $page->getCollectionChildrenArray(1);
        if($cPages) {
            $parentPage = $page;
            $page = $page->getByID($cPages[0]);
        }

        $layout = $page->getCollectionTypeHandle();
        $context = array('page' => $page);

        if(!$layout) {
            continue;
        }

        Loader::element('layouts/' . $layout, $context);
}

页面类型如下所示:

<?php defined('C5_EXECUTE') or die(_("Access Denied.")); ?>
<?php $this->inc('elements/header.php'); ?>

<?php
    global $c;
    $context = array('page' => $c);
    Loader::element('layouts/case_study', $context);
?>

<?php $this->inc('elements/footer.php'); ?>

Loader ::()所引入的布局元素看起来像这样(只是简单的旧HTML和Concrete5区域片段):

<section id="<?=$page->vObj->cvHandle; ?>">
    <div class="whatever">
        <?php
        $a = new Area($page->getCollectionName() . ' Page Content');
        $a->display($page);
    </div>
</section>

在大多数情况下这都有效,但是在加载块等时我仍然会遇到一些错误...所以我不确定是否有更好的方法可以获得一个单页& #39;使用Concrete5时的主题。我想知道是否有其他人有建立这种类型主题的经验,或者是最好的方法。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我使用更灵活的PageList类

$c = Page::getCurrentPage();
$pl = new PageList();
$pl->filterByParentID($c->getCollectionID());
$subPages = $pl->get(0);

不太确定您收到的错误,我认为这是因为缺少JavaScript和CSS文件。之所以会发生这种情况,是因为这些脚本没有与当前页面关联,因此不会包含在标题中。

如果您遇到这种情况,这里有一个示例向您展示如何执行此操作,需要几行代码:https://github.com/mkly/area_from_another_mother/blob/master/blocks/area_from_another_mother/controller.php#L313-L359