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 Area):

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

По большей части это работает, однако я все еще сталкиваюсь с некоторыми ошибками при загрузке блоков и т. Д., Поэтому я не уверен, есть ли лучший способ получить тему «одной страницы» при использовании Concrete5. Мне было интересно, есть ли у кого-нибудь еще опыт создания такого типа темы или лучший способ сделать это.

Любая помощь приветствуется.

1

Решение

Я бы использовал класс 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

0

Другие решения

Других решений пока нет …