drupal - Getting a menu delivered via REST -
i trying menu via rest , i've created new module , rest resource plugin allows on /entity/restmenu/{menu_name}.
i can return example json using function when hit url.
public function get(entityinterface $entity) { $result = array(); ($i = 0; $i < 10; $i++) { $temp = array( 'title' => 'test ' . $i, 'href' => '#/' . $i ); array_push($result, $temp); } return new resourceresponse(json_encode($result)); } i cannot figure out how load menu based on $entity. if hit url (http://dang.dev:8888/entity/restmenu/main?_format=hal_json) $entity's value 'main' machine name of main menu.
i've tried using drupal menu tree, not having luck, , debugging thing json responses quite difficult.
how menu item titles , paths based on menu machine name?
edit
ok, sort of figured out.
public function get($entity) { $menu_name = $entity; $menu_parameters = \drupal::menutree()->getcurrentroutemenutreeparameters($menu_name); $tree = \drupal::menutree()->load($menu_name, $menu_parameters); $renderable = \drupal::menutree()->build($tree); $result = array(); foreach (end($renderable) $key => $val) { $temp = array( 'menu_item' => $val, 'route' => $key ); array_push($result, $temp); } return new resourceresponse(json_encode($result)); } right output:
[ { "menu_item":{ "is_expanded":false, "is_collapsed":false, "in_active_trail":false, "attributes":"", "title":"home", "url":{ }, "below":[ ], "original_link":{ } }, "route":"standard.front_page" }, { "menu_item":{ "is_expanded":false, "is_collapsed":false, "in_active_trail":false, "attributes":"", "title":"communities", "url":{ }, "below":[ ], "original_link":{ } }, "route":"menu_link_content:139d0413-dc50-4772-8200-bc6c92571fa7" } ] any idea why url or original_link empty?
this correct answer:
public function get($entity) { $menu_name = $entity; $menu_parameters = \drupal::menutree()->getcurrentroutemenutreeparameters($menu_name); $tree = \drupal::menutree()->load($menu_name, $menu_parameters); $result = array(); foreach ($tree $element) { $link = $element->link; array_push($result, array( 'title' => $link->gettitle(), 'url' => $link->geturlobject()->getinternalpath(), 'weight' => $link->getweight() ) ); } return new resourceresponse(json_encode($result)); }
Comments
Post a Comment