Dotclear

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

Annonce

#26 2010-01-05 14:54:48

Lomalarch
Responsable du photocopieur
Lieu : Colombes (92)
Inscription : 2006-05-02
Site Web

Re : Tri à double critère : un tag dans une catégorie

Bon, là, je coince vraiment sur la requête : dans le cadre des urls, comment je fais pour distinguer la partie de l’url qui désigne la catégorie (et qui peut contenir des / car sous-cat) de celle qui désigne le tag, dans ma page de résultat (je commence peut-être par la fin, mais je préfère avoir un résultat possible avant de me préoccuper du formulaire pour le demander) ?

Une regexp, sans doute, mais comment la former ? Ou alors je remonte le fil : je fais une requête SQL sur la meta_id (puisqu’après tout elle sera prise dans le $POST du formulaire de recherche filtrée), je l’ôte de la fin de l’URL et je rerequête sur la catégorie alors restante pour envoyer le résultat (parmi les précédents) (comme dit l’autre, ce qui se conçoit bien s’énonce clairement – ça va se voir que je patauge).

Si quelqu’un sait, ou détient le RTFM ultime… :-)


RTFM attitude : https://fr.dotclear.org/documentation/2.0
Le chantier tips, tutos et astuces : http://tips.dotaddict.org/
Rien nulle part??? une petite recherche sul’ forum, alors?: https://forum.dotclear.org/search.php ?

Hors ligne

#27 2010-01-05 15:10:47

Dsls
Modérateur couteau-suisse
Inscription : 2004-11-18
Site Web

Re : Tri à double critère : un tag dans une catégorie

Le plus simple serait de mettre un séparateur explicite, du genre : blog/tagincat/catURL/tag/tagURL

... ou de passer le tag en query string :
Pour un blog en path_info :blog/tagincat/catURL?tag=tagURL
Pour un blog en query_string :blog/?tagincat/catURL&tag=tagURL


Dyslexics have more fnu!

Hors ligne

#28 2010-01-05 15:27:18

Lomalarch
Responsable du photocopieur
Lieu : Colombes (92)
Inscription : 2006-05-02
Site Web

Re : Tri à double critère : un tag dans une catégorie

Le séparateur, j’aime bien (plus que la query, dans le cas qui nous occupe, ça plaira plus à la commanditaire). J’essaie ça, merci.


RTFM attitude : https://fr.dotclear.org/documentation/2.0
Le chantier tips, tutos et astuces : http://tips.dotaddict.org/
Rien nulle part??? une petite recherche sul’ forum, alors?: https://forum.dotclear.org/search.php ?

Hors ligne

#29 2010-01-05 16:22:17

Lomalarch
Responsable du photocopieur
Lieu : Colombes (92)
Inscription : 2006-05-02
Site Web

Re : Tri à double critère : un tag dans une catégorie

Rha, je regarde bêtement mon écran, et je ne vois pas comment filtrer une liste de billets (sortie par getCategories, par exemple), à travers la table des metas. Le fait que ça joue sur deux tables m’empêche de « visualiser » la situation. Quelqu’un a un cerveau de rechange ?


RTFM attitude : https://fr.dotclear.org/documentation/2.0
Le chantier tips, tutos et astuces : http://tips.dotaddict.org/
Rien nulle part??? une petite recherche sul’ forum, alors?: https://forum.dotclear.org/search.php ?

Hors ligne

#30 2010-01-05 16:55:19

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : Tri à double critère : un tag dans une catégorie

Il me semble que l'on peut récupérer une liste de billets en leur passant un paramètre sur post_meta (cf inc/core/class.dc.blog.php la fonction getPosts). Bien entendu si je ne me trompe pas sur ce que contient post_meta :D

Comme on peut aussi choisir la catégorie, tu pourrais obtenir cette liste avec un code du genre

$category = la categorie selectionnée
$params['cat_url'] = explode(",", $category);
$meta = '';	
$rsp = $core->blog->getPosts($params);
while ($rsp->fetch()) {
$meta .= $rsp->post_meta;
}

devrait en gros te donner la liste des tags de chaque billet de la catégorie dans un tableau (?)

Ce code serait appelé par le clic sur le titre de la catégorie

Hors ligne

#31 2010-01-08 19:42:51

PiaDilo
Membre
Lieu : Boulogne-Billancourt
Inscription : 2009-03-15
Site Web

Re : Tri à double critère : un tag dans une catégorie

Lomalarch a écrit :
Gradiva a écrit :

Ça veut dire quoi la réponse de Lomalarch ? Il aime pas la solution de Tomtom ?

Pas du tout juste que :
- j’avais pensé que son plugin existait
- je ne l’avais pas encore testé (et je ne l’ai toujours pas fait)
- j’attends le moment propice pour voir si quoi comment il est possible de faire quelque chose qui corresponde à ce qu’on me demande (oui, parce que l’idée de départ est pas de moi, je ne suis pas si tordu ;-) )

Peut venir que d'une nana, une idée pareille ;-)


Carpe Diem

Hors ligne

#32 2010-01-09 15:15:57

Gradiva
Membre
Inscription : 2009-11-23
Site Web

Re : Tri à double critère : un tag dans une catégorie

Normalement il faudrait du plus simple , c'est à dire:
Et, ou, sauf.


L'intérêt de la chose c'est le côté transversal, sinon on revient à la rigidité classique d'un thesaurus.

Le meilleur exemple que j'ai vu pour l'instant c'est chez Expression Engine:
http://www.urbanbike.com/index.php/search/

Hors ligne

#33 2010-01-12 09:57:56

Lomalarch
Responsable du photocopieur
Lieu : Colombes (92)
Inscription : 2006-05-02
Site Web

Re : Tri à double critère : un tag dans une catégorie

Et hop, je déplace, il me paraît bien ici çui-ci !

J’essaie de comprendre comment je peux exploiter la proposition d’amalgame et je reviens pleurer ici ;-)

Question subsidiaire : vous pensez que c’est un plugin qui peut intéresser quelqu’un, si j’arrive à en faire un truc distribuable ?


RTFM attitude : https://fr.dotclear.org/documentation/2.0
Le chantier tips, tutos et astuces : http://tips.dotaddict.org/
Rien nulle part??? une petite recherche sul’ forum, alors?: https://forum.dotclear.org/search.php ?

Hors ligne

#34 2010-01-12 10:01:06

Jean-Michel
Modérateur à ailes d'ange
Lieu : Paris
Inscription : 2006-08-22
Site Web

Re : Tri à double critère : un tag dans une catégorie

Lomalarch a écrit :

Question subsidiaire : vous pensez que c’est un plugin qui peut intéresser quelqu’un, si j’arrive à en faire un truc distribuable ?

Oui ;-)

Hors ligne

#35 2010-01-12 10:02:57

JcDenis
Membre
Lieu : Lyon, France
Inscription : 2007-08-31
Site Web

Re : Tri à double critère : un tag dans une catégorie

Lomalarch a écrit :

Question subsidiaire : vous pensez que c’est un plugin qui peut intéresser quelqu’un, si j’arrive à en faire un truc distribuable ?

Tu auras tellement transpiré pour le faire que ce serait dommage de ne pas le distribuer.


Cordialement,
_JC | Intérimaire | En mode invisible

Hors ligne

#36 2010-01-12 10:04:10

Lomalarch
Responsable du photocopieur
Lieu : Colombes (92)
Inscription : 2006-05-02
Site Web

Re : Tri à double critère : un tag dans une catégorie

Ah oui, et moins subsidiaire : je ne comprends pas bien comment fonctionne la variable $params qui semble au cœur de ce que je cherche à faire. Comment extrait-elle les éléments de l’URL et, pour rebondir sur la proposition de Dsls en #27, existe-t-il un exemple d’utilisation d’une URL de ce type dans un plugin ? Dans Gallery quelque part ?


RTFM attitude : https://fr.dotclear.org/documentation/2.0
Le chantier tips, tutos et astuces : http://tips.dotaddict.org/
Rien nulle part??? une petite recherche sul’ forum, alors?: https://forum.dotclear.org/search.php ?

Hors ligne

#37 2010-01-12 10:14:24

JcDenis
Membre
Lieu : Lyon, France
Inscription : 2007-08-31
Site Web

Re : Tri à double critère : un tag dans une catégorie

Lomalarch a écrit :

Comment extrait-elle les éléments de l’URL

Dans Dotclear l'affichage des pages des billets utilise ce principe, la fonction getPageNumber() est dans inc/public/lib.urlhandlers et elle est appelée par exemple dans la fonction home() du même fichier.


Cordialement,
_JC | Intérimaire | En mode invisible

Hors ligne

#38 2010-01-12 10:18:55

Lomalarch
Responsable du photocopieur
Lieu : Colombes (92)
Inscription : 2006-05-02
Site Web

Re : Tri à double critère : un tag dans une catégorie

JcDenis a écrit :
Lomalarch a écrit :

Question subsidiaire : vous pensez que c’est un plugin qui peut intéresser quelqu’un, si j’arrive à en faire un truc distribuable ?

Tu auras tellement transpiré pour le faire que ce serait dommage de ne pas le distribuer.

Merci de ton soutien (ceci étant, je ne sais pas si j’oserais : le code risque d’être rien moche ;-) )

Je plonge dans la lib urlhandlers et je reviens quand je commence à me noyer :-)


RTFM attitude : https://fr.dotclear.org/documentation/2.0
Le chantier tips, tutos et astuces : http://tips.dotaddict.org/
Rien nulle part??? une petite recherche sul’ forum, alors?: https://forum.dotclear.org/search.php ?

Hors ligne

#39 2010-01-12 11:47:51

Lomalarch
Responsable du photocopieur
Lieu : Colombes (92)
Inscription : 2006-05-02
Site Web

Re : Tri à double critère : un tag dans une catégorie

Bien, j’ai la nette sensation d’avancer (peut-être me bercé-je d’illusions, mais sait-on jamais). Plus qu’à comprendre comment je passe un paramètre à tpl:Entries pour qu’il me filtre la boucle en fonction de l’URL de catégorie passée en variable (apparemment, la variable est comprise). Je vais déjeuner et je vous informe de la suite du feuilleton \o/


RTFM attitude : https://fr.dotclear.org/documentation/2.0
Le chantier tips, tutos et astuces : http://tips.dotaddict.org/
Rien nulle part??? une petite recherche sul’ forum, alors?: https://forum.dotclear.org/search.php ?

Hors ligne

#40 2010-01-12 14:16:31

Lomalarch
Responsable du photocopieur
Lieu : Colombes (92)
Inscription : 2006-05-02
Site Web

Re : Tri à double critère : un tag dans une catégorie

je crains d’avoir été un peu trop optimiste :-/

l’URL étant de la forme domaine.tld/dossierblog/tagincat/Tag-URL/cat/url/de/categorie, j’arrive à pregmatcher la partie catégorie (du moins je crois) en reprenant la fonction getPageNumber indiquée par JcDenis ci-dessus :

		if (preg_match('#(^|/)cat/(.+)$#',$args,$m)) {
			$c = $m[2];
			if ($c != '') {
				$catargs = preg_replace('#(^|/)cat/(.+)$#','',$args);
				return $c;
			}
		}

mais je ne sais pas comment appliquer un traitement équivalent à l’URL de tag (comprise, donc, entre tagincat/ et /cat/) et ne sais pas récupérer le $catargs (est-ce que définir une nouvelle variable ici est la bonne méthode, d’ailleurs ?) pour faire comme si j’ajoutais category="cat-url ?sub" dans tpl:Entries

Si quelqu’ a une boule de cristal mieux réglée que la mienne :)


RTFM attitude : https://fr.dotclear.org/documentation/2.0
Le chantier tips, tutos et astuces : http://tips.dotaddict.org/
Rien nulle part??? une petite recherche sul’ forum, alors?: https://forum.dotclear.org/search.php ?

Hors ligne

#41 2010-01-12 14:51:40

Dsls
Modérateur couteau-suisse
Inscription : 2004-11-18
Site Web

Re : Tri à double critère : un tag dans une catégorie

JE verrais un truc du genre :

		if (preg_match('#(^|/)(.+)/cat/(.+)$#',$args,$m)) {
			$t = $m[2];
			$c = $m[3];
		}

Par contre, à quoi sert ton test sur $c qui suit, et le preg_replace ? La catégorie est dans $c, non ?


Dyslexics have more fnu!

Hors ligne

#42 2010-01-12 15:51:35

Lomalarch
Responsable du photocopieur
Lieu : Colombes (92)
Inscription : 2006-05-02
Site Web

Re : Tri à double critère : un tag dans une catégorie

Oui, il me semble aussi, et je me suis un peu posé la même question, mais c’est un peu le problème quand on ne sait pas bien ce qu’on fait qu’on copie-colle les bouts de codes attrapés ici et là : le preg_replace est directement issu du traitement des numéros de pages dans inc/public/lib.urlhandlers.php

En suivant tes bons conseils, j’arrive à cette chose ci-dessous qui me renvoie obstinément, et quelle que soit l’url, à la page du premier tag de la table dc_post_meta (en tout cas il me semble).

		if (preg_match('#(^|/)tagincat/([^/]+)/cat/(.+)$#',$args,$m)) {
			$t = $m[2];
			$c = $m[3];
		}		
			$objMeta = new dcTiC($GLOBALS['core']);
			$GLOBALS['_ctx']->meta = $objMeta->getMeta('tag',null,$t);

J’espérais naïvement obtenir, en attendant mieux, la page du tag appelé avant /cat/, mais il n’en est visiblement pas question. Je me fourvoie donc, mais z’où ?


RTFM attitude : https://fr.dotclear.org/documentation/2.0
Le chantier tips, tutos et astuces : http://tips.dotaddict.org/
Rien nulle part??? une petite recherche sul’ forum, alors?: https://forum.dotclear.org/search.php ?

Hors ligne

#43 2010-01-12 15:58:54

Lomalarch
Responsable du photocopieur
Lieu : Colombes (92)
Inscription : 2006-05-02
Site Web

Re : Tri à double critère : un tag dans une catégorie

Hum, je voulais dire la table dc_meta, vous aviez corrigé de vous-même :D


RTFM attitude : https://fr.dotclear.org/documentation/2.0
Le chantier tips, tutos et astuces : http://tips.dotaddict.org/
Rien nulle part??? une petite recherche sul’ forum, alors?: https://forum.dotclear.org/search.php ?

Hors ligne

#44 2010-01-12 16:44:21

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : Tri à double critère : un tag dans une catégorie

Juste pour préciser un peu la piste que je t'avais donnée : pour les paramètres $params passés à la fonction getPosts, ce sont des options qui permettent de construire la requête SQL sur la boucle des billets (si catégorie => select where category= dans la requête)

Après avoir choisi la catégorie (passée en paramètre) tu auras une liste de billets dans laquelle tu fais une boucle (while rs->fetch() et à chaque fois tu extrais les tags du billet (post_meta) que tu ajoutes à la liste des tags trouvés

A la fin tu as bien une liste des tags contenus dans les billets de la catégorie (avec certainement des doublons que tu nettoies)

Du coup je ne vois pas ce que font les regexp sur les urls, mais je n'ai peut-être pas bien suivi, et si je suis à côté de la plaque désolé pour le bruit ;)

Hors ligne

#45 2010-01-12 17:05:33

Lomalarch
Responsable du photocopieur
Lieu : Colombes (92)
Inscription : 2006-05-02
Site Web

Re : Tri à double critère : un tag dans une catégorie

Le jeu n’est pas tant, pour moi, d’extraire les tags en fonction de la catégorie que de retrouver les billets comportant un tag donné dans une catégorie donnée (et ses enfants).

Ta requête me semble tout à fait intéressante à creuser pour le formulaire de tri (choix de la catégorie puis choix du tag, par rapport aux tags des billets de la cat, on est en plein dedans), mais j’avoue que je me préoccupe d’abord du résultat final, dans une page que je vois construite via son url (d’où le preg_match).

Après, il se peut aussi que je me fourvoie intégralement quant à la manière de procéder…


RTFM attitude : https://fr.dotclear.org/documentation/2.0
Le chantier tips, tutos et astuces : http://tips.dotaddict.org/
Rien nulle part??? une petite recherche sul’ forum, alors?: https://forum.dotclear.org/search.php ?

Hors ligne

#46 2010-01-12 17:52:57

JcDenis
Membre
Lieu : Lyon, France
Inscription : 2007-08-31
Site Web

Re : Tri à double critère : un tag dans une catégorie

global $_ctx, $core;

if (preg_match('#(^|/)tagincat/([^/]+)/cat/(.+)$#',$args,$m)) {
 $t = $m[2];
 $c = $m[3];

 $objMeta = new dcMeta($core);
 $_ctx->posts = $objMeta->getPostsByMeta(array('category'=>$c,'meta_id'=>$t));
}
...

Cordialement,
_JC | Intérimaire | En mode invisible

Hors ligne

#47 2010-01-12 18:06:02

PiaDilo
Membre
Lieu : Boulogne-Billancourt
Inscription : 2009-03-15
Site Web

Re : Tri à double critère : un tag dans une catégorie

Lomalarch a écrit :

Question subsidiaire : vous pensez que c’est un plugin qui peut intéresser quelqu’un, si j’arrive à en faire un truc distribuable ?

Oui, je trouve l'idée du tri à double critère catégorie/tag intéressante, un plugin serait une bonne idée
Merci Lomalarch


Pia Diablo


Carpe Diem

Hors ligne

#48 2010-01-21 11:07:25

Lomalarch
Responsable du photocopieur
Lieu : Colombes (92)
Inscription : 2006-05-02
Site Web

Re : Tri à double critère : un tag dans une catégorie

De retour sur le sujet (je n’ai pas le loisir de me pencher sur cette fascinante question tous les jours :-D ), je tente d’essayer le code de JcDenis, mais je dois mal m’y prendre parce que je ne vois pas comment récupérer ensuite les billets remplissant les deux conditions 'category'=$c 'meta_id'=$t, ni même, en fait aucune condition.

En reprenant le code tel que, j’ai une très jolie

Fatal error: Call to a member function isEmpty() on a non-object in /chemin/du/dossier/plugins/tagincat/_public.php on line 326

où les lignes 326 et suivantes comportent

			if ($_ctx->posts->isEmpty()) {
				self::p404();
			} else {
				self::serveDocument('tagincat.html');
			}

(résultat identique avec $GLOBALS['_ctx']->posts->inEmpty(), il va sans dire)

Si je mixe au petit bonheur la chance avec mes trucs précédents, genre

			if (preg_match('#(^|/)tagincat/([^/]+)/cat/(.+)$#',$args,$m)) {
				$t = $m[2];
				$c = $m[3];
			
				$objMeta = new dcMeta($core);
				$_ctx->posts = $objMeta->getPostsByMeta(array('category'=>$c,'meta_id'=>$args));
			}
		
			$objMeta = new dcTiC($GLOBALS['core']);
			$GLOBALS['_ctx']->meta = $objMeta->getMeta('tag',null,$args);
			
			
			if ($GLOBALS['_ctx']->meta->isEmpty()) {
				self::p404();
			} else {
				self::serveDocument('tagincat.html');
			}

j’ai bien la page concernant le bon tag sur une url en tagincat/Tag et une jolie 404 sur tagincat/Tag/cat/url/de/categorie

Pour rappel, si, par ailleurs, je tente un

				$_ctx->posts = $objMeta->getPostsByMeta(array('category'=>$c,'meta_id'=>$t));

dans la formule ci-dessus, j’obtiens un tag fixe (je pensais que c’était le premier de la table dc_meta, mais en fait, c’est le tag le plus fréquemment présent sur les billets (et peut-être le premier associé dans le billet ayant le plus bas id).

Donc au point où j’en suis, dois-je m’engager dans la légion ou brûler un cierge à Sainte-Rita, à votre avis ? :-D

oups, j’ai raté ma dernière ligne copiée : c’est corrigé

Dernière modification par Lomalarch (2010-01-21 11:28:37)


RTFM attitude : https://fr.dotclear.org/documentation/2.0
Le chantier tips, tutos et astuces : http://tips.dotaddict.org/
Rien nulle part??? une petite recherche sul’ forum, alors?: https://forum.dotclear.org/search.php ?

Hors ligne

#49 2010-01-21 13:44:54

Lomalarch
Responsable du photocopieur
Lieu : Colombes (92)
Inscription : 2006-05-02
Site Web

Re : Tri à double critère : un tag dans une catégorie

Ho ho ho tout espoir n’est pas perdu !

en modifiant la regexp, il semble que la partie tag soit enfin reconnue. En effet tagincat étant l’URLHandler de base, il n’est pas pris en compte dans $args et le mettre dans la chose ne pouvait que nous enduire d’erreur :-D

			if (preg_match('#([^/]+)/cat/(.+)$#',$args,$m)) {
				$t = $m[1];
				$c = $m[2];
			
				$objMeta = new dcMeta($core);
				$_ctx->posts = $objMeta->getPostsByMeta(array('category'=>$c,'meta_id'=>$t));
			}
		
			$objMeta = new dcTiC($GLOBALS['core']);
			$GLOBALS['_ctx']->meta = $objMeta->getMeta('tag',null,$t);

Plus qu’à rajouter un traitement qui me ferait comme un category="$c ?sub" appliqué sur tpl:Entries et j’ai ma page de résultat. Je n’aurai plus alors qu’à faire mon formulaire de requête (ouh, j’ai hâte d’y être).


RTFM attitude : https://fr.dotclear.org/documentation/2.0
Le chantier tips, tutos et astuces : http://tips.dotaddict.org/
Rien nulle part??? une petite recherche sul’ forum, alors?: https://forum.dotclear.org/search.php ?

Hors ligne

#50 2010-01-21 17:32:09

Lomalarch
Responsable du photocopieur
Lieu : Colombes (92)
Inscription : 2006-05-02
Site Web

Re : Tri à double critère : un tag dans une catégorie

Bien, étape 1 conclue avec succès, grâce notamment à l’appui indéfectible de l’ami Osku : j’ai une page qui renvoie les résultats désirés avec

	public static function tagincat($args)
	{
		$n = self::getPageNumber($args);
		
		if ($args == '' && !$n)
		{
			self::p404();
		}
		else
		{
			if ($n) {
				$GLOBALS['_page_number'] = $n;
			}
			


			if (preg_match('#([^/]+)/cat/(.+)$#',$args,$m)) {
				$t = $m[1];
				$c = $m[2];
			
			}
			
			else {
				$t = $args;
			}
		
			$objMeta = new dcMeta($GLOBALS['core']);
			$GLOBALS['_ctx']->meta = $objMeta->getMeta('tag',null,$t);
			
			$params['cat_url'] = $c;
			$params['post_type'] = 'post';			

			$GLOBALS['_ctx']->categories = $GLOBALS['core']->blog->getCategories($params);
			$GLOBALS['_ctx']->categories->cat_id .= " ?sub";

			if ($GLOBALS['_ctx']->meta->isEmpty()) {
				self::p404();
			} elseif ($GLOBALS['_ctx']->categories->isEmpty()) {
				self::p404();
			} else {
				self::serveDocument('tagincat.html');
			}
		}
	}

plus qu’à ajuster un traitement des 404 si l’URL de catégorie est erronnée et normalement, cette partie roule. <- fait et intégré au code ci-dessus, je n’ai en revanche pas testé le rendu si les catégorie et tag contiennent des billets, mais pas « en croisé »

Merci grand aussi à JcDenis pour m’avoir avancé sur la regexp. Prochain épisode (mais pas ce soir), la conception du formulaire avec requête ajax qui va bien pour extraire les tags d’après l’intitulé de la catégorie.

Dernière modification par Lomalarch (2010-01-22 07:53:22)


RTFM attitude : https://fr.dotclear.org/documentation/2.0
Le chantier tips, tutos et astuces : http://tips.dotaddict.org/
Rien nulle part??? une petite recherche sul’ forum, alors?: https://forum.dotclear.org/search.php ?

Hors ligne

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

Pied de page des forums

Sites map