Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

TREE AVEC RECHERCHE POUR AFFICHER UN XML.


Information sur la source

Catégorie :Menu & navigation Niveau : Initié Date de création : 30/05/2005 Vu / téléchargé: 8 058 / 1 890

Note :
9,7 / 10 - par 10 personnes
9,70 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

Description

En plein développement du site communautaire wiki.media-box.net, on inclus le dictionnaire ActionScript. Voici donc un Arbre, utilisant le composant Tree de Flash MX 2004 pro affichant la structure d'un fichier XML.

J'ai aussi créé une fonction permettant d'afficher uniquement les noeuds dont le nom contient un mot entré par l'utilisateur.
 

Source

  • /**
  • * Classe com.wikimb.TreeDoc
  • *
  • * Auteur: SuperDevy ( www.tibulle.com )
  • * Version: alpha 1.0
  • * Date: 29 mai 2005
  • * Flash MX 2004 pro requis
  • *
  • * Classe applicative crée pour le wiki media-box.
  • * Trois composants doivent être déposés : Tree, TextInput, CheckBox.
  • *
  • **/
  • import mx.controls.Tree
  • import mx.controls.TextInput
  • import mx.controls.CheckBox
  • class com.wikimb.TreeDoc
  • {
  • public var datasXML:XML;
  • public var searchXML:XML;
  • public var tree:Tree;
  • public var input:TextInput;
  • public var checkbox:CheckBox;
  • public var onSelect:Function;
  • //---o Constructeur
  • public function TreeDoc (tree:Tree, input:TextInput, checkbox:CheckBox)
  • {
  • //---< Enregistrement des composants
  • this.tree = tree;
  • this.input = input;
  • this.checkbox = checkbox;
  • //---< Accessibilité
  • input.tabIndex = 0;
  • checkbox.tabIndex = 1;
  • tree.tabIndex = 2;
  • input._accProps.name = "Recherche";
  • //---< Alignement
  • resize();
  • Stage.align = "TL";
  • Stage.scaleMode = "noScale";
  • }
  • //---o Initialisation une fois le chargement effectué
  • public function initialize (Void) :Void
  • {
  • trace("Initialisation");
  • var local = this;
  • //---< Tree (Liste)
  • tree.dataProvider = datasXML.cloneNode(true);
  • var event_tree:Object = new Object();
  • event_tree.change = function () {
  • var item:XMLNode = local.tree.selectedNode;
  • if (!item.hasChildNodes()) {
  • local.onSelect(item);
  • }
  • }
  • tree.addEventListener("change", event_tree);
  • //---< TextInbox (Recherche)
  • var event_input:Object = new Object();
  • event_input.enter = function () {
  • local.search(local.input.text);
  • }
  • event_input.change = function () {
  • if (local.checkbox.selected) {
  • local.search(local.input.text);
  • }
  • }
  • input.addEventListener("enter", event_input);
  • input.addEventListener("change", event_input);
  • //---< Stage (Redimentionnement)
  • var event_stage:Object = new Object();
  • event_stage.onResize = function () {
  • local.resize();
  • }
  • Stage.addListener(event_stage);
  • }
  • //---o Chargement des données XML
  • function load (url:String) :Void
  • {
  • var local = this;
  • datasXML = new XML();
  • datasXML.ignoreWhite = true;
  • datasXML.onLoad = function() {
  • trace("Chargement terminé");
  • local.initialize();
  • }
  • datasXML.load(url);
  • }
  • //---o Recherche (initialisation)
  • public function search (text:String) :Void
  • {
  • trace("Recherche pour le mot " + text);
  • var t = getTimer();
  • var local = this;
  • if (text!="") {
  • local.searchXML = new XML();
  • var addNode = function (child) {
  • local.searchXML.appendChild(child.cloneNode(false));
  • };
  • rec_search(datasXML, text, addNode);
  • tree.dataProvider = local.searchXML;
  • } else {
  • local.searchXML = null;
  • tree.dataProvider = local.datasXML.cloneNode(true);
  • }
  • trace("Temps de la recherche " + (getTimer()-t) + " ms");
  • }
  • //---o Recherche (exploration récursive)
  • private function rec_search (node:XMLNode, text:String, action:Function) :Void
  • {
  • var childs = node.childNodes;
  • var i:Number = 0;
  • while (childs[i]!=undefined) {
  • if (childs[i].hasChildNodes()) {
  • rec_search(childs[i], text, action);
  • } else {
  • if (containText(childs[i].attributes.label, text)) {
  • action(childs[i]);
  • }
  • }
  • i++;
  • }
  • }
  • //---o Regarde si un mot est présent dans une phrase.
  • public function containText (sentence:String, word:String) :Boolean
  • {
  • return (sentence.toLowerCase().split(word.toLowerCase(), 2).length > 1);
  • }
  • //---o Redimentionnement pour coller aux bords
  • public function resize (Void) :Void
  • {
  • trace("Redimentionnement");
  • this.tree.setSize(Stage.width, Stage.height-24);
  • this.input.setSize(Stage.width-22, 22);
  • }
  • }
  • // ---> by SuperDevy <---
/**
 * Classe com.wikimb.TreeDoc
 * 
 * Auteur: SuperDevy ( www.tibulle.com )
 * Version: alpha 1.0
 * Date: 29 mai 2005
 * Flash MX 2004 pro requis
 * 
 * Classe applicative crée pour le wiki media-box.
 * Trois composants doivent être déposés : Tree, TextInput, CheckBox.
 * 
 **/

import mx.controls.Tree
import mx.controls.TextInput
import mx.controls.CheckBox

class com.wikimb.TreeDoc
{
	public var datasXML:XML;
	public var searchXML:XML;
	
	public var tree:Tree;
	public var input:TextInput;
	public var checkbox:CheckBox;
	
	public var onSelect:Function;


//---o  Constructeur

	public function TreeDoc (tree:Tree, input:TextInput, checkbox:CheckBox)
	{
	//---<  Enregistrement des composants
		this.tree     = tree;
		this.input    = input;
		this.checkbox = checkbox;

	//---<  Accessibilité
		input.tabIndex    = 0;
		checkbox.tabIndex = 1;
		tree.tabIndex     = 2;
		
		input._accProps.name = "Recherche";

	//---<  Alignement
		resize();
		Stage.align = "TL";
		Stage.scaleMode = "noScale";
	}


//---o  Initialisation une fois le chargement effectué

	public function initialize (Void) :Void
	{
		trace("Initialisation");
		var local = this;
	
	//---<  Tree (Liste)
		tree.dataProvider = datasXML.cloneNode(true);
		var event_tree:Object = new Object();
		event_tree.change = function () {
			var item:XMLNode = local.tree.selectedNode;
			if (!item.hasChildNodes()) {
				local.onSelect(item);
			}
		}
		tree.addEventListener("change", event_tree);

	//---<  TextInbox (Recherche)
		var event_input:Object = new Object();
		event_input.enter = function () {
			local.search(local.input.text);
		}
		event_input.change = function () {
			if (local.checkbox.selected) {
				local.search(local.input.text);
			}
		}
		input.addEventListener("enter", event_input);
		input.addEventListener("change", event_input);

	//---<  Stage (Redimentionnement)
		var event_stage:Object = new Object();
		event_stage.onResize = function () {
			local.resize();
		}
		Stage.addListener(event_stage);
	}


//---o  Chargement des données XML

	function load (url:String) :Void
	{
		var local = this;
		datasXML = new XML();
		datasXML.ignoreWhite = true;
		datasXML.onLoad = function() {
			trace("Chargement terminé");
			local.initialize();
		}
		datasXML.load(url);
	}


//---o  Recherche (initialisation)

	public function search (text:String) :Void
	{
		trace("Recherche pour le mot " + text);
		var t = getTimer();
		var local = this;
		
		if (text!="") {
			local.searchXML = new XML();
			
			var addNode = function (child) {
				local.searchXML.appendChild(child.cloneNode(false));
			};
			rec_search(datasXML, text, addNode);
			tree.dataProvider = local.searchXML;
		} else {
			local.searchXML = null;
			tree.dataProvider = local.datasXML.cloneNode(true);
		}
		
		trace("Temps de la recherche " + (getTimer()-t) + " ms");
	}


//---o  Recherche (exploration récursive)

	private function rec_search (node:XMLNode, text:String, action:Function) :Void
	{
		var childs = node.childNodes;
		var i:Number = 0;
		while (childs[i]!=undefined) {
			if (childs[i].hasChildNodes()) {
				rec_search(childs[i], text, action);
			} else {
				if (containText(childs[i].attributes.label, text)) {
					action(childs[i]);
				}
			}
			i++;
		}
	}


//---o  Regarde si un mot est présent dans une phrase.

	public function containText (sentence:String, word:String) :Boolean
	{
		return (sentence.toLowerCase().split(word.toLowerCase(), 2).length > 1);
	}


//---o  Redimentionnement pour coller aux bords

	public function resize (Void) :Void
	{
		trace("Redimentionnement");
		this.tree.setSize(Stage.width, Stage.height-24);
		this.input.setSize(Stage.width-22, 22);
	}

}

//				---> by SuperDevy <---

Conclusion

Source à paufiner...
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de Mafassure le 30/05/2005 17:45:08 administrateur CS

de la balle !!!
t'as developpé ca tout seul !!!! en tout cas quel talent ;O)
j'adore la function de recherche

t'as source gagnerai à etre un poil plus commenté syntaxe AS2 oblige

pour la note juste un ptit 10 désolé


PS : qu'utilise tu pour editer le dico en XML ?

signaler à un administrateur
Commentaire de elmagico le 11/06/2005 03:18:47

Très beaux scripte, surtout la partie sur la recherche dans un noeud xml ...
Je travail sur un projet avec datagrid et dataset et une fonction de recherche avec choix dans qu'elle noued ...
Je suis au point d'arriver a faire une recherche d'equivalence ( blabla == blala (pour tout le monde :d)) uniquement, et meme pas encore la selection de noeud ...
C'est pourquoi t'as source va m'étre d'une grand utilité ... Mais pour ca faudrais que je comprenne le fonctionement des class ...
Tu aurais des bonnes sources en doc ou tut pour m'aider a apprendre un peut la création des classes ?
Merci.

signaler à un administrateur
Commentaire de SuperDevy le 11/06/2005 12:15:41

Oui :
http://wiki.media-box.net/tutoriaux/flash/introduction_aux_class
http://wiki.media-box.net/tutoriaux/flash/introduction_aux_class2

Content que ça te soit utile.

signaler à un administrateur
Commentaire de elmagico le 22/06/2005 18:32:57

Encore merci pour ces deux liens ... Ils m'ont été fort utiles, et le forum/site en lui meme aussi! Merci ;)

signaler à un administrateur
Commentaire de romalafrite le 13/07/2005 17:38:30

vraiment excellent, suggestion : faire le développement du dossier lorsque l'on clique sur le dossier et non sur la fleche...

signaler à un administrateur
Commentaire de caraffucciu le 09/11/2005 18:49:07

Pourrais tu me dire comment faire pour que lorsqu'on clique sur une node.. celle ci charge un swf sur la scène central...
si c'est trop long je me contenterai d'un lien... merci...

signaler à un administrateur
Commentaire de CISUM Records le 07/05/2006 17:52:20

Vraiment magnifique : 10/10

signaler à un administrateur
Commentaire de thomasthomas le 19/03/2007 18:51:28

Voila j'utilise ce code mais comme dictionnaire mais je n'arrive pas à aller à la ligne, si la definition d'un mots faire 3 ou 4 ligne de suite sur mon xml, lorsque je le visualise il n'y a qu'une phrase coupé.

Si qlq un a la variable qui permet cela je lui en serait TRES reconnaissant !

signaler à un administrateur
Commentaire de suburbanality le 04/10/2007 11:51:30 10/10

TOP ! 10/10

Juste une question qui va peut être vous paraitre bête mais comment faire pointer les rubriques vers un lien exterieur ?

signaler à un administrateur
Commentaire de jojoo le 13/08/2008 13:41:59

c'est quoi "tree"?

signaler à un administrateur
Commentaire de tempusus le 13/08/2008 14:56:45 administrateur CS 10/10

très belle source, bien documentée.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.