索引页检索变量从所有的帖子

Index page retrieve variable from all posts

本文关键字:检索 变量 索引      更新时间:2023-09-26

我有一个基于Jekyll的博客,在每个帖子的前面都有一些位置数据。

例如:

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

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

例如

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

我有麻烦检索所有的位置从所有的帖子传递到相同的功能json。

I have try:

{% 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%似乎作为字符串而不是数组元素对象返回,因此我被迫在循环内对输出进行jsonify。最后的输出很接近,但没有给我根json元素,也不是一个数组,所以我不能在javascript中迭代它。我可以像这样连接"{'"locations'":[" + {{ travel_locations }} + "]}",但它当然会被当作一个大转义字符串,而不是json对象。

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

我希望我错过了一些非常简单的东西,从一个类别中的所有帖子检索变量值?

另外,我把博客作为github页面上的静态站点,所以插件是不可能的。

您可以使用assign

创建一个空数组

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

然后填充你的位置

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

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

编辑:此代码将运行在当前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 !