1. Главная
  2. Форумы
  3. Техподдержка Drupal
  4. Решение проблем

Дубликаты в блоке представления

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

Добрый день!
Помогите, пожалуйста, решить проблему дубликатов в блоке Представления.

Блок представления доступен для каждого пользователя по адресу /users/имя_пользователя/blog/ и выводит все записи типа "Запись в дневник" пользователя.

Несуществующие и ошибочные ссылки

к примеру /users/имя_пользователя/blog/2589dkfjd

сейчас не ведут на несуществующую страницу, а дублируют страницу вывода дневника

/users/имя_пользователя/blog/

В настройках представления был добавлен Глобальный: Null. Какие настройки необходимо применить?

Комментарии

Аватар пользователя marassa marassa 13 марта 2021 в 13:56

kovalevm wrote: В настройках представления был добавлен Глобальный: Null

В том месте, где Вы прочли про Глобальный Нуль, было ведь и ещё что-то написано, правда?
https://drupal.ru/node/142687

Аватар пользователя kovalevm kovalevm 13 марта 2021 в 16:45

Да, верно, эту тему изучили https://drupal.stackexchange.com/questions/48093/how-do-i-set-my-views-t...
Такие настройки не помогают. Это блок представления, здесь нет "Показать Страница не найдена".

Аватар пользователя kovalevm kovalevm 13 марта 2021 в 16:48

Да, верно, эту тему изучили https://drupal.stackexchange.com/questions/48093/how-do-i-set-my-views-t...
Такие настройки не помогают. Это блок представления, здесь нет "Показать Страница не найдена".
"Скрыть представление" - в любом случае убирает все выводы записей пользователя.

"Указать критерии проверки" - также не дает результатов, выводится дубликат блога со всеми записями про любом несуществующем адресе.

Аватар пользователя charOFF charOFF 14 марта 2021 в 23:16

Обратите внимание на этот комментарий

marassa wrote:
Если это блок, а не страница, то сама страница /users/имя_пользователя/blog/ откуда берется и чем формируется?

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

Аватар пользователя kovalevm kovalevm 16 марта 2021 в 8:39

Спасибо, а есть ли какой-то способ вывести информацию, какое представление используется для формирования страницы?
В настройках представления их 6. Удалось выяснить, что за вывод количества сообщений пользователя отвечает настройка "Навигатор - Постранично" в Block. Ну то есть если здесь изменить количество выводимых записей на странице в дневнике пользователя, то именно из этого Block берется значение количества страниц. Если изменить в Page, Data Export, Страница, Page-user-blog - количество страниц не изменится.

Аватар пользователя kovalevm kovalevm 14 марта 2021 в 20:26

К сожалению, имеет
Бесконечная куча дублей страницы дневника /users/имя_пользователя/blog
по любой несуществующей ссылке
/users/имя_пользователя/blog%D9%FA
/users/имя_пользователя/blog000
/users/имя_пользователя/blog-kjkjlj

Аватар пользователя kovalevm kovalevm 14 марта 2021 в 20:25

Уникальность в настройках запроса поставили. Все равно отображаются все несуществующие ссылки типа
/users/имя_пользователя/blog%D9%FA
Отображается /users/имя_пользователя/blog

Какие всё же необходимы настройки в Глобальный: Null, если нет настройки "Показать Страница не найдена"?

Аватар пользователя marassa marassa 16 марта 2021 в 8:48

kovalevm wrote: есть ли какой-то способ вывести информацию, какое представление используется для формирования страницы?

Конечно: посмотреть в исходник страницы. Но для этого нужно уметь видеть...
Что в поле Path/Путь у отображений Page, Страница, Page-user-blog?

Аватар пользователя marassa marassa 16 марта 2021 в 9:51

Таким образом, ни одна из страниц этого представления не отзывается на путь /users/%/blog.
Я посмотрел на сайт drupal.ru, и там аналогичные пути: https://drupal.ru/user/63384/blog
При этом Ваша проблема тоже присутствует: https://drupal.ru/user/63384/blog/blablabla
Ставлю на то, что это работа не views, а модуля blog, который в семерке входил в ядро, а потом был оттуда изгнан. Как с ним работать - понятия не имею, но проблему решать надо именно в нём.
Можно конечно еще погадать с Вашим блоком, но я не вижу каким образом при формировании отдельного блока можно выдать 404 на всю страницу без программирования. Вроде можно выдать 403. Будем гадать?

Аватар пользователя marassa marassa 16 марта 2021 в 14:28

Есть подозрение (могу ошибаться), что при пути вида /users/xxx/blog/yyy views может брать в качестве второго аргумента слово "blog", то есть нам нужен третий аргумент. Попробуйте добавить в контекстные фильтры ещё один Global:Null, и уж его настройте, чтобы при наличии любого значения он выдавал "Access denied".

Аватар пользователя charOFF charOFF 16 марта 2021 в 11:46

Значит это не системные пути, а синонимы. Посмотрите в /admin/config/search/path , каким системным путям они соответствуют. А их уже проверить через devel. Подозреваю, что системный путь будет что-то вроде user/40236/blog

Аватар пользователя kovalevm kovalevm 16 марта 2021 в 14:17

Спасибо, да, в синонимах указано, что системный путь ссылки /users/albinadidenko7/blog - user/40236/blog/
Но Devel показывает тут /devel/menu/item?path=user/40236/blog ту же самую
Called from /home/rc/web/romanticcollection.ru/public_html/includes/menu.inc, line 527

Аватар пользователя charOFF charOFF 16 марта 2021 в 21:23

Видно, что страницу user/40236/blog формирует функция user_blog_page(). Значит views тут не причем. Возможно это какой-то кастомный модуль, потому что в ядре такого нет и контрибов я таких не припомню, хотя могу и ошибаться. Но, с учетом изысканий @marassa, возможно, что несуществующая страница /users/имя_пользователя/blog/2589dkfjd формируется чем-то другим. И еще, вполне может быть, что там hook_url_inbound_alter() в каком-нибудь кастоме преобразует урл на лету. Вобщем надо смотреть код. В любом случае, врядли без кодинга можно будет решить проблему.
Еще можно попробовать где-нибудь в шаблоне сделать dpr(current_path()); и посмотреть, какой системный путь у этой страницы.

Аватар пользователя marassa marassa 16 марта 2021 в 11:31

Раз уж Вы рассекретили свой секретный сайт, я позволил себе по нему немножко полазить и посмотреть код страниц, и вот что я обнаружил:
Цыфры после /blog/ - это не абстрактная ерунда, а id конкретной записи в блоге. Например:
https://www.romanticcollection.ru/users/albinadidenko7/blog ведет на весь блог пользователя, а
https://www.romanticcollection.ru/users/albinadidenko7/blog/66980 ведет на конкретную запись в блоге, и только если записи с таким id не существует, тогда опять выдается весь блог:
https://www.romanticcollection.ru/users/albinadidenko7/blog/blablabla
Так что может быть всё не так ужасно, и бóльшая часть ссылок в яндексе ведут на вполне законные записи в блогах?

Аватар пользователя kovalevm kovalevm 16 марта 2021 в 14:20

Да, вы правы, все записи в дневнике имеют такой вид /users/имя_пользователя/id_ноды
И если записи с таким id не существует, то выводится дневник, а не несуществующая страница.

Конечно, большая часть ссылок в порядке, но яндекс.вебмастер показывает огромное количество таких страниц-дубликатов, а это не очень хорошо для поисковой оптимизации.

Аватар пользователя marassa marassa 16 марта 2021 в 11:39

И еще наблюдение: если открывается конкретная запись в блоге по корректной ссылке, то Ваш блок views вообще никак не присутствует на странице, то есть это сам модуль Blog при разборе пути решает показывать блок view или показывать ноду с записью.
А на странице /admin/structure/block этот Ваш blog: Block как-то присутствует в явном виде? С какими условиями?

Логотип drupal.ru

Содержимое сайта публикуется на условиях CreativeCommons Attribution-ShareAlike 3.0 или более поздней версии. Программные коды в тексте статей — на условиях GNU GPL v2 или более поздней версии.

Документация по совместной работе с репозиторием drupal.ru – https://docs.drupal.ru/code

Drupal – торговая марка Дриса Бёйтарта

12+

AltStyle によって変換されたページ (->オリジナル) /