PluXml.org

Blog ou CMS à l'Xml

Vous n'êtes pas identifié(e).

#1 16/06/2017 04:35:46

Yannic
Membre
Lieu : Lac-Saint-Jean QC CA
Inscription : 17/01/2017
Messages : 179

BetterMyBetterUrls (idée)

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 :

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) wink
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

Dernière modification par Yannic (16/06/2017 04:42:27)


Bonjour chez vous !

Hors ligne

#2 16/06/2017 15:36:16

Pierre
Membre
Lieu : La belle province
Inscription : 22/06/2014
Messages : 1 099

Re : BetterMyBetterUrls (idée)

Le problème se pose au moment où un article appartient à plus d'une catégorie, une grande force de PluXml qui le différencie des CMS un peu plus "node-based" qui eux y vont de façon hiérarchique.


#titanic {
    float: none;
    bottom: 0;
}

Hors ligne

#3 16/06/2017 16:07:55

Yannic
Membre
Lieu : Lac-Saint-Jean QC CA
Inscription : 17/01/2017
Messages : 179

Re : BetterMyBetterUrls (idée)

Pierre a écrit :

Le problème se pose au moment où un article appartient à plus d'une catégorie, une grande force de PluXml qui le différencie des CMS un peu plus "node-based" qui eux y vont de façon hiérarchique.

Salut, oui c'est un comportement plus hierarchique qui est recherché dans ce cas ci mais le fait d'avoir plusieurs categories n'est pas un problème en soit.


Bonjour chez vous !

Hors ligne

#4 16/06/2017 16:28:47

Pierre
Membre
Lieu : La belle province
Inscription : 22/06/2014
Messages : 1 099

Re : BetterMyBetterUrls (idée)

Alors quand tu pointes directement sur un article (disons sur l'accueil) qui est relié à 3 catégories, laquelle tu vas glisser dans l'URL devant le nom d'article?


#titanic {
    float: none;
    bottom: 0;
}

Hors ligne

#5 16/06/2017 17:51:01

Yannic
Membre
Lieu : Lac-Saint-Jean QC CA
Inscription : 17/01/2017
Messages : 179

Re : BetterMyBetterUrls (idée)

Pierre a écrit :

Alors quand tu pointes directement sur un article (disons sur l'accueil) qui est relié à 3 catégories, laquelle tu vas glisser dans l'URL devant le nom d'article?

Ici c'est la première qui est prise mais les autres urls (categorie2/article et categorie3/article) ou meme (categorie1/categorie2/categorie3/article) fonctionnent aussi, toutefois il serais mieux d'ajouter au plugin une balise pour eviter le duplicate content

Dernière modification par Yannic (16/06/2017 17:54:54)


Bonjour chez vous !

Hors ligne

#6 16/06/2017 18:24:23

bazooka07
Membre
Lieu : Quelque part en Rhône-Alpes
Inscription : 06/02/2014
Messages : 754
Site Web

Re : BetterMyBetterUrls (idée)

Facile big_smile

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 :

[== HTML ==]
<link rel="canonical" href="http://monsite.com/articles/mon-bel-article" />

On utilise la pseudo-categorie articles, pour faire la différence avec les pages statiques, flux RSS, tags, ...

Hors ligne

#7 16/06/2017 19:42:50

Yannic
Membre
Lieu : Lac-Saint-Jean QC CA
Inscription : 17/01/2017
Messages : 179

Re : BetterMyBetterUrls (idée)

Oui c'est tout a fait cela bazooka07 avec la balise canonical si l'on est pas en multilingue smile

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 smile

Dernière modification par Yannic (16/06/2017 19:57:26)


Bonjour chez vous !

Hors ligne

#8 16/06/2017 22:25:42

bazooka07
Membre
Lieu : Quelque part en Rhône-Alpes
Inscription : 06/02/2014
Messages : 754
Site Web

Re : BetterMyBetterUrls (idée)

Comment tu choisis categorie1, par ordre alphabétique, selon l'ordre des catégories défini dans PluXml

une catégorie peut être plus pertinente pour un article et moins pertinente pour un autre article.

Supposons:

  • 3 catégories: cuisine, poissons et pâtisserie

  • 2 articles un sur le cabillaud et un autre sur la tarte-aux-pommes

En suivant ton raisonnement, sur la page d'accueil on aura:

  • un lien sur cuisine/cabillaud

  • un lien sur cuisine/tarte-aux-pommes

Alors que ces liens seraient plus intéressants sur la page d'accueil:

  • un lien sur poissons/cabillaud

  • un lien sur patisserie/tarte-aux-pommes

Pour l'instant PluXml ne permet pas de classer les catégories par intérêt pour chaque article

Hors ligne

#9 16/06/2017 22:36:19

Yannic
Membre
Lieu : Lac-Saint-Jean QC CA
Inscription : 17/01/2017
Messages : 179

Re : BetterMyBetterUrls (idée)

bazooka07 a écrit :

Comment tu choisis categorie1, par ordre alphabétique, selon l'ordre des catégories défini dans PluXml
...
Pour l'instant PluXml ne permet pas de classer les catégories par intérêt pour chaque article

Je n'ai pas regardé cela pour le moment, je suis parti du principe de prendre le premier numero de categorie listé  dans le fichier de l'article


Bonjour chez vous !

Hors ligne

#10 16/06/2017 23:01:18

bazooka07
Membre
Lieu : Quelque part en Rhône-Alpes
Inscription : 06/02/2014
Messages : 754
Site Web

Re : BetterMyBetterUrls (idée)

P.S. : Expressions régulières

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)

Hors ligne

#11 17/06/2017 15:35:46

Yannic
Membre
Lieu : Lac-Saint-Jean QC CA
Inscription : 17/01/2017
Messages : 179

Re : BetterMyBetterUrls (idée)

Oui oui merci bazooka07, mon premier code etait juste un petit test rapide en moins de 5 minutes de ce qui etait faisable et de ce que cela allais me donner au final dans le menu sans trop tripatouiller smile


Bonjour chez vous !

Hors ligne

Pied de page des forums

A propos Nous soutenir Contact Twitter Google+
Copyright © 2006-2017 PluXml.org, tous droits réservés