И так, как вывести подстраницы определенной страницы в выпадающем списке:
Потребуется в корневом каталоге любого вашего плагина добавить папку "formwidgets" и ее наполнить так:
в Plugin.php регистрируем виджет:
public function registerFormWidgets()
{
return [
'\{имя автора}\{имя плагина}\FormWidgets\StaticSubMenu' => 'staticsubmenu',
];
}
Код StaticSubMenu.php:
<?php namespace {имя автора}\{имя плагина}\FormWidgets;
use Backend\Classes\FormWidgetBase;
/**
* Icon Form Widget
*/
class StaticSubMenu extends FormWidgetBase
{
public $page_url = 'index.htm';
public function init()
{
$this->fillFromConfig([
'page_url' //выносим настройки для редактирования
]);
}
public function render()
{
$page = \RainLab\Pages\Classes\Page::load(\Cms\Classes\Theme::getEditTheme(), $this->page_url);
$this->vars['id'] = $this->getId();
$this->vars['name'] = $this->getFieldName();
$this->vars['value'] = $this->getLoadValue();
$this->vars['placeholder'] = $this->placeholder;
$this->vars['pages'] = $this->getMenu($page->getChildren());
return $this->makePartial('staticsubmenu');
}
private function getMenu($page_object, &$page_array = [], $iter = 0){
foreach($page_object as $k => $page) {
array_push($page_array, [
'id' => $page->id,
'title' => str_repeat(" ", $iter) . $page->title
]);
$sub_pages = $page->getChildren();
if($sub_pages){
$this->getMenu($sub_pages, $page_array, $iter+1);
}
}
return $page_array;
}
}
код _staticsubmenu.htm:
<select
<?php if($this->previewMode) echo "readonly"; ?>
class = "form-control custom-select"
id="<?= $id; ?>"
name="<?= $name; ?>"
>
<?php if($placeholder): ?>
<option value=""><?= e(trans($placeholder)) ?></option>
<?php endif ?>
<?php foreach ($pages as $k => $page): ?>
<option <? if($value == $page["id"]) echo "selected" ?> value="<?php echo $page["id"] ?>">
<?php echo $page["title"] ?>
</option>
<?php endforeach; ?>
</select>
И теперь, если вставить в любое место этот тип поля staticsubmenu и задать в настройках page_url нужную страницу, то выводятся все дочерние ее страницы
{variable name="statpage" type="staticsubmenu" page_url="uslugi.htm" label="Static Page"}{/variable}