Grav CMS: скрыть модульные страницы в списках выбора страниц - PullRequest
0 голосов
/ 23 января 2020

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

Я отредактировал /user/plugins/admin/themes/grav/templates/forms/fields/pages/pages.html.twig, чтобы предотвратить отображение модульных страниц.

Исходный код (строка 12):

{% for page_route, option in pages_list %}
    <option {% if page_route == value or (field.multiple and page_route in value) %}selected="selected"{% endif %} value="{{ page_route }}">{{ option|raw }}</option>
{% endfor %}

Мой код:

{% for page_route, option in pages_list %}
    {% if page_route|split('/')|last matches '/^(?!_).*/' %}
         <option {% if page_route == value or (field.multiple and page_route in value) %}selected="selected"{% endif %} value="{{ page_route }}">{{ option|raw }}</option>
    {% endif %}
{% endfor %}

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

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

Спасибо!

1 Ответ

0 голосов
/ 24 января 2020

Я нашел что-то: https://github.com/OleVik/grav-plugin-adminidenticons
Он переопределяет часть плагина администратора.

Шаг 1. Создайте плагин

Существует множество учебные пособия, как это сделать.
У меня есть следующая файловая структура внутри папки с плагинами:

user/plugins
-- myplugin
---- blueprints.yaml
---- myplugin.php
---- myplugin.yaml

Шаг 2. Копирование файлов

/user/plugins/admin/themes/grav/templates/forms/fields/pages/pages.html.twig в /user/plugins/myplugin/admin/themes/grav/templates/forms/fields/pages/pages.html.twig

/user/plugins/admin/themes/grav/templates/partials/blueprints-new.html.twig до /user/plugins/myplugin/admin/themes/grav/templates/partials/blueprints-new.html.twig

Не забудьте добавить фрагмент, который я разместил выше, в скопированный pages.html.twig. Вы можете оставить blueprints-new.html.twig неотредактированным, но вам понадобится частичное внутри вашей папки плагинов, чтобы Twig мог загрузить локальный pages.html.twig.

Шаг 3: PHP

Редактировать myplugin.php

<?php
namespace Grav\Plugin;

use Grav\Common\Grav;
use Grav\Common\Plugin;
use Grav\Common\Page\Page;
use RocketTheme\Toolbox\Event\Event;

class MyPluginPlugin extends Plugin
{
    public static function getSubscribedEvents() {
        return [
            'onPluginsInitialized' => ['onPluginsInitialized', 0],
        ];
    }

    public function onPluginsInitialized()
    {
        /** @var Uri $uri */
        $uri = $this->grav['uri'];
        $route = $this->config->get('plugins.admin.route');

        if ($route && preg_match('#' . $route . '#', $uri->path())) {
            $this->enable([
                'onPageInitialized' => ['onPageInitialized', 0],
                'onAdminTwigTemplatePaths' => ['onAdminTwigTemplatePaths', 0]
            ]);
        }
    }

    /**
     * Load custom CSS into backend
     *
     */
    public function onPageInitialized()
    {
        $assets = $this->grav['assets'];
        $assets->addCss('user/plugins/myplugin/style/custom-backend.css', 1);
    }

    /**
     * Register templates and page
     *
     * @param RocketTheme\Toolbox\Event\Event $event Event handler
     *
     * @return array
     */
    public function onAdminTwigTemplatePaths($event)
    {
        $event['paths'] = array_merge(
            $event['paths'],
            [__DIR__ . '/admin/themes/grav/templates']
        );
        return $event;
    }
}

Бонус: скрытие уникальных шаблонов страниц

Иногда вы создаете шаблоны страниц, которые предполагается использовать один раз на одной странице. Так же, как работает Grav, они будут отображаться в списке при создании новой страницы. Конечно, вы не хотите, чтобы ваши редакторы проявили творческий подход к шаблонам страниц, поэтому лучше их скрыть.

Если вы на самом деле также читаете код, который вставляете при копировании, вы обратите внимание, что есть функция onPageInitialized(), которая загружает файл CSS в серверную часть.

Обновите ваши файлы:

user/plugins
-- myplugin
---- style
------ custom-backend.scss
------ custom-backend.css
---- blueprints.yaml
---- myplugin.php
---- myplugin.yaml

Редактируйте custom-backend.scss

// hide unique templates
.selectize-dropdown-content {
    .option {
        $hide_values: "this-template", "home", "that-template";

        @each $current_value in $hide_values {
            &[data-value="#{$current_value}"] {
                display: none;
            }
        }
    }
}

Установите $hide_values для шаблонов страниц, которые вы хотите скрыть в бэкэнде. Я использую CSS, таким образом вы можете включить их с помощью инспектора браузера, если они вам понадобятся. Конечно, не забудьте скомпилировать ваш S CSS.

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

Спасибо!

...