<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0" xml:base="http://www.cookieslovers.com">
<channel>
 <title>cookieslovers.com blogs</title>
 <link>http://www.cookieslovers.com/blog</link>
 <description />
 <language>ru</language>
<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Cookieslovers" /><feedburner:info uri="cookieslovers" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
 <title>Впечатления от посещения i-Community 2010 и Яндекс</title>
 <link>http://feedproxy.google.com/~r/Cookieslovers/~3/WSbjFFHmt_Y/vpechatleniya-ot-poseshcheniya-i-community-2010-i-yandeks</link>
 <description>&lt;p&gt;Вчера 4-го марта мне удалось посетить конференцию &lt;a href="http://www.i-community2010.ru/"&gt;"Интернет-Сообщества 2010"&lt;/a&gt; (i-Community 2010, оно же #icom), а также побывать на семинаре "Поиск по блогам" в Яндекс, совмещенном с небольшой экскурсией по их огромному и красивому офису.&lt;/p&gt;
&lt;p&gt;&lt;img rel="lightbox" src="http://photos-f.ak.fbcdn.net/hphotos-ak-ash1/hs435.ash1/24040_102754733091418_100000706761181_82144_4311460_n.jpg" width="300" alt="Приветствие Яндекс на i-Community 2010" /&gt;&lt;/p&gt;
&lt;p&gt;Вот такими надписями Яндекс встречал участников конференции, которая проходила в соседнем здании. Понятия не имею, как они умудрялись незаметно приклеивать эти надписи, пока полный первый зал наблюдал за выступлением докладчиков и через стекло постоянно видел эту стену &lt;img src="http://www.cookieslovers.com/sites/all/modules/smileys/packs/Roving/smile.png" title="Smile" alt="Smile" class="smiley-content"/&gt;&lt;/p&gt;
&lt;p&gt;Собственно конференция началась с небольшого вступления о социальных медиа в России, после чего посетители разбрелись по интересующим их секциям.&lt;/p&gt;
&lt;p&gt;&lt;img rel="lightbox" src="http://photos-c.ak.fbcdn.net/hphotos-ak-ash1/hs435.ash1/24040_102754699758088_100000706761181_82134_6046541_n.jpg" width="300" alt="Открытие i-Community 2010" /&gt;&lt;/p&gt;
&lt;p&gt;Я осталась в первом зале, чтобы прослушать многообещающие выступления на тему &lt;a href="http://ru.wikipedia.org/wiki/Окупаемость_инвестиций"&gt;ROI&lt;/a&gt; в социальных медиа. Докладчики приводили красивые презентации, говорили громко и уверенно, но тему, к сожалению, раскрыли плохо. Многие начинали с утверждения, что в ROI всё сводится к деньгам и достижению целей, но когда переходили к конкретным примерам, то оказывалось, что за денежной отдачей от социальных сервисов гнаться нельзя, и это даже вредно. В качестве целей ставилось эфемерное "продвижение" бренда, пока никак не измеримое в деньгах. Очень любопытная фраза прозвучала от Евгения Федосеева (Акадо): &lt;em&gt;"Работа с блогосферой - это как гомеопатия. Можно один раз попить чай с липкой и не получить эффекта. А можно постоянно его пить и быть бодрым и здоровым,"&lt;/em&gt; - другими словами, лучше работать с социальными медиа в качестве канала продвижения и делать это постоянно, может и не замечая прямой отдачи, чем не работать вообще и наблюдать за периодическими пинками по репутации из интернетов &lt;img src="http://www.cookieslovers.com/sites/all/modules/smileys/packs/Roving/smile.png" title="Smile" alt="Smile" class="smiley-content"/&gt; &lt;/p&gt;
&lt;p&gt;С этим утверждение согласились все, в том числе слушатели, которые во время "круглого стола" всячески пытались дискредитировать докладчиков, задавая провокационные и каверзные вопросы. Больше всего досталось Александру Блохину за кейс о продвижение акции фото-ателье, где стоимость привлечения потенциального клиента через "Вконтакте" и форумы обошлась в 1500р на человека, а также Илье Ермолаеву за вот эту вот табличку с не очень понятными формулами:&lt;/p&gt;
&lt;p&gt;&lt;img rel="lightbox" src="http://photos-e.ak.fbcdn.net/hphotos-ak-ash1/hs435.ash1/24040_102754703091421_100000706761181_82135_896762_n.jpg" width="300" alt="Секция ROI в социальных медия на i-Community 2010" /&gt;&lt;/p&gt;
&lt;p&gt;Далее прошло торжественное награждение победителей конкурса &lt;a href="http://2010.blogruneta.ru/"&gt;"Блог рунета 2010"&lt;/a&gt;. Победили те, кто больше всего этого хотел и не стеснялся просить о поддержке. На фото Boomburum (@boomburum) получает награду в номинации "Микроблог". Поздравляю!&lt;/p&gt;
&lt;p&gt;&lt;img rel="lightbox" src="http://photos-b.ak.fbcdn.net/hphotos-ak-ash1/hs435.ash1/24040_102754739758084_100000706761181_82146_5170411_n.jpg" width="300" /&gt;&lt;/p&gt;
&lt;p&gt;После чего в первом зале прошло две секции, целиком и полностью посвященные &lt;strong&gt;Twitter&lt;/strong&gt;. Начал Антон Волнухин (@antonme) из Яндекс, приведя статистику о росте популярности Twitter в России и описав портрет российского твиттерянина. А, перед этим было еще видео-интервью с Jack Dorsey, основателем Twitter - честно говоря, ничем не запомнилось, кроме фразы, что "Россия должна развивать Twitter, а не наоборот". Вообще, на мой взгляд, самым интересным выступлением в этой секции был доклад психотерапевта Марка Сандомирского о том, какие подсознательные механизмы движут пользователями социальных сервисов. Если вы не были на конференции и не имели возможности увидеть доклад в онлайн трансляции, обязательно скачайте, когда выложат, и посмотрите. Это очень интересно! &lt;/p&gt;
&lt;p&gt;В последней секции речь шла о кейсах продвижения через Twitter и массфолловинге. Кстати, постоянно резало ухо, когда буквально все докладчики произносили "фоллОверы" с ударением на второй слог. В слове "массфОлловинг" ударение при этом почему-то делали правильно. Из особо выделившихся докладчиков в этой секции:&lt;br /&gt;
- Вадим Чернец, который вместо доклада устроил мастер-класс по замене фона аккаунта на веб-морде Twitter;&lt;br /&gt;
- Никита Кабардин, заявивший, что, являясь самым главным российским массфолловером, зафолловил каждого присутствующего в зале минимум по 10 раз. Так же он успел поучаствовать в громком споре с представителем Яндекс на тему того, что статистика Яндекс по русскоязычным Twitter аккаунтам неадекватна, и озвучил свою цифру в 110 тыс. (185 тыс. по версии Яндекс). Вообще громких споров на повышенных тонах на конференции было через чур много -  в такие моменты было ужасно неприятно и неуютно. Это не говоря о переодических выпадах товарища из Курчатовского Института, который в твиттере мгновенно превратился в мем #ded. Фото одной из перепалок:&lt;/p&gt;
&lt;p&gt;&lt;img rel="lightbox" src="http://photos-b.ak.fbcdn.net/hphotos-ak-snc3/hs395.snc3/24040_102757749757783_100000706761181_82184_656504_n.jpg" width="300" alt="Спор на i-Community 2010" /&gt;&lt;/p&gt;
&lt;p&gt;Было неплохое выступление Пети Диденко (@pdidenko) и милого юноши из Microsoft Михаила Черномордикова (@mixen) о том, как Microsoft на самом деле пофиг на Twitter состовляющую продвижения, но которой, тем не менее, переодически удается приятно и эффективно пользоваться. Егора Данилов (@M0rFium) из &lt;a href="http://www.ivi.ru" title="www.ivi.ru"&gt;www.ivi.ru&lt;/a&gt; рассказал о своем Twitter кейсе, и это был лучший пример продвижения через соц-медиа в рунете из всего, что было показано на конференции.&lt;/p&gt;
&lt;p&gt;После окончания конференции мы с небольшой кучкой других участников отправились в соседнее здание компании Яндекс. Там нас ожидал семинар "&lt;strong&gt;Поиск по блогам&lt;/strong&gt;" от Антона Волнухина.&lt;/p&gt;
&lt;p&gt;&lt;img rel="lightbox" src="http://photos-d.ak.fbcdn.net/hphotos-ak-snc3/hs395.snc3/24040_102758929757665_100000706761181_82193_5943936_n.jpg" width="300" /&gt;&lt;/p&gt;
&lt;p&gt;Ну и в завершение милые и приветливые сотрудницы Яндекса Маша и Дарья провели нас по закоулкам большого и уютного офиса компании.&lt;/p&gt;
&lt;p&gt;&lt;img rel="lightbox" src="http://photos-a.ak.fbcdn.net/hphotos-ak-ash1/hs435.ash1/24040_102754726424752_100000706761181_82142_382939_n.jpg" width="300" alt="Приемная Яндекс" /&gt;&lt;br /&gt;
&lt;img rel="lightbox" src="http://photos-g.ak.fbcdn.net/hphotos-ak-snc3/hs375.snc3/24040_102754706424754_100000706761181_82136_4181233_n.jpg" width="300" alt="Офис Яндекс" /&gt;&lt;br /&gt;
&lt;img rel="lightbox" src="http://photos-h.ak.fbcdn.net/hphotos-ak-snc3/hs375.snc3/24040_102754716424753_100000706761181_82139_6118722_n.jpg" width="300" alt="Офис Яндекс" /&gt;&lt;br /&gt;
&lt;img rel="lightbox" src="http://photos-e.ak.fbcdn.net/hphotos-ak-ash1/hs435.ash1/24040_102754719758086_100000706761181_82140_7523910_n.jpg" width="300" alt="Кофейня студии Артемия Лебедева в Яндекс" /&gt;&lt;br /&gt;
&lt;img rel="lightbox" src="http://photos-a.ak.fbcdn.net/hphotos-ak-snc3/hs375.snc3/24040_102754709758087_100000706761181_82137_1313209_n.jpg" width="300" alt="Музыкальная комната Яндекс" /&gt;&lt;/p&gt;
&lt;p&gt;В довершение хочу поблагодарить РОЦИТ за организацию конференции и компанию Яндекс за радушный приём!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/H8KX-8iHYhYGjFvV91M7EurApu8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/H8KX-8iHYhYGjFvV91M7EurApu8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/H8KX-8iHYhYGjFvV91M7EurApu8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/H8KX-8iHYhYGjFvV91M7EurApu8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.cookieslovers.com/content/vpechatleniya-ot-poseshcheniya-i-community-2010-i-yandeks#comments</comments>
 <category domain="http://www.cookieslovers.com/category/tags/twitter">Twitter</category>
 <category domain="http://www.cookieslovers.com/category/tags/veb-20">Веб 2.0</category>
 <category domain="http://www.cookieslovers.com/category/tupaya-fignya/runet">Рунет</category>
 <category domain="http://www.cookieslovers.com/category/category/pechenki">Печеньки</category>
 <pubDate>Fri, 05 Mar 2010 11:54:39 +0000</pubDate>
 <dc:creator>Z.</dc:creator>
 <guid isPermaLink="false">40 at http://www.cookieslovers.com</guid>
<feedburner:origLink>http://www.cookieslovers.com/content/vpechatleniya-ot-poseshcheniya-i-community-2010-i-yandeks</feedburner:origLink></item>
<item>
 <title>Печеньки и Drupal: модуль Junk</title>
 <link>http://feedproxy.google.com/~r/Cookieslovers/~3/FjT5f2NgbI8/pechenki-i-drupal-modul-junk</link>
 <description>&lt;p&gt;На днях Drupal.org обогатился одним моим нехитрым модулем под названием "&lt;a href="http://www.drupal.org/project/junk"&gt;Junk&lt;/a&gt;". Назначение модуля - перехватывать удаляемые пользователями ноды и помещать их в "корзину", откуда модератор может удалить их с сайта уже по-настоящему. При этом помещенные в корзину ноды скрываются во всех отображениях на сайте, будь то Views или меню, а также к ним ограничивается доступ. Junk имеет интеграцию с &lt;a href="http://www.drupal.org/project/ctools"&gt;CTools Page Manager&lt;/a&gt;, &lt;a href="http://www.drupal.org/project/rules"&gt;Rules&lt;/a&gt;, &lt;a href="http://www.drupal.org/project/panels"&gt;Panels&lt;/a&gt; и &lt;a href="http://www.drupal.org/project/views"&gt;Views&lt;/a&gt; и является полностью готовым решением для описанных задач.&lt;/p&gt;
&lt;h2&gt;Реализованный функционал&lt;/h2&gt;
&lt;p&gt;- возможность поместить ноду в корзину с помощью ссылки "Delete" в локальном меню и кнопки "Move to junk" в режиме редактирования. Помещенные в корзину ноды не отображаются в листингах нод (есть также опция автоматически фильтровать во Views), и доступ обычных пользователей к ним запрещен;&lt;/p&gt;
&lt;p&gt;- возможность восстановить ноду из корзины с помощью кнопки "Restore" на странице ноды и на странице управления корзиной - доступно лишь ролям с назначенными специальным правами;&lt;/p&gt;
&lt;p&gt;- страница корзины, отображающая помещенные в неё ноды с кнопками восстановления и окончательного удаления;&lt;/p&gt;
&lt;p&gt;- автоматический "сборщик мусора", который окончательно удаляет ноды из корзины, если их пребывание там превышает заданный период. Например, можно автоматически удалять ноды, находящиеся в корзине более недели.&lt;/p&gt;
&lt;p&gt;- интеграция с &lt;a href="http://www.drupal.org/project/panels"&gt;Panels 3&lt;/a&gt; через &lt;a href="http://www.drupal.org/project/ctools"&gt;CTools Page Manager&lt;/a&gt;. Это стоило немало крови, зато Junk не рушит новые панели, в отличии от других подобных решений;&lt;/p&gt;
&lt;p&gt;- интеграция с &lt;a href="http://www.drupal.org/project/views"&gt;Views 2&lt;/a&gt; - добавлены свои поля и фильтры;  &lt;/p&gt;
&lt;p&gt;- интеграция с &lt;a href="http://www.drupal.org/project/rules"&gt;Rules&lt;/a&gt; - предоставляется 2 события: одно для помещения ноды в корзину и одно для восстановления;&lt;/p&gt;
&lt;p&gt;- опция, позволяющая анпаблишить ноды при помещении в корзину.&lt;/p&gt;
&lt;div class="field field-type-filefield field-field-screen"&gt;
&lt;div class="field-items"&gt;
&lt;div class="field-item odd"&gt;
                    &lt;a href="http://www.cookieslovers.com/sites/default/files/ экрана 1.png" rel="lightbox[field_screen][&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;a href=&amp;quot;/content/drupal-modul-junk&amp;quot; id=&amp;quot;node_link_text&amp;quot; class=&amp;quot;active&amp;quot;&amp;gt;View Image Details&amp;lt;/a&amp;gt;]"&gt;&lt;img rel="lightbox" src="http://www.cookieslovers.com/sites/default/files/imagecache/Preview/ экрана 1.png" alt="" title="" width="100" height="55" /&gt;&lt;/a&gt;        &lt;/div&gt;
&lt;div class="field-item even"&gt;
                    &lt;a href="http://www.cookieslovers.com/sites/default/files/ экрана 2.png" rel="lightbox[field_screen][&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;a href=&amp;quot;/content/drupal-modul-junk&amp;quot; id=&amp;quot;node_link_text&amp;quot; class=&amp;quot;active&amp;quot;&amp;gt;View Image Details&amp;lt;/a&amp;gt;]"&gt;&lt;img rel="lightbox" src="http://www.cookieslovers.com/sites/default/files/imagecache/Preview/ экрана 2.png" alt="" title="" width="100" height="39" /&gt;&lt;/a&gt;        &lt;/div&gt;
&lt;div class="field-item odd"&gt;
                    &lt;a href="http://www.cookieslovers.com/sites/default/files/ экрана 3.png" rel="lightbox[field_screen][&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;a href=&amp;quot;/content/drupal-modul-junk&amp;quot; id=&amp;quot;node_link_text&amp;quot; class=&amp;quot;active&amp;quot;&amp;gt;View Image Details&amp;lt;/a&amp;gt;]"&gt;&lt;img rel="lightbox" src="http://www.cookieslovers.com/sites/default/files/imagecache/Preview/ экрана 3.png" alt="" title="" width="100" height="35" /&gt;&lt;/a&gt;        &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="clear-block"&gt;&lt;/div&gt;
&lt;h2&gt;Немного об аналогах&lt;/h2&gt;
&lt;p&gt;На продакшн сайте у нас активно использовался модуль &lt;a href="http://www.drupal.org/project/trash"&gt;Trash&lt;/a&gt;, и в целом он справлялся с поставленной задачей до того момента, пока мы не обновили панели до третьей версии. И тут отображение сообществ и нод-панелей  на всём сайте буквально обрушилось. Расследование показало, что виновником оказался модуль Trash, который криво переопределяет node_view и таким образом входит в конфликт с панелями. Также в ходе исследования оказалось, что Trash некорректно использует таблицу модуля ядра Node. Мы стали искать альтернативные модули.&lt;/p&gt;
&lt;p&gt;Альтернатив оказалось две: &lt;a href="http://www.drupal.org/project/trashbin"&gt;Trashbin&lt;/a&gt; и &lt;a href="http://www.drupal.org/project/killfile"&gt;Killfile&lt;/a&gt;. К сожалению, оба они не предоставляют полноценных инструментов для управления корзиной и ограничения доступа к "удаленным" нодам. В идеале было бы взять и скрестить все три модуля, добавив необходимых вкусностей. Можно было попросить мейнтейнерство одного из модулей и соответсвенно довести до ума. Trash пришлось бы переписывать с нуля, полностью изменив архитектуру, но автор модуля твёрдо дал понять, что она его устраивает, и менять он её не хочет. Trashbin позиционируется как супер-легкий модуль, который не будет "утяжеляться", а Killfile в качестве основы подходит меньше всего, так как почти не имеет пересечений в необходимом функционале и имеет странный крен в сторону RSS. &lt;/p&gt;
&lt;p&gt;Итог - разработка своего модуля Junk и успешный запуск в эксплуатацию на крупном продакшн сайте. Потом появилась идея поделиться содеяным с Drupal сообществом, и был пройден длинный путь от Code Review до First Release Commit (отдельная история...).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wYqR4VuQ6Ww65uG1ghjPt93lwdM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wYqR4VuQ6Ww65uG1ghjPt93lwdM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wYqR4VuQ6Ww65uG1ghjPt93lwdM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wYqR4VuQ6Ww65uG1ghjPt93lwdM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.cookieslovers.com/content/pechenki-i-drupal-modul-junk#comments</comments>
 <category domain="http://www.cookieslovers.com/category/tags/drupal">Drupal</category>
 <category domain="http://www.cookieslovers.com/category/tags/opensource">OpenSource</category>
 <category domain="http://www.cookieslovers.com/category/%D1%82%D1%83%D0%BF%D0%B0%D1%8F-%D1%84%D0%B8%D0%B3%D0%BD%D1%8F/%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5">Программирование</category>
 <category domain="http://www.cookieslovers.com/category/category/razrabotka">Разработка</category>
 <pubDate>Mon, 08 Feb 2010 15:48:19 +0000</pubDate>
 <dc:creator>Z.</dc:creator>
 <guid isPermaLink="false">38 at http://www.cookieslovers.com</guid>
<feedburner:origLink>http://www.cookieslovers.com/content/pechenki-i-drupal-modul-junk</feedburner:origLink></item>
<item>
 <title>Видеоролик для сайта "Where are u?"</title>
 <link>http://feedproxy.google.com/~r/Cookieslovers/~3/BkxXXo4b6d8/videorolik-dlya-saita-where-are-u</link>
 <description>&lt;p&gt;Один хороший фотограф снял для недавно разработанного нами сайта &lt;strong&gt;"&lt;a href="http://wherau.com/" title="Where are u?"&gt;Where are u?&lt;/a&gt;"&lt;/strong&gt; вот такую милую видео-историю.&lt;/p&gt;
&lt;object width="560" height="340"&gt;&lt;param name="movie" value="http://www.youtube.com/v/cEFCe8rbWQw&amp;hl=ru&amp;fs=1&amp;" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;embed src="http://www.youtube.com/v/cEFCe8rbWQw&amp;hl=ru&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&amp;lt;!--break--&gt;&lt;br /&gt;
Вкратце о сайте: эдакий романтический аналог "Жди меня". Люди встречаются, влюбляются... и не решаются познакомиться или теряют контакты друг друга. Как найти человека, если не знаешь даже его имени?&lt;br /&gt;
Проект "Where are u?" предлагает пользователю рассказать о волнующей встрече, добавить описание внешности (может быть даже есть фотографии или видеролики?), места и времени действия. А дальше... дальше поисковики сделают своё дело  ;)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://i25.tinypic.com/29p28tw.png" rel="lightbox"&gt;&lt;img src="http://i25.tinypic.com/29p28tw.png" alt="Whereareu?" title="Whereareu?" style="width:550px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DlLEFL2LUqFVvEpSGy5MiEhBTbU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DlLEFL2LUqFVvEpSGy5MiEhBTbU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DlLEFL2LUqFVvEpSGy5MiEhBTbU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DlLEFL2LUqFVvEpSGy5MiEhBTbU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.cookieslovers.com/content/videorolik-dlya-saita-where-are-u#comments</comments>
 <category domain="http://www.cookieslovers.com/category/tags/drupal">Drupal</category>
 <category domain="http://www.cookieslovers.com/category/tupaya-fignya/verstka">Вёрстка</category>
 <category domain="http://www.cookieslovers.com/category/%D1%82%D1%83%D0%BF%D0%B0%D1%8F-%D1%84%D0%B8%D0%B3%D0%BD%D1%8F/%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5">Программирование</category>
 <category domain="http://www.cookieslovers.com/category/category/razrabotka">Разработка</category>
 <pubDate>Tue, 21 Jul 2009 10:03:52 +0000</pubDate>
 <dc:creator>Z.</dc:creator>
 <guid isPermaLink="false">30 at http://www.cookieslovers.com</guid>
<feedburner:origLink>http://www.cookieslovers.com/content/videorolik-dlya-saita-where-are-u</feedburner:origLink></item>
<item>
 <title>О нет, это же говорящий Артемий!</title>
 <link>http://feedproxy.google.com/~r/Cookieslovers/~3/LyshpBtWxZQ/o-net-eto-zhe-govoryashchii-artemii</link>
 <description>&lt;div style="margin-top:20px; margin-bottom: 0px; text-align:center"&gt;
&lt;embed height="188" width="355" bgcolor="#ffffff" name="vishnu" src="http://www.iii.ru/static/Vishnu.swf" wmode="window" flashvars="uuid=82119504-7ff9-4603-9f5a-0a654c81b6be&amp;amp;disableRuOverride=1" type="application/x-shockwave-flash" quality="high" style=""&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;На нашем блоге неожиданно завёлся маленький говорящий Артемий. Будучи крайне словоохотливым малым, он не прекращает терроризировать нас своими советами и нравоучениями. На вопросы отвечает охотно, правда невсегда вежливо.&lt;br /&gt;
К счастью, нам удалось отвлечь его на мгновение и проникнуть в подкорку мозга (не спрашивайте как), и теперь мы можем влиять на его ответы, расширяя кругозор. Если он повел себя неадекватно по отношению к вам, оставьте комментарий - разберемся :)&lt;/p&gt;
&lt;p&gt;Update: Кстати, принимаются предложения по развитию словарного запаса и тематикам общения. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xpuf8_pVjb-5rZnkqFTcehdOYeY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xpuf8_pVjb-5rZnkqFTcehdOYeY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xpuf8_pVjb-5rZnkqFTcehdOYeY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xpuf8_pVjb-5rZnkqFTcehdOYeY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.cookieslovers.com/content/o-net-eto-zhe-govoryashchii-artemii#comments</comments>
 <category domain="http://www.cookieslovers.com/category/%D1%82%D1%83%D0%BF%D0%B0%D1%8F-%D1%84%D0%B8%D0%B3%D0%BD%D1%8F/%D0%B7%D0%B0%D0%B1%D0%B0%D0%B2%D0%BD%D0%BE%D0%B5">Забавное</category>
 <category domain="http://www.cookieslovers.com/category/tupaya-fignya/runet">Рунет</category>
 <category domain="http://www.cookieslovers.com/category/category/pechenki">Печеньки</category>
 <pubDate>Fri, 03 Apr 2009 07:10:52 +0000</pubDate>
 <dc:creator>Z.</dc:creator>
 <guid isPermaLink="false">26 at http://www.cookieslovers.com</guid>
<feedburner:origLink>http://www.cookieslovers.com/content/o-net-eto-zhe-govoryashchii-artemii</feedburner:origLink></item>
<item>
 <title>Видеохостинг: как разместить видео на своём сайте. Часть 2.</title>
 <link>http://feedproxy.google.com/~r/Cookieslovers/~3/N2upbBPYZjE/videokhosting-kak-razmestit-video-na-svoem-saite-chast-2</link>
 <description>&lt;p&gt;Данный материал является продолжением статьи &lt;a href="http://cookieslovers.com/content/videokhosting-kak-razmestit-video-na-svoem-saite-chast-1"&gt;Видеохостинг: как разместить видео на своём сайте. Часть 1.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;В этой статье я бы хотел представить вам руководство по созданию собственного видеохостинга на Drupal. Для достижения этой цели будет использоваться многофункциональный модуль &lt;a href="http://drupal.org/project/flashvideo"&gt;FlashVideo&lt;/a&gt;. Подробное описание каждого шага поможет установить и настроить этот модуль правильным образом. Так же я расскажу о том, как создать необходимый для загрузки видео тип ноды, пояснив как преодолеть некоторые ограничения Drupal, связанные с модулем Upload.&lt;/p&gt;
&lt;p&gt;&lt;span class="ptitle"&gt;Введение&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Первое, о чем стоит задуматься, создавая собственный видеохостинг - это о том, где же будут храниться видеоролики. В случае, если вы решите размещать их у себя на хостинге, стоит озаботиться подбором подходящего &lt;a href="http://cookieslovers.com/content/vybiraem-dedicated-server"&gt;выделенного сервера&lt;/a&gt;. Альтернативным вариантом является размещение контента на сторонних серверах, например в рамках &lt;a href="http://aws.amazon.com/s3/"&gt;Amazon Simple Storage Service (Amazon s3)&lt;/a&gt; - такая возможность также присутствует в FlashVideo.&lt;/p&gt;
&lt;p&gt;Модуль FlashVideo позволяет конвертировать добавляемые в аттачменты видеоролики в нужный формат (по умолчанию во флеш - .flv) для указанных типов нод. Данный модуль имеет множество настроек, которые позволяют детально сконфигурировать процесс перекодирования и отображения видеоматериала.&lt;/p&gt;
&lt;p&gt;&lt;span class="ptitle"&gt;ffmpeg&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;Для работы модуля необходима программа &lt;a href="http://ffmpeg.mplayerhq.hu/"&gt;ffmpeg&lt;/a&gt;, которая позволяет конвертировать видео из одного формата в другой. Соответственно, ваш хостер должен предоставлять такую возможность.&lt;br /&gt;
К слову, поддержка ffmpeg - далеко не редкость, так что с этим не должно возникнуть проблем. Как установить ffmpeg на локальной windows-машине, использующей &lt;a href="www.denwer.ru/"&gt;Denwer&lt;/a&gt;, можно в частности прочитать &lt;a href="http://www.drupal.ru/node/16257"&gt;тут&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span class="ptitle"&gt;Настраиваем параметры php&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Далее, для корректной работы модуля вам необходимо поменять настройки ряда php параметров: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;upload_max_filesize - задает максимальный размер загружаемого файла; &lt;/li&gt;
&lt;li&gt;post_max_size - определяет максимальный размер POST`а, который должен быть больше либо равен upload_max_filesize;&lt;/li&gt;
&lt;li&gt;max_execution_time - устанавливает максимальное количество секунд, которое может исполнятся скрипт. Данный параметр должен обеспечивать достаточное количество времени для конвертации больших файлов.&lt;/li&gt;
&lt;li&gt;max_input_time - максимальное количество секунд, в течении которых скрипт может считывать входящие данные. Слишком маленькое выставленное время приведет к тайм-ауту больших по весу загрузок.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Автор модуля рекомендует выставить следующие значения (либо в php.ini, либо в корневом .htaccess файле):&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;php.ini&lt;/strong&gt;&lt;br /&gt;
&lt;div class="geshifilter"&gt;&lt;div class="php geshifilter-php" style="font-family:monospace;"&gt;post_max_size&lt;span style="color: #339933;"&gt;=&lt;/span&gt;100M&lt;br /&gt;
upload_max_filesize&lt;span style="color: #339933;"&gt;=&lt;/span&gt;100M&lt;br /&gt;
max_execution_time&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1000&lt;/span&gt;&lt;br /&gt;
max_input_time&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1000&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;.htaccess&lt;/strong&gt;&lt;br /&gt;
&lt;div class="geshifilter"&gt;&lt;div class="php geshifilter-php" style="font-family:monospace;"&gt;php_value &amp;nbsp;post_max_size &amp;nbsp;100M&lt;br /&gt;
php_value &amp;nbsp;upload_max_filesize &amp;nbsp;100M&lt;br /&gt;
php_value &amp;nbsp;max_execution_time &amp;nbsp; &lt;span style="color: #cc66cc;"&gt;1000&lt;/span&gt;&lt;br /&gt;
php_value &amp;nbsp;max_input_time &amp;nbsp;&lt;span style="color: #cc66cc;"&gt;1000&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Но, как вы понимаете, конкретные цифры зависят только от ваших задач - например, от лимита на размер видеороликов, который вы желаете установить.&lt;br /&gt;
В любом случае, данные параметры надо менять с осторожностью, не забывая о последствиях.&lt;/p&gt;
&lt;p&gt;&lt;span class="ptitle"&gt;Конфигурируем FlashVideo и ставим плеер&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Теперь необходимо включить модуль ядра Upload, а также установить &lt;a href="http://drupal.org/project/cck"&gt;CCK&lt;a&gt; и &lt;a href="http://drupal.org/project/flashvideo"&gt;FlashVideo&lt;/a&gt;.&lt;br /&gt;
Далее создадим новый тип ноды, который будет содержать в себе видеоролик с описанием, и назовем тип материала, скажем, video. Добавим текстовое многострочное поле, которое будет использоваться в качестве описания.&lt;br /&gt;
Зайдя на страницу конфигурирования FlashVideo можно увидеть, что он предоставляет настройки как для всех типов нод, так и для каждого материала в отдельности.&lt;br /&gt;
Рассмотрим наиболее важные:&lt;br /&gt;
1. Disable the &lt;span class="geshifilter"&gt;&lt;code class="geshifilter-php"&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;video&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt; tag - запрещает использование тега &lt;span class="geshifilter"&gt;&lt;code class="geshifilter-php"&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;video&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;. По умолчанию, пользователь должен прописать данный тег в теле нода, чтобы отобразить видео.&lt;br /&gt;
Список параметров для тега можно посмотреть &lt;a href="http://www.travistidwell.com/node/6"&gt;тут&lt;/a&gt;.&lt;br /&gt;
2. Convert videos immediately - разрешает модулю попытаться сконвертировать видео сразу же после его загрузки, не дожидаясь завершения работы крона. Поставим галочку для нашего примера.&lt;br /&gt;
3. Flash Player Name - содержит в себе имя флеш плеера. Он должен находится в той же директории, что и сконвертированные видеоролики.&lt;br /&gt;
4. ffmpeg Path - содержит в себе путь до исполняемого файла ffmpeg. Будьте внимательны, значение по умолчанию /usr/bin/ffmpeg в ОС Windows будет указывать на /usr/bin/ffmpeg.exe .&lt;br /&gt;
5. Delete Original Video - удаляет исходное видео после удачной конвертации. Очень советую включить для экономии места.&lt;br /&gt;
6. Output Directory - директория для хранения перекодированных видео и картинок превью. По умолчанию, такая же как и для файлов.&lt;br /&gt;
7. Maximum Conversions per Cron - максимальное количество видеороликов, которое модуль будет пытаться конвертировать за один прогон крона.&lt;br /&gt;
8. Log Conversion Data - сохраняет записи о процессе перекодировки и создания превьюшек в таблицу ffmpeg_data. Очень полезная опция для дебага, так что тоже отмечаем.&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Для воспроизведения видеороликов вам потребуется флэш плеер, например протестированные в работе с &lt;a href="http://drupal.org/project/flashvideo"&gt;FlashVideo&lt;/a&gt; плееры &lt;a href="http://www.tmtdigital.com/project/dash_player"&gt;Dash Media Player&lt;/a&gt; или &lt;a href="//www.longtailvideo.com/players/jw-flv-player/"&gt;JW Player&lt;/a&gt;.&lt;br /&gt;
Прочитать краткий обзор ряда плееров можно &lt;a href="http://habrahabr.ru/blogs/webdev/28196/"&gt;тут&lt;/a&gt;. Для примера воспользуем JW Player.&lt;br /&gt;
В случае, если на вашем сайте включен public режим доступа к файлам, будет достаточно поместить файлы плеера в Output Directory.&lt;br /&gt;
Если же включен private режим, то вам будет необходимо создать запись до файла плеера в таблице files либо вручную, либо, например, загрузив файлы плеера при сохранении какой-либо ноды (если директория&lt;br /&gt;
для файлов совпадает с Output Directory). Не забудьте поменять Flash Player Name на правильный.&lt;/p&gt;
&lt;p&gt;&lt;span class="ptitle"&gt;Проверка работы&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Итак, пришло время создать ноду типа video. Загрузите видеоролик и разместите в описании тег &lt;span class="geshifilter"&gt;&lt;code class="geshifilter-php"&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;video&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;
Если после ее сохранения, вы видите, как в выбранном плеере воспроизводится ваш ролик, позвольте поздравить вас с победой!&lt;br /&gt;
Если же нет, то проверьте таблицу ffmpeg_data - если там есть записи, попытайтесь вручную запустить ffmpeg с указанными параметрами и посмотрите сообщения об ошибках. Также, если вы не включали конвертацию сразу же после загрузки и у вас не настроен или еще не запускался крон, стоит запустить его вручную.&lt;br /&gt;
Если записей об ошибках нет, но не видно плеера, то стоит проверить все ли его файлы вы скопировали в Output Directory, есть ли запись в бд в случае private метода загрузки файла и правильно ли указано имя плеера в Flash Player Name.&lt;/p&gt;
&lt;p&gt;Статья автора модуля про FlashVideo (содержит раздел о проблемах) - &lt;a href="http://www.travistidwell.com/flashvideo" title="http://www.travistidwell.com/flashvideo"&gt;http://www.travistidwell.com/flashvideo&lt;/a&gt; .&lt;/p&gt;
&lt;p&gt;&lt;span class="ptitle"&gt;Ограничение количества загружаемых файлов&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Забавно, но в корневом модуле Upload невозможно ограничить количество файлов для загрузки в аттачменты.&lt;br /&gt;
Допустим, мы хотим, чтобы пользователь мог загружать только один видеофайл для каждой ноды - довольно логично, неправда ли? Можно было бы воспользоваться модулем &lt;a href="http://drupal.org/project/filefield"&gt;FileField&lt;/a&gt;, но вот вопрос - как заставить работать их в одной связке с FlashVideo? Дело в том, что FlashVideo ролик может быть засабмитен только через Upload аттачмент, но не через FileField. Соотвественно необходимо это как-то исправить.&lt;br /&gt;
Самым правильным способом, конечно же, было бы переделать модуль FlashVideo и добиться коммита в CVS проекта.&lt;br /&gt;
Однако, когда я столкнулся с подобной проблемой я был очень ограничен по времени, так что у меня родилось следующее решение:&lt;br /&gt;
1. Устанавливаем модуль FileField.&lt;br /&gt;
2. Добавляем в тип ноды video поле типа file (машинное имя - upload_video) и прописываем разрешенные для загрузки типы файлов.&lt;br /&gt;
2. Создаем собственный модуль (назовем его fff) и помещаем в него следующий код:&lt;br /&gt;
&lt;div class="geshifilter"&gt;&lt;div class="php geshifilter-php" style="font-family:monospace;"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; fff_form_alter&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$form_id&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #339933;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$form&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #666666; font-style: italic;"&gt;//если тип ноды video&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$form_id&lt;/span&gt; &lt;span style="color: #339933;"&gt;==&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;'video_node_form'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #666666; font-style: italic;"&gt;//убираем аттачменты&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #990000;"&gt;unset&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$form&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'attachments'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #666666; font-style: italic;"&gt;//меняем функцию сабмита формы &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #990000;"&gt;unset&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$form&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'#submit'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'node_form_submit'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000088;"&gt;$form&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'#submit'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'fff_redirect_submit'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #990000;"&gt;array&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000088;"&gt;$form&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;quot;#submit&amp;quot;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'fff_redirect_submit'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;quot;#title&amp;quot;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'Save'&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #666666; font-style: italic;"&gt;//конвертируем объект в массив&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; object_2_array&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$data&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;br /&gt;
&lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #b1b100;"&gt;if&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #990000;"&gt;is_array&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$data&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #339933;"&gt;||&lt;/span&gt; &lt;span style="color: #990000;"&gt;is_object&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$data&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #000088;"&gt;$result&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #990000;"&gt;array&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #b1b100;"&gt;foreach&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$data&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;as&lt;/span&gt; &lt;span style="color: #000088;"&gt;$key&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #000088;"&gt;$value&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #000088;"&gt;$result&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$key&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; object_2_array&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$value&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #b1b100;"&gt;return&lt;/span&gt; &lt;span style="color: #000088;"&gt;$result&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #b1b100;"&gt;return&lt;/span&gt; &lt;span style="color: #000088;"&gt;$data&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; fff_redirect_submit&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$form_id&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #000088;"&gt;$form_values&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #666666; font-style: italic;"&gt;//смотрим если есть старые файлы и помечаем&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #666666; font-style: italic;"&gt;//их для удаления&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #990000;"&gt;count&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$form_values&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'field_upload_video'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #339933;"&gt;==&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;2&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000088;"&gt;$node&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; stdClass&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000088;"&gt;$node&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;vid&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000088;"&gt;$form_values&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'vid'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000088;"&gt;$files&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; upload_load&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$node&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000088;"&gt;$form_values&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'files'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #990000;"&gt;array&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;foreach&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$files&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;as&lt;/span&gt; &lt;span style="color: #000088;"&gt;$file&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000088;"&gt;$file&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; object_2_array&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$file&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000088;"&gt;$file&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'remove'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #990000;"&gt;unset&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$file&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'vid'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000088;"&gt;$form_values&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'files'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$file&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'fid'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000088;"&gt;$file&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #666666; font-style: italic;"&gt;//сабмитим ноду дефолтным методом&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000088;"&gt;$node_url&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; node_form_submit&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$form_id&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #000088;"&gt;$form_values&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #666666; font-style: italic;"&gt;//переходим на страницу сабмиченной ноды &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;return&lt;/span&gt; &lt;span style="color: #000088;"&gt;$node_url&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #666666; font-style: italic;"&gt;//ловим хук сабмита FlashVideo&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; fff_flashvideo_submit&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #339933;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$node&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #000088;"&gt;$params&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #666666; font-style: italic;"&gt;// &amp;nbsp;определяем новый файл для конвертации &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #990000;"&gt;count&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$node&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;field_upload_video&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;==&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;2&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000088;"&gt;$upfield&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000088;"&gt;$node&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;field_upload_video&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fff_convert_files&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #339933;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$node&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #000088;"&gt;$upfield&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;else&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #990000;"&gt;count&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$node&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;field_upload_video&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;==&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt; &lt;span style="color: #339933;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color: #339933;"&gt;!&lt;/span&gt;upload_load&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$node&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000088;"&gt;$upfield&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000088;"&gt;$node&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;field_upload_video&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fff_convert_files&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #339933;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$node&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #000088;"&gt;$upfield&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #666666; font-style: italic;"&gt;//переделываем структуру FileField в аттачмент&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; fff_convert_files&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #339933;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$node&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #000088;"&gt;$upfield&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000088;"&gt;$node&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;files&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'upload_0'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #990000;"&gt;array&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;'description'&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #000088;"&gt;$upfield&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'description'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;'remove'&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;'list'&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;'filename'&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #000088;"&gt;$upfield&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'filename'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;'filepath'&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #000088;"&gt;$upfield&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'filepath'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;'filemime'&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #000088;"&gt;$upfield&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'filemime'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;'filesize'&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #000088;"&gt;$upfield&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'filesize'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;'fid'&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;'upload_0'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000088;"&gt;$node&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;upload&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'Upload'&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000088;"&gt;$node&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;attach&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'Attach'&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000088;"&gt;$aturl&lt;/span&gt;&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'attach-url'&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000088;"&gt;$node&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$aturl&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;'http://'&lt;/span&gt;&lt;span style="color: #339933;"&gt;.&lt;/span&gt;&lt;span style="color: #000088;"&gt;$_SERVER&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'HTTP_HOST'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #339933;"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'/upload/js'&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000088;"&gt;$node&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;field_upload_video&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;''&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #990000;"&gt;unset&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$node&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;field_upload_video&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; fff_nodeapi&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #339933;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$node&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #000088;"&gt;$op&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #000088;"&gt;$a3&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;NULL&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #000088;"&gt;$a4&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;NULL&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$node&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;type&lt;/span&gt; &lt;span style="color: #339933;"&gt;==&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;'video'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;switch&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$op&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #666666; font-style: italic;"&gt;//обрабатываем edit &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;case&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;'prepare'&lt;/span&gt;&lt;span style="color: #339933;"&gt;:&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #339933;"&gt;!&lt;/span&gt;&lt;span style="color: #000088;"&gt;$node&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;files&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;break&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000088;"&gt;$videofile&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;foreach&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$node&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;files&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;as&lt;/span&gt; &lt;span style="color: #000088;"&gt;$file&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$file&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;filemime&lt;/span&gt; &lt;span style="color: #339933;"&gt;==&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;'flv-application/octet-stream'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000088;"&gt;$videofile&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000088;"&gt;$file&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #339933;"&gt;!&lt;/span&gt;&lt;span style="color: #000088;"&gt;$videofile&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #b1b100;"&gt;break&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #666666; font-style: italic;"&gt;//переделываем структуру аттачмента в FileField&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000088;"&gt;$node&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;field_upload_video&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #990000;"&gt;array&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #990000;"&gt;array&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;'fid'&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #000088;"&gt;$videofile&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;fid&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;'description'&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #000088;"&gt;$videofile&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;description&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;'list'&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;'nid'&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #000088;"&gt;$videofile&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;nid&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;'filename'&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #000088;"&gt;$videofile&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;filename&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;'filepath'&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #000088;"&gt;$videofile&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;filepath&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;'filemime'&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #000088;"&gt;$videofile&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;filemime&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;'filesize'&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #000088;"&gt;$videofile&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;filesize&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;break&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt; &lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;В результате структура FileField подменяется на структуру аттачмента и, вуаля - все работает так как нам надо!&lt;br /&gt;
Из недостатков данного решения можно отметить то, что в базе остается неиспользуемое поле аттачментов.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DyMW1lzVsJPay7UdsK0jgVmj1qY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DyMW1lzVsJPay7UdsK0jgVmj1qY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DyMW1lzVsJPay7UdsK0jgVmj1qY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DyMW1lzVsJPay7UdsK0jgVmj1qY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.cookieslovers.com/content/videokhosting-kak-razmestit-video-na-svoem-saite-chast-2#comments</comments>
 <category domain="http://www.cookieslovers.com/category/tags/drupal">Drupal</category>
 <category domain="http://www.cookieslovers.com/category/tags/videokhosting">Видеохостинг</category>
 <category domain="http://www.cookieslovers.com/category/%D1%82%D1%83%D0%BF%D0%B0%D1%8F-%D1%84%D0%B8%D0%B3%D0%BD%D1%8F/%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5">Программирование</category>
 <category domain="http://www.cookieslovers.com/category/category/razrabotka">Разработка</category>
 <pubDate>Wed, 01 Apr 2009 05:16:50 +0000</pubDate>
 <dc:creator>A.</dc:creator>
 <guid isPermaLink="false">19 at http://www.cookieslovers.com</guid>
<feedburner:origLink>http://www.cookieslovers.com/content/videokhosting-kak-razmestit-video-na-svoem-saite-chast-2</feedburner:origLink></item>
<item>
 <title>Drupal как MVC Framework</title>
 <link>http://feedproxy.google.com/~r/Cookieslovers/~3/lq34fdaoYC0/drupal-kak-mvc-framework</link>
 <description>"Архитектура программного обеспечения" - эти слова обычно пугают большинство веб-разработчиков фрилансеров. 3-Tier, MVC, Singleton, Factory... "Стойте! прекратите! зачем всё усложнять?" - сказали бы вам в ответ, - "Вот есть же, например, &lt;strong&gt;Drupal&lt;/strong&gt; - темку сверстали, модули докрутили-настроили и в принципе сайт готов." Действительно, CMS Drupal предоставляет отличную платформу для быстрой разработки, требуя при этом минимальное количество вложенных усилий. &lt;br&gt;
Многие наверняка слышали о таком понятии, как "идеалогия Drupal" - это как раз то, благодаря чему данная CMS стала такой удобной и эффективной платформой. Но возможно немногие догадываются, что в основе упомянутой идеалогии лежит широко известный паттерн &lt;strong&gt;MVC&lt;/strong&gt;, или Model-View-Controller.
&lt;br&gt;&lt;br&gt;
&lt;a href="/DrupalMVC.jpg" rel="lightbox"&gt;&lt;img src="/DrupalMVC.jpg" alt="Drupal MVC" title="Drupal MVC" style="width:550px"  /&gt;&lt;/a&gt;
&lt;!--break--&gt;
&lt;br&gt;
Паттерн (т.е. шаблон проектирования) MVC состоит из трех взаимосвязанных элементов: Модель, Представление и Контроллер. Такое разделение на компоненты позволяет разграничить пользовательские интерфейсы, управляющую логику и контент.
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Модель&lt;/strong&gt; - это собственно контент, данные, отражающие предметную область и структуированные в соответствии с какой-то схемой, например, ввиде таблиц реляционной базы данных (MySQL, PostgreSQL, MS SQL Server, Oracle). Так называемое DB API (набор функций для работы с базой данных) тоже является частью Модели. Помимо того к Модели относится программный код, определяющие типы данных и их свойства и взаимосвязи. 
С точки зрения Drupal, Модель - это БД плюс такие модули, как node.module, taxonomy.module, CCK. Другие сторонние модули наряду с основными своими функциями могут также дополнять Модель своими типами данных либо функциями общения с базой.
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Контроллер&lt;/strong&gt; интерпретирует данные, введенные пользователем, осуществляет смену состояний в зависимости от пользовательских действий, манипулирует сущностями Модели так, чтобы их можно было превратить в Представление, и в общем делает всё, чтобы шестеренки системы крутились. В Drupal Контроллер - это базовые модули типа path.module, система меню, хуки, файл index.php, собирающий и загружающий систему, и т.д. Также вся логика, имплементируемая дополнительными модулями, является частью Контроллера.
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Представление&lt;/strong&gt; отвечает за отображение Модели пользователю. В случае Drupal - это конечные странички сайта, составленные Контроллером на основе запросов посетителя и текущей Модели. К Представлению относятся шаблоны страниц, написанные на движке PHPTemplate, CSS файлы стилей, Javascript, отвечающий за рюшечки в интерфейсе. Через Представление пользователь осуществляет общение с сайтом - Контроллер лишь обрабатывает отправленные браузером HTTP GET и POST запросы, интерпретирует URL, а затем вновь формирует Представление и передает его на пользовательский компьютер.
&lt;br&gt;&lt;br&gt;
Быстрая и эффективная разработка сайта на Drupal возможна благодаря тому, что описанная модель позволяет разделить решаемую задачу на отдельные состовляющие, причем для реализации каждой из этих состовляющих предлагаются уже готовые решения. Нет необходимости изобретать свои Модель или Контроллер - пожалуйста, применяйте зарекомендовавшую себя схему. Зачастую возможно обойтись лишь небольшими изменениями в Представлении для создания полноценного веб-приложения на Drupal. Но если есть необходимость реализовать специфическую логику или структуру контента, то для этого достаточно имплементировать свои части Контроллера и Модели, дополнив или изменив существующие версии.
&lt;br&gt;&lt;br&gt;
Такой подход уже зарекомендовал себя в таких технологиях, как ASP.NET, J2EE, Spring. &lt;em&gt;Drupal&lt;/em&gt;, являясь системой управления контентом, довольно удачно перенял этот опыт, фактически предложив полноценную платформу для создания любого типа веб-сайтов на основе архитектуры MVC в самой распространенной на сегодня связке LAMP (Linux-Apache-MySQL-PHP). Несомненно, данной CMS есть куда совершенствоваться, в том числе в этом направлении, но уже сегодня её можно использовать в качестве мощного инструмента веб-разработки.
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rhGQ1GGTPCpKypSXrdJfpBMHcZw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rhGQ1GGTPCpKypSXrdJfpBMHcZw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rhGQ1GGTPCpKypSXrdJfpBMHcZw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rhGQ1GGTPCpKypSXrdJfpBMHcZw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.cookieslovers.com/content/drupal-kak-mvc-framework#comments</comments>
 <category domain="http://www.cookieslovers.com/category/%D1%82%D1%83%D0%BF%D0%B0%D1%8F-%D1%84%D0%B8%D0%B3%D0%BD%D1%8F/cms">CMS</category>
 <category domain="http://www.cookieslovers.com/category/tags/drupal">Drupal</category>
 <category domain="http://www.cookieslovers.com/category/category/proektirovanie">Проектирование</category>
 <pubDate>Mon, 30 Mar 2009 19:29:46 +0000</pubDate>
 <dc:creator>Z.</dc:creator>
 <guid isPermaLink="false">18 at http://www.cookieslovers.com</guid>
<feedburner:origLink>http://www.cookieslovers.com/content/drupal-kak-mvc-framework</feedburner:origLink></item>
<item>
 <title>7 полезных .htaccess сниппетов для Wordpress и Drupal блога</title>
 <link>http://feedproxy.google.com/~r/Cookieslovers/~3/fl_ls0qDFHo/7-poleznykh-htaccess-snippetov-dlya-wordpress-i-drupal-bloga</link>
 <description>&lt;p&gt;С помощью &lt;strong&gt;.htaccess&lt;/strong&gt; файла можно делать очень любопытные вещи. Этот небольшой файлик лежит в корневой директории сайта и позволяет задавать настройки Apache сервера. Далее я приведу примеры того, как посредством него можно добавить полезные с точки зрения функциональности, юзабилити и безопасности фичи для Wordpress и Drupal блога.&lt;/p&gt;
&lt;p&gt;Файл .htaccess редактируется в обычном WordPad, только не забудьте предварительно &lt;em&gt;на всякий случай&lt;/em&gt; сделать его резервную копию.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Перенаправление RSS фида на FeedBurner с помощью .htaccess &lt;/strong&gt;&lt;br /&gt;
Многие блоггеры используют в качестве RSS фидера популярный сервис &lt;a href="http://www.feedburner.com/fb/a/home"&gt;FeedBurner&lt;/a&gt;. Единственная проблема, которая при этом возникает - для его работы необходимо редактировать файлы шаблонов страниц либо ставить лишний модуль. Вот как можно решить эту проблему с помощью .htaccess - откройте файл и добавьте следующие строки:&lt;br /&gt;
&lt;div class="geshifilter"&gt;&lt;div class="text geshifilter-text" style="font-family:monospace;"&gt;# temp redirect wordpress or drupal content feeds to feedburner&lt;br /&gt;
&amp;lt;IfModule mod_rewrite.c&amp;gt;&lt;br /&gt;
&amp;nbsp;RewriteEngine on&lt;br /&gt;
&amp;nbsp;RewriteCond %{HTTP_USER_AGENT} !FeedBurner &amp;nbsp; &amp;nbsp;[NC]&lt;br /&gt;
&amp;nbsp;RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC]&lt;br /&gt;
&amp;nbsp;RewriteRule ^feed/?([_0-9a-z-]+)?/?$ &amp;lt;a href=&amp;quot;http://feeds2.feedburner.com/cookieslovers&amp;quot; title=&amp;quot;http://feeds2.feedburner.com/cookieslovers&amp;quot;&amp;gt;http://feeds2.feedburner.com/cookieslovers&amp;lt;/a&amp;gt; [R=302,NC,L]&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
Не забудьте исправить 6 строчку с адресом фида на ваш фид.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Использование кеширования браузером &lt;/strong&gt;&lt;br /&gt;
Хороший способ увеличить скорость загрузки страниц браузером - это использовать его встроенное кеширование. Можно сделать так, чтобы в ответ на запросы браузера изображений, файлов стилей CSS и скриптов JavaScript высылался 304 not modified HTTP хедер с длительным сроком кеширования, скажем год - тогда при повторном заходе на ваш сайт браузер достанет все эти данные из своего кеша вместо того, чтобы тратить ваш трафик.&lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="text geshifilter-text" style="font-family:monospace;"&gt;FileETag MTime Size&lt;br /&gt;
&amp;lt;ifmodule mod_expires.c&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;filesmatch &amp;quot;\.(jpg|gif|png|css|js)$&amp;quot;&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ExpiresActive on&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ExpiresDefault &amp;quot;access plus 1 year&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;lt;/filesmatch&amp;gt;&lt;br /&gt;
&amp;lt;/ifmodule&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Сжатие статичных данных&lt;/strong&gt;&lt;br /&gt;
Еще один способ сэкономить трафик вашего сайта - автоматически сжимать передаваемые данные на стороне сервера и осуществлять обратное действие на стороне клиента. Для представленного способа нужно, чтобы хостинг поддерживал mod_deflate или mod_gzip.&lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="text geshifilter-text" style="font-family:monospace;"&gt;AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript&lt;br /&gt;
BrowserMatch ^Mozilla/4 gzip-only-text/html&lt;br /&gt;
BrowserMatch ^Mozilla/4.0[678] no-gzip&lt;br /&gt;
BrowserMatch bMSIE !no-gzip !gzip-only-text/html&lt;br /&gt;
&amp;lt;IfModule mod_gzip.c&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; mod_gzip_on &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Yes&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; mod_gzip_item_include &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; file &amp;nbsp; &amp;nbsp; &amp;nbsp; \.js$&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; mod_gzip_item_include &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; file &amp;nbsp; &amp;nbsp; &amp;nbsp; \.css$&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
Если хостинг не поддерживает ни mod_deflate, ни mod_gzip, то для Drupal можно воспользоваться, например, &lt;a href="http://drupalcookbook.ru/recept/szhatie-stranic-js-css-servere-gde-gzip-deflate"&gt;этим методом&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Фильтруем комментарии от спам ботов&lt;/strong&gt;&lt;br /&gt;
Спам боты оставляют свои надоедливые комментарии, переходя на сайт напрямую без рефёреров - они просто выполняют запросы к сайтам из своего спам-листа. А это значит, что можно отфильтровать их комментарии, запретив доступ к странице комментариев напрямую. Пример для Wordpress:&lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="text geshifilter-text" style="font-family:monospace;"&gt;RewriteEngine On&lt;br /&gt;
RewriteCond %{REQUEST_METHOD} POST&lt;br /&gt;
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*&lt;br /&gt;
RewriteCond %{HTTP_REFERER} !.*yourblog.com.* [OR]&lt;br /&gt;
RewriteCond %{HTTP_USER_AGENT} ^$&lt;br /&gt;
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. Перенаправляем поисковики на зарезервированную страницу без индексации во время обновления сайта&lt;/strong&gt;&lt;br /&gt;
Во время обновления темы блога или версии модулей/cms можно сделать так, чтобы все запросы сайта переходили на специально созданную и красиво задизайненную html страницу, при этом проставив ей 302 HTTP ответ, чтобы поисковики её не проиндексировали.&lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="text geshifilter-text" style="font-family:monospace;"&gt;RewriteEngine on&lt;br /&gt;
RewriteCond %{REQUEST_URI} !/maintenance.html$&lt;br /&gt;
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123&lt;br /&gt;
RewriteRule $ /maintenance.html [R=302,L]&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
Во второй строке необходимо прописать свой IP адрес сайта.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6. Защита от утечки контента и трафика&lt;/strong&gt;&lt;br /&gt;
Есть такой термин - hotlinking - он употребляется, когда говорят об отображении медиа контента (например, картинок) чужого сайта на своём сайте напрямую без перезаливки на свой хостинг. Если вы не хотите, чтобы контент, размещенный, на вашем сайте использовался таким образом, расходуя ваш трафик, можно запретить это в .htaccess:&lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="text geshifilter-text" style="font-family:monospace;"&gt;RewriteEngine On&lt;br /&gt;
#Replace ?mysite\.com/ with your blog url&lt;br /&gt;
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]&lt;br /&gt;
RewriteCond %{HTTP_REFERER} !^$&lt;br /&gt;
#Replace /images/nohotlink.jpg with your &amp;quot;don't hotlink&amp;quot; image url&lt;br /&gt;
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
По адресу /images/nohotlink.jpg предлагается расположить картинку, красочно иллюстрирующую ваши мысли по поводу хотлинкинга.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;7. Баним спамеров по IP&lt;/strong&gt;&lt;br /&gt;
Самый простой метод блокировки спам ботов - запретить им доступ к сайту вообще, прописав в .htaccess их айпи в бан лист.&lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="text geshifilter-text" style="font-family:monospace;"&gt;&amp;lt;Limit GET POST&amp;gt;&lt;br /&gt;
order allow,deny&lt;br /&gt;
deny from xx.xx.xx.xx&lt;br /&gt;
allow from all&lt;br /&gt;
&amp;lt;/Limit&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Источники:&lt;/em&gt;&lt;br /&gt;
&lt;a href="http://www.wprecipes.com/how-to-redirect-wordpress-rss-feeds-to-feedburner-with-htaccess" title="http://www.wprecipes.com/how-to-redirect-wordpress-rss-feeds-to-feedburner-with-htaccess"&gt;http://www.wprecipes.com/how-to-redirect-wordpress-rss-feeds-to-feedburn...&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.wprecipes.com/how-to-protect-your-wordpress-blog-from-hotlinking" title="http://www.wprecipes.com/how-to-protect-your-wordpress-blog-from-hotlinking"&gt;http://www.wprecipes.com/how-to-protect-your-wordpress-blog-from-hotlinking&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://lorelle.wordpress.com/2007/09/20/the-easiest-way-to-ban-a-wordpress-spammer/" title="http://lorelle.wordpress.com/2007/09/20/the-easiest-way-to-ban-a-wordpress-spammer/"&gt;http://lorelle.wordpress.com/2007/09/20/the-easiest-way-to-ban-a-wordpre...&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.catswhocode.com/blog/10-awesome-htaccess-hacks-for-wordpress" title="http://www.catswhocode.com/blog/10-awesome-htaccess-hacks-for-wordpress"&gt;http://www.catswhocode.com/blog/10-awesome-htaccess-hacks-for-wordpress&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://drupalcookbook.ru/recept/szhatie-trafika" title="http://drupalcookbook.ru/recept/szhatie-trafika"&gt;http://drupalcookbook.ru/recept/szhatie-trafika&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2nA78w2q9YoCt_6cU-il0egxDeA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2nA78w2q9YoCt_6cU-il0egxDeA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2nA78w2q9YoCt_6cU-il0egxDeA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2nA78w2q9YoCt_6cU-il0egxDeA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.cookieslovers.com/content/7-poleznykh-htaccess-snippetov-dlya-wordpress-i-drupal-bloga#comments</comments>
 <category domain="http://www.cookieslovers.com/category/tags/drupal">Drupal</category>
 <category domain="http://www.cookieslovers.com/category/tags/wordpress">Wordpress</category>
 <category domain="http://www.cookieslovers.com/category/%D1%82%D1%83%D0%BF%D0%B0%D1%8F-%D1%84%D0%B8%D0%B3%D0%BD%D1%8F/%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5">Программирование</category>
 <category domain="http://www.cookieslovers.com/category/category/razrabotka">Разработка</category>
 <pubDate>Fri, 20 Mar 2009 00:05:32 +0000</pubDate>
 <dc:creator>Z.</dc:creator>
 <guid isPermaLink="false">17 at http://www.cookieslovers.com</guid>
<feedburner:origLink>http://www.cookieslovers.com/content/7-poleznykh-htaccess-snippetov-dlya-wordpress-i-drupal-bloga</feedburner:origLink></item>
<item>
 <title>Делаем навигационное меню рубрикатор для блога на Drupal</title>
 <link>http://feedproxy.google.com/~r/Cookieslovers/~3/-QuX57ajpgM/delaem-navigatsionnoe-menyu-rubrikator-dlya-bloga-na-drupal</link>
 <description>&lt;p&gt;Расскажу о наиболее простом, на мой взгляд, способе создания &lt;strong&gt;вертикального меню рубрикатора&lt;/strong&gt; для блога на &lt;strong&gt;Drupal&lt;/strong&gt; с отображением количества постов в каждой из категорий (такой рубрикатор можно наблюдать на нашем блоге справа). Вам не понадобится ставить ни одного дополнительного модуля. Метод основан на использовании базового модуля Taxonomy, иначе говоря, на стандартных тегах.&lt;/p&gt;
&lt;p&gt;Заходим в раздел администрирования "Конструкция сайта-&amp;gt;Блоки" ("Site Building-&amp;gt;Blocks"). Там нажимаем на вкладку добавления нового блока. В поле "Описание блока" вводим понятное нам название для отображение в админке, например, "Рубрикатор". Задаем заголовок блока, видимый для пользователей, и вставляем следующий код в текст блока:&lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="php geshifilter-php" style="font-family:monospace;"&gt;&amp;lt;div class=&amp;quot;rubricator&amp;quot;&amp;gt;&lt;br /&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #000088;"&gt;$node_type&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&amp;quot;blog&amp;quot;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #666666; font-style: italic;"&gt;//тип ноды&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #000088;"&gt;$vocabulary_id&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt; &lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #666666; font-style: italic;"&gt;//номер словаря тегов&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #000088;"&gt;$number&lt;/span&gt;&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;10&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; &lt;span style="color: #666666; font-style: italic;"&gt;//количество разделов в рубрикаторе&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #000088;"&gt;$result&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; db_query_range&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;quot;SELECT d.tid, d.name, MAX(n.created) AS updated,&lt;br /&gt;
COUNT(*) AS count FROM {term_data} d INNER JOIN {term_node} USING (tid)&lt;br /&gt;
INNER JOIN {node} n USING (nid) WHERE d.vid = &lt;span style="color: #009933; font-weight: bold;"&gt;%d&lt;/span&gt; AND&lt;br /&gt;
n.status = 1 AND n.type = '&lt;span style="color: #009933; font-weight: bold;"&gt;%s&lt;/span&gt;' GROUP BY d.tid, d.name ORDER BY&lt;br /&gt;
COUNT DESC &amp;quot;&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #000088;"&gt;$vocabulary_id&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #000088;"&gt;$node_type&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #000088;"&gt;$number&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #000088;"&gt;$items&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #990000;"&gt;array&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #b1b100;"&gt;while&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$category&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; db_fetch_object&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$result&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #000088;"&gt;$items&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; l&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000088;"&gt;$category&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;name&lt;/span&gt; &lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;'taxonomy/term/'&lt;/span&gt;&lt;span style="color: #339933;"&gt;.&lt;/span&gt; &lt;span style="color: #000088;"&gt;$category&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;tid&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;' ('&lt;/span&gt;&lt;span style="color: #339933;"&gt;.&lt;/span&gt; &lt;span style="color: #000088;"&gt;$category&lt;/span&gt;&lt;span style="color: #339933;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #004000;"&gt;count&lt;/span&gt; &lt;span style="color: #339933;"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;')'&lt;/span&gt; &lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #990000;"&gt;print&lt;/span&gt; theme&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;'item_list'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #000088;"&gt;$items&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Небольшой комментарий к коду: переменная $node отвечает за тип ноды, для записей блога необходимо оставить ей значение "blog", как в примере. $vocabulary_id - это номер словаря тегов, который будет использован для нашего рубрикатора. Посмотреть этот номер можно в разделе админки "Содержание-&amp;gt;Таксономия" ("Content-&amp;gt;Taxonomy") - наведите мышкой на словарь и в конце ссылке увидете его номер. Если вы не создавали больше одного словаря, то скорее всего его номер "1".&lt;br /&gt;
Ну и переменная $number отвечает за количество разделов в создаваемом меню, в примере, как видим, их 10.&lt;/p&gt;
&lt;p&gt;Далее надо не забыть выставить правильный фильтр в подразделе "Формат ввода", иначе введенный код не будет интерпретироваться Drupal-ом. Нам необходимо указать "PHP Code" фильтр. Если у вас его нет в списке, то следует зайти на страничку модулей и включить стандартный модуль "PHP Filter".&lt;/p&gt;
&lt;p&gt;Теперь жмём "Сохранить блок", указываем его местоположение на странице управления блоками и, собственно, готово. У нас получился блок, отображающий разделы, основанные на ваших тегах, прикрепленных к статьям, и количество постов в этих разделах. Можно применить к нему стили, использовав класс div-а контейнера "rubricator".&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/WEwvFZIW-pqvfbSwumpsUp_E9E0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WEwvFZIW-pqvfbSwumpsUp_E9E0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/WEwvFZIW-pqvfbSwumpsUp_E9E0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WEwvFZIW-pqvfbSwumpsUp_E9E0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.cookieslovers.com/content/delaem-navigatsionnoe-menyu-rubrikator-dlya-bloga-na-drupal#comments</comments>
 <category domain="http://www.cookieslovers.com/category/tags/drupal">Drupal</category>
 <category domain="http://www.cookieslovers.com/category/%D1%82%D1%83%D0%BF%D0%B0%D1%8F-%D1%84%D0%B8%D0%B3%D0%BD%D1%8F/%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5">Программирование</category>
 <category domain="http://www.cookieslovers.com/category/category/razrabotka">Разработка</category>
 <pubDate>Sun, 15 Mar 2009 14:01:14 +0000</pubDate>
 <dc:creator>Z.</dc:creator>
 <guid isPermaLink="false">12 at http://www.cookieslovers.com</guid>
<feedburner:origLink>http://www.cookieslovers.com/content/delaem-navigatsionnoe-menyu-rubrikator-dlya-bloga-na-drupal</feedburner:origLink></item>
<item>
 <title>Видеохостинг: как разместить видео на своём сайте. Часть 1.</title>
 <link>http://feedproxy.google.com/~r/Cookieslovers/~3/KEGunYhdsPc/videokhosting-kak-razmestit-video-na-svoem-saite-chast-1</link>
 <description>&lt;p&gt;Что делать, если возникла необходимость добавить поддержку размещения и просмотра видео на сайте? Существует великое множество способов – и в данной статье я постараюсь наиболее полно рассмотреть популярные сервисы видеохостинга, а заодно порекомендовать некоторые модули для CMS Drupal.&lt;br /&gt;
&lt;img src="http://i44.tinypic.com/nwni43.gif"  alt="videoproviders" /&gt;&lt;br /&gt;
&amp;lt;!--break--&gt;&lt;br /&gt;
В начале пару слов о типичной организации процессов сохранения и воспроизведения &lt;i&gt;видео&lt;/i&gt;. В целях экономии пространства загружаемое пользователем видео конвертируется в один из распространенных форматов для передачи видео по сети. Самым популярным форматом для получения роликов с невысоким качеством картинки и очень небольшим размером выходного файла в настоящий момент является flv (flash video), который использует кодек H.263. В случае, если необходимо получить видео более высокого качества, то ролики конвертируются в какой-либо формат, поддерживающий кодек H.264.&lt;br /&gt;
H.264 обладает большей степенью сжатия и позволяет получить лучшее по сравнению H.263 качество изображения при одинаковом весе выходного файла, но конвертация с его использованием съедает гораздо больше процессорного времени. Для воспроизведения видео на сайте используются flash плееры, поддерживающие соответствующие форматы.&lt;br /&gt;
На этом закруглимся с теорией и приступим к рассмотрению возможных схем.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:16px;"&gt;Схема №1: Минимальное участие&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Проще всего взвалить заботу по загрузке видеороликов на сторонние сервисы, такие как &lt;a href="http://www.youtube.com/"&gt;YouTube&lt;/a&gt;, &lt;a href="http://blip.tv/"&gt;Blip.TV&lt;/a&gt; или &lt;a href="http://revver.com/"&gt;Revver&lt;/a&gt;. Денег платить не надо, пространство на вашем хостинге не задействовано, транслирование контента пользователю вашего сайта происходит через распределенную сеть серверов, принадлежащих &lt;b&gt;видеохостингу&lt;/b&gt;, а это значит, что:&lt;br /&gt;
1) Ваш исходящий трафик не расходуется.&lt;br /&gt;
2) Видеоролики имеют высокую степень доступности пользователям из любой точки мира.&lt;br /&gt;
Но такие ресурсы могут иметь ряд ограничений или запретов, особенно касающихся использования данного сервиса коммерческими сайтами – так что внимательно читайте пользовательские соглашения, прежде чем реализовывать данную схему.&lt;br /&gt;
Выглядит она следующим образом: пользователь загружает ролик на стороннем сервисе и копирует ссылку на него, после чего сохраняет ее на вашем сайте, где она преобразуется при просмотре в соответствующее видео.&lt;br /&gt;
Для проигрывания роликов могу посоветовать модуль &lt;a href="http://drupal.org/project/emfield"&gt;Embedded Media Field&lt;/a&gt;, который в данный момент поддерживает воспроизведение видеороликов с почти двух десятков &lt;b&gt;видеохостингов&lt;/b&gt; и агрегаторов.&lt;br /&gt;
Из минусов данной схемы можно отметить то, что пользователю для загрузки видео придется покинуть ваш сайт, он не сможет выбрать качество конвертации, внешний вид плеера будет статичен или ограничен несколькими вариантами, тоже самое можно сказать про его функциональность. Также опционально поверх ролика может быть наложено лого сервиса, до или после отображена реклама и т.д.&lt;br /&gt;
В общем, вариант из разряда «дешево и сердито», крайне скудный в плане конфигурирования.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:16px;"&gt;Схема №2: Удобное размещение&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;В этом случае пользователи загружает видео на сторонний сервис непосредственно с вашего сайта, при этом ролики обычно размещаются под единственным аккаунтом. Место на хостинге  может использоваться для временного сохранения видео до момента последующего трансфера на выбранный сервис, или не использоваться вовсе.&lt;br /&gt;
В качестве примера – модуль &lt;a href="http://drupal.org/project/video_upload"&gt;Video Upload&lt;/a&gt; для &lt;a href="http://www.youtube.com/"&gt;YouTube&lt;/a&gt;.&lt;br /&gt;
Стоит отметить, что многие сервисы бесплатно предоставляют API под подобные задачи или даже полноценные сайты-заготовки, например в рамках партнерских программ.&lt;br /&gt;
При этом АPI обычно пишется для многих языков программирования, и почти всегда присутствует Javascript API, благодаря чему такую схему можно очень просто воплотить в жизнь. Исходя из личного опыта, могу сказать, что PHP API, предоставляемое &lt;a href="http://rutube.ru/"&gt;Rutube&lt;/a&gt;, с минимальными усилиями по переделке интегрируется с Drupal.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:16px;"&gt;Схема №3: Профессиональные видео-провайдеры&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;А теперь пришло время рассмотреть компании, специализирующиеся на создании любых мыслимых сервисов, так или иначе связанных с видео и интернетом. Такие компании называются видео провайдерами (video provider), и используют собственные сети доставки контента (CDN – content delivery network). Для работы с ними необходимо создать аккаунт, стоимость которого зависит от используемого спектра услуг, объемов загружаемого и транслируемого видео, желаемой функциональности, уровня технической поддержки, объемов работ по внедрению или переходу на данную платформу, необходимому API и пр. Зачастую вместо конкретных цен на сайте видео провайдера можно обнаружить предложение написать письмо или позвонить – в этом случае готовьтесь, что цены на услуги будут начинаться с нескольких сотен долларов в месяц.&lt;br /&gt;
Итак, что же можно получить за порой немаленькую сумму денег?&lt;br /&gt;
1) Изменение внешнего вида флеш плеера под ваш дизайн и функционал, создание виджетов.&lt;br /&gt;
2) Декодирование в любой нужный вам формат, в том числе и «на лету».&lt;br /&gt;
3) Предоставление необходимых инструментов для массовой загрузки видеороликов, отчетности и аналитики.&lt;br /&gt;
4) Создание собственного интернет-телеканала.&lt;br /&gt;
5) Редактирование видеороликов онлайн, микширование.&lt;br /&gt;
6) Загрузка контента пользователей, удобное управление их аккаунтами и правами.&lt;br /&gt;
7) Внедрение рекламы, участие в рекламных сетях.&lt;br /&gt;
И это далеко не полный список, который варьируется от провайдера к провайдеру, среди которых: &lt;a href="http://www.brightcove.com/"&gt;brightcove&lt;/a&gt;, &lt;a href="http://b2b.viddler.com/"&gt;viddler&lt;/a&gt;, &lt;a href="http://www.ooyala.com/"&gt;ooyala&lt;/a&gt;, &lt;a href="http://www.theplatform.com/"&gt;thePlatform&lt;/a&gt;, &lt;a href="http://www.onstreammedia.com/"&gt;Onstream media&lt;/a&gt;, &lt;a href="http://www.magnify.net/"&gt;magnify.net&lt;/a&gt;, &lt;a href="http://www.iplayerhd.com/"&gt;iPlayerHD&lt;/a&gt;, &lt;a href="http://www.fliqz.com/"&gt;fliqz&lt;/a&gt;, &lt;a href="http://corp.kaltura.com/"&gt;Kaltura&lt;/a&gt; (модуль для Drupal - &lt;a href="http://drupal.org/project/kaltura/" title="http://drupal.org/project/kaltura/"&gt;http://drupal.org/project/kaltura/&lt;/a&gt; ).&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:16px;"&gt;Схема №4: Видеохостинг своими руками&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Если после анализа всех требований и просмотра всех доступных вариантов, вы пришли к мысли, что создание собственного видеохостинга с хранением роликов на вашем собственном сервере – это единственный правильный и наиболее выгодный путь для решения поставленной задачи, то вам сюда. В следующей статье я подробно расскажу как организовать &lt;b&gt;видеохостниг&lt;/b&gt; под &lt;b&gt;Drupal&lt;/b&gt; своими силами.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cookieslovers.com/content/videokhosting-kak-razmestit-video-na-svoem-saite-chast-2"&gt;Продолжение: Видеохостинг: как разместить видео на своём сайте. Часть 2.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AYEW5W0wEbtLq5pKHUobp0wso18/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AYEW5W0wEbtLq5pKHUobp0wso18/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AYEW5W0wEbtLq5pKHUobp0wso18/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AYEW5W0wEbtLq5pKHUobp0wso18/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.cookieslovers.com/content/videokhosting-kak-razmestit-video-na-svoem-saite-chast-1#comments</comments>
 <category domain="http://www.cookieslovers.com/category/tags/drupal">Drupal</category>
 <category domain="http://www.cookieslovers.com/category/tags/videokhosting">Видеохостинг</category>
 <category domain="http://www.cookieslovers.com/category/category/instrumentarii">Инструментарий</category>
 <pubDate>Thu, 12 Mar 2009 22:41:33 +0000</pubDate>
 <dc:creator>A.</dc:creator>
 <guid isPermaLink="false">11 at http://www.cookieslovers.com</guid>
<feedburner:origLink>http://www.cookieslovers.com/content/videokhosting-kak-razmestit-video-na-svoem-saite-chast-1</feedburner:origLink></item>
<item>
 <title>HTML письма и российские почтовые сервисы: подводные камни</title>
 <link>http://feedproxy.google.com/~r/Cookieslovers/~3/SDPq8iJbBEc/html-pisma-i-rossiiskie-pochtovye-servisy-podvodnye-kamni</link>
 <description>&lt;p&gt;Чтобы выделиться из общей массы сервисов рассылок, нередко владельцы сайтов решают отказаться от однообразных текстовых E-mail писем в пользу красивых разноцветных HTML версий. Такие письма выглядят эффектно и солидно. Но для их создания необходимы навыки в вёрстке и определенный запас терпения. А всё потому что модель HTML письма несколько отличается от стандартной модели страницы и то, как такое письмо будет выглядить, в значительной степени зависит не только от браузера, но и от используемого &lt;i&gt;почтового сервиса&lt;/i&gt;. &lt;/p&gt;
&lt;p&gt;&lt;img src="http://i41.tinypic.com/2re1vz7.gif" alt="" /&gt;&lt;br /&gt;
&amp;lt;!--break--&gt;&lt;br /&gt;
Во-первых, стоит упомянуть, что для &lt;b&gt;HTML писем&lt;/b&gt; сегодня принято использовать MIME тип "multipart/alternative". Это позволяет включать в E-mail как HTML, так и текстовую версию письма, на случай если пользователь не имеет возможности увидеть вашу вёрстку. Также, как показывает практика, почтовые сервисы предпочитают иметь дело именно с таким типом в случае HTML писем.&lt;/p&gt;
&lt;p&gt;Во-вторых, сразу отметим, что при вёрстке таких писем стоит исключить часть с объявлением body и head - письмо должно состоять только из непосредственно кода отображаемой части. Связано это с тем, что многие почтовики встраивают код письма в код страницы, поэтому наличие двух body или head может привести к конфликту - проще говоря, ваше письмо не отобразится. Правда у этого правила для некоторых почтовиков есть и исключения, об этом ниже.&lt;/p&gt;
&lt;p&gt;Еще один важный момент: к HTML письмам не стоит прикреплять внешний CSS файл - он просто не будет прочтен. Весь CSS код должен быть включен в сам E-mail. Хотя в идеале лучше вообще обойтись без каскадных таблиц стилей, так как, опять же, разные почтовики имеют разный уровень их поддержки.&lt;/p&gt;
&lt;p&gt;Другое неприятное правило - использование div-ов крайне нежелательно, потому что результат их применения для различных почтовых сервисов неадинаков. Чаще div-ы просто игнорируются, поэтому если вам необходимо организовать сложное позиционирование элементов в теле письма, то применяйте таблицы.&lt;/p&gt;
&lt;p&gt;Все изображения, присутствующие в письме, следует разместить на некотором хостинге и в коде добавить на них внешние ссылки. Также неплохо бы добавить ссылку на просмотр HTML письма непосредственно на вашем сайте в виде страницы, чтобы пользователь с любым почтовым ящиком при желании смог увидеть свёрстанные вами красоты.&lt;/p&gt;
&lt;p&gt;Еще один небольшой совет - старайтесь уместить HTML письмо в ширину около 500px, ведь окошко просмотра содержимого E-mail у почтовиков меньше ширины окна, причем иногда сильно меньше.&lt;/p&gt;
&lt;p&gt;Теперь рассмотрим некоторые особенности вёрстки HTML писем под популярные в рунете почтовые сервисы.&lt;/p&gt;
&lt;p&gt;1. &lt;a href="http://mail.ru/"&gt;Mail.ru&lt;/a&gt;&lt;br /&gt;
Сразу скажу, что Mail.ru это IE6 от почтовиков. Пользуются им очень многие при том, что он очень недружелюбен к вёрстке. Не дай вам бог забыть убрать head и body из письма - показывать письмо откажется. CSS практически не поддерживает, более того - навязывает свои стили, которые побороть крайне сложно. Например, он насильно делает отступы от рамки в клетках таблицы (около 20-30 px, разные с каждой стороны). Поэтому если вы организуете хотя бы слегка нетривиальное позиционирование элементов, используя при этом таблицы, то придется учитывать данные отступы. Обычно это выливается в то, что под mail.ru делается отдельная версия письма, учитывающая особенности вёрстки под него.&lt;/p&gt;
&lt;p&gt;2. &lt;a href="http://www.yandex.ru/"&gt;Яндекс.Почта&lt;/a&gt;&lt;br /&gt;
Довольно-таки дружелюбный почтовый сервис, серьёзных проблем обычно не вызывает. Единственное, что неприятно - если не включить в код body и head, то поместит ваше письмо в спам. Странная логика. Посему делаем отдельную версию под этот ящик с body и head.&lt;/p&gt;
&lt;p&gt;3. &lt;a href="http://www.rambler.ru/"&gt;Рамблер Почта&lt;/a&gt;&lt;br /&gt;
По умолчанию не отображает картинки и alt текст для них, поэтому если какой-то текст вшит в них, то стоит приложить текстовую версию письма.&lt;/p&gt;
&lt;p&gt;4. &lt;a href="http://mail.google.com/"&gt;Gmail&lt;/a&gt;&lt;br /&gt;
Самый адекватный почтовый сервис. Практически никаких проблем. По умолчанию изображения также отключены, но alt текст отображается в любом случае.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;HTML письмо&lt;/i&gt; - эффектный метод привлечь внимание к сайту. Главное помнить, что оно не является полноценной веб страницей и имеет ряд вышеперечисленных особенностей при вёрстке. Не забывайте проверять их отображение во всех более менее популярных почтовых сервисах, а также иметь представление о том, как они будут смотреться в почтовых программах типа MS Outlook, Firebird и на корпоративных ящиках.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OtHIW112E_CdRyRFI126BSaCfZk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OtHIW112E_CdRyRFI126BSaCfZk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OtHIW112E_CdRyRFI126BSaCfZk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OtHIW112E_CdRyRFI126BSaCfZk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.cookieslovers.com/content/html-pisma-i-rossiiskie-pochtovye-servisy-podvodnye-kamni#comments</comments>
 <category domain="http://www.cookieslovers.com/category/tupaya-fignya/verstka">Вёрстка</category>
 <category domain="http://www.cookieslovers.com/category/category/razrabotka">Разработка</category>
 <category domain="http://www.cookieslovers.com/category/tupaya-fignya/runet">Рунет</category>
 <pubDate>Sun, 01 Mar 2009 22:13:55 +0000</pubDate>
 <dc:creator>Z.</dc:creator>
 <guid isPermaLink="false">9 at http://www.cookieslovers.com</guid>
<feedburner:origLink>http://www.cookieslovers.com/content/html-pisma-i-rossiiskie-pochtovye-servisy-podvodnye-kamni</feedburner:origLink></item>
</channel>
</rss>

