2014-12-16 2 views
1

Я пытаюсь реализовать тему Concrete5, которая загружает все подстраницы на главную (индексную) страницу. До сих пор я просто перебираю массив дочерних страниц, захватывая тип, контекст (области и т. Д.), А затем загружая элемент с разметкой шаблона страницы для каждой страницы. К сожалению, это очень подвержен ошибкам, и там должен быть другой путь - вот моя главная страница разметки:Concrete5 Single Page Theme

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'); ?> 

И макете элемента этого погрузчика: :() тянет в выглядит следующим образом (просто старый 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. Мне было интересно, есть ли у кого-нибудь другой опыт создания такого типа темы или лучший способ сделать это.

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

ответ

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