【问题标题】:Twig iterate/read and get value - OctobercmsTwig 迭代/读取并获取值 - Octobercms
【发布时间】:2017-06-18 15:11:20
【问题描述】:

大家好,这是一个非常基本的问题,有机会在 stackoverflow 上查看几个问题,但都是徒劳的。

所以我有一个名为“WordoftheDayfromDB”的树枝变量,我通过 laravel pluck 方法在我的控制器中查询 DB 后从一些数据传递到该变量。控制器存在于 octobercms 的插件中。变量的内容如下所示

{% set WordoftheDayfromDB = __SELF__.words %}
{{WordoftheDayfromDB}} # this output below object
["{\"id\":4,\"word_tr\":\"parazit\",\"slug_tr\":\"parazit\",\"word_gr\":\"\\u03c0\\u03b1\\u03c1\\u03ac\\u03c3\\u03b9\\u03c4\\u03bf\",\"slug_gr\":\"parasito\",\"pubordraft\":1,\"created_at\":\"2017-06-07 13:04:57\",\"updated_at\":\"2017-06-07 13:04:57\",\"deleted_at\":null,\"word_image\":\"\\\/cropped-images\\\/image2.jpg\",\"typeswb_id\":0}"]

谁能告诉我一种从 about twig 变量中提取键和值的方法。 我已经尝试过的是:

<pre> {{WordoftheDayfromDB.id}}</pre>

{% for item in WordoftheDayfromDB %} {{item.word_tr}} {% endfor %}

还有一些使用{% if WordoftheDayfromDB is iterable %} 的组合。 我会非常感谢你的回答! 感谢您阅读我的问题。

【问题讨论】:

    标签: php laravel twig octobercms


    【解决方案1】:

    您可以使用for 循环,这样键和值都可以像这样访问:

    {% for key, value in WordoftheDayfromDB %}
        <li>{{ key }}: {{ value }}</li>
    {% endfor %}
    

    【讨论】:

    • 嗨,谢谢你的回答,我也试过了,但值会导致整个数组像这样``` 0: {"id":4,"word_tr":"parazit","slug_tr" :"parazit","word_gr":"\u03c0\u03b1\u03c1\u03ac\u03c3\u03b9\u03c4\u03bf","slug_gr":"parasito","pubordraft":1,"created_at":"2017-06 -07 13:04:57","updated_at":"2017-06-07 13:04:57","deleted_at":null,"word_image":"\/cropped-images\/image2.jpg"," typeswb_id":0}```
    • 你确定它是一个对象,而不是一个 json 字符串?
    【解决方案2】:

    所以答案比我预期的还要复杂!我不得不沮丧地进行大量挖掘才能真正了解这件事的真相。 首先,我正在做一项 cron 工作,我将模型中的数据保存在文本类型字段中。这就是为什么如果你看到上面的结果,即

    {% set WordoftheDayfromDB = __SELF__.words %}
    {{WordoftheDayfromDB}} # this output below object
    
    ["{\"id\":4,\"word_tr\":\"parazit\",\"slug_tr\":\"parazit\",\"word_gr\":\"\\u03c0\\u03b1\\u03c1\\u03ac\\u03c3\\u03b9\\u03c4\\u03bf\",\"slug_gr\":\"parasito\",\"pubordraft\":1,\"created_at\":\"2017-06-07 13:04:57\",\"updated_at\":\"2017-06-07 13:04:57\",\"deleted_at\":null,\"word_image\":\"\\\/cropped-images\\\/image2.jpg\",\"typeswb_id\":0}"]
    

    它输出一个 JSON 字符串,可惜不能迭代或用它做一些事情。

    为了解决这个问题,

    • 在 twig 中创建 json_decode 过滤器。

    • 将过滤器应用于数组的值部分。

    • 使用 variable[keyname] 方法访问数组的单个值。

    我创建了一个树枝过滤器json_decode 创建过滤器见Link

    在 10 月份,创建新的 twig 扩展相当容易,只需在 Plugin.php 中提供 registerMarkupTags 方法,过滤器数组指向名称和函数名称。请参阅此链接以在 octobercms here 中扩展树枝

    现在,我们正在等待的部分,如何获取值并在 twig 模板中显示它们。通过使用上面相同的示例,它将在这里。这就是我所做的

    {% set wordoftheday = __SELF__.words %}
    {% for key, value in wordoftheday %}
      {% set decoded = value|json_decode %}
      # to get the indvisual values
      {{ decoded['id'] }} 
      {{ decoded['created_at'] }} 
    {% endfor %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-09
      • 2018-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多