Как вы можете позволить редактору редактировать текст в блоке, но не вносить другие изменения конфигурации, такие как перемещение блока из одного региона в другой?
Как вы можете позволить редактору редактировать текст в блоке, но не вносить другие изменения конфигурации, такие как перемещение блока из одного региона в другой?
Ответы:
В Drupal только пользователи с правами на администрирование блоков могут изменять настройки блока, в том числе регион, которому назначен блок.
Насколько я знаю, не существует модулей, позволяющих назначать пользователям более детальное разрешение. Вы должны написать свой собственный модуль, который показывает только поля, которые пользователь может редактировать.
Например, следующий код изменил бы форму сборки из block_admin_configure () , функции, которая создает форму конфигурации для любого блока, чтобы предоставить пользователям с правами «редактировать заголовки блоков» редактирование заголовка блока.
function mymodule_form_block_admin_configure_alter(&$form, &$form_state, $form_id) {
if (isset($form['settings']['title'])) {
$form['settings']['title']['#access'] = user_access('edit block titles');
}
}
Функция является реализацией hook_form_FORM_ID_alter (), созданной для модуля с именем mymodule.module.
Поля для настроек региона (области тем, из которых выводится блок) содержатся в $form['regions']
; Набор полей содержит поле выбора для каждого включенного им.
Чтобы показать поле, заданное только пользователям с разрешением «редактировать регионы блоков», вы можете использовать, например, следующий код.
function mymodule_form_block_admin_configure_alter(&$form, &$form_state, $form_id) {
if (isset($form['regions'])) {
$form['regions']['#access'] = user_access('edit block regions');
}
}
Пользователи с правами на управление блоками могут изменять регион, назначенный блокам, с http://example.com/admin/structure/block . Чтобы запретить пользователю без разрешения «редактировать области блока» доступ к этой странице, необходимо изменить обработчик доступа этого меню и заменить обработчик доступа по умолчанию на пользовательский, который будет возвращаться, FALSE
когда пользователи не имеют такого разрешения.
Для получения дополнительной информации см. Hook_menu и hook_menu_alter () .
См. Модуль блокировки доступа .
Этот модуль добавляет набор глобальных разрешений для создания, просмотра, перемещения, включения, отключения и настройки блоков, а также разрешений на уровне отдельных блоков.
После возвращения к этому вопросу через год или около того, есть два очень простых метода.
Создайте блок и поместите следующий код в тело блока:
<?php
$node = node_load(77);//77 is the nid of the node I want to put in the block.
$node_content = node_view($node,"full");
print render($node_content);
?>
Или вы можете создать блок просмотра и фильтровать по идентификатору узла.
Теперь вы даете кому-то разрешение на редактирование типа контента, но не разрешаете его создавать или удалять.
Одно простое решение, которое я бы порекомендовал, это проверить модуль Boxes . Этот модуль предоставит хорошие опции встроенного редактирования (через AJAX) для блоков, которые позволят редакторам очень легко изменять текст в блоках. Разрешения по-прежнему должны быть «администрировать блоки» для редакторов, но, поскольку теперь они смогут редактировать встроенные блоки, им действительно не нужно когда-либо заходить на страницу конфигурации блоков.
Теперь, если вы по-прежнему настаиваете на удалении доступа к этой странице конфигурации блока, вы можете просто выполнить простое изменение меню, которое изменяет разрешение, требуемое для страницы конфигурации блока, например, следующий код.
function hook_menu_alter(&$items) {
//Example Use Case, switching permission from "administer block" to "administer site configuration"
$items['admin/structure/block']['access arguments'] = array('administer site configuration');
}
Модуль Bean является возможной альтернативой для ответа на этот вопрос. Вот цитата о его странице проекта:
Думайте о Bean как о методе предоставления новых типов (по сравнению с узлом это будет тип контента), который затем предоставляет интерфейс добавления контента для создания столько блоков, сколько вам нужно (см. Скриншот ниже). Содержимое компонента может быть размещено вокруг сайта, как и любой другой блок.
В сочетании с опциями, доступными для предоставления соответствующих разрешений Bean , это должно дать вам большую гибкость в отношении того, как именно вы хотите использовать этот (отличный) модуль в вашем конкретном случае: для каждого отдельного блока, созданного с помощью модуля BEAN, вы можете использовать типичная страница с разрешениями (at admin/people/permissions
) для добавления / редактирования / просмотра / удаления доступа к выбранным ролям.
Этот модуль также прекрасно работает в сочетании с модулями интеграции функций UUID и UUID . И после того, как вы ознакомитесь с модулем Bean, вы можете найти другие случаи на вашем сайте, где вы также хотите использовать этот модуль (что как-то компенсирует тот факт, что вам нужно добавить другой модуль).
Видеоруководство Учебное пособие по модулю Drupal Bean - пользовательский интерфейс Bean Admin - это отличное введение, позволяющее по-настоящему понять всю мощь этого модуля и то, что вы можете с ним сделать (используя только методы построения сайта, без специального кодирования). Также показано, как модуль Bean преобразует блоки Drupal в полевые объекты.
Этот модуль был запущен только начиная с D7 (из-за «сущностей», которые были введены только в D7), и уже имеет более 22K зарегистрированных установок. Те, кто еще не использует его, должны определенно начать смотреть на него, готовясь к переходу на D8. Потому что это то, что в данный момент отображается на странице проекта (здесь я добавил жирную разметку):
Этот модуль был включен в ядро Drupal 8 . Обратитесь к этой проблеме для получения дополнительной информации.