Carnet Wiki

PortageV2

Version 4 — Janvier 2009 JLuc

Trucs utiles pour le portage d’un plugin d’une version de SPIP < V2 vers la V2


définir une fonction qui teste la version

Cette fonction permet d’implémenter les fonctionnalités critiques de 2 manières différentes selon la version du core de SPIP. On peut ainsi garder le plugin compatible avec plusieurs versions de SPIP (mais cela allourdit le code).

Regarder par exemple la fonction du plugin spipliste : spiplistes_spip_est_inferieur_193()


debut_page

pour thelia il a fallu remplacer :

debut_page(_T("spip_thelia:catalogue_thelia"), "Catalogue Télia", "Catalogue Télia");

par

$commencer_page = charger_fonction('commencer_page', 'inc');
echo $commencer_page(_T("spip_thelia:catalogue_thelia"),_T("spip_thelia:catalogue_thelia"),_T("spip_thelia:catalogue_thelia"));

generer_url_xxxx

Remplacer les generer_url_xxxx(’...’) par generer_url_entite(’xxxx’,...), idem dans les squelettes :
|generer_url_site{...} => |generer_url_entite{site, ...}

Pour un code portable, on teste la version, ce qui fait que pour un portage compatible :
$url = generer_url_article($row['id_article']);
devient :

$url = ( spiplistes_spip_est_inferieur_193()) ? 
                  generer_url_article($row['id_article']) : generer_url_entite($row['id_article'], 'article');

-------
_q

_q est remplacé par sql_quote

-------
spip_query, spip_fetch_array,...

Ces fonctions sont encore définies mais peut être plus pour longtemps.

Il faut préférer les fonctions en sql_ (cf http://doc.spip.org/spip.php?page=r...)

(idem spip_abstract.., calcule_mysql_in, ...)

Exemple :

        $result = spip_query("SELECT * FROM spip_forms WHERE id_form="._q($id_form));
        if (!$row = spip_fetch_array($result)) return false;

est remplacé par :

        if (!$row = sql_fetsel("multiple","spip_forms","id_form=".intval($id_form)))
                return false;

Tandis que

        $row = spip_fetch_array(spip_query("SELECT COUNT(*) AS tot FROM spip_forms_donnees WHERE id_form=".intval($id_form)." AND confirmation='valide' AND statut<>'poubelle'"));
        if ($row)        $nb_reponses = $row['tot'];

est remplacé par

        $nb_reponses = sql_countsel("spip_forms_donnees","id_form=".intval($id_form)." AND confirmation='valide' AND statut<>'poubelle'");

De même,

        $result = spip_query("SELECT r.id_donnee, r.date,r.url, c.champ, c.valeur ".
                "FROM spip_forms_donnees AS r LEFT JOIN spip_forms_donnees_champs AS c USING (id_donnee) ".
                "WHERE id_form=".intval($id_form)." AND confirmation='valide' AND statut<>'poubelle' AND c.id_donnee IS NOT NULL ".
                "ORDER BY date, r.id_donnee");
        while ($row = spip_fetch_array($result)) 
        {...


est remplacé par

     $rows = sql_allfetsel(
                "r.id_donnee, r.date,r.url, c.champ, c.valeur ",
                "spip_forms_donnees AS r LEFT JOIN spip_forms_donnees_champs AS c ON r.id_donnee=c.id_donnee",
                "id_form=".intval($id_form)." AND confirmation='valide' AND statut<>'poubelle' AND c.id_donnee IS NOT NULL ",
                "date, r.id_donnee");
        foreach($rows as $row) 
        {...

spip_query("DELETE FROM spip_forms_champs_choix WHERE id_form=3");
est remplacé par sql_delete("spip_forms_champs_choix","id_form=3);"

On pourra également remplacer de multiples appels à spip_query ("INSERT...")
par un unique appel à sql_insertq_multi

--------
spip_abstract_insert

spip_abstract_insert("spip_forms_donnees","(id_donnee,id_form,date,ip,id_auteur,url,confirmation,statut,maj)","(".intval($id_donnee).",".intval($id_form).", NOW(),"._q($ip).","._q($id_auteur).","._q($url).", 'valide', 'publie', NOW() )");


est remplacé par

$id_donnee = sql_insertq("spip_forms_donnees",
                                                          array(
                                                          "id_donnee"=>$id_donnee,
                                                          "id_form"=>$id_form,
                                                          "date"=>"NOW()",
                                                          "ip"=>$ip,
                                                          "id_auteur"=>$id_auteur,
                                                          "url"=>$url,
                                                          "confirmation"=>"valide",
                                                          "statut"=>'publie',
                                                          "maj"=>"NOW()"));

spip_abstract_fetch

$row = @spip_abstract_fetch($result,"")
est remplacé par
$row = @sql_fetch($result,"")

---------
spip_abstract_count

spip_abstract_count($result, $verif->sql_serveur)
est remplacé par
sql_count($result,$verif->sql_serveur)