Changeset 70902 in spip-zone for _plugins_/seo


Ignore:
Timestamp:
Mar 19, 2013, 11:51:37 AM (7 years ago)
Author:
cedric@…
Message:

le calcul des metas est presque generique et utilisable sur n'importe quel objet. Il reste a prendre en compte les champs a utiliser pour l'intro (titre, description, texte...) selon l'objet

Location:
_plugins_/seo/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/seo/trunk/inclure/seo-head.html

    r70891 r70902  
    1 [(#ENV*{head}|seo_insere_remplace_metas{#ENV*{contexte}}|replace{'\s+<(meta|script|link|style)','
     1[(#ENV**{head}|seo_insere_remplace_metas{#ENV*{contexte}}|replace{'\s+<(meta|script|link|style)','
    22<$1'})]
  • _plugins_/seo/trunk/seo_fonctions.php

    r70896 r70902  
    44
    55include_spip('inc/texte');
     6
     7function seo_interprete_contexte($contexte){
     8        static $infos;
     9        $s = serialize($contexte);
     10        if (isset($infos[$s]))
     11                return $infos[$s];
     12        $infos[$s] = array('objet'=>'sommaire');
     13        if (isset($contexte['type-page'])){
     14                $infos[$s]['objet'] = $contexte['type-page'];
     15                if ($infos[$s]['objet']!=='sommaire'
     16                        AND $primary = id_table_objet($infos[$s]['objet'])
     17                        AND isset($contexte[$primary])){
     18                        $infos[$s]['id_objet'] = $contexte[$primary];
     19                        $infos[$s]['primary'] = $primary;
     20                        $infos[$s]['table_sql'] = table_objet_sql($infos[$s]['objet']);
     21                }
     22                return $infos[$s];
     23        }
     24        // d'abord les rubriques
     25        if (isset($contexte['id_rubrique'])){
     26                $infos[$s] = array('objet'=>'rubrique','id_objet'=>$contexte['id_rubrique'],'primary'=>'id_rubrique','table_sql'=>'spip_rubriques');
     27        }
     28        // puis voyons si on trouve un objet plus precis
     29        $tables = lister_tables_objets_sql();
     30        foreach ($tables as $t=>$d){
     31                if (
     32                        $t!=='spip_rubriques' AND isset($d['key']['PRIMARY KEY'])
     33                  AND
     34                        ($infos[$s]['objet']!=='rubrique' OR isset($d['field']['id_rubrique']))
     35                ){
     36                        $primary = $d['key']['PRIMARY KEY'];
     37                        if (isset($contexte[$primary])){
     38                                $infos[$s]['objet'] = $d['type'];
     39                                $infos[$s]['id_objet'] = $contexte[$primary];
     40                                $infos[$s]['primary'] = $primary;
     41                                $infos[$s]['table_sql'] = $t;
     42                        }
     43                        return $infos[$s];
     44                }
     45        }
     46        return $infos[$s];
     47}
    648
    749/**
     
    1456 */
    1557function seo_insere_remplace_metas($head,$contexte){
     58
    1659        $append = "<!--seo_insere-->";
    1760        // on ne fait rien si deja insere
     
    2164        include_spip('inc/config');
    2265        $config = lire_config('seo/');
    23         $is_sommaire = (
    24           (isset($contexte['type-page']) AND $contexte['type-page']=='sommaire')
    25           OR (!isset($contexte['id_article']) AND !isset($contexte['id_rubrique']))
    26         );
     66        $i = seo_interprete_contexte($contexte);
     67        $is_sommaire = ($i['objet']=='sommaire');
    2768
    2869        if (isset($config['meta_tags']['activate']) AND $config['meta_tags']['activate']=='yes'){
     
    167208        if (is_null($contexte))
    168209                $contexte = $GLOBALS['contexte'];
    169 
    170         if (isset($contexte['id_article'])){
    171                 $id_objet = $contexte['id_article'];
    172                 $objet = 'article';
    173                 $table = "spip_articles";
    174                 $id_table_objet = "id_article";
    175         } elseif (isset($contexte['id_rubrique'])) {
    176                 $id_objet = $contexte['id_rubrique'];
    177                 $objet = 'rubrique';
    178                 $table = "spip_rubriques";
    179                 $id_table_objet = "id_rubrique";
    180         } else {
    181                 $objet = 'sommaire';
    182         }
     210        $i = seo_interprete_contexte($contexte);
    183211
    184212        /* META TAGS */
     
    187215        $meta_tags = array();
    188216
    189         switch ($objet) {
     217        switch ($i['objet']) {
    190218                case 'sommaire':
    191219                        $meta_tags = isset($config['meta_tags']['tag'])?$config['meta_tags']['tag']:array();
    192220                        break;
    193221                default:
    194                         if (!$table){
    195                                 $table = table_objet_sql($objet);
    196                                 $id_table_objet = id_table_objet($objet);
    197                         }
    198                         $row = sql_fetsel("titre,descriptif,texte", $table, "$id_table_objet=" . intval($id_objet));
     222                        // TODO : definir les champs utile pour cette table
     223                        $row = sql_fetsel("titre,descriptif,texte", $i['table_sql'], $i['primary']."=" . intval($i['id_objet']));
    199224                        $tag = array();
    200225                        $tag['title'] = couper($row['titre'], 64);
     
    219244                        // If the meta tags rubrique and articles editing is activate (should overwrite other setting)
    220245                        if (isset($config['meta_tags']['activate_editing'])
    221                                 AND $config['meta_tags']['activate_editing']=='yes'
    222                                 AND in_array($objet,array('article','rubrique'))){
    223                                 $result = sql_select("*", "spip_seo", "id_objet=" . intval($id_objet) . " AND objet=" . sql_quote($objet));
     246                                AND $config['meta_tags']['activate_editing']=='yes'){
     247                                $result = sql_select("*", "spip_seo", "id_objet=" . intval($i['id_objet']) . " AND objet=" . sql_quote($i['objet']));
    224248                                while ($r = sql_fetch($result)){
    225249                                        if ($r['meta_content']!='')
  • _plugins_/seo/trunk/seo_pipelines.php

    r70896 r70902  
    2222}
    2323
    24 
     24/**
     25 * Insertion dans le squelette head/truc de Z si dispo
     26 * Remplace/ajoute des metas et title a celles du squelette
     27 *
     28 * @param string $flux
     29 *     Le contenu de la page
     30 * @return string
     31 *     Le contenu de la page modifié
     32 */
    2533function seo_recuperer_fond($flux){
    2634        if (strncmp($flux['args']['fond'],"head/",5)==0
     35        AND false
    2736          AND strpos($flux['data']['texte'],"<!--seo_insere-->")===false
     37                AND strpos($flux['data']['texte'],"<title")!==false
    2838          AND include_spip('inc/config')
    2939          AND lire_config('seo/insert_head/activate', 'no')=="yes"
     
    3646/**
    3747 * Insertion dans le pipeline affichage_final (SPIP)
    38  * Remplacement des métas et title dans le <head>
    39  * Remplace les métas et title du squelette et celles insérées via insert_head également
     48 * Remplace/ajoute des metas et title a celles du <head>
    4049 *
    4150 * @param string $flux
Note: See TracChangeset for help on using the changeset viewer.