2015-06-01 3 views
1

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

Например:

mapping: 
    locations: 
    - title: Times Square 
     latitude: 40.758885 
     longitude: -73.985134 
    - title: Central Park 
     latitude: 40.782841 
     longitude: -73.965350 

Я хотел бы получить все места во всех моих постах, поэтому я могу построить их на карте. В настоящее время я отображаю все местоположения на карте для одного сообщения в верхней части этого сообщения, передавая значения в функцию javascript, которую я модифицировал из функциональности плагина here.

Например: function() { jekyllMapping.loadScript({{ page.mapping | jsonify }}) };

У меня возникли проблемы с извлечением всех мест со всех постов перейти к одной и той же функции, как JSON.

Я попытался:

{% capture travel_locations %} 
{% for post in site.categories.travel %} 
{% for location in post.mapping.locations %} 
{{ location | jsonify }}{% unless forloop.last %},{% endunless %}{% endfor %} 
{% unless forloop.last %},{% endunless %}{% endfor %} 
{% endcapture %} 

% Захват% появляется вернуться в строке не объект элемента массива, поэтому я вынужден jsonify выхода внутри цикла. Конечный результат близок, но не дает мне никакого элемента root json и не является массивом, поэтому я не могу его перебирать в javascript. Я могу конкатенировать вот так: "{\"locations\":[" + {{ travel_locations }} + "]}", но он, конечно, просто рассматривается как большая экранированная строка, а не объект json.

Я также попытался расщепить результат захвата обратно в массив, но все равно не повезло. {% assign my_locations = "{{ travel_locations | split:',' | jsonify }} %}

Надеюсь, что мне не хватает чего-то действительно простого для извлечения значений переменных из всех сообщений в категории?

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

ответ

2

Вы можете использовать assign

Создать пустой массив

{% assign locations = "" | split: "" %} 

Затем заполнить его с места

{% for post in site.categories.travel %} 
    {% for location in post.mapping.locations %} 
    {% assign locations = locations | push: location %} 
    {% endfor %} 
{% endfor %} 

Теперь у вас есть массив всех местах, готовы быть jsonified.

Edit: Этот код будет работать на текущих страницах GitHub Джекил версии: 2.4.0

Для того, чтобы работать синхронно с GitHub пажеского Джекила версией, вам нужно создать Gemfile, содержащий

source 'https://rubygems.org' 
gem 'github-pages' 

Тогда вы:

gem bundler install 
bundle install 
bundle exec jekyll serve 

Bing! http://0.0.0.0:4000/ - это место, где все в порядке!

+0

А, похоже, я был слишком усложнён и путался, используя захват. Я просто попробовал ваш ответ, но в результате получается пустой массив? {% assign locations = "" | split: ""%} {% для публикации в site.categories.travel%} \t {% для местоположения в post.mapping.locations%} \t \t {% assign location = locations | push: location%} \t {% endfor%} {% endfor%} –

+0

Он работает здесь. Возможно, у вас есть проблема с именем переменной. –

+0

Это определенно синтаксис для обработки массивов? Если я добавлю счетчик в свой внутренний вид, он будет зациклировать правильное количество раз: {% assign counter = 0%} {% for post in site.categories.travel%} \t {% для местоположения в должности .mapping.locations%} \t \t {% assign counter = counter | плюс: 1%} \t {% endfor%} {% endfor%} console.log ({{counter}}); –

Смежные вопросы