<?xml version="1.0" encoding="windows-1251"?>




<rss version="2.0">

<channel>
<title>Navat.net - Ресурсы для разработки ПО и сайтов.. Статьи</title>
<link>http://navat.net/</link>
<description>Статьи</description>
<image>
        <title>Navat.net - Ресурсы для разработки ПО и сайтов.</title>
        <url>images/logo.gif</url>
        <link>http://navat.net/</link>
    </image><language>ru-ru</language>

<item>
<title>Примеры работы с массивами в PHP  (новичкам)</title>
<link>http://navat.net/readarticle.php?article_id=28</link>
<description>&lt;b&gt;Создать массив:&lt;/b&gt;

&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;&lt;span style='color:green;'&gt;$имя_массива[индекс] = данные;&lt;/span&gt;&lt;/div&gt;

&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;&lt;span style='color:navy;'&gt;$massiv[0] = &quot;text&quot;;&lt;/span&gt;&lt;/div&gt;
т.е. $massiv[0] имеет значение &quot;text&quot;; Но можно записать попроще:
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;&lt;span style='color:navy;'&gt;$massiv[] = &quot;text&quot;;&lt;/span&gt;&lt;/div&gt;
эта запись эквилента предыдущей. т.е. первый массив начинается не с нуля, а c единицы! Но также можно сделать так:
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;&lt;span style='color:navy;'&gt;$massiv[2] = &quot;text&quot;;&lt;/span&gt;&lt;/div&gt;
$massiv[0] и $massiv[1] будут пусты. 

Если вы хотите создать массив уже из имеющихся данных, то делают вот что:
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;&lt;span style='color:navy;'&gt;$massiv = array(&quot;text&quot;, &quot;mes&quot;, &quot;chislo&quot;);&lt;/span&gt;&lt;/div&gt;
$massiv[0] будет равен &quot;mes&quot; &quot;text&quot; &quot;chislo&quot;; 

&lt;b&gt;Массивы и файлы&lt;/b&gt;
Массивы можно записывать в файлы и также вытаскивать их оттуда. Причём можно вытащить массив и что-нибудь добавить новое или изменять. Удалить тоже можно.

Допустим мы создали массив:
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;&lt;span style='color:navy;'&gt;$massiv[] = array(&quot;Text&quot;);&lt;/div&gt;
Далее записываем его в файл
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;$file = fopen('file.txt', 'w');
$massiv = serialize($massiv); &lt;span style='color:gray;'&gt;// это мы перекодировали массив для записи его в файл &lt;/span&gt;
fwrite ($file,&quot;$massiv&quot;);
fclose($file);&lt;/span&gt;&lt;/div&gt;

В другом скрипте мы достаём массив чтобы пополнить:
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;&lt;span style='color:navy;'&gt;$open = fopen(&quot;file.txt&quot;, &quot;r&quot;);
$massiv = unserialize(fread($open,100000)); 
fclose($open);
$massnew[] = array(&quot;text323123&quot;); &lt;span style='color:gray;'&gt;// информация которую надо добавить в наш старый массив&lt;/span&gt;
$massiv[] = $massnew; &lt;span style='color:gray;'&gt;// добавляем&lt;/span&gt;
$open2 = fopen(&quot;file.txt&quot;, &quot;w&quot;);
fputs($open2, serialize($massiv));
fclose($open2);&lt;/span&gt;&lt;/div&gt;

&lt;b&gt;Вывод массива&lt;/b&gt;
Вот способ вывода самого простого массива:
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;&lt;span style='color:navy;'&gt;echo &quot;$massiv&quot;;&lt;/span&gt;&lt;/div&gt;
Но что если в массиве допустим, хранятся ссылки и все нужно вывести. Нужно показать название ссылки, адрес, описание. 

Делается вот так:
Представим что в каждом массиве есть элементы - name, link, description. Каждый элемент хранит свою конкретную информацию о ссылки и таких ссылок много. Тогда на экран покажем ссылки таким образом:

Выводим массив $massiv &quot;поэлементно&quot;
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;foreach($massiv as $mas) {
&lt;span style='color:navy;'&gt;echo &quot;$mas[name]&amp;ltbr&gt;$mas[link]&amp;ltbr&gt;$mas[description]&amp;ltbr&gt;&amp;ltbr&gt;&quot;;&lt;/span&gt;
} 
&lt;/div&gt;

Автор статьи - Zealot &lt;a href='http://www.rupixel.com'&gt;rupixel&lt;/a&gt; (наш партнёр)</description>
<pubDate>Tue, 30 Sep 2008 23:04:00 +0400</pubDate>
<guid>http://navat.net/readarticle.php?article_id=28</guid>
</item>

<item>
<title>Рисуем &quot;Шарики&quot;</title>
<link>http://navat.net/readarticle.php?article_id=27</link>
<description>Итак начнем. 
1. Рисовать мы будем на черном фоне. Поэтому заливаем фон черным цветом.

&lt;center&gt;&lt;img src='images/articles/ellipse/1.jpg' style='margin:5px;' align='center'&gt;&lt;/center&gt;

2. Создаем новый слой (Ctrl+Shift+N)

3. Рисуем еллипс, удерживая клавишу Shift. Для этого на панели инструментов, выбираем инструмент &lt;b&gt;Ellipse Tool&lt;/b&gt;. (рисуем в созданном слое)

&lt;center&gt;&lt;img src='images/articles/ellipse/3.jpg' style='margin:5px;' align='center'&gt;&lt;/center&gt;

4. Создем еще один слой (Ctrl+Shift+N, этот слой должен находиться по верх всех остальных) 

5. В нем рисуем еще один еллипс. Ставим уровень прозрачности, слоя в котором находится этот еллипс равный 8%, а сам еллипс заливаем булым цветом. (прозрачность меняется на панели &lt;b&gt;Layers&lt;/b&gt; (F7), чем больше число, тем непрозрачнее слой )

&lt;center&gt;&lt;img src='images/articles/ellipse/13.jpg' style='margin:5px;' align='center'&gt;&lt;/center&gt;

&lt;center&gt;&lt;img src='images/articles/ellipse/5.jpg' style='margin:5px;' align='center'&gt;&lt;/center&gt;

6. Щелкаем правой клавишей, по созданному еллипсу и в появившемся меню, выбираем пункт &lt;b&gt;Free Transform&lt;/b&gt;.

&lt;center&gt;&lt;img src='images/articles/ellipse/6.jpg' style='margin:5px;' align='center'&gt;&lt;/center&gt;

7. Немного сплющиваем вверх еллипс. (затем нажимаем Enter)

&lt;center&gt;&lt;img src='images/articles/ellipse/7.jpg' style='margin:5px;' align='center'&gt;&lt;/center&gt;

8. Создаем еще однин слой (Ctrl+Shift+N), он тоже должен быть по верх остальных.

9. В нем рисуем еще один еллипс удерживая клавишу Shift, и немного сплющиваем его. Как показано в 6-7 пункте.
Устанавливаем прозрачность слоя 12%, заливаем белым цветом еллипс.

&lt;center&gt;&lt;img src='images/articles/ellipse/8.jpg' style='margin:5px;' align='center'&gt;&lt;/center&gt;

10. Щелкаем два раза по слою, в котором находиться самый большой еллипс, откроется окошко.

11. В левой панельке этого окна (в котором находятся пункты: Drop Shadow, Inner Shadow и прочие) выбираем &lt;b&gt;Inner Glow&lt;/b&gt;.

12. В правой части отобразятся параметры &lt;b&gt;Inner Glow&lt;/b&gt;, настраиваем их следующим образом:

&lt;center&gt;&lt;img src='images/articles/ellipse/9.jpg' style='margin:5px;' align='center'&gt;&lt;/center&gt;

13. Должно получиться вот что:

&lt;center&gt;&lt;img src='images/articles/ellipse/10.jpg' style='margin:5px;' align='center'&gt;&lt;/center&gt;

14. В правой части выбираем пункт &lt;b&gt;Gradient Overlay&lt;/b&gt;.

15. Настраиваем его следующим образом:

&lt;center&gt;&lt;img src='images/articles/ellipse/11.jpg' style='margin:5px;' align='center'&gt;&lt;/center&gt;

17. Должно получиться вот что:

&lt;center&gt;&lt;img src='images/articles/ellipse/12.jpg' style='margin:5px;' align='center'&gt;&lt;/center&gt;

18. теперь добавим небольшую границу вокруг еллипса (самого большого). Для этого два раза щелкаем по слою, появится окошко настройки стилей слоя (&lt;b&gt;Layer Style&lt;/b&gt;), выбераем пункт в левой части - &lt;b&gt;Stroke&lt;/b&gt;, затем настраиваем следующим образом:

&lt;center&gt;&lt;img src='images/articles/ellipse/14.jpg' style='margin:5px;' align='center'&gt;&lt;/center&gt;

19. Должно получиться примерно так:

&lt;center&gt;&lt;img src='images/articles/ellipse/15.jpg' style='margin:5px;' align='center'&gt;&lt;/center&gt;

 20. Можно сделать и неоновое свечение, вокруг нашего еллипса. Делается это так. Заходим в настроики стилей слоя (Layer Style), в котором находится самый большой еллипс, выбераем в левой части &lt;b&gt;Outer Glow&lt;/b&gt;, и настраиваем следующим образом:

&lt;center&gt;&lt;img src='images/articles/ellipse/16.jpg' style='margin:5px;' align='center'&gt;&lt;/center&gt;

21. У меня получилось так:

&lt;center&gt;&lt;img src='images/articles/ellipse/17.jpg' style='margin:5px;' align='center'&gt;&lt;/center&gt;


А можем изменить цвет всего шарика. Поэкспериментируем...

1. Щелкаем по любому слою правой клавишей, в появившейся менюшке выбираем пункт &quot;&lt;b&gt;Flatten Image&lt;/b&gt;&quot;, для того чтобы склеить все слои в один.

2. Заходим сюда: &lt;b&gt;Строка меню -&gt; Image -&gt; Adjustments -&gt; Color Balance&lt;/b&gt;  (Ctrl+B)

&lt;center&gt;&lt;img src='images/articles/ellipse/18.jpg' style='margin:5px;' align='center'&gt;&lt;/center&gt;

3. Настраиваем, например так:

&lt;center&gt;&lt;img src='images/articles/ellipse/19.jpg' style='margin:5px;' align='center'&gt;&lt;/center&gt;

4. Должно получиться следующее:

&lt;center&gt;&lt;img src='images/articles/ellipse/20.jpg' style='margin:5px;' align='center'&gt;&lt;/center&gt;


Ну вот и вся статья... 


Если хотите можете посмотреть несколько моих, так скажем экспериментов с этими &quot;иичками&quot; (1280x800):
&lt;a href='http://navat.net/images/articles/ellipse/m1.jpg' target='_blank'&gt;Первый&lt;/a&gt;
&lt;a href='http://navat.net/images/articles/ellipse/m2.jpg' target='_blank'&gt;Второй&lt;/a&gt;
&lt;a href='http://navat.net/images/articles/ellipse/m3.jpg' target='_blank'&gt;Третий&lt;/a&gt;
&lt;a href='http://navat.net/images/articles/ellipse/m4.jpg' target='_blank'&gt;Четвертый&lt;/a&gt;
&lt;a href='http://navat.net/images/articles/ellipse/m5.jpg' target='_blank'&gt;Пятый&lt;/a&gt;
&lt;a href='http://navat.net/images/articles/ellipse/m6.jpg' target='_blank'&gt;Шестой&lt;/a&gt;

Автор: Бекенов Балтабек (cybri0nix)</description>
<pubDate>Sat, 06 Sep 2008 16:26:48 +0400</pubDate>
<guid>http://navat.net/readarticle.php?article_id=27</guid>
</item>

<item>
<title>Огненный обруч</title>
<link>http://navat.net/readarticle.php?article_id=26</link>
<description>Создаём новое изображение например 300x300 px. Устанавливаем цвета красный и желтый &lt;img src=&quot;http://rupixel.com/photoshop/8/p1.gif&quot; border=&quot;0&quot;&gt; и применяем фильтр &lt;b&gt;Render-&gt;Clouds&lt;/b&gt;

&lt;br&gt;&lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/8/1.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;

Делаем круговое выделение &lt;img src=&quot;http://rupixel.com/photoshop/8/p2.gif&quot; border=&quot;0&quot;&gt;, инвертируем (&lt;b&gt;Select-&gt;Inverse&lt;/b&gt;) и удаляем&lt;br&gt;&lt;br&gt;

&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/8/2.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;
Получается круг и к нему примянем фильтр &lt;b&gt;Blur-&gt;Gaussian Blur&lt;/b&gt;&lt;br&gt;&lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/8/3.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;
Нарисуйте несколько серый линий кисточкой и воспользуйтесь фильтром &lt;b&gt;Sketch-&gt;Chrome&lt;/b&gt; с параметрами: &lt;b&gt;Detail - 7&lt;/b&gt;, &lt;b&gt;Smoothness - 3&lt;/b&gt;. Проделайте операцию несколько раз чтобы вышло примерно как на картинке&lt;br&gt;&lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/8/4.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;
Далее придайте цвет при помощи &lt;b&gt;Image-&gt;Adjustments-&gt;Hue/Saturaions&lt;/b&gt; со следующими параметрами&lt;br&gt;&lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/8/p3.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/8/5.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;

Примените инструмент &lt;b&gt;Image-&gt;Adjustments-&gt;Levels&lt;/b&gt;&lt;br&gt;&lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/8/p4.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;

&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/8/6.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;
Делаем круговое выделение &lt;img src=&quot;http://rupixel.com/photoshop/8/p2.gif&quot; border=&quot;0&quot;&gt;, инвертируем (&lt;b&gt;Select-&gt;Inverse&lt;/b&gt;) и удаляем не нужные размытые границы&lt;br&gt;&lt;br&gt;

&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/8/7.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;

Воспользуйтесь инструментом &lt;b&gt;Smudge Tool&lt;/b&gt; &lt;img src=&quot;http://rupixel.com/photoshop/8/p5.gif&quot; border=&quot;0&quot;&gt;. Меняйте параметры &lt;b&gt;Strength&lt;/b&gt; в процессе&lt;br&gt;&lt;br&gt;

&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/8/8.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;

Делаем круговое выделение &lt;img src=&quot;http://rupixel.com/photoshop/8/p2.gif&quot; border=&quot;0&quot;&gt; и удаляем центр круга&lt;br&gt;&lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/8/9.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;
Повторите операцию с инструментом &lt;b&gt;Smudge Tool&lt;/b&gt; &lt;img src=&quot;http://rupixel.com/photoshop/8/p5.gif&quot; border=&quot;0&quot;&gt;&lt;br&gt;&lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/8/10.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;
Поиграйтесь немного с &lt;b&gt;Levels&lt;/b&gt; на свой вкус&lt;br&gt;&lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/8/11.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/8/12.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;
 &lt;br&gt;

Автор статьи ORC - &lt;a href=&quot;http://www.rupixel.com&quot;&gt;RUPIXEL.COM&lt;/a&gt; (наш партнер)</description>
<pubDate>Fri, 05 Sep 2008 23:28:09 +0400</pubDate>
<guid>http://navat.net/readarticle.php?article_id=26</guid>
</item>

<item>
<title>Абстрактный цветок</title>
<link>http://navat.net/readarticle.php?article_id=25</link>
<description>Создаём изображение 300x300 и применяем фильтр &lt;b&gt;Render-&gt;Clouds&lt;/b&gt; с красным и черным цветами:&lt;br&gt;&lt;br&gt;

&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/ps1.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/1.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;

Добавляем шум с помощью фильтра &lt;b&gt;Noise-&gt;Add Noise&lt;/b&gt; с настройками как на рисунке&lt;br&gt;&lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/ps2.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;

Используем фильтр &lt;b&gt;Distort-&gt;Twirl&lt;/b&gt; с настройками как на рисунке&lt;br&gt;&lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/ps3.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/2.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;

Далее нам понадобится фильтр &lt;b&gt;Render-&gt;Lighting Effects&lt;/b&gt;. Выберите &lt;b&gt;Style Triple Spotlight&lt;/b&gt; и установите параметры как на рисунке&lt;br&gt;&lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/ps4.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;

Повторите применение фильтра несколько раз(&lt;b&gt;CTRL+F&lt;/b&gt;), чтобы получилось как на рисунке:&lt;br&gt;&lt;br&gt;

&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/3.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;

Выберите фильтр &lt;b&gt;Sketch-&gt;Chrome&lt;/b&gt; с параметрами на свой взгляд(особо картина не изменится):&lt;br&gt;&lt;br&gt;

&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/4.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;

Далее используем инструмент &lt;b&gt;Image-&gt;Adjustments-&gt;Hue/Saturations&lt;/b&gt;:&lt;br&gt;&lt;br&gt;

&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/ps5.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/5.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;

Копируем слой(щелчок правой кнопкой на слой и &lt;b&gt;Duplicate Layer&lt;/b&gt;), выбираем команду &lt;b&gt;Transform&lt;/b&gt; нажатием &lt;b&gt;CTRL+T&lt;/b&gt; и зажимая &lt;b&gt;SHIFT+ALT&lt;/b&gt; уменьшаем размер:&lt;br&gt;&lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/ps6.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;

Устанавливаем слою параметр &lt;b&gt;Lighten&lt;/b&gt; и применяем инструмент &lt;b&gt;Image-&gt;Adjustments-&gt;Hue/Saturations&lt;/b&gt;:&lt;br&gt;&lt;br&gt;

&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/ps7.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/6.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;

Объденеяем слои и уменьшаем в размере как мы делали это ранее:&lt;br&gt;&lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/7.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;

Дублируем слой, жмём &lt;b&gt;CTRL+T&lt;/b&gt; и делаем поворт на &lt;b&gt;90°&lt;/b&gt;. Устанавливаем слою параметр &lt;b&gt;Lighten&lt;/b&gt;:&lt;br&gt;&lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/ps8.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;
Повторяем операцию чтобы получилось вот так:&lt;br&gt;&lt;br&gt;

&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/8.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;

Объеденяем слои. Дублируем слой и уменьшаем в размере. Новому слою устанавливаем &lt;b&gt;Lighten&lt;/b&gt; и применеям &lt;b&gt;Image-&gt;Adjustments-&gt;Hue/Saturations&lt;/b&gt;:&lt;br&gt;&lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/ps7.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/9.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;

Объеденяем слои. Дублируем слой, выбираем команду &lt;b&gt;Edit-&gt;Transform-&gt;Rotate&lt;/b&gt; с параметрами поворота на &lt;b&gt;45°&lt;/b&gt;&lt;br&gt;&lt;br&gt;

&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/ps9.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;

Ставим опять параметр &lt;b&gt;Lighten&lt;/b&gt;:

&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/10.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;

Дублируем слой, выбираем команду &lt;b&gt;Edit-&gt;Transform-&gt;Flip Horizontal&lt;/b&gt;&lt;br&gt;&lt;br&gt;

&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/11.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;

Объденеяем слои и уменьшаем в размере как мы делали это ранее&lt;br&gt;&lt;br&gt;

&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/ps10.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;

Ставим слою параметр &lt;b&gt;Exclusion&lt;/b&gt; и применяем команду &lt;b&gt;Image-&gt;Adjustments-&gt;Hue/Saturations&lt;/b&gt;&lt;br&gt;&lt;br&gt;

&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/ps11.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/12.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;

Можно эксперементировать с настройками фильтров в процессе работы и будут получатся различные эффекты: &lt;br&gt; &lt;br&gt;

&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/13.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;
&lt;center&gt;&lt;img src=&quot;http://rupixel.com/photoshop/10/14.gif&quot; border=&quot;0&quot;&gt;&lt;/center&gt; &lt;br&gt;


Автор статьи ORC - &lt;a href=&quot;http://www.rupixel.com&quot;&gt;RUPIXEL.COM&lt;/a&gt; (наш партнер)
</description>
<pubDate>Fri, 05 Sep 2008 23:14:10 +0400</pubDate>
<guid>http://navat.net/readarticle.php?article_id=25</guid>
</item>

<item>
<title>Немного о ShellExecute()</title>
<link>http://navat.net/readarticle.php?article_id=24</link>
<description>Ну самое первое, что нужно сказать, это, для чего она нужна. С помощью нее можно отправить  эл. письмо, запустить внешнее приложение, открыть файл/каталог, распечатать документ, либо перейти по URL ссылке. Чтобы эта процедура работала, необходимо подключить библиотеку ShellApi в разделе Uses.

Познакомимся поближе. (для начала - примеры, далее пояснение)

1. Переходим по гиперссылке, страница откроется в браузере, назначенном &quot;По умолчанию&quot;.
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;ShellExecute(form1.Handle, nil, 'http://navat.net', nil, nil, SW_RESTORE);&lt;/div&gt;

2. Отправка письма.
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;ShellExecute(Form1.Handle, nil, 'mailto:admin@navat.net', nil, nil, SW_RESTORE);&lt;/div&gt;

3. открываем какой-либо документ.
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;ShellExecute(Form1.Handle, nil, 'c:\file.txt', nil, nil, SW_RESTORE);&lt;/div&gt;

4. Иногда бывает ситуация, когда программа должна запустить сама себя. Делаеться это так:
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;ShellExecute(Form1.Handle, nil, PChar(Application.ExeName), nil, nil, SW_RESTORE);&lt;/div&gt;

5. Просмотр каталога.
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;ShellExecute(Form1.Handle, nil, 'c:\mydir', nil, nil, SW_RESTORE);&lt;/div&gt;

6. Распечатать документ.
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;ShellExecute(Form1.Handle, 'print', 'c:\file.txt', nil, nil, SW_RESTORE);&lt;/div&gt;

&lt;b&gt;ShellExecute(1, 2, 3, 4, 5, 6);&lt;/b&gt;
1. Дескриптор родительского окна.
2. Действие: &quot;explore&quot;, &quot;open&quot;, &quot;print&quot;. Открыть папку, открытие, печать (если указано nil, то будет выполнено действие &quot;open&quot;).
3. Собственно, имя файла, url/email - адресс, путь к каталогу.
4. Параметры, передаваемые программе через коммандную строку.
5. Каталог по умолчанию.
6. Указывает на то, в каком состоянии будет открыто окно. Читать далее.

Константы, указывающие на стиль отображения окна:
&lt;b&gt;SW_HIDE&lt;/b&gt;  -  Скрывает окно и активизирует другое. 
&lt;b&gt;SW_MAXIMIZE&lt;/b&gt;  - Разворачивает окно. 
&lt;b&gt;SW_MINIMIZE&lt;/b&gt;  - Сворачивает окно. 
&lt;b&gt;SW_RESTORE&lt;/b&gt;  - Активизирует и выводит окно. Если окно было развёрнуто или свёрнуто - восстанавливает исходный размер и позицию. 
&lt;b&gt;SW_SHOW&lt;/b&gt; - Активизирует и выводит окно с его оригинальным размером и положением. 
&lt;b&gt;SW_SHOWDEFAULT&lt;/b&gt; - Активизирует с установками, заданными в структуре STARTUPINFO, которая была передана при создании процесса приложением запускающим нужную программу. 
&lt;b&gt;SW_SHOWMAXIMIZED&lt;/b&gt; - Выводит окно в развёрнутом виде. 
&lt;b&gt;SW_SHOWMINIMIZED&lt;/b&gt; - Выводит окно в виде пиктограммы на панели задач. 
&lt;b&gt;SW_SHOWMINNOACTIVE&lt;/b&gt; - Выводит окно в свёрнутом виде на панели задач и не передаёт ему фокус ввода, т.е. окно, которое до этого было активно остаётся активно по прежнему. 
&lt;b&gt;SW_SHOWNA&lt;/b&gt; - Отображает окно в его текущем состоянии. Активное окно остаётся активным по прежнему. 
&lt;b&gt;SW_SHOWNOACTIVATE&lt;/b&gt; - Выводит окно в его последнем положении и с последними используемыми размерами. Активное окно остаётся активным по прежнему. 
&lt;b&gt;SW_SHOWNORMAL&lt;/b&gt; - Выводит окно. Если оно было свёрнуто или развёрнуто - восстанавливает его оригинальные размеры и позицию.

Автор: Бекенов Балтабек (cybri0nix)</description>
<pubDate>Fri, 05 Sep 2008 15:23:00 +0400</pubDate>
<guid>http://navat.net/readarticle.php?article_id=24</guid>
</item>

<item>
<title>Оптимизация – главное не переборщить.</title>
<link>http://navat.net/readarticle.php?article_id=23</link>
<description>В этой статье мы будем оптимизировать, оптимизировать, оптимизировать, в конце-концов дооптимизируемся.

1. При нажатии на кнопку в соответствующем блоке появляется текст.
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;&amp;lt;script&amp;gt;
function intext(){
      	document.getElementById('outbox').innerHTML = '&amp;lt;b&amp;gt;Текст&amp;lt;/b&amp;gt;';
    } 
&amp;lt;/script&amp;gt;
&amp;lt;input type=&quot;button&quot; value=&quot;Кликни&quot; onClick = &quot;intext()&quot;&amp;gt;
&amp;lt;div id='outbox'&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;У нас есть слой, id которого «outbox». При клике по кнопке (событие onClick), выполняется функция «intext()».  В этой функции происходит следующее: в слой с id «outbox» вставляется html – код “&amp;lt;b&amp;gt;Текст&amp;lt;/b&amp;gt;”, который после интерпретации браузером будет выглядеть как &lt;b&gt;Текст&lt;/b&gt;

2. При нажатии на кнопку в соответствующем блоке появляется текст, но теперь id элемента страницы мы передаем в функцию в качестве аргумента.
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;&amp;lt;script&amp;gt;
   function intext(id_result){
      document.getElementById(id_result).innerHTML = '&amp;lt;b&amp;gt;Текст&amp;lt;/b&amp;gt;';
    }
&amp;lt;/script&amp;gt;
&amp;lt;input type=&quot;button&quot; value=&quot;Кликни&quot; onClick = &quot;intext('outbox')&quot;&amp;gt;
&amp;lt;div id='outbox'&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;Таким образом мы можем использовать эту функцию более универсально. 
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;&amp;lt;script&amp;gt;
   function intext(id_result){
      document.getElementById(id_result).innerHTML = '&amp;lt;b&amp;gt;Текст&amp;lt;/b&amp;gt;';
    }
&amp;lt;/script&amp;gt;
&amp;lt;input type=&quot;button&quot; value=&quot;Кликни&quot; onClick = &quot;intext('outbox')&quot;&amp;gt;
&amp;lt;div id='outbox'&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;input type=&quot;button&quot; value=&quot;Кликни&quot; onClick = &quot;intext('outbox2')&quot;&amp;gt;
&amp;lt;div id='outbox2'&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;input type=&quot;button&quot; value=&quot;Кликни&quot; onClick = &quot;intext('txt')&quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;div id='txt'&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;
3. При нажатии на кнопку в соответствующем блоке появляется текст, но теперь id элемента страницы и выводимый текст мы передаем в функцию в качестве аргумента.
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;&amp;lt;script&amp;gt;
   function intext(id_result, outtext){
      document.getElementById(id_result).innerHTML = outtext;
    }
   &amp;lt;/script&amp;gt;
&amp;lt;input type=&quot;button&quot; value=&quot;Кликни&quot; onClick = &quot;intext('outbox','Текст 1')&quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;div id='outbox'&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;input type=&quot;button&quot; value=&quot;Кликни&quot; onClick = &quot;intext('outbox2','Текст 2')&quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;div id='outbox2'&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;input type=&quot;button&quot; value=&quot;Кликни&quot; onClick = &quot;intext('outbox3','Текст 3')&quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;div id='outbox3'&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;Как видно текст мы передаем в функцию в качестве аргумента. (параметр «outtext»)

4. Выключатель. При клике по кнопке в соответствующем блоке появляется текст «on», кликнув еще раз по той же самой кнопке, «on» меняется на «off», и наоборот.
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;&amp;lt;script&amp;gt;
   function intext(id_result){
      if(document.getElementById(id_result).innerHTML == 'on')
           document.getElementById(id_result).innerHTML = 'off';
      else document.getElementById(id_result).innerHTML = 'on';
   }
&amp;lt;/script&amp;gt;
&amp;lt;input type=&quot;button&quot; value=&quot;Кликни&quot; onClick = &quot;intext('outbox')&quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;div id='outbox'&amp;gt;on&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;
Вам не кажеться, что как-то не красиво выглядит этот кусок кода?
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;if(document.getElementById(id_result).innerHTML == 'on')
           document.getElementById(id_result).innerHTML = 'off';
      else document.getElementById(id_result).innerHTML = 'on';&lt;/div&gt;Намного красивее смотриться так:
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;document.getElementById(id_result).innerHTML = (document.getElementById(id_result).innerHTML == 'on'?'off':'on');&lt;/div&gt;
Оператор:  &lt;span style='color:green;'&gt;expression&lt;/span&gt; ? &lt;span style='color:blue;'&gt;operator 1&lt;/span&gt; : &lt;span style='color:maroon;'&gt;operator 2&lt;/span&gt;  (так называемый тернарный оператор).
Что можно прочесть как «Если expression, то operator 1, иначе operator 2»

Это эквивалент связки if( &lt;span style='color:green;'&gt;expression&lt;/span&gt; ){ &lt;span style='color:blue;'&gt;operator 1&lt;/span&gt; }else{ &lt;span style='color:maroon;'&gt;operator 2&lt;/span&gt; }. 
Но между этими операторами есть разница, в первом «operator 1» – это один оператор и не более, в качестве альтернативы «operator 2» - то же самое - один оператор.

Хотя не в красоте дело, компактность и удобочитаемость, это два качества, которые должен учесть абсолютно любой кодер, чем компактнее код, тем меньше вероятность того, что будет допущена ошибка.

Вот собственно, «красивый» пример:
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;&amp;lt;script&amp;gt;
   function intext(id_result){
      document.getElementById(id_result).innerHTML = document.getElementById(id_result).innerHTML == 'on'?'off':'on';
   }
&amp;lt;/script&amp;gt;
&amp;lt;input type=&quot;button&quot; value=&quot;Кликни&quot; onClick = &quot;intext('outbox')&quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;div id='outbox'&amp;gt;on&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;
5. Выключатель. При клике по кнопке в соответствующем блоке появляется текст «on», кликнув еще раз по той же самой кнопке, «on» меняется на «off», и наоборот, но теперь меняется и цвет текста.
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;&amp;lt;script&amp;gt;
   function intext(id_result){
      document.getElementById(id_result).innerHTML   = document.getElementById(id_result).innerHTML == 'on'?'off':'on';
       document.getElementById(id_result).style.color = document.getElementById(id_result).innerHTML == 'on'?'green':'red';
   }
&amp;lt;/script&amp;gt;
&amp;lt;input type=&quot;button&quot; value=&quot;Кликни&quot; onClick = &quot;intext('outbox')&quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;div id='outbox'&amp;gt;on&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;Вы наверное догадались, что цвет текста изменяется тут: «.style.color», но каскадные таблицы стилей – это отдельный разговор, поэтому об этом я рассказывать не буду.

Кажется я что-то уже говорил о компактности кода? Так вот, данный пример можно написать еще компактнее. Вот так:
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;&amp;lt;script&amp;gt;
   function intext(id_result){
       var obj = document.getElementById(id_result);
      obj.innerHTML   = obj.innerHTML == 'on'?'off':'on';
       obj.style.color = obj.innerHTML == 'on'?'green':'red';
   }
&amp;lt;/script&amp;gt;
&amp;lt;input type=&quot;button&quot; value=&quot;Кликни&quot; onClick = &quot;intext('outbox')&quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;div id='outbox'&amp;gt;on&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;Мы создали переменную obj, которая унаследовала все методы и свойства элемента с id, который мы передали в функцию.

Можно еще компактнее! Так как наш JS будет передаваться вместе с веб-страничкой, а веб-страница и JavaScript это текст, а любой текст имеет размер. Чем меньше будет размер этого текста, тем быстрее он будет грузиться с сервера в окно браузера, не так ли? Все так, но нужно и меру знать. Напишем так:
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;&amp;lt;script&amp;gt;function intext(id_result){var o=document.getElementById(id_result);var d=o.innerHTML;
o.style.color=(o.innerHTML=d=='on'?'off':'on')?(o.innerHTML=='on'?'green':'red'):'';}&amp;lt;/script&amp;gt;
&amp;lt;input type=&quot;button&quot; value=&quot;Кликни&quot; onClick = &quot;intext('outbox')&quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;div id='outbox'&amp;gt;on&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;
Что мы сделали? 
&lt;blockquote&gt;- «obj.innerHTML» встречается три раза, значит его можно сделать ссылку на него, что мы и сделали – переменная «d».
- Переменная «obj» состоит из трех символов, что больше 1-го, следовательно ее имя мы меняем, теперь не «obj», а «o»
- Преобразовали этот кусок кода:
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;obj.innerHTML   = obj.innerHTML == 'on'?'off':'on';
obj.style.color = obj.innerHTML == 'on'?'green':'red';&lt;/div&gt;
Таким вот образом: 
&lt;div style='border:1px solid #ccc;padding:5px;margin:5px'&gt;o.style.color=(o.innerHTML=d=='on'?'off':'on')?(o.innerHTML=='on'?'green':'red'):'';&lt;/div&gt;
- Практически весь код скрипта, впрочем и html-кода, буквально «вытянули» в одну строчку, при этом убрали все пробелы (где это допустимо).&lt;/blockquote&gt;Ну вот и все, теперь размер «сжатого» текста/скрипта меньше исходного. НО! Мне, как и Вам, кажется, точнее мы точно знаем, что «сжатый» вариант слишком запутан, не удобен для чтения. 
Мы переборщили! Необязательно лишний раз «шифровать» код, не только JavaScript и html, слава богу «интернета сейчас всем хватает, на приличной скорости».

Подитожим.
- не увлекайтесь с именами переменных, т.е. пусть они состоят хотябы из 3-7 символов (ключевых). Но и слишком длинные имена переменных ни к чему.
(правда, бывают случаи, когда можно использовать и «односимвольные» переменные. Например, если в данном скрипте используется какая-либо математическая константа, несущая в себе смысловую нагрузку: число «Пи» = «p», «експонента» = «e», «количество» = «n» и т. д. Ну а для длинющих имен переменных исключений нет).
- Желательно каждый оператор писать, в отдельной строчке. 
- Содержимое составного оператора «{ }», лучше писать с отступом, с левой стороны. 
- Оператор «else» и набор альтернативных операторов или оператор, лучше переносить на новую строку.
- Кстате говоря комментарии, это тоже текст, так что не пишите киллометровые комментарии, либо комментарии ради самих комментариев.

ps: Это самые основные пункты, они кстате касаются не только JS но и многих других языков, причем один из этих пунктов подойдет и для языков разметки.

&lt;span style='color:gray;'&gt;Автор: Бекенов Балтабек (cybri0nix)&lt;/span&gt;</description>
<pubDate>Mon, 25 Aug 2008 02:52:32 +0400</pubDate>
<guid>http://navat.net/readarticle.php?article_id=23</guid>
</item>

<item>
<title>Введение в Ajax.</title>
<link>http://navat.net/readarticle.php?article_id=22</link>
<description>&lt;b&gt;Ajax&lt;/b&gt; (&lt;i&gt;Asynchronous  JavaScript And XML – Асинхронный JavaScript и XML&lt;/i&gt;) – это принцип разработки (даже можно сказать подход к разработке), веб-страниц (это не отдельный язык или отдельная технология, это своего рода совокупность технологий. Как видно JavaScript и XML – являються ключевыми технологиями, входящими в Ajax), значительно увеличивающий интерактивность веб-страницы. Официальной датой основания считается 18 февраля 2005 года. 

Совмещает он в себе технологии, которые многим веб-мастерам уже исзвестны: 
&lt;span style='color:blue;'&gt;Html, xHtml, Css&lt;/span&gt; – используется для визуального оформления и разметки страницы. (&lt;a href='http://ru.wikipedia.org/wiki/Html' target='_blank'&gt;html&lt;/a&gt;, &lt;a href='http://ru.wikipedia.org/wiki/css' target='_blank'&gt;css&lt;/a&gt;)
&lt;span style='color:blue;'&gt;JavaScript&lt;/span&gt; – это язык программирования, работающий на стороне клиента. (&lt;a href='http://ru.wikipedia.org/wiki/JavaScript' target='_blank'&gt;JavaScript&lt;/a&gt;)
&lt;span style='color:blue;'&gt;XMLHttpRequest&lt;/span&gt; – с помощью этого объекта осуществляется запрос серверу. (&lt;a href='http://ru.wikipedia.org/wiki/XMLHttpRequest' target='_blank'&gt;XMLHttpRequest&lt;/a&gt;)
&lt;span style='color:blue;'&gt;Dom&lt;/span&gt;  - объктная модель документа, с помощью нее мы сможем динамически обратиться к части документа, изменить ее. (&lt;a href='http://ru.wikipedia.org/wiki/DOM' target='_blank'&gt;Dom&lt;/a&gt;)
&lt;span style='color:blue;'&gt;Xml&lt;/span&gt; – используется для обмена данными клиента с сервером. (&lt;a href='http://ru.wikipedia.org/wiki/xml' target='_blank'&gt;Xml&lt;/a&gt;)

Принцип этот заключается в том, что мы можем послать запрос серверу без обновления всей страницы (в фоновом режиме), а ответ (результат) полученный от сервера, можем поместить в любое место страницы, т.е. мы можем «подгрузить лишь кусок», либо использовать для других целей , что позволит сократить трафик, увеличить скорость обмена данными между сервером и веб-браузером, значительно уменьшить нагрузку на сервер. Запрос этот отправляется при помощи объекта XMLHttpRequest, о нем мы будем говорить в следующих статьях.

Например, многие из Вас видели на некоторых сайтах, добавление комментариев без обновления страницы или когда, при нажатии на вкладку, на каком-либо сайте, страница не обновляется, «подгружается» только содержимое вкладки. «Голосование» - выбираем вариант ответа, жмем «голосовать» - появляются результаты голосования, причем вся страница не обновляется, изменяется только содержимое этого самого блока «Голосование».

В настоящее время многие сайты устроины в соответствии с этим принципом, благодаря чему они более функциональны и интерактивны соответственно.  Всеми нами любимый Google, широко использует Ajax, во многих своих сервисах. Да впрочем Ajax уже не в диковинку, написано много библиотек, книг и прочих ресурсов в этой области. 

Ajax – это очень хорошо, но у него есть и минусы:  Поисковые боты не умеют переходить по JavaScript’овым ссылкам, следовательно сайт будет индексироваться не должным образом, некоторые пользователи отключают JavaScript, без чего динамические запросы производить нельзя. Все пользователи не могут пользоваться одним браузером, следовательно может возникнуть проблема с кроссбраузерностью, придется подгонять под популярные браузеры JavaScript, но ради плюсов, присущих такому подходу разработки, я лично, готов пойти на жертвы...

Ну вот и все! В следующих статьях, будут конкретные примеры.

&lt;span style='color:gray;'&gt;Автор: Бекенов Балтабек (cybri0nix)&lt;/span&gt;

</description>
<pubDate>Sun, 24 Aug 2008 19:32:29 +0400</pubDate>
<guid>http://navat.net/readarticle.php?article_id=22</guid>
</item>

<item>
<title>JavaScript: Отметить все</title>
<link>http://navat.net/readarticle.php?article_id=21</link>
<description>Если предоставляете возможность пользователю, допустим при подписке на рассылку - выбор категорий рассылки, путем отметки какого - либо из checkbox'ов или нескольких одновременно, то может возникнуть ситуация: &quot;А если этих самых категорий будет 10+&quot;, я думаю необходимо будет сделать еще один чекбокс (вверху, либо внизу остальных) - &quot;Выделить все&quot;.

А делается это очень просто с помощью JS:

Напишем небольшую функцию &lt;b&gt;MarkALL&lt;/b&gt;(n, id_id, obj)

в которую будем передавать: 
&lt;b&gt;n&lt;/b&gt; - количество checkbox'ов;
&lt;b&gt;id_id&lt;/b&gt; - префикс.
&lt;b&gt;chk&lt;/b&gt; - значение checked (True/False) чекбокса, имя которого есть &quot;MarkAll&quot;

В нашем случае префикс &quot;ras_&quot;, количество чекбоксов 9 и имя кнопки &quot;Отметить все&quot; - &quot;MarkALL&quot;
&lt;div style='border:1px dotted #ddd;padding:5px;'&gt;&lt;span style='color:brown;'&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;&lt;/span&gt;

&lt;b&gt;function&lt;/b&gt; MarkALL(n, id_id, chk){ 
&lt;blockquote&gt;for(var i = 0; i &lt;= n; i++){ 
&lt;blockquote&gt;document.getElementById(id_id+i).checked = chk; &lt;span style='color:green;'&gt;//если кнопка &quot;отметить все&quot; отмечена, то chk будет содержать значение True, в противном случае False&lt;/span&gt;&lt;/blockquote&gt;}&lt;/blockquote&gt;} 

&lt;span style='color:brown;'&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

&amp;lt;form action=&quot;&quot; method=&quot;POST&quot; name=&quot;rassilka&quot;&amp;gt;&amp;lt;fieldset&amp;gt;
&amp;lt;label&amp;gt;&amp;lt;input type='checkbox' name=&quot;MarkAll&quot; onclick=&quot;MarkALL(9,'ras_',document.rassilka.MarkAll.checked)&quot;&amp;gt; Отметить все&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;

&amp;lt;label&amp;gt;&amp;lt;input type='checkbox' id='ras_0'&amp;gt; Новости&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;label&amp;gt;&amp;lt;input type='checkbox' id='ras_1'&amp;gt; Комментарии&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;label&amp;gt;&amp;lt;input type='checkbox' id='ras_2'&amp;gt; Форум&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;label&amp;gt;&amp;lt;input type='checkbox' id='ras_3'&amp;gt; Блоги&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;label&amp;gt;&amp;lt;input type='checkbox' id='ras_4'&amp;gt; Чат&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;label&amp;gt;&amp;lt;input type='checkbox' id='ras_5'&amp;gt; Статьи&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;label&amp;gt;&amp;lt;input type='checkbox' id='ras_6'&amp;gt; Новые файлы&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;label&amp;gt;&amp;lt;input type='checkbox' id='ras_7'&amp;gt; и т. д.&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;label&amp;gt;&amp;lt;input type='checkbox' id='ras_8'&amp;gt; и т. п.&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;label&amp;gt;&amp;lt;input type='checkbox' id='ras_9'&amp;gt; наконец конец&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;/fieldset&amp;gt;&amp;lt;/form&amp;gt;&lt;/div&gt;
Т.е. все чекбоксы с префиксом id_id с номером от 0 до N, точнее свойство &lt;i&gt;checked&lt;/i&gt; каждого из них, мы обращаем в то состояние, которое присуще document.rassilka.MarkAll.checked (True/False).

Вот и все! Удачи в изучении! 

Автор: Бекенов Балтабек (cybri0nix)</description>
<pubDate>Wed, 20 Aug 2008 01:36:33 +0400</pubDate>
<guid>http://navat.net/readarticle.php?article_id=21</guid>
</item>

<item>
<title>Скрываем ненужное!</title>
<link>http://navat.net/readarticle.php?article_id=20</link>
<description>Создаем *.html файл, в нем пишем следующий код:
&lt;div style='border:1px dotted #ddd;padding:5px;'&gt;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
function &lt;span style='color:green;'&gt;show&lt;/span&gt;(&lt;span style='color:blue;'&gt;id_id&lt;/span&gt;){&lt;blockquote&gt;document.getElementById(&lt;span style='color:blue;'&gt;id_id&lt;/span&gt;).style.display = (document.getElementById(&lt;span style='color:blue;'&gt;id_id&lt;/span&gt;).style.display == 'none'?'block':'none');
&lt;/blockquote&gt;}
&amp;lt;/script&amp;gt;

&amp;lt;div onClick=&quot;&lt;span style='color:green;'&gt;show&lt;/span&gt;('&lt;span style='color:blue;'&gt;onoff&lt;/span&gt;')&quot;&amp;gt;Показать&amp;lt;/div&amp;gt;
&amp;lt;div id='&lt;span style='color:blue;'&gt;onoff&lt;/span&gt;' style='display:none'&amp;gt;Меня видно!&amp;lt;/div&amp;gt;

&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;
&lt;/div&gt;

А теперь по порядку.
Как видно, сделали мы это с помощью JavaScript'а. Мы написали функцию &quot;show&quot; в качестве аргумента которой передаем ID нужного нам блока (слоя). 
&lt;div style='border:1px dotted #ddd;padding:5px;'&gt;onClick=&quot;&lt;span style='color:green;'&gt;show&lt;/span&gt;('&lt;span style='color:blue;'&gt;onoff&lt;/span&gt;')&quot;&lt;/div&gt;

После передачи ID в функцию происходит следующее: 
&lt;div style='border:1px dotted #ddd;padding:5px;'&gt;document.getElementById(id_id).style.display = (document.getElementById(id_id).style.display == 'none'?'block':'none');&lt;/div&gt;
т.е. мы устанавливаем состояние css параметра &quot;display&quot; слоя, с ID = &quot;onoff&quot; на &quot;none&quot;, если при проверке оно &quot;block&quot; и наоборот.

Сокрытие некоторых блоков на страничке может пригодится по разным причинам, например если, то что вы скрываете менее приоритетно остального. Или занимает много места.

Казалось бы мелочь, но иногда и мелочи бывают полезными!

Автор: Бекенов Балтабек</description>
<pubDate>Mon, 18 Aug 2008 02:37:35 +0400</pubDate>
<guid>http://navat.net/readarticle.php?article_id=20</guid>
</item>

<item>
<title>Записи - это не так уж и страшно!</title>
<link>http://navat.net/readarticle.php?article_id=19</link>
<description>&lt;b&gt;Запись&lt;/b&gt; - это структура данных. С помощью записей можно хранить данные различного типа.
Различают фиксированные и вариантные записи. Элементом записи является поле. Обратится к элементу записи можно по имени поля. Поле может иметь любой тип.

Вот общий синтаксис описания фиксированной записи:
&lt;div style='border:1px dotted #00ccff;padding:5px;'&gt;type &lt;Имя записи&gt; = &lt;span style='color:green;'&gt;record&lt;/span&gt;
&lt;blockquote&gt;&lt;Имя 1-го поля&gt; : &lt;Тип 1-го поля&gt;;
&lt;Имя 2-го поля&gt; : &lt;Тип 2-го поля&gt;;
...
&lt;Имя N-го поля&gt; : &lt;Тип N-го поля&gt;;&lt;/blockquote&gt;
end;&lt;/div&gt;

Обратиться к одному из полей можно следующим образом:
Сначала необходимо описать переменную типа (записи) описанного ранее.
&lt;div style='border:1px dotted #00ccff;padding:5px;'&gt;&lt;b&gt;Var&lt;/b&gt; &lt;&lt;span style='color:green;'&gt;Переменная&lt;/span&gt;&gt;   :   &lt;&lt;span style='color:blue;'&gt;Имя записи (тип)&lt;/span&gt;&gt;;
&lt;b&gt;Begin&lt;/b&gt;&lt;blockquote&gt;&lt;&lt;span style='color:green;'&gt;Переменная&lt;/span&gt;&gt;&lt;b&gt;.&lt;/b&gt;&lt;Имя 2-го поля&gt;:=Значение; &lt;span style='color:gray;'&gt;(соответствующее типу 2-го поля)&lt;/span&gt;&lt;/blockquote&gt;&lt;b&gt;end.&lt;/b&gt;&lt;/div&gt;

Структура записи немного напоминает дерево, к ветке которого мы можем обратиться с помощью оператора &quot;&lt;b&gt;.&lt;/b&gt;&quot;

Также, записи можно вкладывать одну в другую (вложенные записи). 

Например:
&lt;div style='border:1px dotted #00ccff;padding:5px;'&gt;type &lt;&lt;span style='color:blue;'&gt;Имя записи 1&lt;/span&gt;&gt; = &lt;span style='color:green;'&gt;record&lt;/span&gt;
&lt;blockquote&gt;&lt;Имя 1-го поля&gt; : &lt;Тип 1-го поля&gt;
&lt;Имя 2-го поля&gt; : &lt;Тип 2-го поля&gt;
...
&lt;Имя N-го поля&gt; : &lt;Тип N-го поля&gt;

&lt;blockquote&gt;&lt;&lt;span style='color:blue;'&gt;Имя записи 2&lt;/span&gt;&gt; = &lt;span style='color:green;'&gt;record&lt;/span&gt;
&lt;blockquote&gt;&lt;Имя 1-го поля&gt; : &lt;Тип 1-го поля&gt;
&lt;Имя 2-го поля&gt; : &lt;Тип 2-го поля&gt;
...
&lt;Имя N-го поля&gt; : &lt;Тип N-го поля&gt;

end;&lt;/blockquote&gt;&lt;/blockquote&gt;end;&lt;/div&gt;

Обратиться к полю вложенной записи можно следующим образом:
&lt;div style='border:1px dotted #00ccff;padding:5px;'&gt;&lt;b&gt;Var&lt;/b&gt; &lt;&lt;span style='color:green;'&gt;Переменная&lt;/span&gt;&gt;   :   &lt;&lt;span style='color:blue;'&gt;Имя записи 1 (тип)&lt;/span&gt;&gt;;
&lt;b&gt;Begin&lt;/b&gt;&lt;blockquote&gt;&lt;&lt;span style='color:green;'&gt;Переменная&lt;/span&gt;&gt;&lt;b&gt;.&lt;/b&gt;&lt;Имя записи 2&gt;&lt;b&gt;.&lt;/b&gt;&lt;Имя 3-го поля второй записи&gt;:=Значение; &lt;span style='color:gray;'&gt;(соответствующее типу этого-го поля)&lt;/span&gt;&lt;/blockquote&gt;&lt;b&gt;end.&lt;/b&gt;&lt;/div&gt;


Чтобы передать одно из полей, например функции, то фактический параметр функции должен соответствовать типу передаваемого поля. В примере, рассмотренном ниже, это показано, а именно мы передаем в функцию массив.

Если приходится обращаться одновременно к нескольким полям записи в одном блоке программы, то можно воспользоваться конструкцией &lt;b&gt;With..Do&lt;/b&gt;.

Например, Вариант 1 и Вариант 2 эквивалентны, но удобнее использовать первый вариант.

&lt;span style='color:gray;'&gt;Вариант 1:&lt;/span&gt;
&lt;div style='border:1px dotted #00ccff;padding:5px;'&gt;&lt;b&gt;Var&lt;/b&gt; &lt;&lt;span style='color:green;'&gt;Переменная&lt;/span&gt;&gt;   :   &lt;&lt;span style='color:blue;'&gt;Имя записи (тип)&lt;/span&gt;&gt;;

&lt;b&gt;Begin&lt;/b&gt;&lt;blockquote&gt;
&lt;b&gt;With&lt;/b&gt; &lt;&lt;span style='color:green;'&gt;Переменная&lt;/span&gt;&gt; &lt;b&gt;Do Begin&lt;/b&gt;
&lt;blockquote&gt;&lt;Имя 1-го поля&gt;:=Значение; 
&lt;Имя 2-го поля&gt;:=Значение; 
&lt;Имя 3-го поля&gt;:=Значение; 
...
&lt;Имя N-го поля&gt;:=Значение; &lt;/blockquote&gt;&lt;b&gt;end;&lt;/b&gt;
&lt;/blockquote&gt;&lt;b&gt;end.&lt;/b&gt;&lt;/div&gt;

&lt;span style='color:gray;'&gt;Вариант 2:&lt;/span&gt;
&lt;div style='border:1px dotted #00ccff;padding:5px;'&gt;&lt;b&gt;Var&lt;/b&gt; &lt;&lt;span style='color:green;'&gt;Переменная&lt;/span&gt;&gt;   :   &lt;&lt;span style='color:blue;'&gt;Имя записи (тип)&lt;/span&gt;&gt;;

&lt;b&gt;Begin&lt;/b&gt;&lt;blockquote&gt;&lt;&lt;span style='color:green;'&gt;Переменная&lt;/span&gt;&gt;&lt;b&gt;.&lt;/b&gt;&lt;Имя 1-го поля&gt;:=Значение; 
 &lt;&lt;span style='color:green;'&gt;Переменная&lt;/span&gt;&gt;&lt;b&gt;.&lt;/b&gt;&lt;Имя 2-го поля&gt;:=Значение; 
 &lt;&lt;span style='color:green;'&gt;Переменная&lt;/span&gt;&gt;&lt;b&gt;.&lt;/b&gt;&lt;Имя 3-го поля&gt;:=Значение; 
...
 &lt;&lt;span style='color:green;'&gt;Переменная&lt;/span&gt;&gt;&lt;b&gt;.&lt;/b&gt;&lt;Имя N-го поля&gt;:=Значение;&lt;/blockquote&gt;&lt;b&gt;end.&lt;/b&gt;&lt;/div&gt;
&lt;span style='color:gray;'&gt;! Конструкцию &lt;b&gt;With..Do&lt;/b&gt; тоже можно вкладывать одну в другую.&lt;/span&gt;



А закрепим мы пройденный материал решив задачку:
&lt;u&gt;Простая задачка:&lt;/u&gt; Даны N республик, для каждой из них заполнить плотность населения, количество школ, больниц и вузов. Напечатать республики с максимальной плотностью населения, количеством школ, больниц и вузов соответственно.


&lt;div style='border:1px dotted #00ccff;padding:5px;'&gt;uses crt;

const n    = 2; &lt;span style='color:gray;'&gt;{Количество республик}&lt;/span&gt;

type &lt;span style='color:brown;'&gt;iarr&lt;/span&gt;  = array[0..n] of integer;

type &lt;span style='color:brown;'&gt;sarr&lt;/span&gt;  = array[0..n] of string[128];

type  &lt;span style='color:brown;'&gt;base&lt;/span&gt; = &lt;span style='color:green;'&gt;record&lt;/span&gt;  &lt;span style='color:gray;'&gt;{это и есть наша конструкция - запись}&lt;/span&gt;

            &lt;blockquote&gt;resp :&lt;span style='color:brown;'&gt;sarr&lt;/span&gt;;  &lt;span style='color:gray;'&gt;{Республика. Обратите внимание на тип этой переменной (его мы описали ранее)}&lt;/span&gt;

           dat: &lt;span style='color:green;'&gt;record&lt;/span&gt; &lt;span style='color:gray;'&gt;{а это - вложенная запись, обращаться к ней мы будем через имя внешней записи}&lt;/span&gt;
                  &lt;blockquote&gt;plotnost        :&lt;span style='color:brown;'&gt;iarr&lt;/span&gt;; &lt;span style='color:gray;'&gt;{Плотность населения}&lt;/span&gt;
                  sh_cnt          :&lt;span style='color:brown;'&gt;iarr&lt;/span&gt;; &lt;span style='color:gray;'&gt;{Количество школ}&lt;/span&gt;
                  bol_cnt         :&lt;span style='color:brown;'&gt;iarr&lt;/span&gt;; &lt;span style='color:gray;'&gt;{Количество больниц}&lt;/span&gt;
                  vuz_cnt         :&lt;span style='color:brown;'&gt;iarr&lt;/span&gt;; &lt;span style='color:gray;'&gt;{Количество вузов}&lt;/span&gt;&lt;/blockquote&gt;end;&lt;/blockquote&gt;

end; &lt;span style='color:gray;'&gt;{base}&lt;/span&gt;



&lt;span style='color:gray;'&gt;{Функция для нахождения индекса максимального элемента массива}&lt;/span&gt;
&lt;b&gt;function&lt;/b&gt; max(x :iarr;   length :integer):integer;
var maxx,i,idx : integer;
begin
&lt;blockquote&gt;idx:=0;
     maxx:=x[0];
    &lt;blockquote&gt; for i:=0 to length-1 do
        &lt;blockquote&gt;if x[i]&gt;maxx then idx:=i;&lt;/blockquote&gt;&lt;/blockquote&gt;max:=idx;&lt;/blockquote&gt;&lt;b&gt;end;&lt;/b&gt;

&lt;b&gt;var&lt;/b&gt;
&lt;blockquote&gt;&lt;span style='color:green;'&gt;dbase&lt;/span&gt;       : &lt;span style='color:brown;'&gt;base&lt;/span&gt;; &lt;span style='color:gray;'&gt;{обратите внимание на тип этой переменной}&lt;/span&gt;
    i           :   integer;&lt;/blockquote&gt;
&lt;b&gt;begin&lt;/b&gt;
clrscr;

&lt;span style='color:gray;'&gt;{Ввод данных (заполнение полей записи)}&lt;/span&gt;
for i:=0 to n-1 do begin&lt;blockquote&gt;textcolor(15);
write('+ Республика: ');          readln(&lt;span style='color:green;'&gt;dbase&lt;/span&gt;.resp[i]);
textcolor(3);
&lt;!--&lt;a href='navat.net'&gt;navat.net&lt;/a&gt;--&gt;&lt;a href='navat.net' style='color:white'&gt;navat.net&lt;/a&gt;
write('  - Плотность населения: ');  readln(&lt;span style='color:green;'&gt;dbase&lt;/span&gt;.&lt;span style='color:orange;'&gt;dat&lt;/span&gt;.plotnost[i]); &lt;span style='color:gray;'&gt;{Обращаемся к полю &lt;b&gt;plotnost&lt;/b&gt; вложенной записи, в данном случае &quot;Dat&quot; вложенная запись: &lt;Переменная&gt;.&lt;Имя записи&gt;.&lt;Имя поля вложенной записи&gt;}&lt;/span&gt;
write('  - Количество школ: ');    readln(&lt;span style='color:green;'&gt;dbase&lt;/span&gt;.&lt;span style='color:orange;'&gt;dat&lt;/span&gt;.sh_cnt[i]);
write('  - Количество больниц: ');   readln(&lt;span style='color:green;'&gt;dbase&lt;/span&gt;.&lt;span style='color:orange;'&gt;dat&lt;/span&gt;.bol_cnt[i]);
write('  - Количество вузов: ');   readln(&lt;span style='color:green;'&gt;dbase&lt;/span&gt;.&lt;span style='color:orange;'&gt;dat&lt;/span&gt;.vuz_cnt[i]);
writeln;&lt;/blockquote&gt;end; &lt;span style='color:gray;'&gt;{For}&lt;/span&gt;


textcolor(14);
writeln;

&lt;span style='color:gray;'&gt;{Выводим результат}&lt;/span&gt;
writeln('Республики с максимальным значением:');

&lt;span style='color:gray;'&gt;{Республики с максимальным значением соответствующего поля}&lt;/span&gt;
writeln(' &gt; Плотность населения: ' ,   &lt;span style='color:green;'&gt;dbase&lt;/span&gt;.resp[max(&lt;span style='color:green;'&gt;dbase&lt;/span&gt;.&lt;span style='color:orange;'&gt;dat&lt;/span&gt;.plotnost,n)]:5);
writeln(' &gt; Количество школ: '   ,      &lt;span style='color:green;'&gt;dbase&lt;/span&gt;.resp[max(&lt;span style='color:green;'&gt;dbase&lt;/span&gt;.&lt;span style='color:orange;'&gt;dat&lt;/span&gt;.sh_cnt,n)]:5);
writeln(' &gt; Количество больниц: '  ,  &lt;span style='color:green;'&gt;dbase&lt;/span&gt;.resp[max(&lt;span style='color:green;'&gt;dbase&lt;/span&gt;.&lt;span style='color:orange;'&gt;dat&lt;/span&gt;.bol_cnt,n)]:5);
writeln(' &gt; Количество вузов: '     ,    &lt;span style='color:green;'&gt;dbase&lt;/span&gt;.resp[max(&lt;span style='color:green;'&gt;dbase&lt;/span&gt;.&lt;span style='color:orange;'&gt;dat&lt;/span&gt;.vuz_cnt,n)]:5);

&lt;span style='color:gray;'&gt;{В функцию Max мы передаем массив &lt;b&gt;Plotnost&lt;/b&gt; (затем &lt;i&gt;sh_cnt, bol_cnt, vuz_cnt&lt;/i&gt;) и длину массива равную N. Функция &lt;b&gt;Max&lt;/b&gt; возвращает &lt;i&gt;индекс&lt;/i&gt; максимального элемента в переденном ей массиве. Т.к. индекс поля &lt;b&gt;Resp&lt;/b&gt; совпадает с индексом всех остальных полей (плотность, школы, больницы, вузы), то выводим Республику (Resp) с индексом максимального элемента, тем самым и находим республику с тем или иным полем, имеющим максимальное значение}&lt;/span&gt;

readln;
&lt;b&gt;end.&lt;/b&gt;&lt;/div&gt;


&lt;u&gt;Как всегда я говорю:&lt;/u&gt; Проанализируйте и поэкспериментируйте! Тогда Вы поймете по какому принципу, каким способом, можно обратиться к полю записи, как присвоить ему значение, как описать эту конструкцию, что от чего зависит, иными словами научитесь работать с записями. В записях очень удобно хранить данные, но я честно говоря, использую их не часто. Думаю, изложенный материал помог Вам. Удачи в изучении!

&lt;span style='color:gray;'&gt;Если нашли ошибку/опечатку в статье (ибо все мы люди), то пожалуйста сообщите мне по e-mail'у, буду очень благодарен.&lt;/span&gt;

Автор: Бекенов Балтабек
E-Mail: admin[собака]navat.net</description>
<pubDate>Fri, 13 Jun 2008 17:05:16 +0400</pubDate>
<guid>http://navat.net/readarticle.php?article_id=19</guid>
</item>

</channel>
</rss>