Grav-plugin-admin: Пользовательские параметры страницы добавления

Созданный на 13 апр. 2017  ·  16Комментарии  ·  Источник: getgrav/grav-plugin-admin

Как я объяснил в getgrav / grav # 421, было бы здорово иметь возможность добавлять пользовательские типы страниц на основе чертежей в меню «Добавить страницу».

Например, в меню по умолчанию есть следующие варианты:

  • Добавить страницу
  • Добавить папку
  • Добавить модульное
    Я бы хотел добавить такие тонкости, как:
    Добавить сообщение в блог
    Добавить галерею
    Добавить Другой специальный тип страницы.

Эти параметры будут автоматически настраивать вещи таким образом, чтобы, например, внутри каталога blog / была создана страница с шаблоном страницы «Item» для создания сообщения в блоге и т. Д.

Это будет очень полезная функция, особенно при передаче сайта клиентам, которым не придется беспокоиться о шаблонах страниц и структуре папок.

enhancement

Самый полезный комментарий

Думаю, мы могли бы сделать для этого конфигурацию.
У меня это есть в моей локальной версии, если мы сможем согласовать структуру конфигурации, я могу преобразовать ее в PR.

По умолчанию он использует шаблон, используемый при добавлении страницы.

admin.yaml

add_modals:
  post:
    label: Add Post
    blueprint: admin/pages/new_post
    template: custom_template
    link_classes: some_class
    modal_classes: some_modal_class
    with:
      some_data: for the template
    show_in: dropdown
  image:
    label: Add Image
    blueprint: admin/pages/new_image
    show_in: bar

Пример чертежа. В моем блоге у меня более 1 автора, поэтому с помощью getNewPostRoute я могу сгенерировать маршрут для пользователя, например, для моей учетной записи он генерирует: "/ dave / posts"

new_post.yaml

form:
  validation: loose
  fields:
    section:
        type: section
        title: Add Post

    title:
      type: text
      label: Post Title
      validate:
        required: true

    folder:
      type: hidden

    route:
      type: hidden
      data-default@: '\Grav\Plugin\MyPlugin::getNewPostRoute'

    name:
      type: hidden
      default: 'post'

    visible:
      type: hidden
      default: ''

    blueprint:
      type: blueprint

Некоторые изображения

screenshot from 2017-04-26 11-45-05
screenshot from 2017-04-26 11-45-26

Все 16 Комментарий

Мне это скоро понадобится для клиента
есть ли у вас какие-нибудь указания, как я могу реализовать это сам?

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

@ ricardo118 Я бы хотел просто сказать им, чтобы они выбрали правильный шаблон и правильную папку, к сожалению, из-за способа, которым в настоящее время спроектировано модальное окно, в поле выбора папки перечислены все страницы сайта, что проблематично, потому что по порядку чтобы найти нужную папку, им нужно пролистать потенциально сотни страниц. Отсюда и предопределенные модальные окна.

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

Есть ли способ расширить плагин администратора, не изменяя его код, чтобы делать то, что я хочу?

Думаю, мы могли бы сделать для этого конфигурацию.
У меня это есть в моей локальной версии, если мы сможем согласовать структуру конфигурации, я могу преобразовать ее в PR.

По умолчанию он использует шаблон, используемый при добавлении страницы.

admin.yaml

add_modals:
  post:
    label: Add Post
    blueprint: admin/pages/new_post
    template: custom_template
    link_classes: some_class
    modal_classes: some_modal_class
    with:
      some_data: for the template
    show_in: dropdown
  image:
    label: Add Image
    blueprint: admin/pages/new_image
    show_in: bar

Пример чертежа. В моем блоге у меня более 1 автора, поэтому с помощью getNewPostRoute я могу сгенерировать маршрут для пользователя, например, для моей учетной записи он генерирует: "/ dave / posts"

new_post.yaml

form:
  validation: loose
  fields:
    section:
        type: section
        title: Add Post

    title:
      type: text
      label: Post Title
      validate:
        required: true

    folder:
      type: hidden

    route:
      type: hidden
      data-default@: '\Grav\Plugin\MyPlugin::getNewPostRoute'

    name:
      type: hidden
      default: 'post'

    visible:
      type: hidden
      default: ''

    blueprint:
      type: blueprint

Некоторые изображения

screenshot from 2017-04-26 11-45-05
screenshot from 2017-04-26 11-45-26

@ david-szabo97 Это именно то, что я имел в виду. Прекрасная работа! Мне такая конфигурация кажется довольно разумной. Мне особенно нравится этот show_in: bar | dropdown, аккуратно. Как вы обрабатываете часть имени папки?

В ожидании, когда команда предложит свое впечатление для PR, есть ли у вас где-нибудь в сети версия вашего кода?

@fireraccoon Я отредактировал часть javascript на странице добавления, чтобы автоматически поменять заголовок. Так же, как и при создании страницы. Хотя в этом случае вы не видите папку, потому что она скрыта. Но он будет делать то же самое, когда вы создаете обычную страницу, просто скопируйте краткий заголовок в текстовое поле папки.

Поскольку он помещает новую страницу (папку) в маршрут, вы можете указать собственный маршрут, как я сделал data-default@: '\Grav\Plugin\MyPlugin::getNewPostRoute и в итоге вы получите тот же эффект. ($ route. $ папка)

У меня его пока нет, но я могу загрузить его для вас, если хотите.

@ david-szabo97 Хорошо, понятно! Мне было интересно, сделали ли вы это с помощью JS или с помощью какого-то механизма обработки почтовых форм. Да, я хотел бы увидеть это, если у вас будет время, спасибо!

@fireraccoon Это можно сделать с помощью
Я прикрепил zip-файл, просто замените ваши плагины / админку этой админ-папкой.
Вы можете просмотреть внесенные мной изменения, выполнив поиск по запросу * MessedCode (это мой будущий блог, основанный на Grav)
У меня были некоторые другие изменения, поэтому я надеюсь, что удалил все остальное, и все работает нормально.

Код, который вы найдете в admin.min.js, скопирован из add.js. Это просто способ избежать перепаковки всего JS-проекта.

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

@ david-szabo97 Большое спасибо! Ты спас мне день. Мне удалось довольно легко заставить его работать с последней версией. Работает как шарм. Я думаю, что это довольно важный вариант использования, и я очень надеюсь, что скоро он будет интегрирован в плагин. Плюс изменения очень простые.

PR было бы хорошо. Однако я бы предпочел, чтобы не полагался на JS.

Функция объединена в https://github.com/getgrav/grav-plugin-admin/issues/1104

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

form:
  validation: loose
  fields:
    section:
      type: section
      title: Add Fancy Page

    title:
      type: text
      label: Title

    a_custom_attribute:
      type: text
      default: dummy
      label: Won't pre-populate the corresponding field

    header.another_custom_attr:
      type: text
      label: Neither will this
      validate:
        required: true

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

Я не уверен, как поле with передает данные на создаваемую страницу. Я сделал собственный модальный экран; как показано ниже - пытаетесь установить поля в заголовке, но в заголовке ничего не отображается, и не возникает никаких ошибок?

форма:
проверка: свободный
поля:
раздел:
тип: раздел
title: Добавить элемент мультимедиа

title:
  type: text
  label: Media Item Title
  validate:
    required: true

header.article_hyperlink:
  type: text
  label: Article Hyperlink (URL)
  validate:
    required: true
    type: url
header.article_date:
  type: date
  label: Article Date
  validate:
    required: true
header.article_blurb:
  type: textarea
  label: Article Blurb

folder:
  type: hidden
  default: '@slugify-title'

route:
  type: hidden
  default: /media

name:
  type: hidden
  default: 'media-item'

blueprint:
  type: blueprint

`` ''

Появляется модальное окно и создается контент, но никакие данные из полей не передаются?

@sjclark , как я сказал в своем комментарии над вашим, в настоящее время передача данных из модального

Надеюсь, скоро кто-нибудь сделает по этому поводу пиар!

+1 по этому поводу.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги