On efface tout, et on recommence

Bruno (Dsls) m’a filé un bout de code qu’il avait commencé à faire au sujet d’un constructeur simplifié et du coup je l’ai intégré, un peu modifié et complété et finalement il suffira amplement pour éviter d’avoir à gérer les trucs pénibles pendant la construction.

Je reprends l’exemple d’hier avec cette fonction qui récupère un compte de billets par catégorie. Voilà la fonction originale :

private function getCategoriesCounter($params = array())
{
    $strReq =
    'SELECT  C.cat_id, COUNT(P.post_id) AS nb_post ' .
    'FROM ' . $this->prefix . 'category AS C ' .
    'JOIN ' . $this->prefix . "post P ON (C.cat_id = P.cat_id AND P.blog_id = '" . $this->con->escape($this->id) . "' ) " .
    "WHERE C.blog_id = '" . $this->con->escape($this->id) . "' ";

    if (!$this->core->auth->userID()) {
        $strReq .= 'AND P.post_status = 1 ';
    }

    if (!empty($params['post_type'])) {
        $strReq .= 'AND P.post_type ' . $this->con->in($params['post_type']);
    }

    $strReq .= 'GROUP BY C.cat_id ';

    $rs       = $this->con->select($strReq);
    $counters = array();
    while ($rs->fetch()) {
        $counters[$rs->cat_id] = $rs->nb_post;
    }

    return $counters;
}

Et voilà le même code utilisant le constructeur simplfié :

private function getCategoriesCounter($params = array())
{
    $sql = new dcSelectStatement();

    $sql->columns(array('C.cat_id', 'COUNT(P.post_id) AS nb_post'))
        ->from($this->prefix . 'category AS C')
        ->join('JOIN ' . $this->prefix . 'post P ' .
            "ON (C.cat_id = P.cat_id AND P.blog_id = '" . $this->con->escape($this->id) . "')")
        ->where("C.blog_id = '" . $this->con->escape($this->id) . "'");

    if (!$this->core->auth->userID()) {
        $sql->where('P.post_status = 1');
    }

    if (!empty($params['post_type'])) {
        $sql->where('P.post_type ' . $this->con->in($params['post_type']));
    }

    $sql->group('C.cat_id');

    $query = $sql->statement();

    $rs       = $this->con->select($query);
    $counters = array();
    while ($rs->fetch()) {
        $counters[$rs->cat_id] = $rs->nb_post;
    }

    return $counters;
}

Y’a plus qu’à utiliser ça partout où c’est nécessaire et fermer ensuite ce fichu ticket ouvert depuis quatre ans !

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

Haut de page