Changeset 70903 in spip-zone for _plugins_/seo


Ignore:
Timestamp:
Mar 19, 2013, 1:13:48 PM (7 years ago)
Author:
cedric@…
Message:
  • generalisation de la generation des metas tags : fonctionne sur n'importe quel objet déclaré dans l'API sql
  • seo_generer_urls_canoniques a besoin du contexte pour generer l'url canonique
File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/seo/trunk/seo_fonctions.php

    r70902 r70903  
    2424        // d'abord les rubriques
    2525        if (isset($contexte['id_rubrique'])){
    26                 $infos[$s] = array('objet'=>'rubrique','id_objet'=>$contexte['id_rubrique'],'primary'=>'id_rubrique','table_sql'=>'spip_rubriques');
     26                $infos[$s] = array(
     27                        'objet'=>'rubrique',
     28                        'id_objet'=>$contexte['id_rubrique'],
     29                        'primary'=>'id_rubrique',
     30                        'table_sql'=>'spip_rubriques'
     31                );
    2732        }
    2833        // puis voyons si on trouve un objet plus precis
     
    8590
    8691                        // remplacer la meta si on la trouve
    87                         if (preg_match($preg,$head,$match)){
     92                        if ($preg AND preg_match($preg,$head,$match)){
    8893                                $head = str_replace($match[0],$meta,$head);
    8994                        }
     
    109114          AND $config['canonical_url']['activate']=='yes'
    110115          AND $is_sommaire){
    111                 $append .= "\n" . seo_generer_urls_canoniques();
     116                $append .= "\n" . seo_generer_urls_canoniques($contexte);
    112117        }
    113118
     
    140145/**
    141146 * Renvoyer la balise <link> pour URL CANONIQUES
    142  * @return string $flux
    143  */
    144 function seo_generer_urls_canoniques(){
    145         include_spip('balise/url_');
    146 
    147         if (count($GLOBALS['contexte'])==0){
    148                 $objet = 'sommaire';
    149         } elseif (isset($GLOBALS['contexte']['id_article'])) {
    150                 $id_objet = $GLOBALS['contexte']['id_article'];
    151                 $objet = 'article';
    152         } elseif (isset($GLOBALS['contexte']['id_rubrique'])) {
    153                 $id_objet = $GLOBALS['contexte']['id_rubrique'];
    154                 $objet = 'rubrique';
    155         }
    156 
    157         $flux = "";
    158         switch ($objet) {
    159                 case 'sommaire':
    160                         $flux .= '<link rel="canonical" href="' . url_de_base() . '" />';
    161                         break;
    162                 default:
    163                         $flux .= '<link rel="canonical" href="' . generer_url_entite_absolue($id_objet, $objet) . '" />';
    164                         break;
    165         }
    166 
    167         return $flux;
     147 * @param array $contexte
     148 * @return string
     149 */
     150function seo_generer_urls_canoniques($contexte){
     151        include_spip('inc/urls');
     152        $i = seo_interprete_contexte($contexte);
     153
     154        if (isset($i['id_objet'])){
     155                return '<link rel="canonical" href="' . generer_url_entite_absolue($i['id_objet'], $i['objet']) . '" />';
     156        }
     157        elseif($i['objet']=='sommaire')
     158                return '<link rel="canonical" href="' . url_de_base() . '" />';
     159
     160        return '';
    168161}
    169162
    170163/**
    171164 * Renvoyer la balise SCRIPT de Google Analytics
    172  * @return string $flux
     165 * @return string
    173166 */
    174167function seo_generer_google_analytics(){
     
    200193 * - Meta Titre / Description / etc.
    201194 * @param null|array $contexte
    202  * @return string $flux
     195 * @return array
    203196 */
    204197function seo_calculer_meta_tags($contexte=null){
     
    215208        $meta_tags = array();
    216209
    217         switch ($i['objet']) {
    218                 case 'sommaire':
    219                         $meta_tags = isset($config['meta_tags']['tag'])?$config['meta_tags']['tag']:array();
    220                         break;
    221                 default:
    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']));
    224                         $tag = array();
    225                         $tag['title'] = couper($row['titre'], 64);
    226                         unset($row['titre']);
    227                         if (count($row)) $tag['description'] = couper(implode(" ", $row), 150, '');
    228                         // Get the value set by default
    229                         if (isset($config['meta_tags']['default'])){
    230                                 foreach ($config['meta_tags']['default'] as $name => $option){
    231                                         $meta_tags[$name] = array();
    232                                         if (in_array($option,array('page','page_sommaire'))){
    233                                                 if (isset($tag[$name]))
    234                                                         $meta_tags[$name][] = $tag[$name];
    235                                         }
    236                                         if (in_array($option,array('sommaire','page_sommaire'))){
    237                                                 if (isset($config['meta_tags']['tag'][$name]))
    238                                                         $meta_tags[$name][] = $config['meta_tags']['tag'][$name];
    239                                         }
     210        if (isset($i['id_objet'])){
     211                $trouver_table = charger_fonction("trouver_table","base");
     212                $desc = $trouver_table($i['table_sql']);
     213                $select = array();
     214                if (isset($desc['titre']))
     215                        $select[] = $desc['titre'];
     216                elseif(isset($desc['field']['titre']))
     217                        $select[] = "titre";
     218                if (isset($desc['field']['descriptif']))
     219                        $select[] = "descriptif";
     220                if (isset($desc['field']['chapo']))
     221                        $select[] = "chapo";
     222                if (isset($desc['field']['texte']))
     223                        $select[] = "texte";
     224
     225                $tag = array();
     226                if (count($select)){
     227                        $select = implode(",",$select);
     228                        $row = sql_fetsel($select, $i['table_sql'], $i['primary']."=" . intval($i['id_objet']));
     229                        if (isset($row['titre'])){
     230                                $tag['title'] = couper($row['titre'], 64);
     231                                unset($row['titre']);
     232                        }
     233                        if (isset($row['lang']))
     234                                unset($row['lang']);
     235                        if (count($row))
     236                                $tag['description'] = couper(implode(" ", $row), 150, '');
     237                }
     238                // Get the value set by default
     239                if (isset($config['meta_tags']['default']) AND is_array($config['meta_tags']['default'])){
     240                        foreach ($config['meta_tags']['default'] as $name => $option){
     241                                $meta_tags[$name] = array();
     242                                if (in_array($option,array('page','page_sommaire'))){
     243                                        if (isset($tag[$name]))
     244                                                $meta_tags[$name][] = $tag[$name];
     245                                }
     246                                if (in_array($option,array('sommaire','page_sommaire'))){
     247                                        if (isset($config['meta_tags']['tag'][$name]))
     248                                                $meta_tags[$name][] = $config['meta_tags']['tag'][$name];
     249                                }
     250                                if (count($meta_tags[$name]))
    240251                                        $meta_tags[$name] = implode(" - ",$meta_tags[$name]);
    241                                 }
     252                                else
     253                                        unset($meta_tags[$name]);
    242254                        }
    243 
    244                         // If the meta tags rubrique and articles editing is activate (should overwrite other setting)
    245                         if (isset($config['meta_tags']['activate_editing'])
    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']));
    248                                 while ($r = sql_fetch($result)){
    249                                         if ($r['meta_content']!='')
    250                                                 $meta_tags[$r['meta_name']] = $r['meta_content'];
    251                                 }
     255                }
     256
     257                // If the meta tags rubrique and articles editing is activate (should overwrite other setting)
     258                if (isset($config['meta_tags']['activate_editing'])
     259                        AND $config['meta_tags']['activate_editing']=='yes'){
     260                        $result = sql_select("*", "spip_seo", "id_objet=" . intval($i['id_objet']) . " AND objet=" . sql_quote($i['objet']));
     261                        while ($r = sql_fetch($result)){
     262                                if ($r['meta_content']!='')
     263                                        $meta_tags[$r['meta_name']] = $r['meta_content'];
    252264                        }
    253                         break;
     265                }
     266        }
     267        elseif($i['objet']=="sommaire") {
     268                $meta_tags = isset($config['meta_tags']['tag'])?$config['meta_tags']['tag']:array();
    254269        }
    255270
     
    282297 * Renvoyer une META toute seule (hors balise)
    283298 * @param string $nom
    284  * @return string|bool
     299 * @return string
    285300 */
    286301function seo_generer_meta_brute($nom){
     
    291306/**
    292307 * Renvoyer la META GOOGLE WEBMASTER TOOLS
    293  * @return string $flux
     308 * @return string
    294309 */
    295310function seo_generer_webmaster_tools(){
     
    302317/**
    303318 * Renvoyer la META BING TOOLS
    304  * @return string $flux
     319 * @return string
    305320 */
    306321function seo_generer_bing(){
     
    312327/**
    313328 * Renvoyer la META ALEXA
    314  * @return string $flux
     329 * @return string
    315330 */
    316331function seo_generer_alexa(){
     
    323338 * #SEO_URL
    324339 * Renvoyer la balise <link> pour URL CANONIQUES
     340 * @param $p
    325341 */
    326342function balise_SEO_URL_dist($p){
    327         $p->code = "seo_generer_urls_canoniques()";
     343        $p->code = "seo_generer_urls_canoniques(\$Pile[0])";
    328344        $p->interdire_scripts = false;
    329345        return $p;
     
    333349 * #SEO_GA
    334350 * Renvoyer la balise SCRIPT de Google Analytics
     351 * @param $p
    335352 */
    336353function balise_SEO_GA_dist($p){
     
    344361 * Renvoyer les META editoriales
    345362 * - Meta Titre / Description / etc.
     363 * @param $p
    346364 */
    347365function balise_SEO_META_TAGS_dist($p){
     
    354372 * #SEO_META_BRUTE{nom_de_la_meta}
    355373 * Renvoyer la valeur de la meta appelée (sans balise)
     374 * @param $p
    356375 */
    357376function balise_SEO_META_BRUTE_dist($p){
     
    365384 * #SEO_GWT
    366385 * Renvoyer la META GOOGLE WEBMASTER TOOLS
     386 * @param $p
    367387 */
    368388function balise_SEO_GWT_dist($p){
     
    375395 * #SEO : insere toutes les meta d'un coup, a l'endroit indique
    376396 * @param $p
    377  * @return mixed
    378397 */
    379398function balise_SEO_dist($p){
Note: See TracChangeset for help on using the changeset viewer.