Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
tolik777

После обновления на 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];
}
}

  • Upvote 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= для поиска сообщения в теме.

Поделиться сообщением


Ссылка на сообщение

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

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...