Квадратное пространство:родительская область запроса

#squarespace

Вопрос:

Я использую платформу разработчиков Squarespace.

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

Пример фрагмента:

 lt;div class="infosection" data-info-section="Series"gt; lt;p id="seriesTitle"gt; {customContent.seriesName} lt;/pgt; lt;p id="seriesBlurb"gt; lt;squarespace:query collection="series-1" category="{customContent.seriesName}"gt; {# No apparent way to break out of query tag scope, have to ghetto rig a filter with 'category' attribute} lt;scriptgt;console.log({@|json-pretty})lt;/scriptgt; {.section items.0} {excerpt} {.end} lt;/squarespace:querygt; lt;/pgt; lt;/divgt;  

Ответ №1:

К сожалению, вы правы в том, что нет способа получить доступ к данным извне запроса. Аналогично, нет способа передать данные в запрос ( var например, с помощью директивы) извне. Это прискорбно, потому что это часто было бы лучшим вариантом использования var директивы, но это просто не работает таким образом.

Таким образом, использование запроса с тегом и/или фильтром категорий действительно является единственным способом сделать это в системе шаблонов JSON-T (за исключением запросов JSONP, см. Ниже).

Другая альтернатива — использовать JavaScript. Почти каждая страница на вашем сайте Squarespace может быть запрошена в виде данных JSON с помощью добавленных параметров /series-1?format=json . Таким образом, вы можете сделать запрос AJAX и использовать данные таким образом. Или сделайте запрос JSONP на URL-адрес, например:

 lt;scriptgt;  function mycallbackFn(jsonData) {  // do stuff with the jsonData here. You could even build your own template literal if you only need to support modern browsers.  } lt;/scriptgt;  lt;script src="/{fullUrl}/?format=jsonamp;callback=mycallbackFn"gt;lt;/scriptgt;  

Теоретически вы могли бы вставить это прямо в свой JSON-T. Однако, если прибегнуть к JavaScript, подход AJAX, скорее всего, более удобен в обслуживании. Содержимое также будет нелегко индексироваться, поскольку оно будет динамически добавляться.

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

(В этом примере предполагается, что элементам назначена только одна категория.)

 lt;squarespace:query collection="mycollectionslug" limit="99"gt; {.repeated section items}  {.repeated section categories}  {.equal?:@:"My Category 1"}  lt;pgt;Content specific to my category 1.lt;/pgt;  {.end}  {.or equal?:@:"My Category 2"}  lt;pgt;Content specific to my category 2.lt;/pgt;  {.end}  {# etc.}  {.end} {.end lt;/squarespace:querygt;  

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

Комментарии:

1. Спасибо! Я пытался использовать директиву var до этого и был удивлен, что это не сработало. Однако мне нравится идея использовать URL-адрес. Надеюсь, Squarespace даст платформе разработчиков немного больше контроля в будущем, чтобы нам не приходилось постоянно пробиваться через, казалось бы, простые задачи.