【问题标题】:Silverstripe: Convert twitter JSON string to Dataobject to loop though in templateSilverstripe:将 twitter JSON 字符串转换为 Dataobject 以在模板中循环
【发布时间】:2013-11-22 04:16:09
【问题描述】:

我正在使用 twitter API 来获取我想通过我的模板输出的时间线。我得到这样的提要:

public static function getTwitterFeed(){
    $settings = array(
        'oauth_access_token' => "xxx",
        'oauth_access_token_secret' => "xxx",
        'consumer_key' => "xxx",
        'consumer_secret' => "xxx"
    );

    $url = 'https://api.twitter.com/1.1/statuses/user_timeline.json';
    $getfield = '?screen_name=xxx&count=5';
    $requestMethod = 'GET';
    $twitter = new TwitterAPIExchange($settings);
    $returnTwitter = $twitter->setGetfield($getfield)
                 ->buildOauth($url, $requestMethod)
                 ->performRequest();
    return json_decode($returnTwitter);

}

这会返回一个对象数组(推文是对象),我希望能够像这样在我的模板中循环遍历它:

<% loop TwitterFeed %>
    <h4>$created_at</h4>
    <p>$text</p>
<% end_loop %>

正如我上面所说,循环输入一次,但没有识别出任何值。我怎样才能做到这一点?

【问题讨论】:

    标签: json twitter silverstripe


    【解决方案1】:

    SilverStripe 中的DataObjects 代表数据库中的一条记录,在您的情况下,您使用ArrayData
    请改用$array = Convert::json2array($returnTwitter)$array = json_decode($returnTwitter, true)
    并查看https://stackoverflow.com/a/17922260/1119263了解如何使用ArrayData

    【讨论】:

    • 太棒了。谢谢!你让我朝着正确的方向前进。我已经添加了我的解决方案。干杯
    • 很高兴您解决了这个问题,请将答案标记为“关闭”此问题的解决方案
    【解决方案2】:

    感谢 Zauberfisch 为我指明了正确的方向。我是这样解决的:

    public static function getTwitterFeed(){
        $settings = array(
            'oauth_access_token' => "xxx",
            'oauth_access_token_secret' => "xxx",
            'consumer_key' => "xxx",
            'consumer_secret' => "xxx"
        );
    
        $url = 'https://api.twitter.com/1.1/statuses/user_timeline.json';
        $getfield = '?screen_name=xxx&count=5';
        $requestMethod = 'GET';
        $twitter = new TwitterAPIExchange($settings);
        $returnTwitter = $twitter->setGetfield($getfield)
                     ->buildOauth($url, $requestMethod)
                     ->performRequest();
    
        $returnTwitter = Convert::json2array($returnTwitter);
    
                $tweets = array();
                foreach ($returnTwitter as $key => $value) {
                    $tweets[] = new ArrayData(array('created_at' => $value['created_at'], 'text' => $value['text']));
    
    
                }
                    return new ArrayList($tweets);
    
        }
    

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 2018-09-29
      • 2015-05-24
      相关资源
      最近更新 更多