Modifier un label de champ de formulaire par pipeline

Bonjour,
Typiquement cet exemple devrait répondre parfaitement à mon besoin de changer l’intitulé d’un label de champs dans le formulaire d’édition d’un article en fonction d’un secteur ou d’une rubrique donnée (cf. https://programmer.spip.net/formulaire_fond):

function exemple_formulaire_fond($fond) {
	if (
		$fond['args']['form'] == 'editer_article'
		and $id_parent = $fond['args']['contexte']['id_parent'];
		and $id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . [intval](http://www.php.net/intval)($id_parent)
		and $id_secteur === 7
	) {
		$fond['data'] = [str_replace](http://www.php.net/str_replace)(_T('info_sous_titre'), _T('exemple:label_exemple'), $fond['data']);
	}
	return $fond;
}

Le problème c'est que cela me donne une magnifique page blanche, si je copie ce code dans mes_options.. 

Mes remerciements tout d'abord à JLuc qui a proposé cet article sur Programmer.spip , mais.... Quelqu'un pourrait-il corriger, car je n'y arrive pas. 
Je pense qu'il faudrait s'inspirer de ceci (une fonction perso qui recherche un squelette d'article particulier en fonction de la rubrique en question), qui fonctionne : 
function chrisword_styliser($flux){
	// si article ou rubrique
	if (($fond = $flux['args']['fond'])
	AND in_array($fond, array('article','rubrique'))) {
 
		$ext = $flux['args']['ext'];
		// [...]
		if ($id_article = $flux['args']['id_article']) {
			// calcul de la rubrique
			$r = sql_getfetsel('id_rubrique', 'spip_articles', 'id_article=' . intval($id_article));
			// comparaison de la rubrique avec Chris's Words of Wisdom
			if (intval($r['id_rubrique']) == 2514){
				// si un squelette $fond_chriswords existe
				if ($squelette = test_squelette_chrisword($fond, $ext)) {
					$flux['data'] = $squelette;
				}
			}
		}
	}
	return $flux;
}

Merci d'avance pour vos lumières (les miennes sont faiblârdes actuellement, après plusieurs mois sans avoir touché au code SPIP j'ai tout perdu....)

Salut

function exemple_formulaire_fond($fond) {
	if (
		$fond['args']['form'] == 'editer_article'
		and $id_parent = $fond['args']['contexte']['id_parent']; // ça ne va pas il ne faut pas de ';' ici 
		and $id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . [intval](http://www.php.net/intval)($id_parent)
		and $id_secteur === 7
	) {
		$fond['data'] = [str_replace](http://www.php.net/str_replace)(_T('info_sous_titre'), _T('exemple:label_exemple'), $fond['data']);
	}
	return $fond;
}


Je ne comprend pas le $id_parent = $fond['args']['contexte']['id_parent'] ?? il doit y avoir une subtilité...
Pour le reste je dirai qu'on veut uniquement remplacer le texte pour la rubrique racine du secteur 7

Sinon pour la page blanche,  en dev ça ne devrait pas être une page blanche mais un message d'erreur php qui s'affiche 
tu **dois** au minimum afficher les erreurs fatales php pour savoir ou ça pète dans ton code :). Il y a 10 000 tutos pour ça sur spip ou ailleurs.

Cordialement 

Le lun. 30 sept. 2019 à 21:16, Naema <junkofzenet@gmail.com> a écrit :

Bonjour,
Typiquement cet exemple devrait répondre parfaitement à mon besoin de changer l’intitulé d’un label de champs dans le formulaire d’édition d’un article en fonction d’un secteur ou d’une rubrique donnée (cf. https://programmer.spip.net/formulaire_fond):

function exemple_formulaire_fond($fond) {
	if (
		$fond['args']['form'] == 'editer_article'
		and $id_parent = $fond['args']['contexte']['id_parent'];
		and $id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . [intval](http://www.php.net/intval)($id_parent)
		and $id_secteur === 7
	) {
		$fond['data'] = [str_replace](http://www.php.net/str_replace)(_T('info_sous_titre'), _T('exemple:label_exemple'), $fond['data']);
	}
	return $fond;
}

Le problème c'est que cela me donne une magnifique page blanche, si je copie ce code dans mes_options.. 

Mes remerciements tout d'abord à JLuc qui a proposé cet article sur Programmer.spip , mais.... Quelqu'un pourrait-il corriger, car je n'y arrive pas. 
Je pense qu'il faudrait s'inspirer de ceci (une fonction perso qui recherche un squelette d'article particulier en fonction de la rubrique en question), qui fonctionne : 
function chrisword_styliser($flux){
	// si article ou rubrique
	if (($fond = $flux['args']['fond'])
	AND in_array($fond, array('article','rubrique'))) {
 
		$ext = $flux['args']['ext'];
		// [...]
		if ($id_article = $flux['args']['id_article']) {
			// calcul de la rubrique
			$r = sql_getfetsel('id_rubrique', 'spip_articles', 'id_article=' . intval($id_article));
			// comparaison de la rubrique avec Chris's Words of Wisdom
			if (intval($r['id_rubrique']) == 2514){
				// si un squelette $fond_chriswords existe
				if ($squelette = test_squelette_chrisword($fond, $ext)) {
					$flux['data'] = $squelette;
				}
			}
		}
	}
	return $flux;
}

Merci d'avance pour vos lumières (les miennes sont faiblârdes actuellement, après plusieurs mois sans avoir touché au code SPIP j'ai tout perdu....)


liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : https://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l’aide à toute heure : http://spip.net/irc

ah si, je suis fatigué :slight_smile:

$id_parent = $fond['args']['contexte']['id_parent']

test la présence et assigne la valeur $fond[‹ args ›][‹ contexte ›][‹ id_parent ›]

Dans le code c’est le point virgule qui n’a pas lieu d’être (Voire commentaire).
Pour le reste, ça devrait rouler :smiley:

Le lun. 30 sept. 2019 à 23:28, pierre laszczak <pierre.laszczak@gmail.com> a écrit :

Salut

function exemple_formulaire_fond($fond) {
	if (
		$fond['args']['form'] == 'editer_article'
		and $id_parent = $fond['args']['contexte']['id_parent']; // ça ne va pas il ne faut pas de ';' ici 
		and $id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . [intval](http://www.php.net/intval)($id_parent)
		and $id_secteur === 7
	) {
		$fond['data'] = [str_replace](http://www.php.net/str_replace)(_T('info_sous_titre'), _T('exemple:label_exemple'), $fond['data']);
	}
	return $fond;
}


Je ne comprend pas le $id_parent = $fond['args']['contexte']['id_parent'] ?? il doit y avoir une subtilité...
Pour le reste je dirai qu'on veut uniquement remplacer le texte pour la rubrique racine du secteur 7

Sinon pour la page blanche,  en dev ça ne devrait pas être une page blanche mais un message d'erreur php qui s'affiche 
tu **dois** au minimum afficher les erreurs fatales php pour savoir ou ça pète dans ton code :). Il y a 10 000 tutos pour ça sur spip ou ailleurs.

Cordialement 

Le lun. 30 sept. 2019 à 21:16, Naema <junkofzenet@gmail.com> a écrit :

Bonjour,
Typiquement cet exemple devrait répondre parfaitement à mon besoin de changer l’intitulé d’un label de champs dans le formulaire d’édition d’un article en fonction d’un secteur ou d’une rubrique donnée (cf. https://programmer.spip.net/formulaire_fond):

function exemple_formulaire_fond($fond) {
	if (
		$fond['args']['form'] == 'editer_article'
		and $id_parent = $fond['args']['contexte']['id_parent'];
		and $id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . [intval](http://www.php.net/intval)($id_parent)
		and $id_secteur === 7
	) {
		$fond['data'] = [str_replace](http://www.php.net/str_replace)(_T('info_sous_titre'), _T('exemple:label_exemple'), $fond['data']);
	}
	return $fond;
}

Le problème c'est que cela me donne une magnifique page blanche, si je copie ce code dans mes_options.. 

Mes remerciements tout d'abord à JLuc qui a proposé cet article sur Programmer.spip , mais.... Quelqu'un pourrait-il corriger, car je n'y arrive pas. 
Je pense qu'il faudrait s'inspirer de ceci (une fonction perso qui recherche un squelette d'article particulier en fonction de la rubrique en question), qui fonctionne : 
function chrisword_styliser($flux){
	// si article ou rubrique
	if (($fond = $flux['args']['fond'])
	AND in_array($fond, array('article','rubrique'))) {
 
		$ext = $flux['args']['ext'];
		// [...]
		if ($id_article = $flux['args']['id_article']) {
			// calcul de la rubrique
			$r = sql_getfetsel('id_rubrique', 'spip_articles', 'id_article=' . intval($id_article));
			// comparaison de la rubrique avec Chris's Words of Wisdom
			if (intval($r['id_rubrique']) == 2514){
				// si un squelette $fond_chriswords existe
				if ($squelette = test_squelette_chrisword($fond, $ext)) {
					$flux['data'] = $squelette;
				}
			}
		}
	}
	return $flux;
}

Merci d'avance pour vos lumières (les miennes sont faiblârdes actuellement, après plusieurs mois sans avoir touché au code SPIP j'ai tout perdu....)


liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : https://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l’aide à toute heure : http://spip.net/irc

Merci,
j’avais aussi repéré ce point-virgule inhabituel, ôté ça n’a rien changé; de même que les trois signes « égal » (habituellement, c’est un ou deux signes d’après ce que j’ai compris) mais ça n’a rien changé non plus. Étant sur un autre souci mineur ce soir, je vous dit demain ce que le détecteur de problèmes SPIP (erreurs PHP) aura vu.

On tient le bon bout, si je puis dire – et ce code va me rendre d’immenses services.

Merci.

Le lun. 30 sept. 2019 à 23:38, pierre laszczak <pierre.laszczak@gmail.com> a écrit :

ah si, je suis fatigué :slight_smile:

$id_parent = $fond['args']['contexte']['id_parent']

test la présence et assigne la valeur $fond[‹ args ›][‹ contexte ›][‹ id_parent ›]

Dans le code c’est le point virgule qui n’a pas lieu d’être (Voire commentaire).
Pour le reste, ça devrait rouler :smiley:

Le lun. 30 sept. 2019 à 23:28, pierre laszczak <pierre.laszczak@gmail.com> a écrit :

Salut

function exemple_formulaire_fond($fond) {
	if (
		$fond['args']['form'] == 'editer_article'
		and $id_parent = $fond['args']['contexte']['id_parent']; // ça ne va pas il ne faut pas de ';' ici 
		and $id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . [intval](http://www.php.net/intval)($id_parent)
		and $id_secteur === 7
	) {
		$fond['data'] = [str_replace](http://www.php.net/str_replace)(_T('info_sous_titre'), _T('exemple:label_exemple'), $fond['data']);
	}
	return $fond;
}


Je ne comprend pas le $id_parent = $fond['args']['contexte']['id_parent'] ?? il doit y avoir une subtilité...
Pour le reste je dirai qu'on veut uniquement remplacer le texte pour la rubrique racine du secteur 7

Sinon pour la page blanche,  en dev ça ne devrait pas être une page blanche mais un message d'erreur php qui s'affiche 
tu **dois** au minimum afficher les erreurs fatales php pour savoir ou ça pète dans ton code :). Il y a 10 000 tutos pour ça sur spip ou ailleurs.

Cordialement 

Le lun. 30 sept. 2019 à 21:16, Naema <junkofzenet@gmail.com> a écrit :

Bonjour,
Typiquement cet exemple devrait répondre parfaitement à mon besoin de changer l’intitulé d’un label de champs dans le formulaire d’édition d’un article en fonction d’un secteur ou d’une rubrique donnée (cf. https://programmer.spip.net/formulaire_fond):

function exemple_formulaire_fond($fond) {
	if (
		$fond['args']['form'] == 'editer_article'
		and $id_parent = $fond['args']['contexte']['id_parent'];
		and $id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . [intval](http://www.php.net/intval)($id_parent)
		and $id_secteur === 7
	) {
		$fond['data'] = [str_replace](http://www.php.net/str_replace)(_T('info_sous_titre'), _T('exemple:label_exemple'), $fond['data']);
	}
	return $fond;
}

Le problème c'est que cela me donne une magnifique page blanche, si je copie ce code dans mes_options.. 

Mes remerciements tout d'abord à JLuc qui a proposé cet article sur Programmer.spip , mais.... Quelqu'un pourrait-il corriger, car je n'y arrive pas. 
Je pense qu'il faudrait s'inspirer de ceci (une fonction perso qui recherche un squelette d'article particulier en fonction de la rubrique en question), qui fonctionne : 
function chrisword_styliser($flux){
	// si article ou rubrique
	if (($fond = $flux['args']['fond'])
	AND in_array($fond, array('article','rubrique'))) {
 
		$ext = $flux['args']['ext'];
		// [...]
		if ($id_article = $flux['args']['id_article']) {
			// calcul de la rubrique
			$r = sql_getfetsel('id_rubrique', 'spip_articles', 'id_article=' . intval($id_article));
			// comparaison de la rubrique avec Chris's Words of Wisdom
			if (intval($r['id_rubrique']) == 2514){
				// si un squelette $fond_chriswords existe
				if ($squelette = test_squelette_chrisword($fond, $ext)) {
					$flux['data'] = $squelette;
				}
			}
		}
	}
	return $flux;
}

Merci d'avance pour vos lumières (les miennes sont faiblârdes actuellement, après plusieurs mois sans avoir touché au code SPIP j'ai tout perdu....)


liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : https://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l’aide à toute heure : http://spip.net/irc