При выводе представления хочется иметь возможность добавлять новый контент со страниц представлений. Делать блок с кучей ссылок всего, что только можно создавать на сайте не вариант.
Зашел пользователь с правами "модератор" в раздел новостей, а там для него ссылочка "добавить новость".
Можно создать блок с ссылкой типа node/add/mycontent, отображать в Содержимом с соответствующей ролью. Да это работает. Но если много типов материалов, то такое количество не используемых блоков напрягает.
Есть вариант создать отдельный тип нод и в Подвале представления отобразить Готовую к выводу сущность. Останется решить вопрос с удалением title через отдельную темизацию этого типа нод.
Какие еще существуют способы решения данной проблемы?
Комментарии
У представления есть header и footer. Их можно формировать программно через хук. В хуке можно проверять какая роль у текущего пользователя
Спасибо! Решил пока оставить через отдельный тип нод в footer. Title скрыл Exclude node title права определил через Content Access можно через Field Permissions Решил, то так более гибко получается. Легче менять права доступа и можно дополнительных элементов накидать.
Я в восьмерке это делаю через контекстные ссылки, не знаю как это работает в семерке.
Расскажи алгоритм
Вот фрагмент очень корявого, но реально работающего кода:
* Implements hook_contextual_links_view_alter().
*/
function ****_contextual_links_view_alter(&$element, $items) {
// This hook is called for EVERY set of contextual links
// on a page. We first want to check the $element to make
// sure we are adding a link to the correct list of contextual
// links.
if (isset($element['#contextual_links']['entity.view.edit_form'])
&& $element['#contextual_links']['entity.view.edit_form']['metadata']['name'] == 'photo_slideshow' ) {
$element['#links']['add_picture'] = array(
'title' => t('Add picture'),
'url' => Url::fromRoute('node.add', array(
'node_type' => 'pictures',
'edit[field_linked_to]' => '[nid]',
))
);
unset($element['#links']['config-translationcontextual-linksentityviewconfig-translation-overview']);
unset($element['#links']['entityviewedit-form']);
}
};
Я так и не смог тогда настроить правильно кэширование, чтобы контекстная ссылка не кэшировалась раз и навсегда независимо от аргумента, и мне пришлось передавать в ссылку некий псевдотокен "[nid]", который уже в js заменяется на реальный nid Но идея, надеюсь, понятна.