Пара плюшек для своего блога на Rainlab.Blog
Сам по себе плагин блога весьма скудноват по возможностям в сравнении возможностями эталонного WordPress. Архив, теги, подборки, галереи, embedded контент и т.д. требует дополнительных плагинов или разработки функциональности вручную. Такой подход лежит в основе самой OctoberCMS.
Но вот чего не хватает самой cms, это аналога admin bar'a
Касательно блога: требуется возможность сразу перейти на страницу редактирования записи.
Кнопка редактировать пост
Как только я завёл этот блог, то сразу добавил такую кнопку. На страницу с компонентом записи требуется добавить информацию о текущем пользователе. В простейшем случае, если пользователь залогинен, то отображать кнопку редактирования.
...
[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>
...
Причины и сложности, как я их вижу:
- Компонент записи размещается конечным разработчиком. Плагин не знает на каком url открывать предпросмотр.
- Разработчик может разместить несколько компонентов на нескольких 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 (а содержится он после сохранения), то отображается кнопка предпросмотра.
Да, слетит при обновлении, но костыль и есть костыль.