web-dev-qa-db-fra.com

Comment mettre à jour un widget à partir de la fonction widget ()?

J'essaie de créer un widget linkroll simple pour afficher les liens récents https://pinboard.in via leur API. Pour maximiser la vitesse de chargement, je souhaite mettre en cache la liste de liens dans un champ de widget, ainsi que l'horodatage de la dernière extraction.

Maintenant, si une heure définie est terminée, je souhaite recharger la liste de liens via cURL et la sauvegarder à nouveau dans le champ du widget. Comment faire cela en dehors de la fonction update ()?

Mon code:

// 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ß

Huh. Il ne m'est jamais venu à l'esprit d'utiliser l'instance de widget comme cache. Je n'avais jamaisvuune telle implémentation non plus.

C'est une idée assez originale et il est donc difficile de souligner avec précision les avantages et les problèmes liés à la mise en œuvre. Pour les débutants, update() n'enregistre pas réellement quelque chose, il l'utilise simplement comme vérification de la sauvegarde réelle et je ne dirai pas où enregistrer mêmese passeà partir d'un aperçu rapide, car il est plus abstrait.

D'après mon expérience, l'implémentation la plus courante detraditionalconsisterait à mettre en cache en utilisant une approche plus conventionnelle (comme les transitoires) et à la lier à une API, pas à un widget.

En tant qu'argument, imaginez que l'utilisateur place deux instances différentes de widget dans deux barres latérales différentes, mais les configure de la même manière. Ils interrogeront les API à un taux double, alors qu’ils ont besoin des mêmes données que celles de l’API et qu’ils pourraient (et devraient) les partager.

3
Rarst