extension HTML pour les pages statiques générées par un Plugin ?

NonoMNonoM Member
18 févr. modifié dans Entraide

Bonjour, j'ai (encore) une question bête mais je vais essayer de faire court !
Les plugins MyContact et MySiteMap, me génère des pages comme "https://monsiteweb.com/contact" ou "https://monsiteweb.com/sitemap", et c'est bien mais... j'aimerais que ces pages soient reconnues et indexées ainsi : "https://monsiteweb.com/contact.html" et "https://monsiteweb.com/sitemap.html". alors question : comment faire ?

Réponses

  • 18 févr. modifié

    Bonsoir,

    Il te faudrait ajouter cette extension en dur à toutes les parties du code du plugin qui génére et traite l'url de la page "front" de ton plugin.
    Par exemple, pour le plugin plxMysearch, l'ajout de l'extension serait à faire sur les fonctions et lignes suivantes :

    • 119 function plxShowConstruct()
    • 145 plxMotorPreChauffageBegin()
    • 146 plxMotorPreChauffageBegin()
    • 167 plxShowStaticListEnd()
    • 168 plxShowStaticListEnd()
    • 180 plxShowPageTitle()
    • 197 function SitemapStatics()
    • 232 function form($title=false)

    la class patché devient :

    <?php
    /**
     * Plugin plxMySearch
     * @author  Stephane F
     **/
    class plxMySearch extends plxPlugin {
    
        private $url = ''; # parametre de l'url pour accèder à la page de recherche
        public $lang = '';
    
        /**
         * Constructeur de la classe
         *
         * @param   default_lang    langue par défaut
         * @return  stdio
         * @author  Stephane F
         **/
        public function __construct($default_lang) {
    
            # gestion du multilingue plxMyMultiLingue
            //if(preg_match('/([a-z]{2})\/(.*)/i', plxUtils::getGets(), $capture)) {
            //      $this->lang = $capture[1].'/';
            //}
    
            # gestion du multilingue plxMyMultiLingue
            $this->lang='';
            if(defined('PLX_MYMULTILINGUE')) {
                $lang = plxMyMultiLingue::_Lang();
                if(!empty($lang)) {
                    if(isset($_SESSION['default_lang']) AND $_SESSION['default_lang']!=$lang) {
                        $this->lang = $lang.'/';
                    }
                }
            }       
    
            # appel du constructeur de la classe plxPlugin (obligatoire)
            parent::__construct($default_lang);
    
            $this->url = $this->getParam('url')=='' ? 'search' : $this->getParam('url');
    
            # droits pour accèder à la page config.php du plugin
            $this->setConfigProfil(PROFIL_ADMIN);
    
            # droites pour accèder à la page admin.php du plugin
            if($this->getParam('savesearch'))
                $this->setAdminProfil(PROFIL_ADMIN);
    
            # déclaration des hooks
            $this->addHook('AdminTopEndHead', 'AdminTopEndHead');
            $this->addHook('AdminTopBottom', 'AdminTopBottom');
            $this->addHook('plxAdminHtaccess', 'plxAdminHtaccess');     
    
            # Si le fichier de langue existe on peut mettre en place la partie visiteur
            if(file_exists(PLX_PLUGINS.$this->plug['name'].'/lang/'.$default_lang.'.php')) {
                $this->addHook('plxShowConstruct', 'plxShowConstruct');
                $this->addHook('plxMotorPreChauffageBegin', 'plxMotorPreChauffageBegin');
                $this->addHook('plxShowStaticListEnd', 'plxShowStaticListEnd');
                $this->addHook('plxShowPageTitle', 'plxShowPageTitle');
                $this->addHook('SitemapStatics', 'SitemapStatics');
                $this->addHook('MySearchForm', 'form');
                if(defined('PLX_MYMULTILINGUE')) {
                    $this->addHook('ThemeEndHead', 'ThemeEndHead');
                }           
            }
    
        }
    
        /**
         * Méthode qui mets à jour le fichier .htaccess du site pour prendre en charge $_GET dans le traitement du formulaire
         *
         * @return  stdio
         * @author  Stephane F
         **/
        public function plxAdminHtaccess() {
    
            echo '<?php $htaccess = str_replace("[L]", "[QSA,L]", $htaccess); ?>';
    
        }
    
    
        /**
         * Méthode qui charge le code css nécessaire à la gestion de onglet dans l'écran de configuration du plugin
         *
         * @return  stdio
         * @author  Stephane F
         **/
        public function AdminTopEndHead() {
            if(basename($_SERVER['SCRIPT_NAME'])=='parametres_plugin.php') {
                echo '<link href="'.PLX_PLUGINS.$this->plug['name'].'/tabs/style.css" rel="stylesheet" type="text/css" />'."\n";
            }
        }
    
        /**
         * Méthode qui affiche un message si le plugin n'a pas la langue du site dans sa traduction
         *
         * @return  stdio
         * @author  Stephane F
         **/
        public function AdminTopBottom() {
    
            echo '<?php
            $file = PLX_PLUGINS."'.$this->plug['name'].'/lang/".$plxAdmin->aConf["default_lang"].".php";
            if(!file_exists($file)) {
                echo "<p class=\"warning\">Plugin MySearch<br />".sprintf("'.$this->getLang('L_LANG_UNAVAILABLE').'", $file)."</p>";
                plxMsg::Display();
            }
            ?>';
    
        }
    
        /**
         * Méthode de traitement du hook plxShowConstruct
         *
         * @return  stdio
         * @author  Stephane F
         **/
        public function plxShowConstruct() {
            # infos sur la page statique
            $string  = "if(\$this->plxMotor->mode=='".$this->url.".html') {";
            $string .= "    \$array = array();";
            $string .= "    \$array[\$this->plxMotor->cible] = array(
                'name'      => '".$this->getParam('mnuName_'.$this->default_lang)."',
                'menu'      => '',
                'url'       => 'search',
                'readable'  => 1,
                'active'    => 1,
                'group'     => ''
            );";
            $string .= "    \$this->plxMotor->aStats = array_merge(\$this->plxMotor->aStats, \$array);";
            $string .= "}";
            echo "<?php ".$string." ?>";
        }
    
        /**
         * Méthode de traitement du hook plxMotorPreChauffageBegin
         *
         * @return  stdio
         * @author  Stephane F
         **/
        public function plxMotorPreChauffageBegin() {
    
            $template = $this->getParam('template')==''?'static.php':$this->getParam('template');
    
            $string = "
            if(\$this->get && preg_match('/^".$this->url.".html\/?/',\$this->get)) {
                \$this->mode = '".$this->url.".html';
                \$prefix = str_repeat('../', substr_count(trim(PLX_ROOT.\$this->aConf['racine_statiques'], '/'), '/'));
                \$this->cible = \$prefix.\$this->aConf['racine_plugins'].'plxMySearch/form';
                \$this->template = '".$template."';
                return true;
            }
            ";
    
            echo "<?php ".$string." ?>";
        }
    
        /**
         * Méthode de traitement du hook plxShowStaticListEnd
         *
         * @return  stdio
         * @author  Stephane F
         **/
        public function plxShowStaticListEnd() {
    
            # ajout du menu pour accèder à la page de recherche
            if($this->getParam('mnuDisplay')) {
                echo "<?php \$status = \$this->plxMotor->mode=='".$this->url.".html'?'active':'noactive'; ?>";
                echo "<?php array_splice(\$menus, ".($this->getParam('mnuPos')-1).", 0, '<li class=\"static menu '.\$status.'\" id=\"static-search\"><a href=\"'.\$this->plxMotor->urlRewrite('?".$this->lang.$this->url.".html').'\" title=\"".$this->getParam('mnuName_'.$this->default_lang)."\">".$this->getParam('mnuName_'.$this->default_lang)."</a></li>'); ?>";
            }
        }
    
        /**
         * Méthode qui renseigne le titre de la page dans la balise html <title>
         *
         * @return  stdio
         * @author  Stephane F
         **/
        public function plxShowPageTitle() {
            echo '<?php
                if($this->plxMotor->mode == "'.$this->url.'.html") {
                    $this->plxMotor->plxPlugins->aPlugins["plxMySearch"]->lang("L_PAGE_TITLE");
                    return true;
                }
            ?>';
        }
    
        /**
         * Méthode qui référence la page de recherche dans le sitemap
         *
         * @return  stdio
         * @author  Stephane F
         **/
        public function SitemapStatics() {
            echo '<?php
            echo "\n";
            echo "\t<url>\n";
            echo "\t\t<loc>".$plxMotor->urlRewrite("?'.$this->lang.$this->url.'.html")."</loc>\n";
            echo "\t\t<changefreq>monthly</changefreq>\n";
            echo "\t\t<priority>0.8</priority>\n";
            echo "\t</url>\n";
            ?>';
        }
    
        /**
         * Méthode statique qui affiche le formulaire de recherche
         *
         * @parm        title       affiche le titre du formulaire si vrai
         * @return  stdio
         * @author  Stephane F
         **/
        public static function form($title=false) {
    
            $placeholder = '';
    
            # récupération d'une instance de plxMotor
            $plxMotor = plxMotor::getInstance();
            $plxPlugin = $plxMotor->plxPlugins->getInstance('plxMySearch');
    
            $searchword = '';
            $method = $plxPlugin->getParam('method') == 'get' ? $_GET : $_POST;
            $frmMethod = $plxPlugin->getParam('method') == 'get' ? 'get' : 'post';
    
            if(!empty($method['searchfield'])) {
                $searchword = plxUtils::strCheck(plxUtils::unSlash($method['searchfield']));
            }
            if($plxPlugin->getParam('placeholder_'.$plxPlugin->default_lang)!='') {
                $placeholder=' placeholder="'.$plxPlugin->getParam('placeholder_'.$plxPlugin->default_lang).'"';
            }
        ?>
    
    <div class="searchform">
        <form action="<?php echo $plxMotor->urlRewrite('?'.$plxPlugin->lang.$plxPlugin->getParam('url').'.html') ?>" method="<?php echo $frmMethod ?>">
            <?php if($title) : ?>
            <h3 class="searchtitle">
                <?php
                    if($plxPlugin->getParam('checkboxes_'.$plxPlugin->default_lang)=='')
                        $plxPlugin->lang('L_FORM_SEARCHFIELD');
                    else
                        $plxPlugin->lang('L_FORM_SEARCHFIELD_2');
                ?>&nbsp;:
            </h3>
            <?php endif; ?>
            <div class="searchfields">
                <?php
                if($plxPlugin->getParam('checkboxes_'.$plxPlugin->default_lang)!='') {
                    if($chk = explode(';', $plxPlugin->getParam('checkboxes_'.$plxPlugin->default_lang))) {
                        echo '<ul>';
                        foreach($chk as $k => $v) {
                            $c = plxUtils::title2url(trim($v));
                            $sel = "";
                            if(isset($method['searchcheckboxes'])) {
                                foreach($method['searchcheckboxes'] as $s) {
                                    if($s==$c) {
                                        $sel = ' checked="checked"';
                                    }
                                }
                            }
                            echo '<li><input'.$sel.' class="searchcheckboxes" type="checkbox" name="searchcheckboxes[]" id="id_searchcheckboxes[]" value="'.$c.'" />&nbsp;'.plxUtils::strCheck($v).'</li>';
                        }
                        echo '</ul>';
                    }
                }
                ?>
                <p>
                <input type="text"<?php echo $placeholder ?> class="searchfield" name="searchfield" value="<?php echo $searchword ?>" />
                <input type="submit" class="searchbutton" value="<?php echo $plxPlugin->getParam('frmLibButton_'.$plxPlugin->default_lang) ?>" />
                </p>
            </div>
        </form>
    </div>
    
        <?php
        }
    
        /** 
         *
         * Méthode d'ajout des <link rel="alternate"... sur les pages des plugins qui gèrent le multilingue
         *
         * @return  stdio
         * @author  WorldBot
         * 
        **/
        public function ThemeEndHead() {
    
            if(defined('PLX_MYMULTILINGUE')) {      
                $plxMML = is_array(PLX_MYMULTILINGUE) ? PLX_MYMULTILINGUE : unserialize(PLX_MYMULTILINGUE);
                $langues = empty($plxMML['langs']) ? array() : explode(',', $plxMML['langs']);
                $string = '';
                foreach($langues as $k=>$v) {
                    $url_lang="";
                    if($_SESSION['default_lang'] != $v) $url_lang = $v.'/';
                    $string .= 'echo "\t<link rel=\"alternate\" hreflang=\"'.$v.'\" href=\"".$plxMotor->urlRewrite("?'.$url_lang.$this->getParam('url').'")."\" />\n";';
                }
                echo '<?php if($plxMotor->mode=="'.$this->getParam('url').'") { '.$string.'} ?>';
            }
        }   
    }
    ?>
    
    

    La methode qui insere les pages "front" des plugins en les faisant squattées le tableau des statiques est la même pour chaque plugins, il te suffit de repeter/modifier l'url produite par le plugin dans chacunes de ces fonctions.

    Note, que c'est un paramètre qui pourrait être ajouté via la page de configuration de façon à être plus permissive et surtout , optionnelle ;)

    Cdt


    Cordialement,
    gcyrillus

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • NonoMNonoM Member
    19 févr. modifié

    Merci.... c'est Cool, Joli travail ! ...j'ai retrouvé toutes les correspondances que tu donnes pour le plugin plxMysearch !
    Ensuite j'ai voulu essayer avec MySiteMap, mais par contre ce ne sont pas les mêmes références...
    on trouve le mot "sitemap" à 17 reprises mais mes modifs pas à pas en "sitemap.html" font tout planter !
    Après coup, il me semble avoir déceler un "url rewriting" dans le code... et dans le navigateur si on ajoute l'extension ".html" la page s'affiche très bien (le coup de bol)
    Donc "monsite.com/sitemap" ou "monsite.com/sitemap.html", c'est pareil.
    à suivre...

  • NonoMNonoM Member

    Petit retour... en fait, j'ai créé ce sujet un peu trop vite (la fatigue certainement)
    l'url rewrtting je suppose, fait que... pour les pages "/contact" et "/search", si je rajoute l'extension ".html" et que je la soumet à google, pas de soucis c'est pris en compte !
    Le seul soucis c'est avec le plugin MySiteMap (/sitemap.html) que google ne veut pas, car il a déjà référencé /sitemap.php
    C'est con, j'aurais aimé changer "/sitemap" en "plan-du-site.html" tout simplement mais je ne trouve pas de solution

  • @NonoM Il me semble que tu peut soumettre un nouveau sitemap (autre URI) et mettre dans le htaccess une redirection permanente de l'ancien vers le nouveau. après il faut être patient ....
    j'ai vu passer des URLS de ma première version de site encore plus de 10 ans après qu'elle n'existaient plus et avec une période de quelques années ou le domaine aussi n'existait plus


    Cordialement,
    gcyrillus

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • NonoMNonoM Member

    Salut @gcyrillus-nomade , bon... à force de fouiller, j'ai résolu le problème... j'ai tout simplement dégagé le plugin MySiteMap !
    car pour créer un Plan de Site qui soit bien référencé en tant que page, il y a plus pratique :
    Créer une page statique avec le code qui va bien !!!
    https://dev.yom.li/blog/pluxml-faire-un-plan-de-site

  • 20 févr. modifié

    @NonoM
    Quelle version de Pluxml utilises tu ? car tu as déjà le fichier sitemap.php à la racine qui fonctionne bien ?

    par exemple http://gcyrillus.free.fr/new/sitemap.php version 5.8.7 de pluxml ou bien il ne convient pas ?

    Notes que si tu n'utilises pas ce fichier pour ton sitemap, l'onglet sitemap du plugin extra_SEO n'aura aucun effet si tu veut filtré quelquechose.

    edit, le code que tu site peut-etre réecrit sans le global $plxShow;

    <?php
    # Page statique Pluxml : liste de tous les articles par catégories par stephane@pluxml.org
    # révision 2.0 par Yomli :
    # Update By Gcyrillus $plxShow is $this ! ;)  20-02-2024
    #   - compatibilité pluxml 5+ 
    
    
    #=======PARAMÈTRES ========
    # format de la date
    $format_date = '#num_day/#num_month/#num_year(4)';
    
    # liste des catégories à afficher
    # exemple: $catList = ''; = articles de toutes les catégories, 
    # exemple: $catList = '001|003'; = articles des catégories 001 et 003 uniquement
    $catList = ''; 
    # nombre d'articles à afficher par catégorie, mettre 0 pour lister tous les articles
    $artsByCategory = 0; 
    #==========================
    ?>
    
    <h4>Pages statiques</h4>
    <ul class="alt">
        <?php $this->staticList('Accueil','<li id="#static_id"><a href="#static_url" class="#static_status" title="#static_name">#static_name</a></li>'); ?>
    </ul>
    
    <h4>Catégories</h4>
    <ul class="alt">
        <?php $this->catList('','<li id="#cat_id" class="#cat_status"><a href="#cat_url" title="#cat_name">#cat_name</a></li>'); ?>
    </ul>
    
    <h4>Articles</h4>
    <?php
    $plx_arts = array();
    $plxGlob_arts = plxGlob::getInstance(PLX_ROOT.$this->plxMotor->aConf['racine_articles']);
    $aFiles = $plxGlob_arts->query('/[0-9]{4}.[home|0-9,]*'.$catList.'[0-9,]*.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/','art','rsort',0,false,'before');
    $aCatList = explode('|', $catList);
    if(is_array($aFiles)) { # On a des fichiers
        while(list($k,$v) = each($aFiles)) { # On parcourt tous les fichiers
            $temp = $this->plxMotor->parseArticle(PLX_ROOT.$this->plxMotor->aConf['racine_articles'].$v);
            $cats = explode(',', $temp['categorie']);
            foreach($cats as $cat) {
                if($catList=='' OR in_array($cat, $aCatList)) {
                    if(!isset($plx_arts[$cat]))
                        $plx_arts[$cat][] = $temp;
                    elseif(intval(sizeof($plx_arts[$cat])) < $artsByCategory OR $artsByCategory == 0)
                        $plx_arts[$cat][] = $temp;
                }
            }
        }
        if($plx_arts) { # On a des articles
    
            # tri en fonction de l'ordre d'affiche des catégories
            uksort($plx_arts, create_function('$a, $b', ' return strcmp(array_search($a, array_keys($this->plxMotor->aCats)), array_search($b, array_keys($this->plxMotor->aCats)));'));
    
            # On boucle sur nos articles
            foreach ($plx_arts as $k => $v) {
    
                $cat_num = $k;
    
                # on trie en fonction de l'ordre d'affichage des articles dans la catégorie
                if($cat_num=='home') {
                    if ($this->plxMotor->aConf['tri']=='asc') 
                        usort($v, create_function('$a, $b', 'return strcmp($a["date"], $b["date"]);'));
                    else
                        usort($v, create_function('$a, $b', 'return strcmp($b["date"], $a["date"]);'));
                    echo '<h5><a href="'.$this->plxMotor->aConf['racine'].'">Accueil</a></h5>';
                }
                elseif(!isset($this->plxMotor->aCats[$cat_num])) {
                    if ($this->plxMotor->aConf['tri']=='asc') 
                        usort($v, create_function('$a, $b', 'return strcmp($a["date"], $b["date"]);'));
                    else
                        usort($v, create_function('$a, $b', 'return strcmp($b["date"], $a["date"]);'));
                    echo '<h5>Non classé</h5>';
                } 
                else {
                    if ($this->plxMotor->aCats[$cat_num]['tri'] == 'asc')
                        usort($v, create_function('$a, $b', 'return strcmp($a["date"], $b["date"]);'));
                    else
                        usort($v, create_function('$a, $b', 'return strcmp($b["date"], $a["date"]);'));
                    $cat_name = plxUtils::strCheck($this->plxMotor->aCats[ $cat_num ]['name']);
                    $cat_url = $this->plxMotor->aCats[ $cat_num ]['url'];
                    echo '';                
                }
                echo "<h5>".$cat_name."</h5><ul class='alt'>";
                # On boucle sur les articles de la categories
                while(list($null, $art) = each($v)) {
                    $art_num = intval($art['numero']);
                    $art_url = plxUtils::strCheck(($art['url']));
                    $art_title = plxUtils::strCheck(($art['title']));
                    $art_date = plxDate::formatDate($art['date'], $format_date);
                    echo '<li>'.$art_date.' : <a href="'.$this->plxMotor->aConf['racine'].'?article'.$art_num.'/'.$art_url.'">'.$art_title.'</a></li>'; 
                }
                echo "</ul>";
            }
    
        }
    }
    ?>
    


    Mais cela fait un plan de site, pas un sitemap utile à google ? ou bien j'ai compris de travers en court de route ?


    Cordialement,
    gcyrillus

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • NonoMNonoM Member
    20 févr. modifié

    @gcyrillus-nomade , Oui j'ai bien déjà le fichier sitemap.php qui a été soumis à google, pas de soucis...
    le truc, c'est qu'en suivant un de tes liens qui parle de ce foutu google alerte (qui me prend bien la tête au passage), il est dit quelque part que les liens "internes" sont importants, alors j'ai voulu créer un plan de site (sitemap) avec les liens de tous les articles mais je ne suis sur de rien... ni de l'impact que cela peut donner dans les alertes de google.

    edit : Merci pour la correction du code !!! ;-)

    edit N°2 : malheureusement, sans le global $plxShow; c'est cassé... on obtient une page blanche...
    pas grave, je reviens au code d'origine ! ;-)

Connectez-vous ou Inscrivez-vous pour répondre.