Grav - 将 JSON 数据从插件传递到 Twig
Grav - Pass JSON data from Plugin to Twig
我想从网络服务中检索 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 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());
}
}
/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 模板中:
{{ get_child_category() }}
但是:
- 我可以获得
$json
字符串,但是我如何传递整个 JSON 数据并单独检索字段?
在我的例子中,如果我使用:
<span>{{ get_child_category() }}</span>
在 Twig 中我得到以下字符串:
[{"id": 11, "name": "Racoons"}, {"id": 10, "name": "Cats"}]
我将如何访问 Twig 中的单个记录,包括遍历 JSON 数组和每个记录的单个字段提取(id
、name
)?
您的函数正在返回一个数组。你需要遍历它。这是来自 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>
我想从网络服务中检索 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 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());
}
}
/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 模板中:
{{ get_child_category() }}
但是:
- 我可以获得
$json
字符串,但是我如何传递整个 JSON 数据并单独检索字段?
在我的例子中,如果我使用:
<span>{{ get_child_category() }}</span>
在 Twig 中我得到以下字符串:
[{"id": 11, "name": "Racoons"}, {"id": 10, "name": "Cats"}]
我将如何访问 Twig 中的单个记录,包括遍历 JSON 数组和每个记录的单个字段提取(id
、name
)?
您的函数正在返回一个数组。你需要遍历它。这是来自 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>