Cms orchid: Orchid — Laravel Admin Panel

Больше чем Laravel CMS. С момента релиза ORCHID, не менялся и… | by Черняев Александр

С момента релиза ORCHID, не менялся и не заявлял, что это супер система подходит для всего и вся. Нет, позиционировался он всегда как платформа для разработки сайтов.

Многие проекты можно уже спокойно делать на CMS, новостные порталы, блоги, интернет магазины и т.п. С этим ORCHID справляется на хорошем уровне. Но как оказалось достаточно мало людей делают “обычные” веб-сайты на Laravel (Наверное стоит дать ссылку, где я рассказывал о том, что это действительно дорого). Большинство делают уже целые системы со своей собственной логикой и требуется больший контроль.

Считаю, что уже пора начать реализацию и для построения нестандартной схемы приложения. В первую очередь это так или иначе бизнес-приложения которые требуют CRUD. Как эталон взял реализацию от компании Microsoft для десктоп приложений. Да да, всё что мы делали уже было раньше, но только не в вебе 😉

Введение в LightSwitch с выступления Microsoft TechDays

Суть реализации Microsoft заключался в разработке продукта Visual Studio LightSwitch — среды разработки, нацеленной на создание line-of-business приложений. В 2016 году заявили о прекращении поддержки из-за Silverlight и переноса всего в новый продукт PowerApps

Если таким продуктом в действительности мог пользоваться, даже человек без глубоких знаний разработки, то нам такой реализации достичь невозможно, но это и не является нашей целью. Почти все технические возможности уже существуют в Laravel или пользовательских реализаций. Мы сосредоточимся только на одном единственном, но очень важном компоненте — Screen.

Принцип построения “Экрана” и действий пользователя

Screen — это экран приложения, который отображает данные. Экраны основаны на предопределенных шаблонов (Layouts) и всё, что вам нужно сделать это привязать данные.

Layouts — это макет, лучшее объяснением будет, то чем он является:

  • Таблица (Table)
  • Колонки (Column)
  • Строки (Row)
  • Графики и т.п.

При этом каждый макет может включать в себя другой макет, то есть вложенность. Например экран делится двумя колонками, в левой поля для заполнения, справа справочная таблица и график. Вы можете придумать свои примеры вложения. Поля указываются точно так же как и в уже существующих “Behaviors”.

В экранах предусмотрены встроенные команды (Screen Command Bar), позволяющие пользователям выполнять методы различные методы.

Черновой вариант класса экрана выглядит так:

namespace App\Core\Screens;

use App\Core\Layout\TestRows;
use App\Core\Layout\TestTable;
use Illuminate\Http\Request;

class DemoScreen
{

/**
* Название экрана
*
*
@var string
*/
public $name = 'Advertising';

/**
* Описание экрана
*
*
@var string
*/
public $description = 'Demonstrative Advertising';

/**
* Запрос к базе данных
*
*
@return array
*/
public function query() : array
{
return [
'test' => 'test'
];
}

/**
* Кнопки экрана
*
*
@return array
*/
public function commandBar() : array
{
return [
'create' => [
'displayName' => 'Новая запись',
'description' => 'Создать новую запись',
'method' => 'create',
],
];
}

/**
* Макеты которые использую

*
*
@return array
*/
public function layout() : array
{
return [
TestRows::class,
TestTable::class,
];
}

/**
*
@param Request $request
*
*
@return null
*/
public function methodCreate(Request $request)
{
return null;
}

}

Вернувшееся значение запроса автоматически проходит через указанные макеты и строит View.

В действительности это огромный шаг для платформы в целом, который позволит пользователям строить свои собственные отображения по своей логике и данными.

Реальные кейсы написанные по памяти:

Кейс #1

Я не хочу использовать встроенные классы записей и т.п. А имею сложную логику связанных запросов и мне требуется сгенерировать форму которую заполнит/изменит пользователь.

Кейс #2

Многие мои данные берутся из внешних источников MongoDB/API/VK и я хочу получить возможность изменять/показывать их вместе с данными.

Кейс #3

Моя панель администрирования служит ещё и личным кабинетом для клиентов компании и мне хотелось, что бы они видели страницу отображения (А не страницу редактирования) в которой я могу построить график их компании из ClickHouse и вывести общие данные

Кейс #4

Я имею несколько API которые не имеют средств визуального редактирования и хотел бы использовать ORCHID как панель администрирования всех данных API.

В действительности кейсов и запросов намного больше, но так или иначе всё они пересекаются, по этому мы будем решать общие задачи.

Пример чернового кода:

Я не стал перечислять все Layouts которые наследуются, они так или иначе повторяются по своей сути с уже присутствующими.

Демо экран который мы сгенерировали

Стоит помнить, что это лишь черновой вариант, который обсуждается. Если у вас есть предложения или замечания, пожалуйста напишите мне, не стоит стеснятся 😉

Orchid CMS — ещё одна CMS на Laravel

Да да да, вы всё правильно прочитали, ещё одна система управления содержимым, можете сразу доставать кирпич и идти в комментарии поджигая свой факел.

Когда я только впервые писал первые статьи о фреймфорке slim, то мне многие в комментариях на хабре советовали попробовать Laravel, что я считай сразу же сделал. Cказать, что мне он понравился, ничего не сказать. Но так как я работал в сфере разработки сайтов, где требовалось скорость, было сложно найти оправданный аргумент использовать его, единственный выход было создании пакета администрирование в свободное время, что позволило бы использовать любимые технологии.

В начале

Первым же делом, я отказался, от свойственных для CMS решений вроде: “Тем оформления”, “Плагинов” и “Контроля маршрутизации”. Просто давайте сразу на чистоту, не так часто рабочему сайту нужна смена оформления, а плагин так или иначе должен ставить разработчик, которому composer будет милее. Редактор шаблонов или других параметров тоже нет, так как в действительности это конфликтовало с системой контроля версий.

Основные моменты

Первым делом, была разработана схема при которой, каждый разработчик мог внести какие-то изменения в логику или расширить её. Размышлять пришлось достаточно долго, так как идеального варианта наверное не существует, и был выбран подход, где вначале создаётся форма которая имеет вкладки, каждая такая вкладка независима, она понятия не имеет, что существует другая и при отправки формы, данные по очереди приходят в каждую вкладку. Тем самым каждый может создавать сколь угодно этих вкладок, добавляя всё больше параметров в форму.

Например у нас есть форма пользователя, где по умолчанию указано две вкладки с общей информацией и правами доступа, с помощью добавления новых форм (зарегистрированных с помощью событий) мы можем расширить и добавить различную информацию, при этом в коде вы будете видеть только вьюшку формы и действие которое надо сделать с полученной моделью. Такой подход позволяет расширять уже стандартные вкладки и чётче подстраиваться под необходимые нужды.

Пример формы которую можно расширить

Поле этого надо было начинать думать, о том как хранить данные. Размышляя о структуре, сложно было не заметить, что на большинстве сайтов (Которые разрабатывала компания), данные по структуре были очень сильно похожие, да и иногда требовался хранения перевода. Это дало мне повод задуматься о EAV формате, но ответ на вопрос как хранить, я нашёл у разработчиков из соседнего отдела, они использовали не реляционные базы данных для мобильных приложений. Перенеся это на MySQL и PostgreSQL, система уже использовала JSON тип, для хранения данных, продолжая вопрос хранения и простоты использования, воспроизвёл wordpress структуру, то есть создал таблицу записи, а данные хранились в ней в JSON формате. Для проведения манипуляций использовалось отдельное поле обозначающее его тип. С помощью которого, можно было бы управлять самой записью.

То есть разработчику, необходимо было описать поля, которые он хотел бы отобразить на редактирование и в каком виде, а форма построиться сама. Так же можно указать валидацию, или модули, модули — это те самые формы о которых я рассказывал выше.

Пример управления записью

namespace DummyNamespace;
use OrchidBehaviorsMany;
class DummyClass extends Many
{
    /**
     * @var string
     */
    public $name = '';
    /**
     * @var string
     */
    public $slug = '';
    /**
     * @var string
     */
    public $icon = '';
    /**
     * Slug url /news/{name}.
     * @var string
     */
    public $slugFields = '';
    /**
     * Rules Validation.
     * @return array
     */
    public function rules()
    {
        return [];
    }
    /**
     * @return array
     */
    public function fields()
    {
        return [];
    }
    /**
     * Grid View for post type. 
     */
    public function grid()
    {
        return [];
    }
    /**
     * @return array
     */
    public function modules()
    {
        return [];
    }
}

Поля и поведения указываются отдельно, что позволяет использовать лишь ключ, например в записи мы хотим wysing редактор, а значением будет класс. Это позволяет менять редактор с summernote на tinymce или ckeditor почти в один клик.

'types' => [
    AppCoreBehaviorsManyDemoPost::class,
],
'fields' => [
     'textarea' => OrchidFieldsTextAreaField::class,
     'input'    => OrchidFieldsInputField::class,
     'tags'     => OrchidFieldsTagsField::class,
     'robot'    => OrchidFieldsRobotField::class,
     'place'    => OrchidFieldsPlaceField::class,
     'datetime' => OrchidFieldsDateTimerField::class,
     'checkbox' => OrchidFieldsCheckBoxField::class,
     'path'     => OrchidFieldsPathField::class,
     'code'     => OrchidFieldsCodeField::class,
     'wysiwyg'  => OrchidFieldsSummernoteField::class,
 ],

С помощью данных решений, разработчик буквально за минуты построить CRUD, для множества типов данных, а изменять добавляя новые параметры, требуется лишь внесение новых значений в их описании.

Пример формы добавления записи

Отдельный момент, касающийся дизайна, на начало разработки, да и скорее всего даже сейчас, практически каждая панель администрирования использовала AdminLTE, не хочу говорить, что она плоха или ещё что либо, но если честно — она надоела, поговорив с дизайнером о цене, понял, что это не мой вариант. Единственным выходом была сеть, тогда я пошёл искать красивые PSD макеты, и нашёл Dashboard60 UI Kit, купив его, я начал не в точности или даже грубо воспроизводить основные моменты (Что бы не получить по ушам).

На этом этапе вся “уникальность” заканчиваться, и начинаются стандартные вещи:

  • Разделение прав доступа на основе ролей
  • Виджеты
  • Теггирование
  • Загрузка файлов
  • Меню
  • Настройки

Итог

Если подвести итоги, то система, будет интересна только тем, кто уже работал с Laravel и хочет с его помощью сделать “простые сайты” с быстрым стартом, это можно увидеть даже на этапе установки, что отличается от многих других похожих приложений, которые делают свой стартер пакет для развёртывания, Orchid же идёт в качестве пакета, то есть сначала необходимо развернуть сам фреймворк и уже после добавлять пакет в зависимости.

Весь код опубликован на github.com

Автор: Александр

Источник

Орхидея — панель администратора Laravel

На протяжении многих лет пакет помогал многим разработчикам создавать качественные приложения.
с минимумом внимания к административным панелям.

Павлов Павел
Россия, Шира

Для меня Orchid появился одновременно с Laravel, потому что для изучения Laravel,
Я начал искать панель администратора и выбрал платформу Orchid. В данный момент,
Я делаю все проекты на Orchid. Главное преимущество Орхидеи в том, что вы можете получить
началось быстро,
и за короткое время вы сможете добраться до самой сути проекта. И тогда это
легко масштабировать проект.
Еще одним огромным плюсом платформы Orchid является структура организации кода.
Учимся думать согласно
эту структуру для ускорения разработки в других проектах.

Лемис Лопес
Венесуэла, Валенсия.

Экосистема laravel обширна и зрела. Но как пожилой веб-разработчик,
Я понимаю, что «богатства» недостаточно, мне нужен стабильный и хорошо проработанный открытый
исходная платформа,
с точки зрения архитектуры и принципов, которые позволяют мне и моей команде
решения быстро,
с простым в обслуживании базовым кодом и без всех обычных причудливых «автоматических
волшебство», которое
могут быть сложными для адаптации и бесполезными в большинстве случаев. Орхидея-платформа это все
и более,
Orchid-Platform повышает нашу производительность до уровня, которого я почти не могу достичь.
верить с
красивый и выразительный результирующий код. Платформа Orchid носит прикладной характер
агностик, но
он подходит как никакой другой пакет для административных решений.

Владислав Пономарев
Россия, Краснодар

До знакомства с Orchid мне постоянно приходилось писать админку с нуля.
Это было такое «удовольствие». Впервые я услышал об Orchid в подкасте на «Пять минут».
PHP».
Почитав документацию, решил попробовать, и до сих пор пользуюсь. Орхидея
подходит для большинства проектов, которые я разрабатываю, и хорошо масштабируется. Если у вас есть вопросы,
вам всегда помогут в официальном Telegram-чате проекта. Хотя
ответы на большинство вопросов есть в документации.

Мохамед Аль Ашааль
Египет, Каир

Мне понравился Orchid, так как он дает мне возможность управления без необходимости использования дополнительных плагинов/модулей.
Я использую его во многих побочных проектах. Сравнивая его с аналогичными решениями, я обнаружил, что Orchid имеет лучшую архитектуру.

Роман Сидоров
Россия, Москва

Отличное решение. Ключевой особенностью является компромисс между удобным интерфейсом и удобной для разработчиков архитектурой.
Идеально подходит для администрирования малых и средних проектов. Рекомендую рассмотреть его, если вы разработчик.

Как использовать Orchard в качестве Headless CMS

Orchard в качестве обычной CMS  

Orchard в качестве Headless CMS — это многопользовательская модульная платформа приложений Microsoft с открытым исходным кодом и CMS для ASP.NET Core. . Первоначально он был разработан командой, работающей над Microsoft SharePoint, взяв за основу последний источник вдохновения.

Предшественником Orchard был Microsoft Oxite; однако это больше не официальный продукт Microsoft. Вместо этого он подпадает под .NET Foundation и в настоящее время является активной платформой, управляемой сообществом.

Вы можете легко найти разработчиков для Orchard, поскольку он основан на современном стеке технологий. Это отличная платформа приложений для малых и средних предприятий, которые ищут технологическую платформу с открытым исходным кодом, поддерживаемую надежной компанией. Кроме того, он предлагает простое и экономичное развертывание в облаке Azure и AWS.

Вы можете использовать Orchard как обычную CMS с отличными функциями, такими как журналы аудита, темы и т. д., а также как CMS без заголовка. Эта статья представляет собой руководство по использованию Orchard в качестве безголовой CMS.

Примеры использования безголовой CMS   

Безголовая система управления контентом или безголовая CMS — это система управления контентом, предназначенная только для серверной части. Термин «безголовый» относится к идее отделения передней части (головы) от задней части (тела). Он функционирует как репозиторий контента, который обеспечивает доступ к контенту через RESTful API для отображения на любом устройстве.

Таким образом, безголовая CMS применяет RESTful API (JSON, XML) для доставки контента туда, где это необходимо. Поэтому не имеет значения, где и как отображается контент. Вместо этого он сосредоточен на хранении и доставке только структурированного контента.

Вот несколько распространенных вариантов использования безголовой CMS:  

  • Создайте веб-сайт с помощью технологии, с которой вы уже знакомы.
  • Веб-сайты и веб-приложения, использующие фреймворки JavaScript (VueJs, React, Angular и т.  д.)  
  • Веб-сайты, созданные с использованием генераторов статических сайтов (Jekyll, Middleman и т. д.)  
  • Серверный контент для веб-приложений и мобильных приложений (iOS, Android) , Windows Phone) на той же платформе.
  • +Расширяйте информацию о товарах на сайтах электронной коммерции.

Orchard как автономная CMS  

Orchard как автономная CMS впервые была представлена ​​в Orchard Core. Во-первых, давайте рассмотрим различные формы CMS, доступные в Orchard Core, и их назначение.

Полная CMS

В режиме полной CMS внешний и внутренний интерфейсы приложения тесно связаны. Одно и то же приложение используется для размещения внутренних и внешних приложений. Таким образом, внешний интерфейс приложения использует функции, уже предоставленные CMS, для отображения контента с использованием собственных модулей темы.

Headless CMS

Headless CMS не зависит от внешнего интерфейса, то есть у него нет внешнего интерфейса по умолчанию, который может определять, как будет представлен контент. Таким образом, вы можете публиковать необработанный контент где угодно, используя любой фреймворк. Front-end и back-end приложения не связаны; CMS позволяет редактировать контент и получать доступ к данным только с помощью REST API.

Несвязанная CMS

Несвязанная CMS управляет только контентом и данными и не несет ответственности за отображение страниц. Он управляет вашим контентом отдельно и не зависит от внешнего интерфейса, как и безголовая CMS. Тем не менее, он предлагает интерфейсные инструменты доставки контента, такие как шаблоны. Подумайте о разделенной 9система управления контентом 0005 как гибрид стандартной и безголовой CMS; у него есть голова (внешняя часть), которая не прикреплена к телу (внутренней части), как в традиционной CMS.

Как это работает  

Orchard Core предоставляет рецепт пустого сайта, который не настраивает содержимое, тему и представления. Вместо этого он предоставляет функции управления контентом для настройки разделенной Orchard и безголовой CMS.

Вот пошаговое руководство по настройке Orchard в качестве автономной CMS.

Шаг 1. Настройка проекта    

Создайте новый проект веб-приложения .NET core с помощью Visual Studio. Нет необходимости выбирать шаблон; мы можем выбрать пустой шаблон по умолчанию. После создания проекта добавьте в него пакет Orchard Core CMS.

Его можно добавить, добавив элемент ссылки на пакет «OrchardCore.Application.Cms.Targets» в файл проекта.

Шаг 2. Обновите файл startup.cs, чтобы настроить приложение для использования Orchard CMS   

1. Измените метод «ConfigureServices» следующим образом:   

2. Измените метод «Configure» следующим образом   

Шаг 3. Запустите приложение и настройте новый сайт приложение и настройте новый сайт, введя имя сайта, учетные данные администратора, часовой пояс и т. д. Убедитесь, что вы выбрали пустой рецепт сайта в раскрывающемся списке рецептов, чтобы создать безголовый сайт CMS.

Шаг 4. Создание типов контента и элементов контента     

Нам нужно создать типы контента и поля внутри этих типов контента. В системе может быть несколько типов контента, например, сайт может содержать домашнюю страницу, элемент блога, типы контента страницы продукта и т. д. После создания типов контента мы можем добавить данные сайта. Каждый элемент контента представляет собой документ, основанный на типе контента, который определяет поля и данные, добавляемые в эти поля.

Шаг 5. Включите API для интерфейсных приложений   

  • Включить модуль GraphQL — Включив модуль GraphQL, вы увидите элементы меню GraphQL. GraphQL — это универсальный обозреватель конечных точек GraphQL. Этот инструмент проверяет ваши запросы GraphQL, которые, в свою очередь, используются для извлечения данных из системы CMS .
  • Использовать API GraphQL — используйте конечную точку API GraphQL в своем приложении с запросами GraphQL для получения данных из CMS. Используя запросы GraphQL, вы получаете только то, что хотите. Вы можете определить, какие элементы контента и поля вам нужны для отображения в вашем приложении, и оно будет возвращать только эти поля, что делает его очень легким и быстрым.

Как только это будет сделано, ваша безголовая CMS готова к интеграции с внешним приложением по вашему выбору через API-интерфейсы GraphQL.

Безголовая архитектура     

Вот графическое представление того, как работает безголовая CMS.

Подводя итоги  

Вот несколько причин, по которым вам следует перейти на безголовую CMS Orchard:

  1. Гибкость на основе технического опыта, имеющегося в вашей организации. Более того, вы можете использовать одни и те же репозитории контента для отображения контента с использованием разных технологических стеков для разных устройств.

          2. Контроль  

    У вас есть полный контроль над хранилищем контента и тем, как данные отправляются в разные системы с помощью API.

          3. Простота использования  

    Вы можете изменить фирменный стиль своего приложения, не беспокоясь о его влиянии на содержимое приложения.

          4.