首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从插件到Twig的Grav -传递JSON数据

从插件到Twig的Grav -传递JSON数据
EN

Stack Overflow用户
提问于 2018-02-28 11:26:43
回答 1查看 797关注 0票数 1

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

我翻阅了文档,发现我可以使用这个选项

我遵循了文档中的步骤,并编写了这个插件:

代码语言:javascript
复制
/var/www/html/grav/user/plugins/category# ls
category.php  category.yaml  twig
代码语言:javascript
复制
/var/www/html/grav/user/plugins/category# cat category.yaml
enabled: true
代码语言:javascript
复制
/var/www/html/grav/user/plugins/category# cat category.php
<?php
namespace Grav\Plugin;
use \Grav\Common\Plugin;
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());
    }
}
代码语言:javascript
复制
/var/www/html/grav/user/plugins/category# cat twig/CategoryTwigExtension.php
<?php
namespace Grav\Plugin;
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模板中:

代码语言:javascript
复制
{{ get_child_category() }}

但是:

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

就我而言,如果我用:

代码语言:javascript
复制
<span>{{ get_child_category() }}</span>

在Twig中,我得到以下字符串:

代码语言:javascript
复制
[{"id": 11, "name": "Racoons"}, {"id": 10, "name": "Cats"}]

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-02 05:17:30

您的函数返回一个数组。你需要迭代一遍。下面是Grav文档中的一个示例。

代码语言:javascript
复制
<ul>
    {% for cookie in cookies %}
    <li>{{ cookie.flavor }}</li>
    {% endfor %}
</ul>

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

代码语言:javascript
复制
<ul>
    {% for child in get_child_category() %}
    <li>{{ child.name }}</li>
    {% endfor %}
</ul>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49028474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档