Drupal 8.2.3
Создал представление(view) выбрал настройки:
Неформатированный список
Поля
Выбрал такие поля:
Содержимое: Ссылка на редактирование
Исключил её из вывода
И добавил поле:
Глобальный: Контекстные ссылки
Настройка:
Контекстные ссылки: Показано
В этом случае не показывается контекстное меню, а html код генерируется такой:
<div class="views-field views-field-contextual-links"><span class="field-content"></span></div>
Что я делаю не так?
Вложение | Размер |
---|---|
111.jpg | 157.26 КБ |
Комментарии
Покажите настройки поля контекстных ссылок.
Поле контекстные ссылки
Если настроить нужным образом отображение тизера и выводить не поля, а тизеры, то контекстные ссылки появятся сами. Во всяком случае в 7-ке так.
Да, конечно, если я делаю вывод не полей, а Анонсов, то появляются контекстные ссылки, но мне нужны именно поля - с ними гораздо интереснее и, на мой взгляд, проще
Как сказать. Есть мнение, что с отображениями вьюха работает быстрее. А если использовать ещё и search api то поля вроде кнопок корзины вообще будут недоступны.
Мнение-то есть, но я как-то тестировал - с отображениями получалось медленнее. Без кэша. С кэшем - одинаково. Надо пост запилить с бенчем, при разных условиях.
К сожалению, я не очень умён - навряд ли получится быстро изучить, как с помощью анонсов размещать то что мне нужно. Но я попробую.
Однако, хотелось бы узнать почему контекстные ссылки не работают - с полями я вроде научился жмакать и выводить то что нужно, как нужно - получается быстро и красиво
Да там в настройках отображения тупо поля мышкой потаскать и всё))
Увы, но восьмерка еще настолько бажная, что этот функционал до сих пор не работает. Вот ишью - https://www.drupal.org/node/2532200
Проверил, действительно баг до сих пор не пофиксили.
Но вы действительно можете использовать вывод контента, а не полей, если хотите использовать функционал редактирования через контекстные ссылки во вьюшке. В восьмерке в коробке добавлена возможность задавать кастомные режимы отображения сущностей, т.е. например, вы можете создать несколько вариантов тизеров, для каждого из них создать свой шаблон, настроить нужное отображение полей и т.д.
Спасибо большое - действительно баг оказался - я уж думал, я чего-то не то химичу =).
Попробую ваш вариант. Ещё подумал - попробую такой вариант:
Сопру css с контекстных ссылок которые отображаются при отображении контента, и натяну честно украденные css стили на на поле "Глобальный: Кнопка раскрытия"...
Если "Кнопка раскрытия" будет сильно сопротивляться, применю поле
Глобальный: Пользовательский текст
и думаю тогда css точно натянется...
Спасибо большое sergeybelya, gun_dose!
Золотые слова.
Вообщем чего-то получилось, но кое-что хотелось уточнить:
Установил расширение "Field Permissions":
https://www.drupal.org/project/field_permissions
В "Типы материалов", у материала "MyArticle", добавил поле:
for_develop
И настроил вывод этого поля по тем ролям, которые мне нужны, с помощью "Field Permissions".
Оно логического типа, и понадобится нам в дальнейшем
Создал views, добавил поля:
Содержимое: ID [скрыто]
Содержимое: Заголовок [скрыто]
Содержимое: Содержимое [скрыто]
Содержимое: for_develop [скрыто]
Глобальный: Пользовательский текст
Поля ID, Заголовок, Содержимое, for_develop исключены из вывода.
Поле "Глобальный: Пользовательский текст":
{{ field_for_develop }}
<h2>{{ title }}</h2>
{{ body }}
</article>
А теперь поле for_develop:
Вкладка "Перезаписать результаты", стоит галочка "Переопределить вывод этого поля пользовательским текстом":
<button class="trigger focusable visually-hidden" type="button" aria-pressed="false">Открыть {{ title }} конфигурационные настройки</button>
<ul class="contextual-links" hidden="">
<li class="quickedit"><a href="" role="button" aria-pressed="false">Быстрое редактирование</a></li>
<li class="entitynodeedit-form"><a href="/node/{{ nid }}/edit?destination=node">Редактировать</a></li>
<li class="entitynodedelete-form"><a href="/node/{{ nid }}/delete?destination=node">Удалить</a></li>
<li class="node-cloneprepopulate-node"><a href="/node/{{ nid }}/clone/prepopulate?destination=node">Clone</a></li>
</ul>
</div>
Вкладочка "Поведение при отсутствии результатов", убраны галочки:
Скрыть при пустом значении
Скрыть перезаписанное, если пусто
Как это работает:
В поле for_develop во вкладочке "Перезаписанные результаты" размещён код с контекстными ссылками. Так как поле for_develop имеет настройки "Field Permission", в которых указаны роли, при которых оно будет отображаться, то неавторизованный пользователь и не увидит эти самые контекстные ссылки.
Есть проблема одна =(. Так как я только что добавил поле "for_develop" к материалу "MyArticle", то, насколько я понимаю, в уже созданных материалах это поле не задано, и когда я делаю {{ field_for_develop }}, отображается ничего. Отображаться {{ field_for_develop }} начинает в том случае, если я захожу в конкретный материал и там в поле for_develop ставлю галочку.
Можно было бы на всех уже созданных сделать bulk update и у всех материалов проставить галочку... но Views Bulk Operations (VBO), пока не портирован на Drupal 8 =(.
Может быть можно как-то по другому разграничить доступ?
Агась, вроде бы разобрался - не очень-то и сложно =)))
Прошёлся по всем материалам и проставил там галочки в логическом поле с машинным именем "field_for_develop".
За ради такого случая, сделал свой первый модуль, который использует batch operations
Модуль лезет во все материалы с типом "myarticle" и устанавливает единичку в логическом поле "field_for_develop".
Наиболее значимые куски кода модуля:
<?php
use Drupal\node\Entity\Node;
...
$nids = \Drupal::entityQuery('node')->condition('type', 'myarticle')
->sort('created', 'ASC')
->execute();
foreach($nids as $nid){
$node = Node::load($nid);
//Change field field_for_develop to 1 in every node
$node->field_for_develop->value = 1;
$results[] = $node->save();
}
...
?>
А если я поставил в файле "my_module.routing.yml":
_permission: 'administrator'
То никто кроме меня ведь не сможет им воспользоваться?...
Проверьте из другого браузера анонимным юзером. Если есть ещё какие-то роли, залогиньтесь под юзером с этой ролью и тоже проверьте. Если в коде страницы у них контекстных ссылок нет, то можно спать спокойно))
Тоже сегодня столкнулся, что не работает вывод контекстных ссылок, если во views выводятся поля. Предложенный патч на актуальный Д8 не ставится
2024 год на дворе и друпал 10, а проблема по прежнему остается. Почему так? Ее не считают проблемой? Патчи есть вроде. Но странно как-то. Речь же о типовом функционале views.....