Jump to content

Пометить тему прочитанной в активности (Mark this topic read) 4.6.4

Featured Replies

Posted

Не могу сказать, что перерыл абсолютно весь интернет, но на поиск решения потрачено уже порядка 10 часов
В общем, чего хочу добиться, чтобы в активности(https://ipbmafia.ru/discover/) можно было бы помечать темы как прочитанные, частично, мне этого удалось добиться, выводом этого блока предпросмотра над сообщением:
image.png.4f3bf5c46ef6144df37e8824dfdd2057.png
И оно вполне себе работает, но на телефонах нет курсора, чтобы его навести на название темы, поэтому решил кнопочку "Mark this topic read" вывести под пост:
image.png.a0d340f7b8a8902f99c8fc9bb03e35d7.png
Но ссылка (идентичная той, что в блоке предпросмотра) содержащаяся в "Mark this topic read" просто перекидывает в тему

Собственно вопрос, почему одна и та же ссылка работает по-разному и как это можно исправить
Вот код для searchResult с выводом блока предпросмотра и нерабочим "Mark this topic read":

Показать контент

Я понимаю, что это не очень хороший код, но по другому я не умею

  • Author

После нажатия на ссылку в блоке предпросмотра, срабатывает этот js код:
 

Показать контент

Его по идее можно прикрутить к этой кнопке
image.png.a0d340f7b8a8902f99c8fc9bb03e35d7.png
Вот только пока не понимаю как, может кто-то делал что-то подобное?

Для того, чтобы сработал скрипт, вы должны в родительском диве прописать (data-controller=) скрипт, который будет вызываться при нажатии на ссылку и передать в него параметры (например, data-topicid - номер темы). А в ссылке в свойстве data-action прописать название функции, которая должна вызваться. Если не прописать скрипт, будет просто переход по ссылке, что и происходит. 

<div class="..." data-controller="forums.front.forum.hovercard" data-topicid="3322">
   <a href="..." title="Отметить тему прочитанной" data-action="markTopicRead">Отметить тему прочитанной</a>
</div>                            

  • Author

Desti Огромное спасибо, получилось, правда я копировал весь div блока предпросмотра и встраивал в пост которому он принадлежит(через inspector Ctrl+Shift+i) и это не работало, думал, что не в этом дело, возможно data-controller и data-topicid при старте страницы инициализируются как активные или типа того
(плюсик поставлю позже, как только наберу необходимое кол-во постов)

topicId должен  динамически присваиваться в шаблоне, а controller статичен ...data-topicID='{$topic->tid}'...

В предложенном виде это нормально для всплывающего окна, но для больших списков не гут, лучше перенести data-topiciID в ссылку, а в общем диве оставить только controller. 

 

Нет, номер топика будет определяться при генерации страницы. Но если на каждую строку генерить пару data-controller и data-action, то в исходниках будет много лишнего хлама, поэтому data-controller выносят за пределы цикла перебора топиков и получается что-то типа

<div class="..." data-controller="forums.front.forum.hovercard">
   <a href="..." title="Отметить тему прочитанной" data-action="markTopicRead" data-topicid="3322"">Отметить тему прочитанной</a>
   <a href="..." title="Отметить тему прочитанной" data-action="markTopicRead" data-topicid="3323">Отметить тему прочитанной</a>
   <a href="..." title="Отметить тему прочитанной" data-action="markTopicRead" data-topicid="3324">Отметить тему прочитанной</a>
   <a href="..." title="Отметить тему прочитанной" data-action="markTopicRead" data-topicid="3325">Отметить тему прочитанной</a>
</div>  

Обработчик должен понимать, откуда ему брать данные. Если этот атрибут живет в родительском диве, то он доступен в скрипте по this.scope.attr('data-topicID'), а если в ссылке, то по $( e.currentTarget ).attr('data-topicID'), т.е. надо будет немного изменить JS, чтобы он брал нужные данные для работы со списком.

  • Author

Я слишком "прямо" вас изначально понял :bv:

  On 06.08.2021 at 16:09, Desti said:

в родительском диве прописать (data-controller=)

Я взял и <a></a> обернул в div  ->  <div data-controller="forums.front.forum.hovercard"><a href="...">...</a></div>
теперь поправил, просто нашёл div в который встраивается ссылка и в него добавил data-controller
Спасибо вам ещё раз

  • 1 месяц спустя...

Всем привет! Чтобы не поднимать новую тему напишу сюда, так как у меня похожая ситуация. Если кратко, хочу сделать так, чтобы при нажатии на иконку темы (см.скрин) к теме применялась функция "Прочитано", а не пройти к непрочитанным комментариям как сейчас, поскольку такая функция уже имеется по дефолту при нажатии названии самой темы. Подскажите как можно это реализовать?

Screenshot 2021-09-25 at 15-39-07 Саранский городской форум.png

Edited by deeverbs

@by_ix
Скрин с блока Recent Topics, и в списке разделов, хотелось бы сделать чтобы при нажатии он в тему не провалился, а делал её только прочитанной)

Edited by deeverbs

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.