我试图实现一个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时的主题。我想知道是否有其他人有建立这种类型主题的经验,或者是最好的方法。
感谢任何帮助。
答案 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