Сравнить версии

Шаблоны на основе SQLite

Revision 254203:

Версия 254203 пользователя Bektur, сделанная

Revision 226999:

Версия 226999 пользователя Bektur, сделанная

Title:
Шаблоны на основе SQLite
Шаблоны на основе SQLite
Slug:
Руководство_по_шаблонам_XUL/Шаблоны_на_основе_SQLite
Руководство_по_шаблонам_XUL/Шаблоны_на_основе_SQLite
Tags:
Руководство_по_шаблонам_XUL
Content:

Revision 254203
Revision 226999
t7    <p>t
8      Шаблоны могут использовать источник данных, получающий инфо
>рмацию из базы данных Sqlite. Это позволяет использовать информац 
>ию, полученную из базы данных, для генерации контента XUL. Чтобы  
>сделать это, установите значение атрибута {{ XULAttr("querytype") 
> }} корневого узла шаблона равным <code>storage</code>. Это позво 
>ляет рассматривать источник данных как базу данных Sqlite. 
9    </p>
10    <p>
11      Атрибут {{ XULAttr("datasources") }} может быть установленн
>ым равным одному из двух возможных типов значений. Во-первых, это 
> может быть URL файла, указывающего на локальный файл. В этом слу 
>чае, вы, скорее всего, будете устанавливать атрибут <code>datasou 
>rces</code> динамически, после определения пути к файлу. Во-вторы 
>х, вы можете использовать специальную форму url: 
12    </p>
13    <pre>
14profile:filename.sqlite
15</pre>
16    <p>
17      Эта форма, содержащая префикс 'profile' используется для ук
>азания на файлы в директории, содержащей параметры пользователя ( 
>profile). Это полезно для хранения пользовательских данных, и при 
>менимо в том случае, если вам не нужно вычислять, где находится д 
>анная директория. Файл, находящийся в этой директории, указан пос 
>ле двоеточия, и в данном случае это 'filename.sqlite'. Файлы базы 
> данных Sqlite имеют, как правило, расширение 'sqlite'. 
18    </p>
19    <p>
20      Точно также, как и с источниками данных на основе XML, атри
>бут {{ XULAttr("ref") }} в данное время не используется для источ 
>ников Sqlite, поэтому вам нужно всего лишь оставить атрибут <code 
>>ref</code> пустым; как правило, для этого используется специальн 
>ое значение '*'. 
21    </p>
22    <p>
23      Запрос для источника данных Sqlite представляет из себя про
>сто предложение select языка SQL, как текст внутри элемента {{ XU 
>LElem("query") }}. Этот простой пример иллюстрирует, как отобрази 
>ть список, содержащий значения из одной колонки в таблице из базы 
> данных. 
24    </p>
25    <pre>
26&lt;listbox datasources="profile:userdata.sqlite" ref="*" queryty
>pe="storage"&gt; 
27  &lt;template&gt;
28    &lt;query&gt;
29      select name from myfriends
30    &lt;/query&gt;
31    &lt;action&gt;
32      &lt;listitem uri="?" label="?name"/&gt;
33    &lt;/action&gt;
34  &lt;/template&gt;
35&lt;/listbox&gt;
36</pre>
37    <p>
38      Запрос возвращает список значений из колонки 'name' в табли
>це 'myfriends'. Тело блока action, начинающееся узлом с атрибутом 
> uri="?" повторяется для каждого результата, возвращенного в резу 
>льтате выполнения запроса. Если запрос возвращает шесть результат 
>ов, будет создано шесть элементов списка. Атрибут label имеет спе 
>циальное значение '?name'. Синтаксис, использующий знак вопроса,  
>похож на используемый для других типов запросов. Это обозначает,  
>что каждому атрибуту label будет сопоставлено значение из соответ 
>ствующей колонки таблицы. В данном случае, значение '?name' обозн 
>ачает, что необходимо подставить значение из таблицы name. В резу 
>льтате получим список элементов, содержащий имена из базы данных. 
39    </p>
40    <p>
41      Используя более сложные запросы, можно получить значения из
> нескольких колонок или же данные, выбранные по определённому кри 
>терию. 
42    </p>
43    <pre>
44&lt;vbox datasources="profile:userdata.sqlite" ref="*" querytype=
>"storage"&gt; 
45  &lt;template&gt;
46    &lt;query&gt;
47      select name, email from myfriends where age &gt;= 30
48    &lt;/query&gt;
49    &lt;action&gt;
50      &lt;hbox uri="?"&gt;
51        &lt;label value="?name"/&gt;
52        &lt;label value="?email"/&gt;
53      &lt;/hbox&gt;
54    &lt;/action&gt;
55  &lt;/template&gt;
56&lt;/vbox&gt;
57</pre>
58    <p>
59      Этот шаблон отображает данные, полученные из двух колонок. 
>Всякое вхождение знака вопроса в блоке action заменяется на значе 
>ние из результата запроса. В данном случае он используется дважды 
>: в первый раз для отображения имени и во второй раз для отображе 
>ния адреса электронной почты. Атрибут <code>uri</code> элемента < 
>code>hbox</code> необходим для одного элемента внутри блока actio 
>n. Для запросов Sqlite в большинстве случаев это будет самый внеш 
>ний узел. 
60    </p>
61    <p>
62      Обратите внимание также на то, что запрос содержит оператор
> where, который выбирает только те строки, для которых значение п 
>оля возраст не меньше 30. 
63    </p>
64    <h3 id=".D0.9F.D0.B0.D1.80.D0.B0.D0.BC.D0.B5.D1.82.D1.80.D1.8
>B_.D0.B7.D0.B0.D0.BF.D1.80.D0.BE.D1.81.D0.B0" name=".D0.9F.D0.B0. 
>D1.80.D0.B0.D0.BC.D0.B5.D1.82.D1.80.D1.8B_.D0.B7.D0.B0.D0.BF.D1.8 
>0.D0.BE.D1.81.D0.B0"> 
65      Параметры запроса
66    </h3>
67    <p>
68      Иногда, вам потребуется динамически изменять запрос в завис
>имости от определённых критериев. Вы можете использовать простой  
>способ, изменяя текст внутри элемента <code>query</code>, а после 
> перестраивать шаблон. Тем не менее, этот подход может стать гром 
>оздким и неповоротливым для более сложных запросов, и может стать 
> источником большого количества ошибок, если для значений не были 
> правильно обработаны специальные символы, такие как лишние кавыч 
>ки и двоеточия. Это особенно важно, если вы обрабатываете значени 
>я, полученные от пользователя. 
69    </p>
70    <p>
71      Простым решением проблемы является использование параметров
> запросов, используя элемент {{ XULElem("param") }}. 
72    </p>
73    <pre>
74&lt;query&gt;
75  select name, email from myfriends where gender == :wantedgender
76  &lt;param name="wantedgender"&gt;male&lt;/param&gt;
77&lt;/query&gt;
78</pre>
79    <p>
80      В этом примере используется параметр 'wantedgender'. Прямым
> потомком элемента <code>query</code> должен быть элемент <code>p 
>aram</code>. Атрибут <code>name</code> используется для определен 
>ия имени параметра, а содержимое элемента <code>param</code> опре 
>деляет используемое значение. Когда имя, предварённое двоеточием, 
> появляется в запросе, такое как ':wantedgender' в вышеприведённо 
>м примере, значение этого параметра будет подставлено в запрос. В 
> конечном счёте, используемый запрос выглядит так: 
81    </p>
82    <pre>
83select name, email from myfriends where gender == 'male'
84</pre>
85    <p>
86      При использовании такого приёма, специальные символы, такие
> как кавычки, обрабатываются автоматически. Если кавычки появляют 
>ся в запросе, то они будут при необходимости обработаны. Теперь,  
>чтобы настроить запрос для выбора чего-то иного, например, чтобы  
>выбрать информацию, относящуюся к женщинам, всё что нужно сделать 
> - это просто получить ссылку на элемент <code>param</code> и изм 
>енить его содержимое. Скорее всего, вы присвоите определённый иде 
>нтификатор элементу <code>param</code>, чтобы использовать метод  
><a href="ru/DOM/document.getElementById">getElementById</a> для д 
>оступа к нему. 
87    </p>
88    <p>
89      Вы можете добавить столь много параметров, сколько необходи
>мо для выполнения вашего запроса. Пример, приведённый выше исполь 
>зовал строковый параметр. Тем не менее, если вам нужен числовой п 
>араметр, вам также потребуется установить значение атрибута <code 
>>type</code>. 
90    </p>
91    <pre>
92&lt;listbox id="friends" datasources="profile:userdata.sqlite" re
>f="*" querytype="storage"&gt; 
93  &lt;template&gt;
94    &lt;query&gt;
95      select name, from myfriends where age &gt;= :minage &amp;&a
>mp; age &lt;= maxage 
96      &lt;param id="minage" name="minage" type="integer"&gt;30&lt
>;/param&gt; 
97      &lt;param id="maxage" name="maxage" type="integer"&gt;40&lt
>;/param&gt; 
98    &lt;/query&gt;
99    &lt;action&gt;
100      &lt;listitem uri="?" label="?name"/&gt;
101    &lt;/action&gt;
102  &lt;/template&gt;
103&lt;/listbox&gt;
104</pre>
105    <p>
106      В данном случае age - целочисленный параметр, поэтому атриб
>уту <code>type</code> установлено значение <code>integer</code>.  
>Целые числа представлены 32-битными значениями, но вы можете испо 
>льзовать значение <code>int64</code> для 64-битных целых. Вы може 
>те также использовать специальное значение <code>double</code> дл 
>я вещественных чисел с двойной точностью. Если же тип не определё 
>н, то по умолчанию предполагается, что он строковый. 
107    </p>
108    <p>
109      Позже мы можем изменить значение параметра age, используя п
>ростой скрипт: 
110    </p>
111    <pre>
112function adjustAge(min, max)
113{
114  document.getElementById("minage").textContent = min;
115  document.getElementById("maxage").textContent = max;
116  document.getElementById("friends").builder.rebuild();
117}
118</pre>
119    <p>
120      Эта функция принимает два параметра, максимальное и минимал
>ьное используемое значения. Мы получаем элементы <code>param</cod 
>e> и устанавливаем их свойства <a href="ru/DOM/element.textConten 
>t">textContent</a> равными требуемому значению. Наконец, мы перес 
>траиваем весь шаблон. 
121    </p>

Вернуться в Историю