Changeset 70907 in spip-zone for _plugins_/seo


Ignore:
Timestamp:
Mar 19, 2013, 2:49:26 PM (7 years ago)
Author:
cedric@…
Message:

Edition dans l'espace privé : le plugin devient complètement générique et peut editer des meta-tags sur n'importe quel objet de l'espace privé. L'edition se fait dans le formulaire d'edition, à la suite des autres champs de l'objet, et l'affichage se fait sur la fiche de l'objet

Location:
_plugins_/seo/trunk
Files:
3 added
6 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/seo/trunk/action/editer_seo.php

    r70697 r70907  
    44
    55/**
    6  * @return array
     6 * @param $objet
     7 * @param $id_objet
     8 * @param string $prefixe
     9 * @return string
    710 */
    8 function action_editer_seo_dist(){
     11function action_editer_seo_dist($objet, $id_objet, $prefixe=""){
    912        include_spip('inc/autoriser');
    1013        $err = "";
     
    1215        // si id_article n'est pas un nombre, c'est une creation
    1316        // mais on verifie qu'on a toutes les donnees qu'il faut.
    14         if (!$id_objet = _request('id_objet') OR !$objet = _request('objet')){
    15                 $err = "Pas d'objet ou id_objet";
    16         } else {
    17                 if (!autoriser('modifier', $objet, $id_objet)){
    18                         $err = "Error auth :(";
    19                 } else {
    20                         $meta_tags = array('title', 'description', 'author', 'keywords', 'copyright', 'robots');
    21                         sql_delete("spip_seo", "id_objet = " . intval($id_objet) . " AND objet =" . sql_quote($objet));
    22                         foreach ($meta_tags as $tag){
    23                                 if (($value = _request($tag)) && (strlen($value)>0)){
    24                                         sql_insertq('spip_seo', array('id_objet' => $id_objet, 'objet' => $objet, 'meta_name' => $tag, 'meta_content' => $value));
     17        if ($objet
     18                AND $id_objet
     19          AND autoriser('modifier', $objet, $id_objet)){
     20
     21                $meta_tags = array('title', 'description', 'author', 'keywords', 'copyright', 'robots');
     22
     23                $existing = array();
     24                $rows = sql_allfetsel("*","spip_seo", "id_objet=" . intval($id_objet) . " AND objet=" . sql_quote($objet));
     25                foreach ($rows as $row){
     26                        $existing[$row['meta_name']] = $row['meta_content'];
     27                }
     28
     29                $dels = array();
     30                $inss = array();
     31                foreach ($meta_tags as $tag){
     32                        $value = _request($prefixe.$tag);
     33                        if (is_null($value) OR !strlen($value)){
     34                                if (isset($existing[$tag]))
     35                                        $dels[] = $tag;
     36                        }
     37                        else {
     38                                if (!isset($existing[$tag])){
     39                                        $inss[] = array('objet'=>$objet,'id_objet'=>$id_objet,'meta_name'=>$tag,'meta_content'=>$value);
     40                                }
     41                                elseif($value!==$existing[$tag]){
     42                                        sql_updateq("spip_seo",array('meta_content'=>$value),"id_objet=" . intval($id_objet) . " AND objet=" . sql_quote($objet)." AND meta_name=".sql_quote($tag));
    2543                                }
    2644                        }
     45                        if (($value = _request($tag)) && (strlen($value)>0)){
     46                                sql_insertq('spip_seo', array('id_objet' => $id_objet, 'objet' => $objet, 'meta_name' => $tag, 'meta_content' => $value));
     47                        }
    2748                }
     49                if (count($dels))
     50                        sql_delete("spip_seo","id_objet=" . intval($id_objet) . " AND objet=" . sql_quote($objet). " AND ".sql_in("meta_name",$dels));
     51                if (count($inss))
     52                        sql_insertq_multi("spip_seo",$inss);
     53
     54                return "";
    2855        }
    2956
    30         if ($err)
    31                 spip_log("echec editeur seo: $err", _LOG_ERREUR);
    32 
    33         return array(array($objet, $id_objet), $err);
     57        return "Erreur : acces interdit";
    3458}
    3559
  • _plugins_/seo/trunk/formulaires/editer_seo.html

    r60653 r70907  
    77                parametre : url d'action ]
    88                #ACTION_FORMULAIRE{#ENV{action}}
    9           <input type='hidden' name='id_objet' value='#ENV{id_objet}' />
    10           <input type='hidden' name='objet' value='#ENV{objet}' />
    119          <ul>
    12             <li class="editer editer_title[ (#ENV**{erreurs}|table_valeur{title}|oui)erreur]">
    13                 <label for="title"><:seo:meta_title:></label>[
    14                 <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{title})</span>
    15                 ]<input type='text' class='text' name='title' id='title' value="[(#ENV**{title,''})]" />
    16             </li>
    17             [<li class="editer editer_description[ (#ENV**{erreurs}|table_valeur{description}|oui)erreur]">(#ENV**{description}|match{^=,Uis}|non)
    18                         <label for="description"><:seo:meta_description:></label>[
    19                         <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{description})</span>
    20                         ]<textarea name='description' id='description' rows='3' cols='40'>[(#ENV**{description})]</textarea>
    21                 </li>]
    22             <li class="editer editer_keywords[ (#ENV**{erreurs}|table_valeur{keywords}|oui)erreur]">
    23                 <label for="keywords"><:seo:meta_keywords:></label>[
    24                 <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{keywords})</span>
    25                 ]<input type='text' class='text' name='keywords' id='keywords' value="[(#ENV**{keywords,''})]" />
    26             </li>
    27             <li class="editer editer_copyright[ (#ENV**{erreurs}|table_valeur{copyright}|oui)erreur]">
    28                 <label for="copyright"><:seo:meta_copyright:></label>[
    29                 <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{copyright})</span>
    30                 ]<input type='text' class='text' name='copyright' id='copyright' value="[(#ENV**{copyright,''})]" />
    31             </li>
    32             <li class="editer editer_author[ (#ENV**{erreurs}|table_valeur{author}|oui)erreur]">
    33                 <label for="author"><:seo:meta_author:></label>[
    34                 <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{author})</span>
    35                 ]<input type='text' class='text' name='author' id='author' value="[(#ENV**{author,''})]" />
    36             </li>
     10                  #SET{name,title}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
     11                        <li class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
     12                                <label for="#GET{name}"><:seo:meta_title:></label>[
     13                                <span class='erreur_message'>(#GET{erreurs})</span>
     14                                ]<input type="text" name="#GET{name}" class="text" value="#ENV*{#GET{name},#GET{defaut}}" id="#GET{name}" [(#HTML5|et{#GET{obli}})required='required']/>
     15                        </li>
     16                  #SET{name,description}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
     17                        <li class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
     18                                <label for="#GET{name}"><:seo:meta_description:></label>[
     19                                <span class='erreur_message'>(#GET{erreurs})</span>
     20                                ]<textarea name="#GET{name}" class="textarea">
     21#ENV*{#GET{name},#GET{defaut}}</textarea>
     22                        </li>
     23                  #SET{name,keywords}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
     24                        <li class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
     25                                <label for="#GET{name}"><:seo:meta_keywords:></label>[
     26                                <span class='erreur_message'>(#GET{erreurs})</span>
     27                                ]<input type="text" name="#GET{name}" class="text" value="#ENV*{#GET{name},#GET{defaut}}" id="#GET{name}" [(#HTML5|et{#GET{obli}})required='required']/>
     28                        </li>
     29                  #SET{name,copyright}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
     30                        <li class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
     31                                <label for="#GET{name}"><:seo:meta_copyright:></label>[
     32                                <span class='erreur_message'>(#GET{erreurs})</span>
     33                                ]<input type="text" name="#GET{name}" class="text" value="#ENV*{#GET{name},#GET{defaut}}" id="#GET{name}" [(#HTML5|et{#GET{obli}})required='required']/>
     34                        </li>
     35                  #SET{name,author}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
     36                        <li class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
     37                                <label for="#GET{name}"><:seo:meta_author:></label>[
     38                                <span class='erreur_message'>(#GET{erreurs})</span>
     39                                ]<input type="text" name="#GET{name}" class="text" value="#ENV*{#GET{name},#GET{defaut}}" id="#GET{name}" [(#HTML5|et{#GET{obli}})required='required']/>
     40                        </li>
    3741          </ul>
    3842
  • _plugins_/seo/trunk/formulaires/editer_seo.php

    r62425 r70907  
    3333function formulaires_editer_seo_traiter($objet, $id_objet, $retour=''){
    3434        $editer_seo = charger_fonction('editer_seo','action');
    35         $editer_seo();
    36        
    37         return;
    38         //return formulaires_editer_objet_traiter('seo',$id_objet,$objet,$lier_trad,$retour,$config_fonc,$row,$hidden);
     35
     36        $err = $editer_seo($objet, $id_objet);
     37
     38        if (!$err)
     39                return array('message_ok'=>_L('Meta tags mis a jour'));
     40        else
     41                return array('message_erreur'=>_L('Vous n\'avez pas le droit de modifier ces meta-tags : '.$err));
    3942}
    4043
  • _plugins_/seo/trunk/paquet.xml

    r70896 r70907  
    2727
    2828        <pipeline nom="affiche_milieu" action="affiche_milieu" inclure="seo_pipelines_ecrire.php" />
    29         <pipeline nom="ajouter_onglets" action="ajouter_onglets" inclure="seo_pipelines_ecrire.php" />
     29        <pipeline nom="afficher_contenu_objet" action="afficher_contenu_objet" inclure="seo_pipelines_ecrire.php" />
     30        <pipeline nom="formulaire_fond" action="formulaire_fond" inclure="seo_pipelines_ecrire.php" />
     31        <pipeline nom="formulaire_charger" action="formulaire_charger" inclure="seo_pipelines_ecrire.php" />
     32        <pipeline nom="formulaire_traiter" action="formulaire_traiter" inclure="seo_pipelines_ecrire.php" />
    3033
    31         <menu nom="seo" titre="seo:seo" parent="menu_configuration" icone="images/seo-16.png" action="configurer_seo" />
     34        <menu nom="seo" titre="seo:seo" parent="menu_squelette" icone="images/seo-16.png" action="configurer_seo" />
    3235</paquet>
  • _plugins_/seo/trunk/prive/style_prive_plugin_seo.html

    r68632 r70907  
    2525        text-align:[(#ENV{left})];
    2626}
     27#wysiwyg .box.seo-metas {margin:0}
     28#wysiwyg .seo-metas .label,#wysiwyg .seo-metas .valeur {display:inline;}
  • _plugins_/seo/trunk/seo_pipelines_ecrire.php

    r70733 r70907  
    1313
    1414/**
    15  * Afficher le formulaire de config des meta dans l'admin
    16  * @param array $vars
     15 * Afficher les meta-tags en bas du contenu de l'objet
     16 * @param array $flux
    1717 * @return array
    1818 */
    19 function seo_affiche_milieu($vars){
    20         include_spip('inc/autoriser');
    21         include_spip('inc/presentation');
    22         $config = unserialize($GLOBALS['meta']['seo']);
     19function seo_afficher_contenu_objet($flux){
     20        $flux['data'] .= recuperer_fond('prive/objets/seo-metas',array('objet'=>$flux['args']['type'],'id_objet'=>$flux['args']['id_objet']));
     21        return $flux;
     22}
    2323
    24         // Rubrique
    25         if (in_array($vars["args"]["exec"], array('naviguer', 'rubrique')) && $vars["args"]["id_rubrique"]!=''){
    26                 $objet = 'rubrique';
    27                 $id_objet = $vars["args"]["id_rubrique"];
    28                 // Article
    29         } elseif (in_array($vars["args"]["exec"], array('articles', 'article')) && $vars["args"]["id_article"]!='') {
    30                 $objet = 'article';
    31                 $id_objet = $vars["args"]["id_article"];
    32                 // Other case we quit
    33         } else {
    34                 return $vars;
     24/**
     25 * Charger les valeurs des meta-tags pour la saisie dans l'objet
     26 * @param array $flux
     27 * @return array
     28 */
     29function seo_formulaire_charger($flux){
     30        if (strncmp($flux['args']['form'],"editer_",7)==0
     31                AND $objet = substr($flux['args']['form'],7)){
     32                $valeurs = array(
     33                        'meta_title'=>'',
     34                        'meta_description'=>'',
     35                        'meta_keywords'=>'',
     36                        'meta_copyright'=>'',
     37                        'meta_author'=>'',
     38                );
     39                if ($id_objet=intval($flux['args']['args'][0])){
     40                        $metas = sql_select("*", "spip_seo", "id_objet =".intval($id_objet)." AND objet =".sql_quote($objet));
     41                        while($meta = sql_fetch($metas)){
     42                                $valeurs["meta_".$meta['meta_name']] = $meta['meta_content'];
     43                        }
     44                }
     45                $flux['data'] = array_merge($flux['data'],$valeurs);
     46        }
     47        return $flux;
     48}
     49
     50/**
     51 * Enregistrer les valeurs des meta-tags apres la saisie dans l'objet
     52 * @param array $flux
     53 * @return array
     54 */
     55function seo_formulaire_traiter($flux){
     56        if (strncmp($flux['args']['form'],"editer_",7)==0
     57                AND $objet = substr($flux['args']['form'],7)
     58                AND _request('seo_metas')
     59          AND $id_table_objet=id_table_objet($objet)
     60          AND isset($flux['data'][$id_table_objet])
     61          AND $id_objet=$flux['data'][$id_table_objet]){
     62
     63                $editer_seo = charger_fonction('editer_seo','action');
     64                        $err = $editer_seo($objet, $id_objet, "meta_");
     65
     66                if ($err){
     67                        if (!isset($flux['data']['message_erreur']))
     68                                $flux['data']['message_erreur'] = "";
     69                        $flux['data']['message_erreur'] .= " " ._L('Vous n\'avez pas le droit de modifier les meta-tags : '.$err);
     70                        if (isset($flux['data']['redirect']))
     71                                unset($flux['data']['redirect']);
     72                }
    3573        }
    3674
    37         // If meta tags are activates
    38         if ($config['meta_tags']['activate']!='yes' || $config['meta_tags']['activate_editing']!='yes'){
    39                 return $vars;
    40         }
    41 
    42         $ret = '';
    43 
    44         $bouton = bouton_block_depliable(_T('seo:meta_tags'), false, "SEO");
    45         $ret .= debut_block_depliable(false, "SEO");
    46 
    47         // List         
    48         $ret .= recuperer_fond('prive/squelettes/inclure/seo_metas', array('objet' => $objet, 'id_objet' => $id_objet));
    49 
    50         $ret .= fin_block();
    51 
    52         // Create the border with the content
    53         $ret = '<div class="nettoyeur"></div>' . debut_cadre_enfonce(_DIR_PLUGIN_SEO . 'img_pack/meta_tags-24.png', true, "", $bouton) . $ret . fin_cadre_enfonce(true);
    54 
    55         $vars["data"] .= $ret;
    56 
    57         return $vars;
     75        return $flux;
    5876}
    5977
    6078
    61 function seo_ajouter_onglets($flux){
     79/**
     80 * Ajouter la saisie des meta-tags dans le form de saisie de l'objet
     81 * @param array $flux
     82 * @return array
     83 */
     84function seo_formulaire_fond($flux){
    6285
    63         global $connect_statut, $connect_toutes_rubriques;
     86        if (isset($flux['args']['args']['type'])
     87                AND $objet = $flux['args']['args']['type']
     88                AND $flux['args']['form']=="editer_$objet"){
    6489
    65         // seul les administrateurs globaux ont acces au bouton de configuration
    66         if ($connect_statut && $connect_toutes_rubriques){
    67                 if ($flux['args']=='configuration'){
    68                         $flux['data']['seo'] = new Bouton(_DIR_PLUGIN_SEO . "img_pack/seo-24.png", _T("seo:seo"), generer_url_ecrire('seo_config'));
     90                $ins = recuperer_fond("formulaires/inc-editer-seo",$flux['args']['contexte']);
     91                if ($p=strpos($flux['data'],$i='<!--extra-->')
     92                 OR $p=strrpos($flux['data'],$i="</ul>")){
     93                        $p = $p + strlen($i);
     94                        $flux['data'] = substr_replace($flux['data'],$ins,$p,0);
    6995                }
    7096        }
    71 
    72         return ($flux);
     97        return $flux;
    7398}
    7499
     100
    75101?>
Note: See TracChangeset for help on using the changeset viewer.