Рейтинг:-3

Как отслеживать недавно просмотренные узлы с помощью JavaScript на полностью кэшированном веб-сайте?

флаг in
NSp

Я хочу создать блок недавно просмотренных узлов на веб-сайте, который полностью кэшируется с помощью модуля Boost (он сохраняет статическую HTML-страницу для каждого запроса на веб-сайте). Я не хочу отключать Boost и повторно кэшировать страницу каждый раз, когда этот блок обновляется, вместо этого мне интересно, можно ли здесь использовать JavaScript. Есть ли способ сделать это?

Kevin avatar
флаг in
Короткий ответ, да? Вам нужно будет связать маршрут меню и JS с ajax, который запускает API статистики узла (я предполагаю, что это то, о чем вы говорите).
NSp avatar
флаг in
NSp
@Kevin Я думал о клиентском подходе с использованием некоторого отслеживания посещенных страниц, которые фильтруются по адресу страницы (если в JS есть такая механика). Но я буду рад любому доступному методу, так как едва ли стоит писать его с нуля.
Kevin avatar
флаг in
Однако эти данные все же должны где-то храниться, верно? Или вы говорите, что просто используете cookie или HTML5 LocalStorage? На тот момент это был в основном JS, а не Drupal. Единственной частью Drupal может быть получение этого вывода на странице, что вы, возможно, в любом случае могли бы сделать с написанием JS dom.
Рейтинг:0
флаг in
NSp

Не модуль, но все же лучше, чем ничего. Обратите внимание, что некоторые части скрипта поддерживают тему.

Это идет к нижней части node--[type].tpl.php:

<?php if ($page): ?>
  <script type="text/javascript">updateRecentlyVisited();</script>
<?php endif; ?>

Это к новому блоку (текстовый формат блока не должен изменять теги):

<script type="text/javascript">
var thisBlock = document.getElementById('[PUT BLOCK ID HERE]');
if (currentlyStored) {
  var recentlyVisited = '<ul">';
  for (var i = 0; i < currentlyStored.length; i++) {
    recentlyVisited += '<li><a href="' + currentlyStored[i][0] + '">' + currentlyStored[i][1] + '</a></li>';
  }
  recentlyVisited += '</ul>';

  thisBlock.innerHTML = recentlyVisited;
}
else
   thisBlock.remove();
</script>

И script.js прикрепить в theme.info

var currentStored = JSON.parse(localStorage.getItem('recentlyVisited'));

функция updateRecentlyVisited() {
    вар maxLinks = 20;
    var currentPage = новый массив (document.URL, document.getElementsByClassName('node-title').item(0).textContent);

    если (в настоящее время сохранено)        
        for (var i = 0; i < currentStored.length; i++) {
            if (currentlyStored[i][0] == currentPage[0]) {
                В настоящее время Сохранено.splice([i],1);
                сломать;
            }
        }
    еще
        в настоящее время сохранено = новый массив();
    В настоящее время Сохранено. unshift (текущая страница);
    если (currentlyStored.length > maxLinks)
        в настоящее времяСохранено.поп();
        
    localStorage.setItem('recentlyVisited', JSON.stringify(currentlyStored));
}

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.