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 не ставится