BetterMyBetterUrls (idée)
Yannic
Member
Bonjour.
Désirant avoir des urls avec la catégorie principale devant (idem avec le groupe des pages) je me suis modifié le plugin plxMyBetterUrls comme suit:
dans la fonction RewriteUrls() de plxMyBetterUrls :
dans la fonction plxMotorConstruct() de plxMyBetterUrls :
Ceci afin de me permettre d'avoir par exemple :
( avec $this->static = "pages" et this->article = "blog" via la configuration du plugin )
ou sinon en laissant vide dans la configuration du plugin :
je n'en ferais pas un plugin alternatif à plxMyBetterUrls pour le moment car je n'en ai pas le temps, mais je poste ici mon début de modifications de plxMyBetterUrls histoire de partager un peu. (on peux aller beaucoup plus loin pour par exemple (<- peut-être ce que je ferais) être dans un format %DATE% au lieu d'un format %CATEGORIE% par exemple pour les articles :
Cela peut sembler un peu confus mais cela ne l'est pas (du moins dans ma tête)
Libre à quelqu'un de faire mieux et de le proposer en plugin ou en amélioration du plugin existant, l'idée principale étant d'arriver à pouvoir formater les urls un peu comme il est possible dans wp.
exemple :
http://example.com/yyyy/mm/dd/post-name
http://example.com/yyyy/mm/post-name
http://example.com/yyyy/post-name
http://example.com/%category%/post-name
http://example.com/%author%/post-name
Désirant avoir des urls avec la catégorie principale devant (idem avec le groupe des pages) je me suis modifié le plugin plxMyBetterUrls comme suit:
dans la fonction RewriteUrls() de plxMyBetterUrls :
public function RewriteUrls() {
echo '<?php
if(preg_match_all("/article[0-9]/", $output, $test))
{
foreach($test[0] as $k=>$v)
{
$v2 = str_replace("article","",$v);
$v2 = str_pad($v2,4,0,STR_PAD_LEFT);
$r = $plxMotor->artInfoFromFilename($plxMotor->plxGlob_arts->aFiles[$v2]);
$r = explode(",",$r["catId"]);
if(!empty($r))
{
$r = $r[0];
$output = str_replace($v, "'.$this->article.'".$plxMotor->aCats[$r]["url"], $output);
}
}
}
if(preg_match_all("/static[0-9]/", $output, $test2))
{
foreach($test2[0] as $k=>$v)
{
$v2 = str_replace("static","",$v);
$v2 = str_pad($v2,3,0,STR_PAD_LEFT);
$r = $plxMotor->aStats[$v2]["group"];
if(!empty($r))
{
$r = plxUtils::title2url($r);
$output = str_replace($v, "'.$this->static.'".$r, $output);
}
}
}
$output = preg_replace("/categorie[0-9]+\/([a-z0-9-]+)/", "'.$this->category.'$1'.$this->getParam('ext_url').'", $output);
$output = preg_replace("/static[0-9]+\/([a-z0-9-]+)/", "'.$this->static.'$1'.$this->getParam('ext_url').'", $output);
?>';
}
dans la fonction plxMotorConstruct() de plxMyBetterUrls :
# pages statiques
foreach($this->aStats as $numstat => $stat) {
$link = "'.$this->lang.$this->static.'".$stat["url"]."'.$this->getParam('ext_url').'";
if($get==$stat["url"]) {
$get = "'.$this->lang.$this->static.'".$get;
}
if(basename($link)==basename($get)) {
$this->get = "'.$this->lang.'static".intval($numstat)."/".$stat["url"];
return;
}
}
# articles
global $plxShow;
foreach($this->plxGlob_arts->aFiles as $numart => $filename) {
if(preg_match("/^[0-9]{4}.([0-9,|home|draft]*).[0-9]{3}.[0-9]{12}.([a-z0-9-]+).xml$/", $filename,$capture)) {
$link = $capture[2]."'.$this->getParam('ext_url').'";
if($link==basename($get)) {
$this->get = "'.$this->lang.'article".intval($numart)."/".$capture[2];
return;
}
}
}
Ceci afin de me permettre d'avoir par exemple :
( avec $this->static = "pages" et this->article = "blog" via la configuration du plugin )
https://monsite.com/pages/groupe-de-la-page/ma-page-statique
et
https://monsite.com/blog/categorie-de-larticle/mon-premier-article
ou sinon en laissant vide dans la configuration du plugin :
https://monsite.com/groupe-de-la-page/ma-page-statique
et
https://monsite.com/categorie-de-larticle/mon-premier-article
je n'en ferais pas un plugin alternatif à plxMyBetterUrls pour le moment car je n'en ai pas le temps, mais je poste ici mon début de modifications de plxMyBetterUrls histoire de partager un peu. (on peux aller beaucoup plus loin pour par exemple (<- peut-être ce que je ferais) être dans un format %DATE% au lieu d'un format %CATEGORIE% par exemple pour les articles :
https://monsite.com/20170615/mon-premier-article
Cela peut sembler un peu confus mais cela ne l'est pas (du moins dans ma tête)
Libre à quelqu'un de faire mieux et de le proposer en plugin ou en amélioration du plugin existant, l'idée principale étant d'arriver à pouvoir formater les urls un peu comme il est possible dans wp.
exemple :
http://example.com/yyyy/mm/dd/post-name
http://example.com/yyyy/mm/post-name
http://example.com/yyyy/post-name
http://example.com/%category%/post-name
http://example.com/%author%/post-name
Buster/NGINX/PHP7/PluXml5.8
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Buster/NGINX/PHP7/PluXml5.8
Buster/NGINX/PHP7/PluXml5.8
sur la page d'accueil, l'url sera articles/mon-bel-article
sur la page categorie1, l'url sera categorie1/mon-bel-article
sur la page categorie2, l'url sera categorie2/mon-bel-article
sur la page categorie3, l'url sera categorie3/mon-bel-article
Dans les 4 cas le même contenu est généré.
Par contre, dans l'entête de la page, pour ne pas être pénalisé pour le référencement, il faut ajouter une URl canonique :
On utilise la pseudo-categorie articles, pour faire la différence avec les pages statiques, flux RSS, tags, ...
Accès à mon dépôt de plugins et thèmes
installe PluXml plus vite que ton ombre avec kzInstall2
Hormis que sur la page d'acceuil (du moins pour ma part) mes liens serons plutot categorie1/article au lieu articles/article mais sinon voila l'idée que tu resume bien
Buster/NGINX/PHP7/PluXml5.8
une catégorie peut être plus pertinente pour un article et moins pertinente pour un autre article.
Supposons:
[list=*]
[*]3 catégories: cuisine, poissons et pâtisserie[/*]
[*]2 articles un sur le cabillaud et un autre sur la tarte-aux-pommes[/*]
[/list]
En suivant ton raisonnement, sur la page d'accueil on aura:
[list=*]
[*]un lien sur cuisine/cabillaud[/*]
[*]un lien sur cuisine/tarte-aux-pommes[/*]
[/list]
Alors que ces liens seraient plus intéressants sur la page d'accueil:
[list=*]
[*]un lien sur poissons/cabillaud[/*]
[*]un lien sur patisserie/tarte-aux-pommes[/*]
[/list]
Pour l'instant PluXml ne permet pas de classer les catégories par intérêt pour chaque article
Accès à mon dépôt de plugins et thèmes
installe PluXml plus vite que ton ombre avec kzInstall2
Buster/NGINX/PHP7/PluXml5.8
je te propose 2 noms de fichiers d'articles à tester:
1111ab123012345678201706182300zarticle-qui-dit-rienqxml
1112.000,home.001.201706182330.article-qui_cause-bien.xml
Visiblement le 1er est non conforme.
pourtant il passe très bien dans ta fonction preg_match(..)
Voici une expression régulière qui ne matche que le 2ème nom qui est correct:
/^\d{4}\.(\d{3}(?:,\d{3}|,home)*)\.\d{3}\.\d{12}\.[\w-]+\.xml$/
Tu peux faire les tests sur regex101.com.
Copie d'écran sur 1ère expression regex
Copie d'écran sur 2ème expression regex
Le caractère "." correspond à n'importe quel caractère
\d correspond à n'inporte quel chiffre
\w à a-z0-9_
un article draft n'est pas publié (brouillon)
Accès à mon dépôt de plugins et thèmes
installe PluXml plus vite que ton ombre avec kzInstall2
Buster/NGINX/PHP7/PluXml5.8
Je rebondis sur ce fil pour savoir comment faire pour afficher une URL canonique dans le header ? Comment la récupérer ? Merci.
Dans la branch master sur le dépôt github, il y a la méthode plxShow::canonical().
https://github.com/pluxml/PluXml/blob/master/core/lib/class.plx.show.php
Accès à mon dépôt de plugins et thèmes
installe PluXml plus vite que ton ombre avec kzInstall2
Merci Bazooka ! Je peux juste remplacer ce php sans prendre tout le reste ?
edit : ah non, ça m'a cassé mon menu (toutes les categories, même celle masquées s'affichent, et mes liens vers mes statiques ont disparus)
Du coup j'ai juste copié la méthode, et ça fonctionne, merci !
Par contre, du coup le lien "Canonical" n'est pas une URL réecrite. Ce n'est pas gênant pour le SEO ?
https://www.krocui.com/article/bonheur
devient
link rel="canonical" href="https://www.krocui.com/index.php?article/bonheur"