Могу ли я получить доступ к индексу порядка виджетов в Apostrophe CMS по отношению к предыдущему и следующему отображаемым виджетам? - PullRequest
0 голосов
/ 25 апреля 2019

Я надеюсь, что кто-то может помочь.

На моей домашней странице у меня только один виджет типа feature-widgets, и у меня их шесть, один за другим. Я хочу добавить стрелку вниз в каждый виджет, который ссылается на следующий, я предполагаю, что самый простой способ - использовать индекс порядка виджетов, например, #section-{{ index + 1 }}.

Есть идеи, как получить доступ к текущему индексу заказа виджетов?

Я нашел способ сделать это, просматривая data.page.home.items на шаблоне страницы, но это не лучшее решение.

Спасибо!

1 Ответ

1 голос
/ 27 апреля 2019

Поскольку Apostrophe не передает эту информацию отдельным виджетам на уровне шаблона и даже не сообщает виджетам что-либо о чем-то внешнем для них, но информация видна в DOM, вы можете использовать решение с использованием внешнего интерфейса.Поскольку ссылки не имеют значения SEO, добавление их с помощью JavaScript на стороне клиента не повредит.

Вы можете написать play метод для вашего типа виджета, который делает это.Это должно сделать это:

// in lib/modules/feature-widgets/public/js/always.js
apos.define('feature-widgets', {
  extend: 'apostrophe-widgets',
  construct: function(self, options) {
    self.play = function($widget, data, options) {
      var $anchor = $('<a data-my-anchor id="' + apos.utils.generateId() + '"></a>');
      $widget.append($anchor);
      var $next = $widget.closest('.apos-area-widget-wrapper').next().find('[data-apos-widget]:first');

      if (!$next.length) {
        return;
      }
      var $link = $('<a data-next href="#">Next</a>');
      $widget.append($link);
      $link.on('click', function() {
        location.hash = '#' + $next.find('[data-my-anchor]').attr('id');
        return false;
      })
    }
  }
})

Обратите внимание, что нам не нужно знать, что такое индексы, мы просто назначаем якоря с идентификаторами для всех виджетов и обновляем хэш URL-адреса по мере необходимости на«следующие» клики.

...