Кнопка редактирования записи: $dat['edit']

Как вам уже известно, в Blox CMS контент сайта редактируется не через админку, а прямо на странице через кнопку редактирования, что очень удобно для пользователей. Плата за это удобство — необходимость помещать в шаблоне код кнопки редактирования: <?= $dat['edit'] ?>.

Кнопка будет отображаться только в режиме редактирования и только для блоков, которые разрешено редактировать данному пользователю.

Если стандартная кнопка редактирования вам не понравится, можно написать собственный код кнопки, использовав только URL.

Можно обойтись и вовсе без кнопок редактирования, о чем читайте ниже в разделе "Когда можно не выводить кнопки редактирования".

Всё что будет рассказано для кнопки редактирования ($edit['button'] и $dat['edit']) будет относиться и к кнопке удаления $dat['delete'] и кнопке новой записи $edit['new-rec']['button']. Этот код нужно поставить в любое место кода шаблона (лучше — в левый верхний угол блока).

Размещение кнопки редактирования

Кнопку редактирования можно разместить по-разному. Сразу скажем, что третий способ является наиболее предпочтительным.

  1. Размещение кнопки инлайн

    Самый простой способ вывести кнопку редактирования - это просто вставить код кнопки, например, в начале кода шаблона.

    echo $edit['button'];

    Недостаток этого способа состоит в том, что верстка сайта в режиме редактирования будет выглядеть немного по другому, так как вставляется дополнительный inline элемент.

  2. Абсолютное позиционирование кнопки

    Лучше размещать кнопку абсолютно в верхнем левом углу с помощью такой обертки:
    if ($edit['button'])
        echo'<div style="position:absolute">'.$edit['button'].'</div>';
    

    Иногда при этом кнопки редактирования вложенных блоков могут накладываться на кнопки родительских блоков. Для решения этой проблемы, можно в стиль добавлять свойства, например:

    style="position:absolute; left:-10px; z-index:2"

    Внимание! Внешний html-элемент шаблона должен иметь свойство position:relative, иначе кнопка будет позиционирована относительно одного из вышестоящих родительских элементов (вплоть до элемента body).

  3. Абсолютное позиционирование кнопки с возможностью регулировки смещения

    .tdd
    $params['absolute-edit-button'] = true;
    
    .tpl
    echo $edit['button'];
    

    Приведенные здесь коды приведут к тому, что будет выведен html-код кнопки редактирования, позиционированный абсолютно и эквивалентный коду из пункта 2.

    Дополнительное смещение кнопки на этот раз задается не в шаблоне, а в окне редактирования блока в пункте меню: "Блок > Смещение кнопки редактирования", где вы можете задать смещение вправо, смещение вниз, а также z-index. Для смещения вверх и влево используйте отрицательные значения.

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

Изменение вида кнопок редактирования и удаления

Для возможности создания кнопок редактирования в собственном стиле, кроме кодов стандартных кнопок $dat['edit'], $dat['delete'], передаются исходные данные для оформления этих ссылок:

$dat['edit-href']Ссылка на редактирование записи
$dat['delete-href'] Ссылка на удаление записи
$dat['hidden']Запись является скрытой
$dat['last-edited']Запись редактировалась последней
$dat['no-data']В шаблоне данные не придусмотрены
$edit['new-rec']['href']Ссылка на редактирование новой записи.
C этой ссылкой можно передавать также значения по умолчанию. Делается это с помощью параметра-массива defaults, в качестве ключей которого используются номера полей (см. пример ниже).

Пример использования в шаблоне:

<?php
if ($dat['edit-href'])
    echo "<a href='{$edit['new-rec']['href']}&defaults[9]=5&defaults[3]=0' >Создать новую запись</a>";

foreach ($tab as $dat) {
    if ($dat['edit-href'])
	    echo "<a href='{$dat['edit-href']}'>редактировать</a>";
    echo $dat[1];
}
?>

Как вложить кнопку редактирования в ссылку

Так как кнопка редактирования сама является ссылкой, ее нельзя помещать внутрь элемента <a>. Если вы хотите поместить кнопку редактирования в элемент <a>, необходимо в дескриптор добавить параметр $params['span-edit-buttons'], который сделает кнопку редактирования на основе элемента span.

Кнопка редактирования внешнего блока (контейнера страницы)

В шаблоне внешнего блока обычно находятся только block-данные, которые не редактируются. Если нет данных для редактирования, то и кнопку редактирования в шаблон можно не помещать.

Из редактируемых данных в шаблоне внешнего блока можно разместить заголовок страницы и какие-то настройки страницы.

В любом случае, аналог кнопки редактирования имеется в главном меню: Страница > Редактировать внешний блок.

Когда можно не выводить кнопки редактирования

Вовсе необязательно выводить все кнопки редактирования.

Во-первых, для шаблонов предназначенных для верстки (внешний шаблон, ряды, колонки) нужно поставить параметр $params['no-edit-buttons'] = true; С этим параметром будут скрыты кнопки редактирования блока для всех пользователей, кроме администратора.

Более того, кнопки редактирования, используемые только для верски, не нужно показывать даже админу - они будут только мешать. При большом количестве блоков на странице, нужный блок и соответствующую кнопку редактирования удобнее находить через древо блоков в меню: Страница > Структура страницы.