Fin
pntitle avec PNzClassifieds
  • Envoyé: 05.07.2008, 11:57
    Invité
    rang:
    1
    enregistré depuis:
     décembre 2003
    Status:
    hors ligne
    dernière visite:
    06.03.05
    Messages:
    0
    bonjour,
    Aprés avoir installé le fichier pnTitle.php dans le includes à la racine du site et modifié le header comme indiqué à la pagehttp://www.mira...amp;topic=10
    une fatal error s'affiche ligne102 au niveau du pnModTitle.
    aprés plusieurs essais, je ne réussis pas à modifier l'erreur.Peut être cela vient-il de mon header car j'utilise pnmeta?
    Aurriez vous une piste s'il vous plait?
    cordialement
    Tunsia
    http://www.swit...maisons.com/
  • Envoyé: 05.07.2008, 13:33
    Invité
    rang:
    1
    enregistré depuis:
     décembre 2003
    Status:
    hors ligne
    dernière visite:
    06.03.05
    Messages:
    0
    Bonjour,
    Quelle version de Postnuke/Zikula utilisez vous ?
    Avec les dernières versions, il n'y a qu'à remplacer le fichier modules/Xanthia/plugins/function.title.php par le nouveau inclus et c'est tout inutile de modifier quelquechose dans includes.
    Je n'ai pas d'expérience avec pnMeta.
  • Envoyé: 05.07.2008, 15:05
    Invité
    rang:
    1
    enregistré depuis:
     décembre 2003
    Status:
    hors ligne
    dernière visite:
    06.03.05
    Messages:
    0
    J'utilise le version 764 de postnuke mais mon theme est extralite (il me semble que ce n'est pas un theme xanthia).
    merci
  • Envoyé: 05.07.2008, 16:57
       
    vedrine
    rang:
    Site Admin Site Admin
    enregistré depuis:
     décembre 2003
    Status:
    hors ligne
    dernière visite:
    09.10.08
    Messages:
    266
    Aucune importance !! Que ton thème soit ou pas un thème Xanthia çà marche quand même car si ton thème est Xanthia, tu auras
    Code
    <!--[title]-->
    dans le template du thème qui appelera ton plugin et c'est bon Et si ton thème n'est pas Xanthia il utilisera le module Header_Footer pour s'afficher or dans modules/Header_Footer/templates si tu regardes dans le fichier header_footer_page.htm tu verra qu'il y a aussi
    Code
    <!--[title]-->
    donc çà marchera aussi !! C'est là toute l'astuce mise au point par Mark West, malheureusement le site que tu as cité dans ton premier message soit n'a rien compris soit date de la préhistoire de PostNuke. Mais ce qui m'étonne c'est que tu sois arrivé à suivre leurs conseils car mon header.php contient juste
    Code
    if (eregi('header.php', $_SERVER['PHP_SELF'])) {
        die ('You can\'t access this file directly...');
    }

    function head()
    {
        if (!isset($GLOBALS['xanthia_theme'])) {
            // load header module
            ob_start();
        }

        // call theme header
        themeheader();
    }

    head();

    ?>
  • Envoyé: 05.07.2008, 19:40
     
    tunsia
    enregistré depuis:
     octobre 2007
    Status:
    hors ligne
    dernière visite:
    06.07.08
    Messages:
    7
    Code
    if (eregi('header.php', $_SERVER['PHP_SELF'])) {
        die ('You can\'t access this file directly...');
    }

    function head()
    {
        if (!isset($GLOBALS['xanthia_theme'])) {
            // load header module
            ob_start();
        }

        // call theme header
        themeheader();
    }
    /************ pnMeta *****************************/
        if (pnModAvailable('pnmeta')) {
          //Load user API
          pnModLoad('pnmeta', 'user');
          $page_infos =  pnModFunc('pnmeta', 'user', 'getpageinfos');
          if(is_array($page_infos)) {
                foreach($page_infos as $c) {
                    $page_title = $c['pagetitle'];
                    $metatags = $c['words'];
                    $page_description = $c['description'];
                }
            }
        }
    /************ End pnMeta *****************************/

    /**********************************************************/
        if ($artpage==1)
        {
        /**
         * article page output
         */

            global $info, $hometext;
            echo "<title>$info[title] :: ".pnConfigGetVar('sitename').' :: '.pnConfigGetVar('slogan')."</title>\n";
            if (pnConfigGetVar('dyn_keywords') == 1) {
               $htmlless = check_html($info['maintext'], $strip ='nohtml');
               $symbolLess = trim(ereg_replace('("|\?|!|:|\.|\(|\)|;|\)+', ' ', $htmlless));
               $keywords = ereg_replace('( |'.chr(10).'|'.chr(13).')+', ',', $symbolLess);
               $metatags = ereg_replace(",+", ",",$keywords);
               echo "\n";
            } else {
               echo "\n";
               
               //moved for pnMeta
               echo '\n";
            }
        } else {
            /**
            * all other page output
            */
            /********* pnMeta ***************/
            echo "<title>";  
        echo pnConfigGetVar('
    sitename');
        if(isset($page_title)) echo " :: $page_title";
        if(pnConfigGetVar('
    slogan') != "") echo " :: ".pnConfigGetVar('slogan')."";
        echo "</title>\n";
           
        if(isset($metatags))
            echo "\n";
        else
            echo '
    \n";
        if(isset($page_description))
            echo '\n"
    ;
        else
            echo '\n";
        /******************************/   
            
            //old
            //echo '
    <title>'.pnConfigGetVar('sitename').' :: '.pnConfigGetVar('slogan')."</title>\n";
            //echo '
    \n";
        }
       
        //deleted  for pnmeta
        //echo '\n"
    ;
    /**********************************************************/   

    head();

    ?>


    merci pour ta réponse, plus haut mon fichier header.php pour faire fonctionner pnmeta.
    Le problème c'est qu'avec ce code pntitle ne fonctionne pas.
    Je suis pas assez doué en code pour bidouiller le fichier. il y a plantage systhématique.
    Le site citè est la seule source d'information que j'ai pu trouvé pour rendre compatible pnmeta et pntitle.
    Pourquoi pnmeta ?
    parce que mon site est multilingue et c'est le seul module que j'ai trouvé pour faire un référencement multilingue.
    Le setting de postnuke ou on note les metas n'est pas multilingue.
    Mais peut être aurais tu une méthode et des modules de référencement pour site multilingue ?
    cordialement
  • Envoyé: 05.07.2008, 20:30
    Invité
    rang:
    1
    enregistré depuis:
     décembre 2003
    Status:
    hors ligne
    dernière visite:
    06.03.05
    Messages:
    0
    Si tu regarde l'affichage de ton code ci-dessus on voit bien au moins une erreur grâce aux couleurs (il y en a peut être d'autres)
    la ligne
    Code
    echo '\n";
    devrait être
    Code
    echo "\n";

    Mais tu ne devrais pas faire çà : ce header bidouillé a été fait pour une vieille version de PostNuke (à mon avis avant la .750) et même si tu finis par le faire "marcher" tu casse tout le fonctionnement normal de PostNuke .764 en faisant çà.
    Dis moi précisément ce que tu veux faire et on trouvera un moyen plus propre.
    Si je comprend bien le fonctionnement de pnMeta, tu definis dans l'Administration les headers title, meta et description
    (mais alors je me demande pourquoi tu as aussi besoin de titlehack puisqu'il semble y avoir un title dans pnMeta ?)
    Si j'arrive à comprendre le fonctionnement en détail, il devrait être possible d'écrire un petit plugin pnRender qui marche aussi bien avec les thèmes Xanthia que les non-Xanthia et sans être obligé de modifier header.php
  • Envoyé: 05.07.2008, 22:16
       
    vedrine
    rang:
    Site Admin Site Admin
    enregistré depuis:
     décembre 2003
    Status:
    hors ligne
    dernière visite:
    09.10.08
    Messages:
    266
    Bon je n'ai pas pu résister ! Avant d'aller dormir j'ai écrit un peu de code et je t'ai fait un petit téléchargement http://www.vedr...-lid-36.html avec 3 plugins pnRender à mettre dans modules/Xanthia/plugins pour remplacer ceux existants
    Ensuite tu remet ton header d'origine de PostNuke .764 et tu me dis si çà marche et si çà te convient.
    Je n'ai pas fait beaucoup de tests mais sur mon site de test ça a bien l'air de marcher pour les headers keywords , description et title.
  • Envoyé: 06.07.2008, 12:58
     
    tunsia
    enregistré depuis:
     octobre 2007
    Status:
    hors ligne
    dernière visite:
    06.07.08
    Messages:
    7
    Merci beaucoup de t'être penché sur ma question, tu as tout à fait cerné le problème pnMeta ne gère que les balises title, keywords et description par module et non pas pour chaque page, du coup chaque page générée par un même module porte le même title, keywords et description.
    Ce qui engendre un duplicate title qui pénalise le référencement.
    mon site en 6 langues à besoin de tout ce panel different pour être vu. Une seule description et une liste unique de keywords est trop juste pour un site de ce type.
    Le but est donc bien précisément d'avoir des metas personalisés pour chaque langue.
    Je télécharge les plugins et te tiens au courant du résultat.
    Mais au fait! dois je désinstaller pnMeta?
    cordialement
  • Envoyé: 06.07.2008, 17:30
     
    tunsia
    enregistré depuis:
     octobre 2007
    Status:
    hors ligne
    dernière visite:
    06.07.08
    Messages:
    7
    C'est génial icon_lol tout fonctionne trés bien ! GRAND MERCI ! pour cette réussite !

    J'ai encore une petite question qui me turlupine:
    Dans la barre de navigation apparait le titre du site, le titre de la page, mais au milieu d'ou vient la variable?
    exemple pour moi sur la page http://www.swit...4-de-28.html j'ai switchezvosmaisons.com::Echange de maisons - Appartement 2 adultes et 1 enfant.
    Comment est récupéré "Echange de maisons" je ne le trouve nul part icon_confused
    D'autre part dans ton premier message tu me demandais comment j'avais pu faire fonctionner pnMeta.
    En me repenchant sur la chose, j'avais enlevé
    Code
    <title><!--[title]--></title><meta name="Description"<meta name="Keywords"

    du fichier /themes/ExtraLite/templates/modules/Header_Footer/header_footer_page.htm
    D'ailleurs pour que tes plugins fonctionnent j'ai du le remettre le fichier d'origine (c'est tout de même plus clean).
    Ce qui à soulevé une nouvelle intérogation de ma part:
    J'ai 2 fichiers header_footer_page.htm un dans /themes/ExtraLite/templates/modules/Header_Footer/header_footer_page.htm, l'autre dans modules/Header_Footer/templates.
    Etrange non !? ou est ce normal ?
    Ceci étant cela n'affecte pas le fonctionnement.
    Encore merci et bravo icon_wink
    cordialement A bientôt.
  • Envoyé: 06.07.2008, 18:12
       
    vedrine
    rang:
    Site Admin Site Admin
    enregistré depuis:
     décembre 2003
    Status:
    hors ligne
    dernière visite:
    09.10.08
    Messages:
    266
    Bon alors je t'explique comment est fait le titre d'une page pour le module PN_zClassifieds, c'est facile, je suis l'auteur du fichier icon_wink et cela pourra te servir à le personnaliser.
    Le fichier est modules/PN_zClassifieds/pntitle.php
    Code
    list($catid, $adid) = pnVarCleanFromInput('cat', 'de');
    on récupère les variables car et de, comme ladresse de ta page est : http://www.swit...4-de-28.html la variable $catid va contenir 24 et la variable $adid va contenir 28
    Code
    list($dbconn) = pnDBGetConn();
        $pntable = pnDBGetTables();
       
        if ($adid && $catid) {
            $prefix = pnConfigGetVar('prefix');
            $sql = "SELECT a.subject FROM {$prefix}_classifieds_ads a WHERE a.ad_id = '" . (int)pnVarPrepForStore($adid) ."'
            AND a.cat_id='"
    . (int)pnVarPrepForStore($catid) . "'";
            $result = $dbconn->Execute($sql);
            if ($dbconn->ErrorNo() != 0) {
                return false;
            }
            list($title) = $result->fields;
            $result->Close();
            return pnConfigGetVar('sitename') . ' :: ' . _TITLECLASSIFIEDS . ' - '. pnVarPrepForDisplay($title);   
        }
    C'est le premier cas celui où il y a à la fois un numéro d'annonce dans $adid et un numéro de catégorie dans $catid, on fait une requête dans la base de données pour récupéper le totre de l'annonce dans l'annonce et si tu regarde bien la ligne :
    Code
    return pnConfigGetVar('sitename') . ' :: ' . _TITLECLASSIFIEDS . ' - '. pnVarPrepForDisplay($title);
    Tu vois que le titre est fait de 3 parties : - le nom du site - la constante _TITLECLASSIFIEDS qui vient du fichier lang - le titre del'annonce Donc tu as ta réponse, Echange de maisons vient de ton fichier lang !! Je passe à la suite, le deuxième cas celui où on est sur une page où il n'y a qu'un numéro de catégorie (par exemple sur ton site http://www.swit...-cat-24.html Dans ce cas le code qui sert est
    Code
    if ($catid) {
            $prefix = pnConfigGetVar('prefix');
            $sql = "SELECT cat_name FROM {$prefix}_classifieds_category WHERE root_id = '" . (int)pnVarPrepForStore($catid) ."'";
            $result = $dbconn->Execute($sql);
            if ($dbconn->ErrorNo() != 0) {
                return false;
            }
            list($title) = $result->fields;
            $result->Close();
            return pnConfigGetVar('sitename') . ' :: ' . _TITLECLASSIFIEDS . ' - '. pnVarPrepForDisplay($title);   
        }
    Cette fois ci la requête à la base de données sert à récupérer le nom de la catégorie. Exercice (Je suis prof donc après le cours, les exercices !!) Supposons que dans le cas d'une annonce je veuille que le titre de la page soit de la forme : Nom du site :: Nom de la catégorie - Titre de l'annonce Par exemple pour ta page http://www.swit...4-de-28.html Je voudrais que le titre soit : switchezvosmaisons.com ::Appartements, Studios - Appartement 2 adultes et 1 enfant Est-ce possible ? Oui bien sûr La solution "amateur" consiste si on n'est pas au top en langage sql à combiner les 2 bouts de code ci-dessus pour récupérer à la fois le nom de la catégorie et le titre de l'annonce, mais c'est un peu du gaspillage car c'est dommage de faire 2 requêtes, on peut en faire une seule
    Code
    list($dbconn) = pnDBGetConn();
        $pntable = pnDBGetTables();
       
        if ($adid && $catid) {
            $prefix = pnConfigGetVar('prefix');
            $sql = "SELECT a.subject, b.cat_name FROM {$prefix}_classifieds_ads a, {$prefix}_classifieds_category b WHERE a.ad_id = '" . (int)pnVarPrepForStore($adid) ."'
            AND a.cat_id=b.root_id AND b.root_id ='"
    . (int)pnVarPrepForStore($catid) . "'";
            $result = $dbconn->Execute($sql);
            if ($dbconn->ErrorNo() != 0) {
                return false;
            }
            list($title, $catname) = $result->fields;
            $result->Close();
            return pnConfigGetVar('sitename') . ' :: ' . pnVarPrepForDisplay($catname) . ' - '. pnVarPrepForDisplay($title);   
        }

    Et voila un beau titre bien significatif.
    Je suis tellement content de ma modif que je viens de l'installer sur mon site.
    Si tu as du mal à modifier le fichier ou du mal à me suivre écris moi à vedrine _AT_ vedrine _DOT_ net et je t'enverrai le fichier pntitle modifié.
Réponse rapide
 
  • Options
Code:
Couleur de la police:  
Taille de la police: