Контекстные ссылки во views'ах не отображаются

Главные вкладки

Аватар пользователя mildok mildok 7 декабря 2016 в 11:04

Drupal 8.2.3

Создал представление(view) выбрал настройки:
Неформатированный список
Поля

Выбрал такие поля:

Содержимое: Ссылка на редактирование
Исключил её из вывода

И добавил поле:
Глобальный: Контекстные ссылки

Настройка:
Контекстные ссылки: Показано

В этом случае не показывается контекстное меню, а html код генерируется такой:
<div class="views-field views-field-contextual-links"><span class="field-content"></span></div>

Что я делаю не так?

ВложениеРазмер
Иконка изображения 111.jpg157.26 КБ

Лучший ответ

Аватар пользователя ivnish ivnish 5 июня 2019 в 18:35

Тоже сегодня столкнулся, что не работает вывод контекстных ссылок, если во views выводятся поля. Предложенный патч на актуальный Д8 не ставится

Комментарии

Аватар пользователя gun_dose gun_dose 7 декабря 2016 в 12:17

Если настроить нужным образом отображение тизера и выводить не поля, а тизеры, то контекстные ссылки появятся сами. Во всяком случае в 7-ке так.

Аватар пользователя mildok mildok 7 декабря 2016 в 12:30

Да, конечно, если я делаю вывод не полей, а Анонсов, то появляются контекстные ссылки, но мне нужны именно поля - с ними гораздо интереснее и, на мой взгляд, проще Smile

Аватар пользователя gun_dose gun_dose 7 декабря 2016 в 12:46

Как сказать. Есть мнение, что с отображениями вьюха работает быстрее. А если использовать ещё и search api то поля вроде кнопок корзины вообще будут недоступны.

Аватар пользователя fairrandir fairrandir 7 декабря 2016 в 13:49

Мнение-то есть, но я как-то тестировал - с отображениями получалось медленнее. Без кэша. С кэшем - одинаково. Надо пост запилить с бенчем, при разных условиях.

Аватар пользователя mildok mildok 7 декабря 2016 в 12:56

К сожалению, я не очень умён - навряд ли получится быстро изучить, как с помощью анонсов размещать то что мне нужно. Но я попробую.

Однако, хотелось бы узнать почему контекстные ссылки не работают - с полями я вроде научился жмакать и выводить то что нужно, как нужно - получается быстро и красиво Smile

Аватар пользователя sergeybelya sergeybelya 7 декабря 2016 в 13:10
1

Но вы действительно можете использовать вывод контента, а не полей, если хотите использовать функционал редактирования через контекстные ссылки во вьюшке. В восьмерке в коробке добавлена возможность задавать кастомные режимы отображения сущностей, т.е. например, вы можете создать несколько вариантов тизеров, для каждого из них создать свой шаблон, настроить нужное отображение полей и т.д.

Аватар пользователя mildok mildok 7 декабря 2016 в 13:21

Спасибо большое - действительно баг оказался - я уж думал, я чего-то не то химичу =).
Попробую ваш вариант. Ещё подумал - попробую такой вариант:
Сопру css с контекстных ссылок которые отображаются при отображении контента, и натяну честно украденные css стили на на поле "Глобальный: Кнопка раскрытия"...

Если "Кнопка раскрытия" будет сильно сопротивляться, применю поле
Глобальный: Пользовательский текст
и думаю тогда css точно натянется...

Спасибо большое sergeybelya, gun_dose! Smile

Аватар пользователя mildok mildok 9 декабря 2016 в 12:34

Вообщем чего-то получилось, но кое-что хотелось уточнить:

Установил расширение "Field Permissions":
https://www.drupal.org/project/field_permissions

В "Типы материалов", у материала "MyArticle", добавил поле:
for_develop
И настроил вывод этого поля по тем ролям, которые мне нужны, с помощью "Field Permissions".
Оно логического типа, и понадобится нам в дальнейшем Smile

Создал views, добавил поля:

Содержимое: ID [скрыто]
Содержимое: Заголовок [скрыто]
Содержимое: Содержимое [скрыто]
Содержимое: for_develop [скрыто]
Глобальный: Пользовательский текст

Поля ID, Заголовок, Содержимое, for_develop исключены из вывода.
Поле "Глобальный: Пользовательский текст":

<article data-history-node-id="{{ nid }}" data-quickedit-entity-id="node/{{ nid }}" role="article" class="contextual-region" data-quickedit-entity-instance-id="0">
{{ field_for_develop }}
<h2>{{ title }}</h2>
{{ body }}
</article>

А теперь поле for_develop:
Вкладка "Перезаписать результаты", стоит галочка "Переопределить вывод этого поля пользовательским текстом":

<div class="contextual" role="form" data-contextual-id="node:node={{ nid }}">
        <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 =(.

Может быть можно как-то по другому разграничить доступ? Smile

Аватар пользователя mildok mildok 11 декабря 2016 в 19:08

Агась, вроде бы разобрался - не очень-то и сложно =)))

Прошёлся по всем материалам и проставил там галочки в логическом поле с машинным именем "field_for_develop".

За ради такого случая, сделал свой первый модуль, который использует batch operations Smile

Модуль лезет во все материалы с типом "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":

  requirements:
    _permission: 'administrator'

То никто кроме меня ведь не сможет им воспользоваться?...

Аватар пользователя gun_dose gun_dose 11 декабря 2016 в 20:27

Проверьте из другого браузера анонимным юзером. Если есть ещё какие-то роли, залогиньтесь под юзером с этой ролью и тоже проверьте. Если в коде страницы у них контекстных ссылок нет, то можно спать спокойно))

Аватар пользователя ivnish ivnish 5 июня 2019 в 18:35

Тоже сегодня столкнулся, что не работает вывод контекстных ссылок, если во views выводятся поля. Предложенный патч на актуальный Д8 не ставится