web-dev-qa-db-ja.com

Widget()関数からウィジェットを更新するにはどうすればいいですか?

私は最近の https://pinboard.in リンクをそれらのAPIを介して表示するための単純なlinkrollウィジェットを作成しようとしています。読み込み速度を最大にするために、リンクリストと、それが最後に取得されたときのタイムスタンプをキャッシュしたいと思います。

さて、定義された時間が終わったら、私はリンクリストをcURL経由でリロードし、それを再びウィジェットフィールドに保存したいと思います。 update()関数の外部からこれを行う方法は?

私のコード:

// display widget
function widget($args, $instance) {

    extract( $args );

    // get widget title
    $title          = apply_filters('widget_title', $instance['title']);

    //  get options
    $token          = $instance['token'];
    $tags           = $instance['tags'];
    $unread         = $instance['unread'];
    $range          = $instance['range'];

    // update linklist based on cache validity
    $isvalid = $this->_check_valid_cache( $instance['expires'], $range );
    if ( $isvalid === TRUE ) {
        $cache         = $instance['cache'];
        $expires       = $instance['expires'];
    } else {
        $cache         = $this->_get_recent( $token );
        $expires       = $isvalid;
        /* --> does not work!! */
        $this->update($instance, $instance);
    }
    /* ...display widget... */

}
3
Hans Spieß

ええと。ウィジェットインスタンスをキャッシュとして使うことは私には実際には起こりませんでした。seenそのような実装もこれまでありませんでした。

これは非常に独創的なアイデアであり、そのため、実装による利点と問題を正確に指摘するのは困難です。初心者のためにupdate()は実際には何も保存しません、実際の保存のためのチェックとして使われるだけで、で保存されても保存できません。

私の経験からすると、より伝統的なアプローチ(トランジェントなど)を使用してキャッシュし、それをウィジェットではなくAPIに結び付けることが、より多くのtraditionalの実装になります。

その引数として、ユーザーが2つの異なるウィジェットのインスタンスを2つの異なるサイドバーに配置することを想像してみてください。しかし、それらは同じように構成されています。実際にはAPIからのデータとまったく同じデータが必要であり、それを共有することができます(そして共有する必要があります)。

3
Rarst