Dotclear

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

Annonce

13 février 2024 Sortie de Dotclear 2.29

#1 2013-10-13 07:40:50

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

Paramètre SQL supplémentaire pour getPosts

Bonjour

Je travaille sur la mise à jour d'un plugin pour Dotclear 2.6. Cette question n'est cependant pas spécifique à cette version :

Je cherche à récupérer la liste des billets moins le billet courant (son id est passé en GET) avec une seule requête, et j'aurais donc besoin de pouvoir ajouter un paramètre à la fonction getPosts.

Pour le moment, je fais appel à la fonction deux fois, ce qui marche bien, mais devrait pouvoir s'améliorer. Voici le code :

# Get posts without current
try {
	global $core;
	
	$my_params['no_content'] = true;
	$my_posts =  $core->blog->getPosts($my_params);
	$id = $_GET['id'];
	$ids = array ();
	while ($my_posts->fetch())
	{
		if ($id != $my_posts->post_id) {
			$ids[] = $my_posts->post_id;
		}
	}
	
	if(!empty($ids)) {
		$params['post_id'] = $ids;
		$params['no_content'] = true;
		$posts = $core->blog->getPosts($params);
		$counter = $core->blog->getPosts($params,true);
		$post_list = new adminPostList($core,$posts,$counter->f(0));
	}
} catch (Exception $e) {
	$core->error->add($e->getMessage());
}

Un sorcier pourrait-il me donner un coup de pouce ?

Merci tout plein :)

Hors ligne

#2 2013-10-13 08:29:30

nikrou
Membre
Inscription : 2007-10-02
Site Web

Re : Paramètre SQL supplémentaire pour getPosts

Bonjour Philippe,

il "suffit" d'exclure le billet avec le paramètre "exclude_post_id" :

$my_params['exlude_post_id'] = (int) $_GET['id'];
$my_posts = $core->blog->getPosts($my_params);

Je préfère être atteint de parkinson plutôt qu'alzheimer : je prefère renverser un peu de ma bière plutôt qu'oublier de la boire !

Présentez vos photos simplement avec Phyxo !

Hors ligne

#3 2013-10-13 08:40:38

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

Re : Paramètre SQL supplémentaire pour getPosts

Merci nikrou

Je viens d'essayer ceci :

try {
	global $core;
	
	$my_params['no_content'] = true;
	$my_params['exlude_post_id'] = $_GET['id'];	
	$posts = $core->blog->getPosts($my_params);
	$counter = $core->blog->getPosts($my_params,true);
	$post_list = new adminPostList($core,$posts,$counter->f(0));
	
} catch (Exception $e) {
	$core->error->add($e->getMessage());
}

Mais le billet courant passé en get n'est pas exclu de la liste, et accessoirement les filtres ne marchent plus :(

Hors ligne

#4 2013-10-13 09:04:57

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

Re : Paramètre SQL supplémentaire pour getPosts

Hum... exclude_post_id avec un c après le x marche bien mieux ;)

Hors ligne

#5 2013-10-13 10:08:07

nikrou
Membre
Inscription : 2007-10-02
Site Web

Re : Paramètre SQL supplémentaire pour getPosts

Philippe (amalgame) a écrit :

Hum... exclude_post_id avec un c après le x marche bien mieux ;)

C'était pour voir si tu suivais !

p.s: bon accessoirement j'ai effectivement oublié le C !


Je préfère être atteint de parkinson plutôt qu'alzheimer : je prefère renverser un peu de ma bière plutôt qu'oublier de la boire !

Présentez vos photos simplement avec Phyxo !

Hors ligne

#6 2013-10-13 11:04:13

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

Re : Paramètre SQL supplémentaire pour getPosts

Merci encore, ça va beaucoup plus vite \o/

Je veux maintenant simplifier une requête un peu plus complexe : récupérer la liste des billets qui ont une meta relatedEntries non vide

Pour l'instant j'ai ceci :

# Get posts with related posts
try {
	global $core;
	
	$my_params['no_content'] = true;
	$my_posts =  $core->blog->getPosts($my_params);
	
	$meta =& $GLOBALS['core']->meta;
	$ids = array ();
	while ($my_posts->fetch())
	{
		$meta_rs = $meta->getMetaStr($my_posts->post_meta,'relatedEntries');
		if ($meta_rs != '') {
		$ids[] = $my_posts->post_id;
		}
	}
	
	if(!empty($ids)) {
		$params['post_id'] = $ids;
		$params['no_content'] = true;
		$posts = $core->blog->getPosts($params);
		$counter = $core->blog->getPosts($params,true);
		$post_list = new adminPostList($core,$posts,$counter->f(0));
	}
} catch (Exception $e) {
	$core->error->add($e->getMessage());
}

Peut-on simplifier cela de la même façon que précédemment ?

Hors ligne

#7 2013-10-14 07:28:15

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

Re : Paramètre SQL supplémentaire pour getPosts

Un truc de ce genre ?

# Get posts with related posts
try {
	global $core;
	$meta =& $GLOBALS['core']->meta;
	$params = array('no_content' => true, 'meta_id' => 'relatedEntries');
	$posts = $meta->getPostsByMeta($params);
	$counter = $meta->getPostsByMeta($params,true);
	$post_list = new adminPostList($core,$posts,$counter->f(0));

} catch (Exception $e) {
	$core->error->add($e->getMessage());
}

Dyslexics have more fnu!

Hors ligne

#8 2013-10-14 08:27:03

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

Re : Paramètre SQL supplémentaire pour getPosts

Merci, je viens d'essayer mais relatedEntries n'est pas le meta_id mais le meta_type, et si je le remplace sur la ligne

$params = array('no_content' => true, 'meta_type' => 'relatedEntries');

j'obtiens une erreur :

Fatal error: Call to a member function f() on a non-object correspondant à la ligne

$post_list = new adminPostList($core,$posts,$counter->f(0));

Je suis perplexe, la fonction getPostsByMeta prend bien en paramètre le meta_type, non ?

Hors ligne

#9 2013-10-14 08:52:32

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

Re : Paramètre SQL supplémentaire pour getPosts

Si c'est un meta_type, alors ce n'est pas (encore) prévu dans le core, i lfaut ruser :

# Get posts with related posts
try {
	$params = array(
		'from' => ', '.$core->prefix.'meta META ',
		'sql' => 'AND META.post_id = P.post_id '.
			"AND META.meta_type = 'relatedEntries' ",
		'no_content' => true
	);
	$posts = $core->blog->getPosts($params);
	$counter = $core->blog->getPosts($params,true);
	$post_list = new adminPostList($core,$posts,$counter->f(0));
} catch (Exception $e) {
	$core->error->add($e->getMessage());
}

Dyslexics have more fnu!

Hors ligne

#10 2013-10-14 09:56:21

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

Re : Paramètre SQL supplémentaire pour getPosts

C'est presque bon... je dis presque car il y a un effet de bord :

Je stocke dans ce meta les ids des billets qui sont liés au billet en question. Si un billet est lié à un seul autre, ils ont chacun un meta de type relatedEntries avec l'id de l'autre billet, et ils apparaissent chacun dans la liste, c'est farpait :)

Mais si un billet est lié à plusieurs autres, il apparaît autant de fois, je voudrais qu'il n'apparaisse qu'une fois dans la liste retournée.

Hors ligne

#11 2013-10-14 10:01:22

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

Re : Paramètre SQL supplémentaire pour getPosts

ah oui, mais si tu donnes pas tous les éléments du contexte aussi :)

Il faut donc faire :

# Get posts with related posts
try {
	$params = array(
		'sql' => 'AND P.post_id IN (SELECT META.post_id FROM'.$this->core->prefix.'meta META WHERE META.post_id = P.post_id '.
			"AND META.meta_type = 'relatedEntries' ) ",
		'no_content' => true
	);
	$posts = $core->blog->getPosts($params);
	$counter = $core->blog->getPosts($params,true);
	$post_list = new adminPostList($core,$posts,$counter->f(0));
} catch (Exception $e) {
	$core->error->add($e->getMessage());
}

Dyslexics have more fnu!

Hors ligne

#12 2013-10-14 10:39:57

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

Re : Paramètre SQL supplémentaire pour getPosts

Dsls a écrit :

ah oui, mais si tu donnes pas tous les éléments du contexte aussi :)

Désolé, tu connais mon expertise :P

Mais là ça coince sur le $this : Fatal error: Using $this when not in object context

Hors ligne

#13 2013-10-14 10:58:25

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

Re : Paramètre SQL supplémentaire pour getPosts

ah oui, il faut utiliser $core et pas $this->core :)


Dyslexics have more fnu!

Hors ligne

#14 2013-10-14 12:11:29

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

Re : Paramètre SQL supplémentaire pour getPosts

J'avais trouvé pour $core, mais il m'a fallu un moment pour ajouter l'espace manquante après FROM^^

Merci tout plein, ça fonctionne maintenant \o/

Hors ligne

#15 2013-10-14 12:17:13

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

Re : Paramètre SQL supplémentaire pour getPosts

\o/ zizir


Dyslexics have more fnu!

Hors ligne

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

Pied de page des forums

Sites map