О наследовании контента в деревьях страниц в Apostrophe CMS - PullRequest
0 голосов
/ 16 января 2019

Я бы хотел, чтобы мои проекты Apostrophe повторно использовали некоторые виджеты вниз по иерархии страниц, подобно тому, как работает верхний, нижний или нижний колонтитул или вертикальная навигация, особенно последняя. Однако я бы не хотел использовать data.global, поскольку хочу, чтобы этот контент появлялся только в поддереве страницы, которую я добавляю, а не на всех страницах. Например, это позволило бы мне определить «разделы» на веб-сайте с некоторыми общими общими верхними и нижними колонтитулами независимо от шаблона.

Другим вариантом использования будет возможность создания многосайтовых проектов без модуля apostrophe-multisite, который прекрасно работает, если вы не хотите делиться контентом на сайтах, но в некоторых случаях мне нужно делиться контентом, например фрагменты и изображения (например, для спонсоров или ссылки на них без абсолютного URL, но с объединением) можно найти на многих сайтах.

Могу ли я достичь этого, в области шаблона (или где-то, где я действительно не имею понятия), запрашивая эту область у предков и включая их содержимое перед областью в области фактической страницы? Если да, имеет ли это смысл с точки зрения Apostrophe или такие рекурсивные запросы сильно повлияют на производительность?

1 Ответ

0 голосов
/ 17 января 2019

Да, вы можете делать то, что просите.

По умолчанию data.page._ancestors не вызывает загрузчики виджетов для областей в предках по причинам производительности, как вы и предполагали.

Однако вы можете выбрать следующее:

// in lib/modules/apostrophe-pages/index.js of your own project
// (do NOT modify it in node_modules/apostrophe!)

module.exports = {
  // other configuration here, then...
  filters: {
    ancestors: {
      children: {
        areas: [ 'thumbnail' ]
      }
    }
  }
};

Это вызовет загрузчики виджетов специально для области с именем thumbnail для каждого предка, но не для других. Это намного лучше для производительности, чем установка areas: true, но вы можете сделать это тоже, если действительно хотите подождать!

...