LINUX.ORG.RU

История изменений

Исправление 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}

Пользователь переходит редиректом на правильную для него страницу и его браузер корректно скроллит до якоря.

Никаких жаваскриптов с подменой истории не требуется.