Как получить статические выпадающие страницы в OctoberCMS с помощью дерева страниц?

Я открою это на основе моего вопроса в моем собственном комментарии от Раскрывающийся список статических страниц в пределах статической страницы в OctoberCMS.

У меня проблема при добавлении $ pageList-> getPageTree (true). Дочерние страницы не отображаются. Мой текущий код повторяет foreach из $ pageObject-> subpages, что не является хорошей практикой.

Ниже приведен мой пример кода:

plugin.php

<?php namespace MyPlugin\CustomPlugin
use System\Classes\PluginBase;
public function boot() {
\RainLab\Pages\Classes\Page::extend(function($model) {
$model->addDynamicMethod('getPageOptions', function() {
$theme = \Cms\Classes\Theme::getEditTheme();
$pageList = new \RainLab\Pages\Classes\PageList($theme);
$pages = [];
foreach ($pageList->getPageTree(true) as $name => $pageObject) {
$pages[$pageObject->page->url] = $pageObject->page->title;
if ($pageObject->subpages) {
foreach ($pageObject->subpages as $name => $pageObject) {
$pages[$pageObject->page->url] = '&nbsp;&nbsp;&nbsp;' . $pageObject->page->title;
if ($pageObject->subpages) {
foreach ($pageObject->subpages as $name => $pageObject) {
$pages[$pageObject->page->url] = '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' . $pageObject->page->title;
}
}
}
}
}
return $pages;
});
});
}

Ценю, если кто-нибудь может помочь.

0

Решение

может быть, это поможет вам.

function onStart() {
$theme = \Cms\Classes\Theme::getEditTheme();
$pageList = new \RainLab\Pages\Classes\PageList($theme);
$treePageList = $pageList->getPageTree(true);
$pages = [];
$this->getRecursivePage($pages, $treePageList);
dd($pages);
}

function getRecursivePage(&$pages, $subpages, $level = 0) {
$level++;
foreach($subpages as $pageArr) {
$pages[$pageArr->page->url] =
str_repeat('-',$level) . ' ' . $pageArr->page->title;
if(count($pageArr->subpages) > 0) {
$this->getRecursivePage($pages, $pageArr->subpages, $level);
}
}
}

Выход

array:9 [▼
"/content" => "- Content""/content/pages" => "-- Static Pages""/content/content" => "-- Content""/content/models" => "-- Models""/content/urls" => "-- URLs""/content/urls/tesets" => "--- tesets""/test-sp" => "- test-sp""/test-sp/oks" => "-- oks""/test" => "- test"]

здесь можно просто заменить - в &nbsp; или просто удалите эту часть [ I added because you had that in code so, may be useful to you. ]

Для вашего кода

public function boot() {
\RainLab\Pages\Classes\Page::extend(function($model) {
$model->addDynamicMethod('getPageOptions', function() {
$theme = \Cms\Classes\Theme::getEditTheme();
$pageList = new \RainLab\Pages\Classes\PageList($theme);
$treePageList = $pageList->getPageTree(true);
$pages = [];
$this->getRecursivePage($pages, $treePageList);
return $pages;
});
});
}

public function getRecursivePage(&$pages, $subpages, $level = 0) {
$level++;
foreach($subpages as $pageArr) {
$pages[$pageArr->page->url] =
str_repeat('-',$level) . ' ' . $pageArr->page->title;
if(count($pageArr->subpages) > 0) {
$this->getRecursivePage($pages, $pageArr->subpages, $level);
}
}
}

Если есть сомнения, пожалуйста, прокомментируйте.

2

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

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

По вопросам рекламы [email protected]