Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@sashabeep
Last active October 26, 2022 13:35
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save sashabeep/32355af4f27bf8d3732618a7f0208f7a to your computer and use it in GitHub Desktop.
Save sashabeep/32355af4f27bf8d3732618a7f0208f7a to your computer and use it in GitHub Desktop.
Как подключить контроллеры втупую в Evolution 3.0

1. Создать свой пакет

Это рекомендуемый подход. В большинстве случаев вы создадите всего 1 пакет. Выполняем в папке /core

php artisan package:create main

Введите имя своего пакета - Main

2. Впишите пространство имен в настройки на первой вкладке конфигурации на сайте на первой странице настроек

Controller Namespace [(ControllerNamespace)] - EvolutionCMS\Main\Controllers\

Также нужно переименовать файл /core/custom/config/cms/settings/ControllerNamespace.php.sample в /core/custom/config/cms/settings/ControllerNamespace.php и указать в нем неймспейс пакета: устарело

<?php return "EvolutionCMS\\Main\\Controllers\\";

(Если ваш пакет называется Main)

3. Base Controller

Возьмите его отсюда https://github.com/evolution-cms/example-package/blob/3.0/src/Controllers/BaseController.php

Положьте его в папку /core/custom/packages/main/src/Controllers и замените в нем namespace на Мain в первой строчке, если ваш пакет называется Main

namespace EvolutionCMS\Main\Controllers;

4. Создайте контроллер для своего шаблона

Пусть мой шаблон называется basic.blade.php и он лежит в папке /views

Создаю для него контроллер BasicController.php в папке /core/custom/packages/main/src/Controllers - обратите внимание на название класса

<?php
namespace EvolutionCMS\Main\Controllers;

use Illuminate\Support\Facades\Cache;

class BasicController extends BaseController
{
    public function render()  //Пример для вывода данных
    {
        $this->data['test000'] = 'test222';
    }
}

Проверяю документ с этим шаблоном - в Tracy должны прийти данные из контроллера(в виджете внизу страницы иконка со значком глаза).

Ну или в шаблон вставьте {!! dump($__data) !!}

Чтобы подключить Tracy - впишите в файл /core/custom/config/tracy/active.php

<?php 
return 'adminfrontonly';
?>

Особенности

Внимание! Контроллеры работают только в шаблонах, слинкованных через псевдоним. К шаблонам типа doc-N.blade.php подцепится только BaseController

Чтобы подключить контроллер не к шаблону, а к частице, подключаемой через @include нужен другой подход - прописать в /core/custom/packages/main/src/Http/routes.php конструкцию вида:

View::composer('partials.layout.menu', function($view){
    $view->with('menu', json_decode(evo()->runSnippet('DLMenu',['api'=>1,'parents'=>0,'maxDepth'=>2]),TRUE)[0]);
});

или

View::composer('partials.layout.menu', 'EvolutionCMS\Main\Http\View\Composers\MenuComposer');

Создав, конечно, composer /core/custom/packages/main/src/Http/View/Composers/MenuComposer.php следующего содержания:

<?php
namespace EvolutionCMS\Main\Http\View\Composers;

use Illuminate\View\View;

class MenuComposer
{
    /**
     * @param  View  $view
     * @return void
     */
    public function compose(View $view)
    {
        $view->with('menu', json_decode(evo()->runSnippet('DLMenu',['api'=>1,'parents'=>0,'maxDepth'=>2]),TRUE)[0]);
       //Здесь уже можно начать заменять всё-таки сниппеты на что-то более интересное
    }
}

Данный код при включении через @include блока с меню передаст в него меню. Правда, сложно сказать, зачем это надо. Естественно, код можно и нужно вынести за пределы файла с роутами. Пример смотрите здесь https://gist.github.com/Dmi3yy/10e5a004bb77a72a4446ac1ad4c2d9ad

@sashabeep
Copy link
Author

sashabeep commented Jan 25, 2021

Данные в виджете
view

Настройки в конфигурации
sett

Функция dump в шаблоне
Снимок экрана 2021-01-25 в 17 03 32

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment