Dotclear

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

Annonce

13 février 2024 Sortie de Dotclear 2.29

#1 2018-03-16 16:52:56

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

Utiliser EntryFirstImageHelper dans un _public.php

Bonjour

Je cherche à récupérer l'url de la première image de chacun des 5 derniers billets d'un autre blog que le blog courant

Pour cela, j'ai créé une balise de template dans le fichier _public.php de mon thème avec ceci :

$core->tpl->addValue('myTourismPostsList',array('b4businessTpl','myTourismPostsList'));
class b4businessTpl {
    public static function myTourismPostsList()
	{
		return
		'<?php $thisblog = $core->blog->id;
		$core->setBlog(\'var\');
		$params[\'no_content\'] = false;
		$params[\'limit\'] = \'5\';
		$params[\'post_type\'] = array(\'post\');
		$params[\'post_status\'] = \'1\';
		$rs = $core->blog->getPosts($params);

		$size = \'m\';
                $no_tag = 1;
                $with_category = 0;
                $class = \'\';
                $content_only = 0;
                $cat_only = 0;

		$res = \'\';
		while ($rs->fetch()) {
                        $res .= \'<p>titre : \'.html::escapeHTML($rs->post_title);
                        $res .= \' - image : \'.context::EntryFirstImageHelper($size, $no_tag,$with_category,$class,$content_only,$cat_only).\'</p>\';
		}
		$core->setBlog($thisblog);
		unset ($params);
		echo $res;
		?>';
	}
}

Le titre de chacun des 5 derniers billets du blog voulu est bien récupéré, preuve que ça marche à moitié, mais le code suivant ne retourne rien

context::EntryFirstImageHelper($size, $no_tag,$with_category,$class,$content_only,$cat_only)

(cette fonction est bêtement déduite de EntryFirstImage dans /dotclear/inc/public/class.dc.template.php et lib.tpl.context.php)

Une âme charitable pourrait m'aider à trouver la bonne syntaxe ?

Merci tout plein d'avance :)

Hors ligne

#2 2018-03-16 16:54:47

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

Re : Utiliser EntryFirstImageHelper dans un _public.php

PS : Juste pour info, si j'essaie de récupérer les images avec la balise tpl du plugin listImages, ça fonctionne bien :

$res .= \'<p>\'.tplEntryImages::EntryImagesHelper($size, $html_tag, $link, $exif, $legend, $bubble, $from, $start, $length, $class, $alt, $img_dim, $def_size, $rs).\'</p>\';

sauf que cette balise n'a pas d'option pour retourner l'url seule...

Hors ligne

#3 2018-03-16 17:42:43

Franck
Footer de merde
Lieu : Paris
Inscription : 2004-11-09
Site Web

Re : Utiliser EntryFirstImageHelper dans un _public.php

À première vue (du code de Dotclear) c'est un peu normal (j'ai pas beaucoup exploré) vu que context::EntryFirstImageHelper() s'appuie sur l'URL du blog courant pour bosser, si tu veux les images d'un autre blog, ça risque de faire des trucs bizarres :-)


Dotclear addicted since 2004

Hors ligne

#4 2018-03-16 17:44:27

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

Re : Utiliser EntryFirstImageHelper dans un _public.php

Euh... oui mais non, je suis dans le bon blog avec $core->setBlog(\'var\'); au début de mon code (var est l'identifiant du blog)

D'ailleurs les titres des billets sont corrects

Hors ligne

#5 2018-03-16 17:45:47

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

Re : Utiliser EntryFirstImageHelper dans un _public.php

...et avec tplEntryImages::EntryImagesHelper ça marche...

Hors ligne

#6 2018-03-16 18:00:55

Franck
Footer de merde
Lieu : Paris
Inscription : 2004-11-09
Site Web

Re : Utiliser EntryFirstImageHelper dans un _public.php

Arf :-p


Dotclear addicted since 2004

Hors ligne

#7 2018-03-16 18:04:31

Franck
Footer de merde
Lieu : Paris
Inscription : 2004-11-09
Site Web

Re : Utiliser EntryFirstImageHelper dans un _public.php

En attendant une version de listImages qui permettent de récupérer uniquement l'URL de l'image, un petit preg_match() kivabien sur le retour de tplEntryImages::EntryImagesHelper() devrait te permettre de récupérer ça, non ?


Dotclear addicted since 2004

Hors ligne

#8 2018-03-16 18:20:00

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

Re : Utiliser EntryFirstImageHelper dans un _public.php

Oui, c'est une bonne piste, je vais juste faire ça, sauf si tu sors rapidement une nouvelle version de ton plougue ^^

Merci pour l'astuce ;)

Hors ligne

#9 2018-03-16 19:41:42

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

Re : Utiliser EntryFirstImageHelper dans un _public.php

Ça marche parfaitement \o/

$string = tplEntryImages::EntryImagesHelper($size, $html_tag, $link, $exif, $legend, $bubble, $from, $start, $length, $class, $alt, $img_dim, $def_size, $rs);
$url = preg_replace(\'#.*src="([^\"]+)".*#\', \'\1\', $string);

$url contient l'url de l'image

Je cherche maintenant à récupérer les 250 premiers caractères de chacun des billets. si je coince je reviens illico ;)

Hors ligne

#10 2023-04-20 12:45:05

je-mattarde
Membre
Lieu : Au bistrot
Inscription : 2011-07-29
Site Web

Re : Utiliser EntryFirstImageHelper dans un _public.php

Bonjour Philippe,
Pourriez-vous partager la fonction terminée svp ?

Dans un script exécuté dans le contexte de l'administration d'un plugin, je souhaiterais pouvoir à partir de l'ID d'un billet récupérer en sortie l'URL de la première image dudit billet.
Merci pour vos contributions !


Gilles

Hors ligne

#11 2023-04-20 14:28:50

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

Re : Utiliser EntryFirstImageHelper dans un _public.php

Bonjour

Pfiou, c'est un peu vieux, mais en gros il faut faire une boucle en passant l'id du billet (25 dans mon exemple) à getPosts()

$params['post_id']    = '25';
$params['no_content'] = false;
$params['post_type']  = ['post'];
$rs                   = dcCore::app()->blog->getPosts($params);

while ($rs->fetch()) {
    $ret = $rs->post_excerpt_xhtml . $rs->post_content_xhtml;
}
        
$array = [];
preg_match('/src="([^"]*)"/i', $ret, $array) ;
echo($array[1]) ;

Edit : expression régulière modifiée

Dernière modification par Philippe (2023-04-20 20:20:54)

Hors ligne

#12 2023-04-21 07:26:46

je-mattarde
Membre
Lieu : Au bistrot
Inscription : 2011-07-29
Site Web

Re : Utiliser EntryFirstImageHelper dans un _public.php

Merci beaucoup Philippe et même pas besoin de EntryFirstImageHelper ou d'une variante.

(question bonus : y-a-il une méthode/fonction dotclear tout prête pour tester qu'un lien est valide, autrement dit ne finisse pas sur une erreur 404 ?)


Gilles

Hors ligne

#13 2023-04-21 10:07:26

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

Re : Utiliser EntryFirstImageHelper dans un _public.php

Pour les tests de liens, il n'y a pas à ma connaissance de méthode particulière dans dotclear.

Hors ligne

#14 2023-04-22 05:57:25

Franck
Footer de merde
Lieu : Paris
Inscription : 2004-11-09
Site Web

Re : Utiliser EntryFirstImageHelper dans un _public.php

Je n'ai pas testé, mais quelque chose comme ça devrait fonctionner :

$status  = 404;
$path = '';
$client = HttpClient::initClient('https://example.com/', $path);
if ($client !== false) {
    $client->setTimeout(DC_QUERY_TIMEOUT);
    $client->setHeadersOnly(true);
    $client->setUserAgent($_SERVER['HTTP_USER_AGENT']);
    $client->get($path);
    $status  = $client->getStatus();
}
if ($status !== 200) {
	// Répond pas normalement — voir les codes retour HTTP
}

Dotclear addicted since 2004

Hors ligne

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

Pied de page des forums

Sites map