Пара плюшек для своего блога на Rainlab.Blog

Сам по себе плагин блога весьма скудноват по возможностям в сравнении возможностями эталонного WordPress. Архив, теги, подборки, галереи, embedded контент и т.д. требует дополнительных плагинов или разработки функциональности вручную. Такой подход лежит в основе самой OctoberCMS.

Но вот чего не хватает самой cms, это аналога admin bar'a

screenshot-wpadminbar

Касательно блога: требуется возможность сразу перейти на страницу редактирования записи.

Кнопка редактировать пост

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

... 
[blogPost]
slug = "{{ :slug }}"
categoryPage = "blog/category"
...

==

<?php
function onEnd()
{
    if ($this->post) {
        $this['backendUser'] = BackendAuth::getUser();
    } 
}
?>
==

...
    {% if backendUser %}
        <a 
            href="/backend/rainlab/blog/posts/update/{{ post.id }}" 
            class="btn" 
            role="button"
        >Редактировать</a>
    {% endif %}  
...

С переходом в админку разобрались.

Кнопка предпросмотр

Тут сложнее

Заготовка под кнопку оставлена разработчиками в файле plugins\rainlab\blog\controllers\posts\_post_toolbar.htm. Формально кнопка в DOM`е, но она перманентно скрыта.

...
    <!-- Preview -->
    <a
        href="<?= URL::to($pageUrl) ?>"
        target="_blank"
        class="btn btn-primary oc-icon-crosshairs <?php if (!false): ?>hide<?php endif ?>"
        data-control="preview-button">
            <?= e(trans('backend::lang.form.preview_title')) ?>
    </a>
...

Причины и сложности, как я их вижу:

  1. Компонент записи размещается конечным разработчиком. Плагин не знает на каком url открывать предпросмотр.
  2. Разработчик может разместить несколько компонентов на нескольких cms страницах. Как выбирать url?

Костыль следующий:

...
    <!-- Preview -->
    <a
        href="<?= 'https://tyapk.ru/blog/post/'.$formModel->slug ?>"
        target="_blank"
        class="btn btn-primary oc-icon-crosshairs <?php if (!$formModel->slug): ?>hide<?php endif ?>"
        data-control="preview-button">
            <?= e(trans('cms::lang.editor.preview')) ?>
    </a>
...

Переменная $formModel находится в vars и хранить текущую запись (пост). Если в записи содержися slug (а содержится он после сохранения), то отображается кнопка предпросмотра.

Да, слетит при обновлении, но костыль и есть костыль.

Похожие записи

Собственные сообщения об ошибках валидации форм OctoberCMS

Во время разработки модели данных OctoberCMS при необходимости, можно использовать собственные сообщения об ошибках валидации полей формы вместо сообщения The :attribute field is required. по-умолчанию. В статье показывается как, достаточно просто, это делается.