Перейти к публикации
View in the app

A better way to browse. Learn more.

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

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

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

Сейчас на странице 0

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

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.