История изменений
Исправление deep-purple, (текущая версия) :
<div id="comment-{commentId}"
class="comment">
<!--
если будут проблемы со скроллом
при использовании айдишника блока,
при возврате на предыдущую страницу,
всё же стОит проставить это:
<a name="comment-{commentId}"></a>
-->
<div class="comment-text">Текст комментария</div>
<a href="/forum/{forumName}/{topicId}[/page{pageNum}]?cid={commentId}#comment-{commentId}">Ссылка</a>
</div>
Квадратные скобки означают, что этот кусок урл не обязателен, если страница и так первая.
Часть урл «cid={commentId}» обеспечивает уникальность ссылки в пределах страницы для любого пользователя, вне зависимости от форума, топика и номера страницы. А уж все вместе эти параметры — тем более.
Ссылка формируется как есть с учётом настроек того пользователя, который просматривает эту страницу.
Если пользователь находится на этой странице и кликает на ссылку, то браузер совершает переход по якорю в пределах страницы не делая запросов к сайту.
Если пользователь скопировал эту «ссылку» и поместил её в любом месте, то, браузеры других пользователей, кликнувших на эту ссылку, в случае разных настроек кол-ва комментариев на страницу, будут обращаться к сайту (ЛОРу). Да и в любом случае, при получении этой ссылки каким-либо, отличным от первого, способом, браузер будет делать запрос.
Запросы обрабатывает единая точка входа: «/forum»(?).
Бекенд, получив следующие параметры:
forumName
topicId
pageNum
commentId
проверяет наличие форума, топика и комментария, и их контекст (удалён, не достаточно прав доступа и прочее что нужно).
Если контекст не удался — отвечаем как отвечали (404 и что там ещё есть/было).
Если контекст удался — рассчитываем номер страницы в соответствии с настройками обратившегося к бекенду пользователя (в том числе гостя или поискового бота).
Если старый (указанный в гет запросе) номер страницы равен рассчитаному — рендерим хтмл-страницу как обычно.
Если номер страницы не равен рассчитаному — формируем урл для редиректа:
/forum/{forumName}/{topicId}[/page{NEWPAGENUM}]?cid={commentId}#comment-{commentId}
Пользователь переходит редиректом на правильную для него страницу и его браузер корректно скроллит до якоря.
Никаких жаваскриптов с подменой истории не требуется.
Исправление deep-purple, :
<div id="comment-{commentId}"
class="comment">
<!--
если будут проблемы со скроллом
при использовании айдишника блока,
при возврате на предыдущую страницу,
всё же стОит проставить это:
<a name="comment-{commentId}"></a>
-->
<div class="comment-text">Текст комментария</div>
<a href="/forum/{forumName}/{topicId}[/page{pageNum}]?cid={commentId}#comment-{commentId}">Ссылка</a>
</div>
Квадратные скобки означают, что этот кусок урл не обязателен, если страница и так первая.
Часть урл «cid={commentId}» обеспечивает уникальность ссылки в пределах страницы для любого пользователя, вне зависимости от форума, топика и номера страницы. А уж все вместе эти параметры — тем более.
Ссылка формируется как есть с учётом настроек того пользователя, который просматривает эту страницу.
Если пользователь находится на этой странице и кликает на ссылку, то браузер совершает переход по якорю в пределах страницы не делая запросов к сайту.
Если пользователь скопировал эту «ссылку» и поместил её в любом месте, то, браузеры других пользователей, кликнувших на эту ссылку, в случае разных настроек кол-ва комментариев на страницу, будут обращаться к сайту (ЛОРу).
Запросы обрабатывает единая точка входа: «/forum»(?).
Бекенд, получив следующие параметры:
forumName
topicId
pageNum
commentId
проверяет наличие форума, топика и комментария, и их контекст (удалён, не достаточно прав доступа и прочее что нужно).
Если контекст не удался — отвечаем как отвечали (404 и что там ещё есть/было).
Если контекст удался — рассчитываем номер страницы в соответствии с настройками обратившегося к бекенду пользователя (в том числе гостя или поискового бота).
Если старый (указанный в гет запросе) номер страницы равен рассчитаному — рендерим хтмл-страницу как обычно.
Если номер страницы не равен рассчитаному — формируем урл для редиректа:
/forum/{forumName}/{topicId}[/page{NEWPAGENUM}]?cid={commentId}#comment-{commentId}
Пользователь переходит редиректом на правильную для него страницу и его браузер корректно скроллит до якоря.
Никаких жаваскриптов с подменой истории не требуется.
Исходная версия deep-purple, :
<div id="comment-15671546"
class="comment">
<!--
если будут проблемы со скроллом
при использовании айдишника блока,
при возврате на предыдущую страницу,
всё же стОит проставить это:
<a name="comment-15671546"></a>
-->
<div class="comment-text">Текст комментария</div>
<a href="/forum/{forumName}/{topicId}[/page{pageNum}]?cid={commentId}#comment-{commentId}">Ссылка</a>
</div>
Квадратные скобки означают, что этот кусок урл не обязателен, если страница и так первая.
Часть урл «cid={commentId}» обеспечивает уникальность ссылки в пределах страницы для любого пользователя, вне зависимости от форума, топика и номера страницы. А уж все вместе эти параметры — тем более.
Ссылка формируется как есть с учётом настроек того пользователя, который просматривает эту страницу.
Если пользователь находится на этой странице и кликает на ссылку, то браузер совершает переход по якорю в пределах страницы не делая запросов к сайту.
Если пользователь скопировал эту «ссылку» и поместил её в любом месте, то, браузеры других пользователей, кликнувших на эту ссылку, в случае разных настроек кол-ва комментариев на страницу, будут обращаться к сайту (ЛОРу).
Запросы обрабатывает единая точка входа: «/forum»(?).
Бекенд, получив следующие параметры:
forumName
topicId
pageNum
commentId
проверяет наличие форума, топика и комментария, и их контекст (удалён, не достаточно прав доступа и прочее что нужно).
Если контекст не удался — отвечаем как отвечали (404 и что там ещё есть/было).
Если контекст удался — рассчитываем номер страницы в соответствии с настройками обратившегося к бекенду пользователя (в том числе гостя или поискового бота).
Если старый (указанный в гет запросе) номер страницы равен рассчитаному — рендерим хтмл-страницу как обычно.
Если номер страницы не равен рассчитаному — формируем урл для редиректа:
/forum/{forumName}/{topicId}[/page{NEWPAGENUM}]?cid={commentId}#comment-{commentId}
Пользователь переходит редиректом на правильную для него страницу и его браузер корректно скроллит до якоря.
Никаких жаваскриптов с подменой истории не требуется.