Adapter son code pour la 2.24 n° 21

Aujourd’hui on s’écarte un peu des modifications indispensables pour évoquer l’utilisation des variables globales sur les pages de l’administration.

En effet j’ai entrepris, avec la 2.24, de réduire autant que possible ces dernières en ouvrant la possibilité de stocker celles-ci comme propriétés d’un objet disponible en permanence1.

L’objet en question, instancié dès le début du traitement d’une page d’administration — voir ci-dessous le code correspondant dans le fichier inc/admin/prepend.php — est disponible avec dcCore::app()->admin ; rien d’original, n’est-ce pas ?

// New admin instance
dcCore::app()->admin = new dcAdmin();
dcCore::app()->admin->init();

Un exemple d’usage des propriétés dynamiques côté administration est visible ci-dessous (code présent dans la page de réglage du plugin antispam) :

dcCore::app()->admin->filters     = dcAntispam::$filters->getFilters();
dcCore::app()->admin->page_name   = __('Antispam');
dcCore::app()->admin->filter_gui  = false;
dcCore::app()->admin->default_tab = null;
dcCore::app()->admin->filter      = null;

Notez que ces propriétés ne peuvent être passées en paramètre que par valeur (et pas par référence) ; si besoin, passez par des variables intermédiaires avant de les restocker en propriété. Ceci est aussi valable lorsqu’un tableau, stocké en propriété, a besoin d’être modifié.

Exemple avec la méthode dcCore::app()->blog->setPostContent() qui attend des références pour les quatre derniers paramètres :

[
    $post_excerpt, $post_excerpt_xhtml, $post_content, $post_content_xhtml
] = [
    dcCore::app()->admin->post_excerpt,
    dcCore::app()->admin->post_excerpt_xhtml,
    dcCore::app()->admin->post_content,
    dcCore::app()->admin->post_content_xhtml,
];

dcCore::app()->blog->setPostContent(
    dcCore::app()->admin->post_id,
    dcCore::app()->admin->post_format,
    dcCore::app()->admin->post_lang,
    $post_excerpt,
    $post_excerpt_xhtml,
    $post_content,
    $post_content_xhtml
);

[
    dcCore::app()->admin->post_excerpt,
    dcCore::app()->admin->post_excerpt_xhtml,
    dcCore::app()->admin->post_content,
    dcCore::app()->admin->post_content_xhtml
] = [
    $post_excerpt, $post_excerpt_xhtml, $post_content, $post_content_xhtml,
];

Autre exemple avec un tableau modifié par l’appel à la méthode dcUtils::lexicalKeySort() :

$da = dcCore::app()->admin;
…
// Sort users list on user_id key
$blog_users = $da->blog_users;
if (dcUtils::lexicalKeySort($blog_users)) {
    $da->blog_users = $blog_users;
}

Il est donc recommandé d’utiliser cette nouvelle fonctionnalité pour vos variables personnelles ; notez que si vous ne le faites pas, tout fonctionnera normalement, mais ça sera juste un peu moins élégant :-)


  1. Ça permet en particulier d’éviter les collisions avec des variables de même nom déclarées ailleurs. ↩︎

Ajouter un commentaire

Les champs suivis d'un * sont obligatoires

Les commentaires peuvent être formatés en utilisant la syntaxe Markdown Extra.

Ajouter un rétrolien

URL de rétrolien : https://open-time.net/trackback/15524

Haut de page