Commit 90fcd7a0 authored by Nicolas Widart's avatar Nicolas Widart

Save the menu nested set, first pass

parent a996b3cb
...@@ -55,7 +55,8 @@ class MenuController extends AdminBaseController ...@@ -55,7 +55,8 @@ class MenuController extends AdminBaseController
public function edit(Menu $menu) public function edit(Menu $menu)
{ {
$menuItems = $this->menuItem->all(); $menuItems = $this->menuItem->roots();
return View::make('menu::admin.menus.edit', compact('menu', 'menuItems')); return View::make('menu::admin.menus.edit', compact('menu', 'menuItems'));
} }
......
<?php namespace Modules\Menu\Http\Controllers\Api;
use Illuminate\Http\Request;
use Modules\Menu\Repositories\MenuItemRepository;
use Modules\Menu\Services\MenuService;
class MenuItemController
{
/**
* @var MenuItemRepository
*/
private $menuItem;
/**
* @var MenuService
*/
private $menuService;
public function __construct(MenuItemRepository $menuItem, MenuService $menuService)
{
$this->menuItem = $menuItem;
$this->menuService = $menuService;
}
public function update(Request $request)
{
foreach ($request->all() as $position => $item) {
$this->menuService->handle($item, $position);
}
}
}
...@@ -31,4 +31,5 @@ $router->group(['prefix' => LaravelLocalization::setLocale(), 'before' => 'Larav ...@@ -31,4 +31,5 @@ $router->group(['prefix' => LaravelLocalization::setLocale(), 'before' => 'Larav
$router->group(['prefix' => 'api', 'namespace' => 'Modules\Menu\Http\Controllers'], function (Router $router) { $router->group(['prefix' => 'api', 'namespace' => 'Modules\Menu\Http\Controllers'], function (Router $router) {
$router->resource('media', 'Api\MenuController', ['only' => ['store']]); $router->resource('media', 'Api\MenuController', ['only' => ['store']]);
$router->post('menuitem/update', 'Api\MenuItemController@update');
}); });
...@@ -33,4 +33,9 @@ class EloquentMenuItemRepository extends EloquentBaseRepository implements MenuI ...@@ -33,4 +33,9 @@ class EloquentMenuItemRepository extends EloquentBaseRepository implements MenuI
return $menuItem; return $menuItem;
} }
public function roots()
{
return $this->model->roots()->orderBy('position')->get();
}
} }
...@@ -4,4 +4,5 @@ use Modules\Core\Repositories\BaseRepository; ...@@ -4,4 +4,5 @@ use Modules\Core\Repositories\BaseRepository;
interface MenuItemRepository extends BaseRepository interface MenuItemRepository extends BaseRepository
{ {
public function roots();
} }
...@@ -38,6 +38,18 @@ ...@@ -38,6 +38,18 @@
<div class="dd-handle"> <div class="dd-handle">
{{ $menuItem->title }} {{ $menuItem->title }}
</div> </div>
<?php if (!$menuItem->children()->get()->isEmpty()): ?>
<ol class="dd-list">
<?php foreach($menuItem->children()->get() as $leaf): ?>
<li class="dd-item" data-id="{{ $leaf->id }}">
<a href="{{ URL::route('dashboard.menuitem.edit', [$menu->id, $leaf->id]) }}" class="btn btn-sm btn-info" style="float:left; margin-right: 15px;">Edit</a>
<div class="dd-handle">
{{ $leaf->title }}
</div>
</li>
<?php endforeach; ?>
</ol>
<?php endif; ?>
</li> </li>
<?php endforeach; ?> <?php endforeach; ?>
</ol> </ol>
...@@ -116,7 +128,18 @@ $( document ).ready(function() { ...@@ -116,7 +128,18 @@ $( document ).ready(function() {
$('.dd').nestable(); $('.dd').nestable();
$('.dd').on('change', function() { $('.dd').on('change', function() {
var data = $('.dd').nestable('serialize'); var data = $('.dd').nestable('serialize');
console.log(data); $.ajax({
type: 'POST',
url: '/api/menuitem/update',
data: JSON.stringify(data),
contentType: 'application/json;',
dataType: 'json',
success: function(data) {
},
error:function (xhr, ajaxOptions, thrownError){
}
});
}); });
}); });
</script> </script>
......
<?php namespace Modules\Menu\Services;
use Modules\Menu\Repositories\MenuItemRepository;
class MenuService
{
/**
* @var MenuItemRepository
*/
private $menuItem;
public function __construct(MenuItemRepository $menuItem)
{
$this->menuItem = $menuItem;
}
public function handle($item, $position)
{
// Find menu item : $menuItem['id'] ->setRoot
$menuItem = $this->menuItem->find($item['id']);
$menuItem->position = $position;
$menuItem->save();
$menuItem->makeRoot();
// If hasChildren ? set parent ˆ (recursive)
if (isset($item['children'])) {
foreach ($item['children'] as $childPosition => $childItem) {
$childMenuItem = $this->menuItem->find($childItem['id']);
$childMenuItem->position = $childPosition;
$childMenuItem->save();
$childMenuItem->makeChildOf($menuItem);
}
}
// If no more children finish the recursive call
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment