pntitle avec PNzClassifieds
-
- Inscrit en : 06.12.03
- Dernière visite : 15.08.09
- Messages : 4294967292
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.miragelab.com/modules.php?op=modload&name=News&file=index&catid=&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.switchezvosmaisons.com/ -
- Inscrit en : 06.12.03
- Dernière visite : 15.08.09
- Messages : 4294967292
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. -
- Inscrit en : 06.12.03
- Dernière visite : 15.08.09
- Messages : 4294967292
J'utilise le version 764 de postnuke mais mon theme est extralite (il me semble que ce n'est pas un theme xanthia).
merci -
- Rang : Site Admin
- Inscrit en : 06.12.03
- Dernière visite : 25.02.10
- Messages : 274
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 aurasCode
<!--[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 aussiCode
<!--[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 justeCode
-
- Inscrit en : 04.10.07
- Dernière visite : 19.05.10
- Messages : 19
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 -
- Inscrit en : 06.12.03
- Dernière visite : 15.08.09
- Messages : 4294967292
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 -
- Rang : Site Admin
- Inscrit en : 06.12.03
- Dernière visite : 25.02.10
- Messages : 274
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.vedrine.net/module-Downloads-display-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. -
- Inscrit en : 04.10.07
- Dernière visite : 19.05.10
- Messages : 19
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 -
- Inscrit en : 04.10.07
- Dernière visite : 19.05.10
- Messages : 19
C'est génial
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.switchezvosmaisons.com/PN_zClassifieds-detail-cat-24-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
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
cordialement A bientôt.
-
- Rang : Site Admin
- Inscrit en : 06.12.03
- Dernière visite : 25.02.10
- Messages : 274
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
et cela pourra te servir à le personnaliser.
Le fichier est modules/PN_zClassifieds/pntitle.php
Code
on récupère les variables car et de, comme ladresse de ta page est :
http://www.switchezvosmaisons.com/PN_zClassifieds-detail-cat-24-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.switchezvosmaisons.com/PN_zClassifieds-index-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.switchezvosmaisons.com/PN_zClassifieds-detail-cat-24-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é. -
- Inscrit en : 04.10.07
- Dernière visite : 19.05.10
- Messages : 19
bonjour JM,
je souhaiterai remplacer dans ce dernier codeCode
return pnConfigGetVar('sitename') . ' :: ' . pnVarPrepForDisplay($catname) . ' - '. pnVarPrepForDisplay($title);
}
"return pnConfigGetVar('sitename') ." par la constante " . _TITLECLASSIFIEDS . " est ce possible?
aprés essai deCode
return ' . _TITLECLASSIFIEDS . ' :: ' . pnVarPrepForDisplay($catname) . ' - '. pnVarPrepForDisplay($title);
je constate que cela ne fonctionne pas pourrais tu m'indiquer d'ou vient l'erreur?
cordialement -
- Inscrit en : 04.10.07
- Dernière visite : 19.05.10
- Messages : 19
Bonjour,
Aprés recherche, j'ai pu trouver la solution:Code
return pnVarPrepForDisplay($title) . ' :: ' . pnVarPrepForDisplay($catname) . ' - ' . _TITLECLASSIFIEDS;
}
A priori, ça fonctionne
cordialement
Utilisateurs en ligne
- 13 visiteurs
Données pour les 15 dernières minutes








