Скрыть меню других доменов из формы редактирования узла на сайте Drupal, используя доступ к домену
Я нахожусь в процессе внесения некоторых улучшений в живой сайт Drupal, который использует модуль доступа к домену для запуска нескольких микросайтов. Я пытаюсь найти способ ограничения меню, в которое пользователь может публиковать контент, на экране редактирования узла. Пользователь в одном из доменов должен иметь возможность публиковать контент только в меню, связанные с этим доменом.
Есть ли простой способ добиться этого? Я предполагаю, что есть некоторые крючки, которые я мог бы использовать, но до сих пор я не смог их идентифицировать. Я бы предпочел не устанавливать дополнительные модули для достижения этой цели и иметь возможность добавлять некоторый код на текущий сайт для изменения форм. Сайт борется с большим количеством модулей, которые нам уже приходилось устанавливать на нем.
3 ответа
В конце концов нашел способ исправить это для конкретного проекта, над которым я работал: в module_form_alter я добавил следующее:-
global $_domain;
if (isset($_domain['domain_id'])) { // only display domain's primary links
$menus[domain_conf_variable_get($_domain['domain_id']
,'menu_primary_links_source')] = $_domain['sitename'].' Primary links';
}
if ( isset($menus) ) {
$options = menu_parent_options($menus, $form['menu']['#item']);
$form['menu']['parent']['#options'] = $options;
}
Это ограничивает опции меню только первичными меню ссылок текущего домена, что является именно тем, что мы хотели.
Спасибо Mad Scientist, который указал мне правильное направление ранее.
Вот обновленный код для Drupal 7:
/**
* Implements hook_form_FORM_ID_alter().
*/
function MYMODULE_form_page_node_form_alter(&$form, &$form_state) {
global $_domain;
if (isset($_domain['domain_id'])) { // only display domain's primary links
$menus[domain_conf_variable_get($_domain['domain_id'], 'menu_main_links_source')] = $_domain['sitename'].' Main menu';
}
if (isset($menus)) {
$options = menu_parent_options($menus, $form['#node']->type);
$form['menu']['link']['parent']['#options'] = $options;
}
}
В соответствии с файлом readme для модуля, вам необходимо установить некоторые конкретные разрешения в управлении пользователями:
Чтобы включить эту функцию, вы должны предоставить полномочия "редактировать узлы домена" и (необязательно) "удалять узлы домена" для некоторых ролей. Затем назначьте учетные записи отдельных пользователей определенным доменам, чтобы назначить их редакторами доменов.
Исходя из моего опыта много месяцев назад с модулем, вы можете проверить глобальный объект $ user и выяснить, к каким доменам пользователь должен иметь доступ. Затем вы можете использовать форму изменения, чтобы удалить из поля выбора любые параметры, которые вы не хотите, чтобы они видели. Однако, как всегда в Drupal, лучше позволить кому-то другому писать код - поэтому, если модуль Domain предоставляет эту функциональность, используйте его!