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

Аватар пользователя kovalevm kovalevm 13 марта в 10:25

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

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

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

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

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

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

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

Комментарии

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

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

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

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

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

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

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

Значит где-то в другом месте накосячено. Общие настройки представления можно увидеть?

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

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

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

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

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

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

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

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

Аватар пользователя charOFF charOFF 16 марта в 9:45

Навигатор не привязан к странице, он может быть в любом блоке. Нужно смотреть "Настройки страницы":"Путь". Там должно быть users/%/blog

Аватар пользователя VasyOK VasyOK 13 марта в 19:38

На последнем экране, который соскринили Ctrl+F "Настройки запроса" - уникальность (галка).

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

Тут надо читать не тему, а содержимое вопроса. Оно к сформулированной теме не имеет ни малейшего отношения Wink

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

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

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

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

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

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

kovalevm wrote: Бесконечная куча дублей страницы

И при чем здесь "Дубликаты в блоке"?

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

Создалось огромное количество страниц, которые проиндексировал Яндекс, это дубликаты представлени основной страницы дневника.

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

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

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

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

Page - Путь:/%/blog
Block - Путь не указан
Data export - Путь:/user/%/blog/export
Страница - Путь:/blog
Блок на главной - Путь не указан
Page-user-blog - Путь:/%/blog

Аватар пользователя marassa marassa 16 марта в 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 марта в 14:28

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

Аватар пользователя charOFF charOFF 16 марта в 9:58

Если установлен devel, можно посмотреть кто формирует страницу по адресу /devel/menu/item?path=users/имя_пользователя/blog

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

Спасибо, по данному запросу для всех дневников пользователей Devel показывает

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

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

Аватар пользователя kovalevm kovalevm 16 марта в 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 марта в 14:26

Эта строка для нас не принципиальна. В первой строке должно быть "Array..." и при клике на ней должен раскрываться массив.

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

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

Аватар пользователя marassa marassa 16 марта в 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 марта в 14:20

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

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

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

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