Pour simplifier l'écriture des squelettes, ce serait chouette de disposer d'une balise « #LOGO » (tout court) générique, un peu de la même façon que nous pouvons écrire simplement #TITRE (#DATE, #LANG, etc.) dans la plupart des boucles pour afficher le titre, sans devoir spécifier #TITRE_ARTICLE, #TITRE_RUBRIQUE, etc.
Sans modifier les comportements actuels, cette balise fonctionnerait ainsi :
Utilisée dans une boucle ARTICLES, la balise #LOGO afficherait le logo de l'article (c'est-à-dire comme #LOGO_ARTICLE).
Utilisée dans une boucle RUBRIQUES, la balise #LOGO afficherait le logo de la rubrique (c'est-à-dire comme #LOGO_RUBRIQUE).
etc. bref : utilisée dans une boucle, la balise #LOGO affiche le logo associé à l'objet de cette boucle.
Utilisée hors contexte, la balise #LOGO afficherait le logo du site SPIP (c'est-à-dire comme #LOGO_SITE_SPIP).
Modifié
Designs
Éléments enfants ...
Afficher les éléments fermés
Éléments liés 0
Reliez des issues pour mettre en évidence leur relation.
En savoir plus.
Comme actuellement, c'est-à-dire rien si l'article n'a pas de logo associé :)
La balise #LOGO n'apporte par de nouveau fonctionnement : c'est un raccourci de saisie. Ce ticket a juste vocation à simplifier la nomenclature, faciliter l'écriture dans les squelettes, sans considération du comportement, qui reste inchangé.
NB : les balises spécifiques #LOGO_OBJET restent pertinentes, pour, par exemple, pouvoir comme actuellement disposer de #LOGO_RUBRIQUE dans une boucle ARTICLES, où l'on aura affiché le logo de l'article (s'il existe, donc) simplement avec #LOGO.
oué j'ai quand même un peu de réserves vis à vis d'un code stocké dans un wiki depuis 2 ans et qui a pas servi.
A moins que ce soit quelque part dans un plugin ?
bref faudrait trouver quelqu'un qui l'a fait marché et qui peut attester que c'est utilisable.
Ou le mettre dans bonux ou un autre plugin en rodage...
Alors je ne sais pas qui a mis (en fait Yannx en 2022) cette «version finalisée pour SPIP 4» dans le carnet, mais ça n’a rien à voir … c’est une copie du code actuel de balise_LOGO__dist qui est déjà dans le core… et pas tout à fait à jour en plus…
Je remets du coup un code à jour, revu et un peu corrigé (y avait un bug)
Ceci étant dit…
Je ne suis pas certain qu’il faille remettre toutes les mêmes options que sur #LOGO_x
Il manque la possibilité avec ce code de définir le type de logo normal, survol, rubrique, qui pourrait être encore une autre option
/** * Compile la balise `#LOGO` chargée d'afficher le logo de l’objet * * Affiche le logo de l’objet éditorial de la boucle parente. * Ainsi `#LOGO` dans une boucle ARTICLES est un alias de `#LOGO_ARTICLE` * * Différents paramètres existent, assez historiques. * On introduit ici en plus éventuellement les paramètres objet / id_objet * dans l'ordre (en 1er et 2nd argument). Le type d’objet, s'il est * renseigné doit obligatoirement être un texte et non une balise. * * @example * ``` * #LOGO : à l'intérieur d’une boucle, logo de l'objet ; * #LOGO : à l'extérieur d’une boucle, logo du site. * #LOGO* : ajoute un lien sur l'image du logo vers l'objet éditorial * #LOGO** : retourne le nom du fichier de logo. * #LOGO{right} : Valeurs possibles : top left right center bottom * #LOGO{icone} : Valeurs possibles : auto icone apercu vignette * #LOGO{200, 0} : Redimensionnement indiqué * #LOGO{#URL} : : ajoute un lien sur l'image du logo vers l'url * * Idem en spécifiant objet et id_objet * #LOGO{rubrique, 13} : logo de la rubrique 13 * #LOGO{rubrique, #ID_SECTEUR} * #LOGO{rubrique, 13, icone} * #LOGO{rubrique, 13, 200, 0} * ``` * * @see balise_LOGO__dist() * * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée par le code à générer */functionbalise_LOGO_dist($p){$b=index_boucle($p);// hors boucle ? Logo du site.if($b===''){$type='site';$_id_objet="'0'";}else{$type=objet_type($p->boucles[$b]->id_table);$_id_objet=champ_sql($p->boucles[$b]->primary,$p);}$suite_logo='';# FIXME: Permettre d’indiquer cette option de logo ? (_NORMAL, _SURVOL, _RUBRIQUE)$fichier=($p->etoile==='**')?-1:0;$coord=[];$align=$lien='';$mode_logo='';// ambiguite si uniquement 2 paramètres// (objet/id_objet ou autre chose)// on considère que si le premier argument est un texte et// le second un numérique ou une balise, alors c'est objet/id_objet// ou objet / #ID_OBJET$i=0;if(interprete_argument_balise(1,$p)&&interprete_argument_balise(2,$p)&&$p->param[0][1][0]->type==='texte'&&!is_numeric($p->param[0][1][0]->texte)&&($p->param[0][2][0]->type!=='texte'||is_numeric($p->param[0][2][0]->texte))){$type=objet_type($p->param[0][1][0]->texte);if($p->param[0][2][0]->type==='texte'){$_id_objet="'".$p->param[0][2][0]->texte."'";}else{$_id_objet=interprete_argument_balise(2,$p);}$i=2;}$id_objet=id_table_objet($type);if($p->param&&!$p->param[0][0]){$params=$p->param[0];array_shift($params);while($i--){array_shift($params);}foreach($paramsas$a){if($a[0]->type==='texte'){$n=$a[0]->texte;if(is_numeric($n)){$coord[]=$n;}elseif(in_array($n,['top','left','right','center','bottom'])){$align=$n;}elseif(in_array($n,['auto','icone','apercu','vignette'])){$mode_logo=$n;}}else{$lien=calculer_liste($a,$p->descr,$p->boucles,$p->id_boucle);}}}$coord_x=!$coord?0:intval(array_shift($coord));$coord_y=!$coord?0:intval(array_shift($coord));if($p->etoile==='*'){include_spip('balise/url_');$lien=generer_generer_url_arg($type,$p,$_id_objet);}$connect=$b?$p->boucles[$b]->sql_serveur:'';if($type==='document'){$qconnect=_q($connect);$doc="quete_document($_id_objet, $qconnect)";if($fichier){$code="quete_logo_file($doc, $qconnect)";}else{$code="quete_logo_document($doc, ".($lien?:"''").", '$align', '$mode_logo', $coord_x, $coord_y, $qconnect)";}// (x=non-faux ? y : '') pour affecter x en retournant yif($p->descr['documents']){$code='(($doublons["documents"] .= ",". '.$_id_objet.") ? $code : '')";}}elseif($connect){$code="''";spip_log('Les logos distants ne sont pas prevus');}else{// pour generer_code_logoinclude_spip('balise/id_logo_');$champ_logo='';if($fichier){$champ_logo='fichier';}$code=generer_code_logo($id_objet,$_id_objet,$type,$align,$lien,$p,$suite_logo,$champ_logo);}// demande de reduction sur logo avec ecriture spip 2.1 : #LOGO_xxx{200, 0}if($coord_xor$coord_y){$code="filtrer('image_graver',filtrer('image_reduire',".$code.", '$coord_x', '$coord_y'))";}$p->code=$code;$p->interdire_scripts=false;return$p;}
Je note que dans ce même plugin local expérimental, j’ai aussi cela dans la besace :
/** * Compile la balise `#URL` qui génère une URL publique d’un objet éditorial. * * On propose aussi en plus éventuellement les paramètres objet / id_objet * dans l'ordre (en 1er et 2nd argument). Le type d’objet, s'il est * renseigné doit obligatoirement être un texte et non une balise. * * @example * ``` * #URL : url publique de l’objet dans une boucle * #URL : url du site en dehors d’une une boucle * #URL{article, 12} * #URL{article, #ID_ARTICLE} * ``` * @see balise_URL__dist() * * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée par le code à générer */functionbalise_URL_dist($p){// un champ URL existe dans la table (spip_urls) ? on l’utilise.if($_url=champ_sql('url',$p,'',false)){$p->code=$_url;$p->interdire_scripts=false;return$p;}include_spip('balise/url_');$b=index_boucle($p);$type='';if(isset($p->param[0][1][0]->texte)){$type=objet_type($p->param[0][1][0]->texte);}$_id_objet=interprete_argument_balise(2,$p);// pas assez d'argument ?if($type&&!$_id_objet){$msg=array('zbug_balise_sans_argument',array('balise'=>' URL'));erreur_squelette($msg,$p);return$p;// #URL hors boucle ? => url du site}elseif(!$type&&$b===''){$f=charger_fonction('URL_SITE_SPIP','balise');return$f($p);// #URL dans une boucle => calculer objet / id_objet}elseif(!$type){$type=objet_type($p->boucles[$b]->id_table);$_id_objet=champ_sql($p->boucles[$b]->primary,$p);}if($f=charger_fonction('URL_'.strtoupper($type),'balise',true)){// on dépile l'argument type d’objetif(interprete_argument_balise(1,$p)){$dummy=array_shift($p->param[0]);array_shift($p->param[0]);array_unshift($p->param[0],$dummy);}return$f($p);}$code=generer_generer_url_arg($type,$p,$_id_objet);$p->code=$code;if(!$p->etoile){$p->code="vider_url($code)";}$p->interdire_scripts=false;return$p;}/** * Compile la balise `#URL_AUTO` qui génère une URL d’un objet éditorial, * qui pointe sur l'espace public si le squelette est utilisé dans l'espace public, * et dans l’espace privé sinon. * * On propose aussi en plus éventuellement les paramètres objet / id_objet * dans l'ordre (en 1er et 2nd argument). Le type d’objet, s'il est * renseigné doit obligatoirement être un texte et non une balise. * * @example * ``` * #URL_AUTO : url publique ou privée de l’objet dans une boucle * #URL_AUTO : url du site public ou privé en dehors d’une une boucle * #URL_AUTO{article, 12} * #URL_AUTO{article, #ID_ARTICLE} * ``` * @see balise_URL__dist() * * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée par le code à générer */functionbalise_URL_AUTO_dist($p){include_spip('balise/url_');$b=index_boucle($p);$type='';if(isset($p->param[0][1][0]->texte)){$type=objet_type($p->param[0][1][0]->texte);}$_id_objet=interprete_argument_balise(2,$p);// pas assez d'argument ?if($type&&!$_id_objet){$msg=array('zbug_balise_sans_argument',array('balise'=>' URL'));erreur_squelette($msg,$p);// #URL hors boucle ? => url du site}elseif(!$type&&$b===''){$f=charger_fonction('URL_SITE_SPIP','balise');$p=$f($p);$p->code="(test_espace_prive() ? generer_url_ecrire() : ".$p->code.")";$p->interdire_scripts=false;return$p;// #URL dans une boucle => calculer objet / id_objet}elseif(!$type){$type=objet_type($p->boucles[$b]->id_table);$_id_objet=champ_sql($p->boucles[$b]->primary,$p);}$code="generer_objet_url(".$_id_objet.", '".$type."')";$p->code=$code;if(!$p->etoile){$p->code="vider_url($code)";}$p->interdire_scripts=false;return$p;}
bon, en fait la balise #LOGO pose une question dans SVP, qui utilise #LOGO dans une boucle DATA. DATA > CONDITION > #LOGO
Du coup j’ai du modifier l’introduction de la fonction
functionbalise_LOGO_dist($p){$b=index_boucle($p);// un champ LOGO existe ? on l’utilise.if($_logo=champ_sql('logo',$p,'',true)){$p->code=$_logo;$p->interdire_scripts=false;return$p;}// hors boucle ? Logo du site.# [...]
Mais là je teste si un #LOGO existe dans toute la pile, et dès que tu as une boucle DATA, bah c’est considéré existant…