索引页面从所有帖子中检索变量

Index page retrieve variable from all posts

我有一个基于 Jekyll 的博客,每个 post 的前端都有一些位置数据。

例如:

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

我想检索我所有 post 中的所有位置,以便我可以将它们绘制在地图上。目前,我通过将值传递到我从插件功能 here 修改的 javascript 函数中,在 post 顶部显示地图上单个 post 的所有位置.

例如: function () { jekyllMapping.loadScript( {{ page.mapping | jsonify }} ) };

我无法从所有 post 中检索所有位置以传递给与 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 %}

%Capture% 在 return 看来是一个字符串而不是数组元素对象,因此我不得不 json 验证循环内的输出。最终输出很接近,但没有给我根 json 元素,也不是数组,因此我无法在 javascript 中对其进行迭代。我可以像这样连接 "{\"locations\":[" + {{ travel_locations }} + "]}" 但它当然只是被视为一个大的转义字符串而不是 json 对象。

我也试过将捕获结果拆分回一个数组,但仍然没有成功。 {% assign my_locations = "{{ travel_locations | split:',' | jsonify }} %}

我希望我遗漏了一些非常简单的东西,可以从类别中的所有 post 中检索变量值?

此外,我将博客作为静态站点托管在 github 页面上,因此插件是不可能的。

您可以使用assign

创建一个空数组

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

然后填写你的位置

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

你现在有了一个包含你所有位置的数组,准备好进行 jsonified。

编辑: 此代码将 运行 当前 Github 页的 Jekyll 版本:2.4.0

为了与 Github Pages 的 jekyll 版本同步工作,您需要创建一个包含

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

然后你做:

gem bundler install
bundle install
bundle exec jekyll serve

Bing! http://0.0.0.0:4000/是一切都ok的地方!