<?php namespace Modules\Menu\Services; use Baum\Node; use Illuminate\Support\Facades\URL; class MenuRenderer { /** * @var int Id of the menu to render */ protected $menuId; /** * @var string */ private $startTag = '<div class="dd">'; /** * @var string */ private $endTag = '</div>'; /** * @var string */ private $menu = ''; /** * @param $menuId * @param $menuItems * @return string */ public function renderForMenu($menuId, $menuItems) { $this->menuId = $menuId; $this->menu .= $this->startTag; $this->generateHtmlFor($menuItems); $this->menu .= $this->endTag; return $this->menu; } /** * Generate the html for the given items * @param $items */ private function generateHtmlFor($items) { $this->menu .= '<ol class="dd-list">'; foreach ($items as $item) { $this->menu .= "<li class=\"dd-item\" data-id=\"{$item->id}\">"; $this->menu .= '<a class="btn btn-sm btn-info" style="float:left; margin-right: 15px;" href="' . URL::route('dashboard.menuitem.edit', [$this->menuId, $item->id]) . '"> Edit</a>'; $this->menu .= "<div class=\"dd-handle\">{$item->title}</div>"; if ($this->hasChildren($item)) { $this->generateHtmlFor($item->children()->get()); } $this->menu .= '</li>'; } $this->menu .= '</ol>'; } /** * @param $item * @return bool */ private function hasChildren(Node $item) { return !$item->children()->get()->isEmpty(); } }