rishatss
@rishatss
Simple Developer ^)

Как правильно выводить многоуровневое меню?

Добрый вечер господа.
Никак не могу правильно вывести многоуровневое меню.
Вообщем у меня имеется динамическое меню в админке.
5b13c3AA.jpg
Которое я собираюсь в будущем наполнять.
Никак не могу понять как его можно подогнать под свои списки в HTML. А именно проблема с логической цепочкой foreach.

Вывод данных работает по данной структуре.
@foreach($items as $menu_item)
        			<li><a href="{{ $menu_item->url }}">{{ $menu_item->title }}</a></li>
   				    @endforeach


Но она выводит мне один уровень меню.

А я хочу подуровни сделать под эту вещь:
codepen.io/Sonick/pen/xJagi

И никак не дойдет до меня алгоритм foreach.

Есть стандартная функция вывода меню, но она идет просто списком без стилей и она выглядит:

253020bC.jpg

<ul>

    
    
    <li class="">
        <a href="http://rishat.kg/public/testee" target="_self" style="">
            
            <span>Test</span>
        </a>
                <ul>

    
    
    <li class="">
        <a href="http://rishat.kg/public/ggg" target="_self" style="">
            
            <span>ff</span>
        </a>
            </li>

</ul>
            </li>
    
    
    <li class="">
        <a href="http://rishat.kg/public/ce" target="_self" style="">
            
            <span>Tester</span>
        </a>
            </li>

</ul>


Следовательно как мне добиться такого же результата только с меню которое я приложил выше :)
  • Вопрос задан
  • 1356 просмотров
Решения вопроса 1
Скиньте дамп $items
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Eridani
@Eridani
Мимо проходил
Пусть каждый вложенный пункт меню в ключе имеет ID своего родителя, а потом выводить уровни как-то так (пример не из ларавел)
<? foreach($result['rows'][$firstLevel['id']] as $secondLevel) : ?>
Ответ написан
Комментировать
@1ax3l
Web Developer
Если у вас меню и подменю храняться в одной таблице то реализовать то что вы хотите довольно легко.
Создаем модель Menu.php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Menu extends Model
{
	public $timestamps = false;
	protected $fillable = ['name', 'value', 'menu_id'];

	public function subMenu()
	{
		return $this->hasMany('App\Menu');//Чтобы вывести подменю
	}
}


Создаем таблицу
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateMenusTable extends Migration
{
    public function up()
    {
        Schema::create('menus', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name')->unique();
            $table->string('value')->index();
            $table->integer('menu_id')->index()->nullable();
        });
    }

    public function down()
    {
        Schema::dropIfExists('menus');
    }
}


Потом в вашем контроллере выводим только ОСНОВНЫЕ меню у которых menu_id поле null
# .. Ваш контроллер
use App\Menu;//подключаем модуль
	public function index()
	{
		$menus = Menu::whereNull('menu_id')->get();//выводим основные меню
		return view('menus'. compact('menus'));
	}


Теперь в menus.blade.php выводим меню и подменю
@foreach ($menus as $menu)
    {{ $menu->name }} ({{ $menu->value }})//выводим основное меню
    @foreach ($menu->subMenu as $sub)
        --{{ $sub->name }} ({{ $sub->value }})//выводим подменю
    @endforeach
@endforeach

Получаем
Меню1 - значение
--Подменю1 - значение
и т.д


Как то так...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы