Кнопки быстрого редактирования

Кнопки быстрого редактирования

ValBitBlog 30 мая 2015


Всем привет!

Наряду со стандартными дополнениями периодически появляются мысли и потребности в реализации мелких плюшек для InstantCMS 2. Специально для этого я завел здесь у себя в блоге раздел "Разное", где планирую постить интересные мысли, небольшие доработки, хаки и другие подобные мелочи.





Сегодня я хотел бы описать как в список записей можно добавить кнопки "Редактирование" и "Удалить" для быстрого перехода к соответствующим функциям.
При разработке и тестировании одного из дополнений, у меня возникла потребность в частом редактировании записей. Стандартный функционал предполагает для этого перейти в список требуемого типа контента (через меню), затем войти "в тело" самой записи, и только после мы можем нажать кнопку "Редактировать ..." справа в меню действий. На моем уже стареньком компьютере с запущенным OpenServer'ом процесс открытия любой страницы сайта - очень не быстрый. Сокращение списка вышеописанных действий, пусть даже на один шаг, очень экономит время и нервы))).

И так, приступим...


готовый результат



Посмотрим сначала как выводится кнопка "Редактировать" внутри записи. Идем в ..\templates\default\controllers\content\item_view.tpl.php и
находим следующие строки:

if (cmsUser::isAllowed($ctype['name'], 'edit', 'all') ||
        (cmsUser::isAllowed($ctype['name'], 'edit', 'own') && $item['user_id'] == $user->id)){
            $this->addToolButton(array(
                'class' => 'edit',
                'title' => sprintf(LANG_CONTENT_EDIT_ITEM, $ctype['labels']['create']),
                'href'  => href_to($ctype['name'], 'edit', $item['id'])
            ));
        }

т.е. перед выводом кнопки проверяется ряд условий, при выполнении которых функции addToolButton()передаются соответствующие параметры (css-класс, заголовок и url). Всё элементарно и понятно)) Переносим подобную структуру в файл ..\templates\default\content\default_list.tpl.php - шаблон вывода списка записей по умолчанию - так, например, выводятся статьи и блоги в дефолтном шаблоне.



Находим тег <div class="content_list_item ...> внутри которого выводятся поля записи (у меня это 23-ая строка), и сразу за ним добавляем найденный код (точнее небольшую его модификацию):

<?php if (cmsUser::isAllowed($ctype['name'], 'edit', 'all') ||
         (cmsUser::isAllowed($ctype['name'], 'edit', 'own') && $item['user_id'] == $user->id)){ ?>
    <div class="actions">
        <?php if (cmsUser::isAdmin()) { ?>
            <a href="<?php echo href_to($ctype['name'], 'delete', $item['id']); ?>" class="delete-this" title="<?php echo sprintf(LANG_CONTENT_DELETE_ITEM, $ctype['labels']['create']); ?>"></a>
        <?php } ?>
        <a href="<?php echo href_to($ctype['name'], 'edit', $item['id']); ?>" class="edit-this" title="<?php echo sprintf(LANG_CONTENT_EDIT_ITEM, $ctype['labels']['create']); ?>"></a>
    </div>
<?php } ?>

Как видно, здесь мы обернули кнопки/ссылки в div с классом "actions" и добавили еще кнопку "Удалить" запись, которая будет показываться только администратору сайта.

Теперь немного стилизуем добавленные ссылки. Открываем файл ..\templates\default\css\theme-content.css и в самом низу добавляем следующие строки:

.content_list_item .actions {
    float: right;
    visibility: hidden;
}
.content_list_item:hover .actions {
    visibility: visible;
}
.content_list_item .actions a {
    display: inline-block;
    width: 16px;
    height: 16px;
    overflow: hidden;
}
.edit-this {
    background: url("../images/icons/edit.png") no-repeat center center;
}
.delete-this {
    margin-right: 5px;
    background: url("../images/icons/delete.png") no-repeat center center;
}


Всё! Можем испытывать))

Кнопки "Удалить" и "Редактировать" будут видны администратору сайта для всех записей - тут он царь и бог)) А кнопка "Редактировать", при наведении курсора на статью или пост, будет показываться только автору записи. Гости и остальные пользователи (не авторы) никаких кнопок не увидят. Получился, такой своеобразный хак шаблона))))



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


Всем удачи!

16:37
Нет комментариев. Ваш будет первым!

НазадПоделиться на сайт

Код для вставки на сайт:
Пример отображения:

X