Skip to content

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

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

 

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

 

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

 

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

 

Что делать?

Featured Replies

#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];
}
}

  • Author

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

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

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

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

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

 

После

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

Добавить

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

  • Author

Спасибо!

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

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

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.