Annonces
Livre d'or

Par shark

Après avoir tester différents CMS pendant 1 semaine, c'est le votre qui correspond le mieux à mon mini-projet! Vous faites un bon boulot, c'est un cms [Suite...]

Livre d'or

Mini sondage
Disposez-vous de PHP 5 chez votre hébergeur ?








Résultats

 
classe Categories_management - traitement des actions
 



La classe Categories_management fournit les méthodes permettant d'effectuer toutes les actions et les interfaces permettant de proposer ces actions à l'utilisateur. Elle ne gère cependant pas la liaison entre ces deux morceaux, c'est à vous de la faire. La principale raison est pour laisser au développeur du module la plus grande liberté de personnalisation, notamment si il veut étendre cette classe et l'adapter à son module. Nous allons voir dans cet article comment récupérer les actions à effectuer et comment appeler les méthodes correspondantes.

Comme annoncé dans la documentation de la méthode Build_categories_administration_interface, cette interface utilise l'AJAX. Il vous faudra donc deux fichiers, un affichant l'interface et l'autre réceptionnant et traitant les requêtes AJAX.
Ce sont les noms de ces fichiers que nous devons passer au constructeur de la classe Categories_management.

Fichier où on affiche l'interface


Déplacement d'une catégorie (monter/descendre)


Ce fichier doit effectuer les mêmes action que le fichier AJAX pour ceux qui n'autorisent pas l'exécution du javascript.
Pour cela vous devez réceptionner les variables permettant de monter et descendre une catégorie (seules actions directement prises en charge par l'AJAX).
Voici comment procéder. Les variables passées par l'adresse id_up et id_down contiennent l'identifiant de la catégorie à monter et à descendre (normalement une des deux est non nulle).
Voilà comment les traiter :
Code PHP :
$id_up = request_var(GET, 'id_up', 0);
$id_down = request_var(GET, 'id_down', 0);
 
//Instanciation de l'objet (en pratique vous ne le ferez pas forcément ici)
include_once('../includes/cats_management.class.php');
$categories = new Categories('fichier_admin.php', 'fichier_xmlhttprequest.php', $mon_cache);
 
if( $id_up > 0 )
{
	$categories->Move_category($id_up, MOVE_CATEGORY_UP);
	redirect(transid('admin_faq_cats.php')); //Traitement terminé : redirection
}
elseif( $id_down > 0 )
{
	$categories->Move_category($id_down, MOVE_CATEGORY_DOWN);
	redirect(transid('admin_faq_cats.php')); //Traitement terminé : redirection
}


Changement de visibilité


Cette action passe également en AJAX. Il faut donc mettre le code suivant dans le fichier de traitement de la requête AJAX.
Code PHP :
$id_show = request_var(GET, 'show', 0);
$id_hide = request_var(GET, 'hide', 0);
 
//Instanciation de l'objet (en pratique vous ne le ferez pas forcément ici)
include_once('../includes/cats_management.class.php');
$categories = new Categories('fichier_admin.php', 'fichier_xmlhttprequest.php', $mon_cache);
 
if( $id_show > 0 )
	$result = $faq_categories->Change_category_visibility($id_show, CAT_VISIBLE, LOAD_CACHE);
elseif( $id_hide > 0 )
	$result = $faq_categories->Change_category_visibility($id_hide, CAT_UNVISIBLE, LOAD_CACHE);


Déplacement d'une catégorie dans une autre catégorie


Si vous souhaitez à un moment proposer le déplacement d'une catégorie (changement de catégorie parente), vous devez utiliser la méthode Move_category_into_another_category pour générer le formulaire de changement puis récupérer et traiter comme suit :
Code PHP :
//Supposons que nous avons donné le nom id_parent au formulaire de sélection de catégorie
//La catégorie à traiter a pour identifiant$id_categorie
$id_parent = !empty($_POST['id_parent']) ? numeric($_POST['id_parent']) : 0;
$categories->Move_category_into_another_category($id_category, $id_parent); //Déplacement


Suppression d'une catégorie


Dans le même fichier vous savez si il faut supprimer une catégorie et si c'est le cas laquelle est à supprimer. L'interface demandera une confirmation de suppression en javascript, il est cependant intéressant de proposer plusieurs modes de suppression (suppression de tout son contenu ou déplacement). Ceci est à étendre dans la classe qui hérite de Categories_management que vous construisez.
Code PHP :
$cat_to_del = request_var(GET, 'del', 0);
if( $cat_to_del > 0 )
{
//On doit supprimer (ou proposer la suppression) de la catégorie $cat_to_del
}


Exemple concret de fichier d'interface


Vous pourrez voir la gestion d'interfaces à partir de cette classe dans l'administration du module FAQ. Ceci se trouve dans le fichier admin_faq_cats.php.

Fichier de réception des requêtes AJAX


Ce fichier est assez simple à mettre en oeuvre et en pratique n'est pas à modifier énormément. C'est pourquoi vous pouvez vous appuyer fortement sur l'exemple suivant (fichier xmlhttprequest_cats.php du module FAQ).
Code PHP :
<?php
require_once('../includes/begin.php');
define('TITLE', 'Ajax faq');
require_once('../includes/header_no_display.php');
 
if( $Member->Check_level(ADMIN_LEVEL) ) //Admin
{	
	include_once('faq_cats.class.php');
	$faq_categories = new FaqCats();
 
	$id_up = request_var(GET, 'id_up', 0);
	$id_down = request_var(GET, 'id_down', 0);
	$id_show = request_var(GET, 'show', 0);
	$id_hide = request_var(GET, 'hide', 0);
	$cat_to_del = request_var(GET, 'del', 0);
 
	$result = false;
 
	if( $id_up > 0 )
		$result = $faq_categories->Move_category($id_up, MOVE_CATEGORY_UP);
	elseif( $id_down > 0 )
		$result = $faq_categories->Move_category($id_down, MOVE_CATEGORY_DOWN);
	elseif( $id_show > 0 )
		$result = $faq_categories->Change_category_visibility($id_show, CAT_VISIBLE, LOAD_CACHE);
	elseif( $id_hide > 0 )
		$result = $faq_categories->Change_category_visibility($id_hide, CAT_UNVISIBLE, LOAD_CACHE);
 
	//Operation was successfully
	if( $result )
	{	
		$cat_config = array(
			'xmlhttprequest_file' => 'xmlhttprequest_cats.php',
			'administration_file_name' => 'admin_faq_cats.php',
			'url' => array(
				'unrewrited' => 'faq.php?id=%d',
				'rewrited' => 'faq-%d+%s.php')
		);
 
		$faq_categories->Set_displaying_configuration($cat_config);
 
		$Cache->Load_file('faq', RELOAD_CACHE);
 
		echo $faq_categories->Build_categories_administration_interface(AJAX_MODE);
	}
}
include_once('../includes/footer_no_display.php');
?>


 
Cette page a été vue 1149 fois
Annonces