Grav - 将插件中的JSON数据传递给Twig

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Grav - 将插件中的JSON数据传递给Twig相关的知识,希望对你有一定的参考价值。

我想从Web服务中检索JSON并将其合并到Twig模板中。

我浏览了文档,发现我可以使用this option

我已经按照文档中的步骤操作了,我准备了这个插件:

/var/www/html/grav/user/plugins/category# ls
category.php  category.yaml  twig
/var/www/html/grav/user/plugins/category# cat category.yaml
enabled: true
/var/www/html/grav/user/plugins/category# cat category.php
<?php
namespace GravPlugin;
use GravCommonPlugin;
class CategoryPlugin extends Plugin
{
    public static function getSubscribedEvents()
    {
        return [
            'onTwigExtensions' => ['onTwigExtensions', 0]
        ];
    }
    public function onTwigExtensions()
    {
        require_once(__DIR__ . '/twig/CategoryTwigExtension.php');
        $this->grav['twig']->twig->addExtension(new CategoryTwigExtension());
    }
}
/var/www/html/grav/user/plugins/category# cat twig/CategoryTwigExtension.php
<?php
namespace GravPlugin;
class CategoryTwigExtension extends Twig_Extension
{
        public function getName()
        {
                return 'CategoryTwigExtension';
        }
        public function getFunctions()
        {
                return [
                        new Twig_SimpleFunction('get_child_category', [$this, 'getChildCategoryFunction'])
                ];
        }
        public function getChildCategoryFunction()
        {
                $json = file_get_contents('http://localhost:8888/get_child_category/2/es_ES');
                $obj = json_decode($json);
                return $json;
        }
}

然后我在Twig模板中包含以下函数调用:

{{ get_child_category() }}

但:

  • 我可以获得$json字符串,但是如何传递整个JSON数据并单独检索字段?

在我的情况下,如果我使用:

<span>{{ get_child_category() }}</span>

在Twig我得到以下字符串:

[{"id": 11, "name": "Racoons"}, {"id": 10, "name": "Cats"}]

我如何访问Twig中的单个记录,包括对JSON数组的迭代以及每个记录的单个字段提取(idname)?

答案

你的函数正在返回一个数组。你需要迭代它。以下是Grav文档中的示例。

<ul>
    {% for cookie in cookies %}
    <li>{{ cookie.flavor }}</li>
    {% endfor %}
</ul>

您示例中的简单名称列表是一个简单的编辑。

<ul>
    {% for child in get_child_category() %}
    <li>{{ child.name }}</li>
    {% endfor %}
</ul>

以上是关于Grav - 将插件中的JSON数据传递给Twig的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将数据传递给css文件?

Twig 将参数作为 JSON 传递给 JS

将 Json 数据传递给handsontable

将json数据传递给onclick jquery函数

将 JSON 数据传递给控制器​​方法而无需声明对象

将 JSON 数据传递给 Spring MVC 控制器