Affichage-conditionnel-de-saisie-syntaxe-des-tests spip3.2.13

la doc https://contrib.spip.net/Affichage-conditionnel-de-saisie-syntaxe-des-tests précise pour

Tester la présence de plugin

La syntaxe @plugin:<préfix>@ permet de tester que le plugin de préfixe <préfix> est activé. Réciproquement, !@plugin:<préfix>@ permet de vérifier que ce plugin n’est pas activé.

Exemple

@plugin:article_pdf@

N’affiche la saisie que si le plugin article_pdf est activé.

dans un fichier de configuration j’utilise ces définitions

  array(
  	'saisie' => 'fieldset',
  	'options' => array(
  		'nom' => 'documents',
  		'label' => _T('owncloud:cfg_documents')
  	),
  	'saisies' => array(
  		array(
  			'saisie' => 'input',
  			'options' => array(
  				'nom' => 'directory_remote',
  				'label' => _T('owncloud:cfg_directory_remote'),
  				'explication' => _T('owncloud:cfg_directory_remote_explication')
  			)
  		),
  		array(
  			'saisie' => 'fieldset',
  			'options' => array(
  				'nom' => 'check_album',
  				'explication' => _T('owncloud:cfg_plugin_album_indisponible'),
  				'afficher_si' => '!@plugin:albums@',
  			)
  		),
  		array(
  			'saisie' => 'input',
  			'options' => array(
  				'nom' => 'content_album',
  				'label' => _T('owncloud:cfg_content_album'),
  				'explication' => _T('owncloud:cfg_content_album_explication'),
  				'afficher_si' => '@plugin:albums@',
  			)
  		),

avec " ou bien pour « !@plugin:albums@ »

et j’ai 2 erreurs gravité critique sur ces lignes

Fichier : plugins/auto/saisies/v3.55.2/inc/saisies_afficher_si_php.php-*Ligne : 252-*Fonction : saisies_transformer_condition_afficher_si()

Afficher_si incorrect. Champ plugin:albums inexistant|

Fichier : plugins/auto/saisies/v3.55.2/inc/saisies_afficher_si_php.php-*Ligne : 252-*Fonction : saisies_transformer_condition_afficher_si()

Afficher_si incorrect. Champ plugin:albums inexistant|

erreur de doc ou de définition dans mon php ??? pourtant ça semble fonctionner :thinking:

J’ai la meme erreur en Spip 4.0.4 mais n’ai pas pu tester en raison de la non disponibilité du plugin Albums

Erreur dans les tests de vérification. Je corrige dans l’après midi.

Peux tu à l’avenir ouvrir plutot un ticket sur git.spip.net ?

merci,

j’hésitais pour le ticket , veux-tu pour le suivi de ce probleme que je dépose un ticket ?

j’hésitais dans le sens où cela semblait fonctionner, peut etre avais-je fait quelque chose d’incorrect…

La version 3.53.3 corrige cela.

Il faut savoir que les afficher_si sont géré en JS et en PHP. Or, si la syntaxe était bien supporté en JS, il y avait une coquille qui la rendait inopérante en PHP (tu aurais sans doute eu des ennuis si l’un de tes champs avait une vérification et qu’une personne enclenchait une erreur)

1 « J'aime »

je n’ai plus l’erreur dans un formulaire qui n’utilise pas « saisie_liste »,
par contre pour information dans un formulaire avec liste, ces conditions ne semblent pas traiter lors de la saisie par exemple

	array(
			'saisie' => 'fieldset',
			'options' => array(
				'nom' => 'synchro',
				'label' => _T('owncloud:cfg_synchro')
			),
			'saisies' => array(
				array(
					'saisie' => 'case',
					'options' => array(
						'nom' => 'activer_synchro',
						'label' => _T('owncloud:cfg_activer_synchro'),
						'explication' => _T('owncloud:cfg_activer_synchro_explication'),
					)
				),
				array(
					'saisie' => 'case',
					'options' => array(
						'nom' => 'activer_effacement_local',
						'label' => _T('owncloud:cfg_activer_effacement_local'),
						'explication' => _T('owncloud:cfg_activer_effacement_local_explication'),
						'afficher_si' => '@activer_synchro@ == "on"',
					)
				),
			)
		),

en dehors de saisie_liste
si « activer_synchro » est checké alors ‹ activer_effacement_local › s’affiche

dans une liste les 2 ‹ case › sont toujours affichés

mais bon j’attends un avis pour cette fonction saisie_liste

merci encore

hum, oui. Pas impossible que les afficher_si ne marchent effectivement pas sur les saisies listes (qui je rappellent ne sont pas officiellement partie du core de saisies)

Cela étant, dans la mesure où tu veux juste tester la présence d’un plugin, tu pourrais ne pas passer par des afficher_si, et utiliser test_plugin_actif() pour peupler ou non ton tableau.

bon voilà, je jette l’éponge pour la saisie liste, trop de problemes peut etre un jour tu (ou autres vous) rajouteras cette fonction liste dans saisies…

En attendant je suis revenu à la méthode de tableau où on défini le nombre d’éléments (style jquery-masonry).
Je voulais te signaler tout de même l’erreur critique suivante

* *Fichier* : plugins/auto/saisies/v3.55.3/inc/saisies_afficher_si_js.php
-**Ligne* : 63-**Fonction* : saisies_afficher_si_js()

`Afficher_si incorrect. Champ activer_synchro.$i inexistant`

ce n’est peut qu’une histoire de syntaxe suite à l’utilisation d’un tableau

for($i=1; $i<=$config['nombre']; $i++) {
		array_push( $saisies, array(
			'saisie' => 'fieldset',
 ...
				),
				array(
					'saisie' => 'case',
					'options' => array(
						'nom' => 'activer_synchro'.$i,
						'label' => _T('owncloud:cfg_activer_synchro'),
						'explication' => _T('owncloud:cfg_activer_synchro_explication'),
						'default' => $config['activer_synchro'.$i]
					)
				),
				array(
					'saisie' => 'case',
					'options' => array(
						'nom' => 'activer_effacement_local'.$i,
						'label' => _T('owncloud:cfg_activer_effacement_local'),
						'explication' => _T('owncloud:cfg_activer_effacement_local_explication'),
						'default' => $config['activer_effacement_local'.$i],
						'afficher_si' => '@activer_synchro.$i@ == "on"',
					)
				)

si ce n’est pas la raison du log, je créerai un ticket

encore merci

'@activer_synchro.$i@ == "on"'

là tu créé une chaine qui est littéralement '@activer_synchro.$i@ == "on"'

donc forcement il te dit que le champ activer_synchro.$i est inexistant… puisque c’est bien le cas.

Il faut donc que tu corrige.

Par exemple

"@activer_synchro$i@ == 'on'"

te produira

"@activer_synchro1@ == 'on'"
"@activer_synchro2@ == 'on'"

etc.

Ou bien

'@activer_synchro'.$1.'@ == "on"'

pour obtenir le même résultat

1 « J'aime »

oui, voilà c’est bien la chaine qu’attend la condition , suis-je bete, merci