Это рекомендуемый подход. В большинстве случаев вы создадите всего 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)
Возьмите его отсюда 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;
Пусть мой шаблон называется 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
Данные в виджете
Настройки в конфигурации
Функция dump в шаблоне