aboutsummaryrefslogtreecommitdiff
path: root/files/fr/places/accès_aux_marque-pages/index.html
blob: dc9f5267a82a7cd3468c3224c448b3a9a9bc3295 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
---
title: Accès aux marque-pages
slug: Places/Accès_aux_marque-pages
tags:
  - Développement_de_Mozilla
  - Extensions
  - Firefox 3
  - Places
translation_of: Mozilla/Tech/Places/Retrieving_part_of_the_bookmarks_tree
---
<p></p>

<p>Ce document permet de démarrer rapidement pour ceux qui désirent retrouver rapidement une portion de l'arbre des marque-pages. Ceux-ci sont accessibles via le <a href="fr/Places/Syst%c3%a8me_de_requ%c3%aates">Système de requêtes de Places</a>, qui contient des informations plus générales. Pour en savoir plus sur l'API du service de marque-pages, consultez <a href="fr/Places/Service_de_marque-pages">Service de marque-pages</a>.</p>

<h3 id="Obtention_des_objets_de_requ.C3.AAte_et_d.27options" name="Obtention_des_objets_de_requ.C3.AAte_et_d.27options">Obtention des objets de requête et d'options</h3>

<p>Toutes les interrogations se font au travers du service d'historique. Tout d'abord, il faut obtenir une requête vide et des objets d'options depuis celui-ci :</p>

<pre>var historyService = Components.classes["@mozilla.org/browser/nav-history-service;1"]
                               .getService(Components.interfaces.nsINavHistoryService);
var options = historyService.getNewQueryOptions();
var query = historyService.getNewQuery();
</pre>

<h3 id="Recherche_du_dossier_d.C3.A9sir.C3.A9" name="Recherche_du_dossier_d.C3.A9sir.C3.A9">Recherche du dossier désiré</h3>

<p>Les ID de dossiers connus sont obtenus depuis le service de marque-pages. Les attributs définis dans <code><a href="https://dxr.mozilla.org/mozilla-central/source//toolkit/components/places/public/nsINavBookmarksService.idl" rel="custom">/toolkit/components/places/public/nsINavBookmarksService.idl</a></code> sont : <code>placesRoot</code>, <code>bookmarksRoot</code>, <code>tagRoot</code> et <code>toolbarFolder</code>. Il est également possible d'obtenir des ID de dossiers depuis une requête antérieure.</p>

<p>Cet exemple récupèrera le contenu de la barre personnelle :</p>

<pre>var bookmarksService = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"]
                                 .getService(Components.interfaces.nsINavBookmarksService);
var toolbarFolder = bookmarksService.toolbarFolder;
</pre>

<h3 id="Remplissage_des_objets_de_requ.C3.AAte_et_d.27options" name="Remplissage_des_objets_de_requ.C3.AAte_et_d.27options">Remplissage des objets de requête et d'options</h3>

<p>Si vous désirez un arbre complet des marque-pages, il sera nécessaire d'utiliser l'option de groupement <code>GROUP_BY_FOLDER</code>. Actuellement, le système de requêtes n'a pas besoin de cette option, et renverra toujours une hiérarchie lorsque le contenu d'exactement un dossier est demandé, il s'agit du <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=331487" title="Fix GROUP_BY_FOLDER in query system">bug 331487</a>. Une fois qu'il sera corrigé, une requête de marque-pages sans <code>GROUP_BY_FOLDER</code> renverra une liste plate de tous les marque-pages dans tous les dossiers<em>et sous-dossiers</em> correspondant à la requête.</p>

<p>Pour une requête « normale » de marque-pages, vous aurez un dossier racine. Ce dossier sera donné à <code>setFolders</code> dans votre objet de requête :</p>

<pre>options.setGroupingMode(options.GROUP_BY_FOLDER);
query.setFolders([toolbarFolder], 1);
</pre>

<h3 id="Ex.C3.A9cution_de_la_requ.C3.AAte" name="Ex.C3.A9cution_de_la_requ.C3.AAte">Exécution de la requête</h3>

<p>Les fonctions <code>executeQuery</code> et <code>executeQueries</code> renverront un objet <code><a href="/fr/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsINavHistoryResult" title="">nsINavHistoryResult</a></code> contenant les résultats de la requête :</p>

<pre>var result = historyService.executeQuery(query, options);
</pre>

<h3 id="Lecture_des_r.C3.A9sultats" name="Lecture_des_r.C3.A9sultats">Lecture des résultats</h3>

<p>Lorsque la requête se fait sur exactement un dossier groupé par dossier et sans paramètres compliqués comme des mots-clés ou des intervalles de date (comme dans cet exemple), la racine <code>root</code> de ce résultat sera un <code><a href="/fr/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsINavHistoryContainerResultNode" title="">nsINavHistoryContainerResultNode</a></code> correspondant à votre dossier. Si la requête est complexe ou que vous n'avez pas utilisé <code>GROUP_BY_FOLDER</code>, la racine sera un <code><a href="/fr/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsINavHistoryQueryResultNode" title="">nsINavHistoryQueryResultNode</a></code>.</p>

<p>Avant d'accéder aux enfants d'un conteneur de résultats, il faut d'abord l'ouvrir, et il est ensuite possible de parcourir ses enfants. Tant que le conteneur est ouvert, il écoutera les notifications du système de marque-pages pour rester à jour. Lorsque vous en avez terminé, assurez-vous de fermer le conteneur pour libérer les ressources. Dans le cas contraire, il continuera à recevoir des notifications et à se mettre à jour, ce qui ralentira tout le navigateur.</p>

<pre>var rootNode = result.root;
rootNode.containerOpen = true;

// parcourt les enfants directs de ce dossier et les affiche en console
for (var i = 0; i &lt; rootNode.childCount; i ++) {
  var node = rootNode.getChild(i);
  dump("Enfant : " + node.title + "\n");
}

// toujours fermer un conteneur après utilisation !
rootNode.containerOpen = false;
</pre>

<p>Si vous rencontrez un nœud dont le <code>type</code> est <code>RESULT_TYPE_FOLDER</code> ou un autre type de conteneur, il peut être ouvert pour parcourir sa hiérarchie. La section « Utilisation des résultats » dans <a href="fr/Places/Syst%c3%a8me_de_requ%c3%aates">Places:Système de requêtes</a> vous intéressera sûrement pour comprendre quels sont les différents types de résultats.</p>

<h3 id="Listing_du_code_complet" name="Listing_du_code_complet">Listing du code complet</h3>

<pre>var historyService = Components.classes["@mozilla.org/browser/nav-history-service;1"]
                               .getService(Components.interfaces.nsINavHistoryService);
var options = historyService.getNewQueryOptions();
var query = historyService.getNewQuery();

var bookmarksService = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"]
                                 .getService(Components.interfaces.nsINavBookmarksService);
var toolbarFolder = bookmarksService.toolbarFolder;

// la ligne suivante peut être commentée pour l'instant tant que le bug n'a pas été corrigé ; la version finale en aura besoin
options.setGroupingMode(options.GROUP_BY_FOLDER);
query.setFolders([toolbarFolder], 1);

var result = historyService.executeQuery(query, options);
var rootNode = result.root;
rootNode.containerOpen = true;

// parcourt les enfants directs de ce dossier et les affiche en console
for (var i = 0; i &lt; rootNode.childCount; i ++) {
  var node = rootNode.getChild(i);
  dump("Enfant : " + node.title + "\n");
}

// toujours fermer un conteneur après utilisation !
rootNode.containerOpen = false;
</pre>