Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

Дизайн и модификация Invision Community

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.
Русский язык для Invision Community 5

После обновления на 4.1.х не работают ссылки с #entry внутри темы

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

 

И столкнулся с очень неприятной проблемой: старый ссылки, ведущие на какое-то сообщение внутри темы вида forum.net/index.php?showtopic=15213&st=20#entry117513 перестали работать! Т.е. при клике ведут на первое сообщение темы.

 

А это очень и очень плохо, т.к. у меня форум более 2 млн. сообщений и все упорядочено, куча FAQ, путеводителей и др. ссылок ведущие на конкретные сообщения в теме.

 

Думал пересчет сообщений исправит, но нет....

 

Что делать?

Рекомендованные сообщения

#entry это указатель внутри страницы, на сервере он не передается. В новой версии якорь сообщения имеет новое название #comment-{id}. В бд заменить старый тег на новый и дополнительно написать скрипт на js который будет заменять в урле для перехода с внешних источников. А вот по параметру запроса st он должен редиректить на страницу page.

 

Некоторые проблемы старых ссылок обсуждалось тут http://ipbskins.ru/forum/topic14157.html

Проблема этих ссылок showtopic=15213&st=20#entry117513 в том, что сначала идет редирект на чпу, потом проверяется наличие параметра st.

Тут я вижу несколько вариантов:

 

I. Заменить в базе данных #entry на &p=, тогда форум сделает автоматическое преобразование ссылки в /topic/{tid}-{title}/?do=findComment&comment={pid}.

Не требует правки файлов, но не будет работать для ссылок с внешних ресурсов и подходит только для старых ссылок которые были без чпу.

 

II. Отредактировать функцию convertLegacyParameters в \applications\forums\Application.php добавив проверку параметра st и конвертацию его в page.

Выше:

 

		if ( isset( \IPS\Request::i()->p ) or isset( \IPS\Request::i()->findpost ) )

Добавить:

 

		if( \IPS\Request::i()->st )
		{
			\IPS\Request::i()->page = floor( intval( \IPS\Request::i()->st ) / $topic::getCommentsPerPage() ) + 1;
		}

Такая правка будет работать для всех ссылок в том числе и с внешних ресурсов, но требует правки файла и остается решить вопрос с хештегом #entry который нужно заменить в js на #comment- для поддержке ссылок с внешних ресурсов, либо добавить в шаблоне новый тег с этим якорем.

 

JS скрипт для замены хештега #entry на #comment

 

if(document.location.hash){
var match = document.location.hash.substr(1).match(/^entry(\d+)$/);
if(match[1]){
	document.location.hash = '#comment-'+match[1];
}
}

  • Автор

По st внес правку! Перекидывает теперь на нужную страницу.

А вот насчет entry не очень понял в каких именно шаблонах нужно править?

Сделайте замену в бд.

А вот насчет entry не очень понял в каких именно шаблонах нужно править?

%Тема% -> forums -> topics -> postContainer

 

После

<a id='comment-{$comment->$idField}'></a>

Добавить

<a id='entry{$comment->$idField}'></a>

  • Автор

Спасибо!

Сделал все же замену в БД (затронуло 7 тыс. постов). Правда половина ссылок все равно куда-то не туда ведут, полагаю, что из-за ST. Что-то все равно сбилось после перестроения форума

Куда ведут? Надо еще учитывать старое и новое количество сообщении на одной странице, для совместимости параметра st или page оно должно быть одинаковым. В противном случае следовало заменить #entry на параметр &p= для поиска сообщения в теме.

Создайте аккаунт или войдите в него для комментирования

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.