Table des matières

Exemple d'une page avec des onglets et un formulaire pour enregistrer des paramètres

Nous allons utiliser des onglets, un formulaire et des paramètres pour réaliser une page d'administration.

L'affichage XHTML

On utilise une case à cocher pour le paramètre example_active :

<p><label class="classic"><?php echo(
	form::checkbox('example_active','1',$settings->example_active).
	' '.__('Enable')); ?></label></p>

On l'insère dans un formulaire et dans un onglet dont l'identifiant est settings :

<div class="multi-part" id="settings"
		title="<?php echo __('Settings'); ?>">
		<form method="post" action="<?php echo($p_url); ?>">
			<p><label class="classic"><?php echo(
				form::checkbox('example_active','1',$settings->example_active).
				' '.__('Enable')); ?></label></p>
			<p><?php echo $core->formNonce(); ?></p>
			<p><input type="submit" name="saveconfig"
			value="<?php echo __('Save configuration'); ?>" /></p>
		</form>
	</div>

$settings→example_active permet de cocher ou non la case lors de l'affichage de la page.

Pour pouvoir afficher un message de confirmation, on doit placer ce code dans la balise <body> </body>, sous le <h2> </h2> par exemple :

<?php if (!empty($msg)) {echo '<p class="message">'.$msg.'</p>';} ?>

Voici le code XHTML complet :

<html>
<head>
	<title><?php echo(__('Example')); ?></title>
	<?php echo dcPage::jsPageTabs($default_tab); ?>
</head>
<body>
 
	<h2><?php echo html::escapeHTML($core->blog->name).' &rsaquo; '.
		__('Example'); ?></h2>
 
	<?php if (!empty($msg)) {echo '<p class="message">'.$msg.'</p>';} ?>
 
	<div class="multi-part" id="tab-1"
		title="<?php echo __('Tab 1'); ?>">
		<?php echo(__('Hello World!')); ?>
	</div>
 
	<div class="multi-part" id="settings"
		title="<?php echo __('Settings'); ?>">
		<form method="post" action="<?php echo($p_url); ?>">
			<p><label class="classic"><?php echo(
				form::checkbox('example_active','1',$settings->example_active).
				' '.__('Enable')); ?></label></p>
			<p><?php echo $core->formNonce(); ?></p>
			<p><input type="submit" name="saveconfig"
			value="<?php echo __('Save configuration'); ?>" /></p>
		</form>
	</div>
 
</body>
</html>

Le traitement par PHP

On va placer au début du fichier index.php le code PHP dont on a besoin.

Pour éviter d'écrire $core→blog→settings plusieurs fois, on va créer un raccourci : la valeur $settings :

$settings =& $core->blog->settings;
 
$settings->setNameSpace('example');

On enregistre le paramètre example_active :

$settings->put('example_active',
	!empty($_POST['example_active']),
	'boolean','Enable Example');

Ensuite on redirige le navigateur vers la page d'administration, en ajoutant un paramètre $_GET à l'URL qui servira à afficher un message de confirmation.

http::redirect($p_url.'&tab=settings&saveconfig=1');

Pour enregistrer les paramètres seulement quand le formulaire a été envoyé, on utilise ce code :

if (!empty($_POST['saveconfig']))
{
	...
}

Voici le bloc d'instruction en entier :

if (!empty($_POST['saveconfig']))
{
	$settings->put('example_active',
		!empty($_POST['example_active']),
		'boolean','Enable Example');
 
	# redirect to the page, avoid conflicts with old settings
	http::redirect($p_url.'&tab=settings&saveconfig=1');
}

Enfin, on définit le message de confirmation :

if (isset($_GET['saveconfig']))
{
	$msg = __('Configuration successfully updated.');
}

Voici le code PHP qu'on a utilisé :

<?php
$default_tab = 'tab-1';
 
if (isset($_REQUEST['tab'])) {
	$default_tab = $_REQUEST['tab'];
}
 
$settings =& $core->blog->settings;
 
$settings->setNameSpace('example');
 
if (!empty($_POST['saveconfig']))
{
	$settings->put('example_active',
		!empty($_POST['example_active']),
		'boolean','Enable Example');
 
	# redirect to the page, avoid conflicts with old settings
	http::redirect($p_url.'&tab=settings&saveconfig=1');
}
 
if (isset($_GET['saveconfig']))
{
	$msg = __('Configuration successfully updated.');
}
 
?>

Résultat et code complet

<?php
$default_tab = 'tab-1';
 
if (isset($_REQUEST['tab'])) {
	$default_tab = $_REQUEST['tab'];
}
 
$settings =& $core->blog->settings;
 
$settings->setNameSpace('example');
 
if (!empty($_POST['saveconfig']))
{
	$settings->put('example_active',
		!empty($_POST['example_active']),
		'boolean','Enable Example');
 
	# redirect to the page, avoid conflicts with old settings
	http::redirect($p_url.'&tab=settings&saveconfig=1');
}
 
if (isset($_GET['saveconfig']))
{
	$msg = __('Configuration successfully updated.');
}
 
?><html>
<head>
	<title><?php echo(__('Example')); ?></title>
	<?php echo dcPage::jsPageTabs($default_tab); ?>
</head>
<body>
 
	<h2><?php echo html::escapeHTML($core->blog->name).' &rsaquo; '.
		__('Example'); ?></h2>
 
	<?php if (!empty($msg)) {echo '<p class="message">'.$msg.'</p>';} ?>
 
	<div class="multi-part" id="tab-1"
		title="<?php echo __('Tab 1'); ?>">
		<?php echo(__('Hello World!')); ?>
	</div>
 
	<div class="multi-part" id="settings"
		title="<?php echo __('Settings'); ?>">
		<form method="post" action="<?php echo($p_url); ?>">
			<p><label class="classic"><?php echo(
				form::checkbox('example_active','1',$settings->example_active).
				' '.__('Enable')); ?></label></p>
			<p><?php echo $core->formNonce(); ?></p>
			<p><input type="submit" name="saveconfig"
			value="<?php echo __('Save configuration'); ?>" /></p>
		</form>
	</div>
 
</body>
</html>

Télécharger un plugin exemple

plugin-adminExample.zip