Para crear un menú Vue en octubre, tengo el siguiente código en un complemento de back-end. Está funcionando bien para obtener las Páginas estáticas páginas en datos JSON, manteniendo la sangría de los elementos de las páginas:

$theme = \Cms\Classes\Theme::getEditTheme();
$pageList = new \RainLab\Pages\Classes\PageList($theme);
$treePageList = $pageList->getPageTree(true);

Ahora me gustaría extraer las "Páginas estáticas de RainLab / Menús / Menú principal " elementos , manteniendo la sangría de los elementos del menú. (En mi complemento de back-end).

Gracias por cualquier idea sobre cómo obtener estos elementos del menú?

enter image description here

0
Incremental 23 jun. 2020 a las 01:37

2 respuestas

La mejor respuesta

Gracias Hardik Satasiya, lo resolví con el siguiente código:

if(class_exists('\\Rainlab\\Pages\\Classes\\Menu')) {
    $theme = \Cms\Classes\Theme::getActiveTheme();
    $menus = \RainLab\Pages\Classes\Menu::listInTheme($theme, 'mainmenu');
    $menu_full = json_decode($menus);

    return getRecursiveMenu($menus);
}

function getRecursiveMenu($menus) {
    static $level = 0;
    static $next_level = 0;
    $menuDetails = [];
    foreach($menus as $iMenu) {
        $detail = [];
        if ($level == $next_level) {
            $detail['menu_name'] = ['name' => $iMenu->name];
        } else
            $detail['menu_name'] = ['title' => $iMenu->title, 'url' => $iMenu->reference];

        $level++;
        $items = getRecursiveMenu($iMenu->items);

        if(count($items) > 0 ) {
            $detail['menu_items'] = $items;
        }
        $menuDetails[] = $detail;
        $next_level++;
    }
    return $menuDetails;
}

Gracias por su ayuda !

0
Incremental 27 jun. 2020 a las 00:01

Puede agregar static-menu component y ajax-handler en su layout file para manejar la solicitud de ajax.

Su necesidad de agregar staticMenu con el menu selected adecuado

Ahora en código de controlador

function onGetMenu() {
    $menuItems = $this['staticMenu']->menuItems();
    return Response::json(['mainMenu' => $menuItems]);
}

Solicitud Ajax

$.request('onGetMenu', {
    success: function (data) {
      console.log(data);
    }
});

Y puedes tener tu menú en respuesta

Si quieres ver un tutorial completo con imágenes, mira aquí Tutorial de Ajax del menú de la página estática

Si hay alguna duda por favor comente.

2
Hardik Satasiya 25 jun. 2020 a las 07:40