<?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:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>ЗНАМЯ ЗАНАМИ</title>
	
	<link>http://www.znm.ru</link>
	<description>Официальная многотиражка креативного кооператива</description>
	<pubDate>Thu, 26 Jan 2012 07:01:06 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/zanami" /><feedburner:info uri="zanami" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Очень приятная статистика по браузерам посетителей</title>
		<link>http://feedproxy.google.com/~r/zanami/~3/Myobe0zme3c/ochen-priyatnaya-statistika-po-brauzeram-posetitelej-282</link>
		<comments>http://www.znm.ru/ochen-priyatnaya-statistika-po-brauzeram-posetitelej-282#comments</comments>
		<pubDate>Thu, 26 Jan 2012 07:01:05 +0000</pubDate>
		<dc:creator>scoff</dc:creator>
		
		<category><![CDATA[Журнал]]></category>

		<category><![CDATA[браузер]]></category>

		<category><![CDATA[статистика]]></category>

		<guid isPermaLink="false">http://www.znm.ru/?p=282</guid>
		<description><![CDATA[Сегодня заглянул в статистику одного сайта и посмотрел данные по браузерам посетителей. Очень приятная картина — Internet Explorer отсутствует почти полностью, он на второй странице с общим для всех версий результатом 16 посетителей.

Что не радует — 4 из обладателей IE пользуются версией 6.0. Анафема!
]]></description>
			<content:encoded><![CDATA[<p>Сегодня заглянул в статистику одного сайта и посмотрел данные по браузерам посетителей. Очень приятная картина — Internet Explorer отсутствует почти полностью, он на второй странице с общим для всех версий результатом 16 посетителей.</p>
<p><img src="http://www.znm.ru/wp-content/uploads/2012/01/browsers-stats-no-ir.jpg" alt="Распределение браузеров статистика"  border="0" width="445" height="225" /></p>
<p>Что не радует — 4 из обладателей IE пользуются версией 6.0. Анафема!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.znm.ru/ochen-priyatnaya-statistika-po-brauzeram-posetitelej-282/feed</wfw:commentRss>
		<feedburner:origLink>http://www.znm.ru/ochen-priyatnaya-statistika-po-brauzeram-posetitelej-282</feedburner:origLink></item>
		<item>
		<title>Скрываем ссылку за редиректом — Drupal 7</title>
		<link>http://feedproxy.google.com/~r/zanami/~3/ZK0XCzmMvfg/skryvaem-ssylku-za-redirektom-drupal-7-276</link>
		<comments>http://www.znm.ru/skryvaem-ssylku-za-redirektom-drupal-7-276#comments</comments>
		<pubDate>Thu, 08 Dec 2011 22:50:29 +0000</pubDate>
		<dc:creator>scoff</dc:creator>
		
		<category><![CDATA[Работа]]></category>

		<category><![CDATA[drupal]]></category>

		<guid isPermaLink="false">http://www.znm.ru/?p=276</guid>
		<description><![CDATA[Речь исключительно про Link field, для ссылок из контента существует модуль gotwo. Предпосылки могут быть разные, но задача скрыть ссылку — не такая редка вещь.
Дано: Drupal 7.8, тип содержимого с единственной ссылкой (link field).
Задача: сделать так, чтобы ссылка отображалась в виде /node/*nid*/goto, а при нажатии перекидывала посетителя на адрес, фактически содержащийся в ссылке (link url).
Потребуются: [...]]]></description>
			<content:encoded><![CDATA[<p>Речь исключительно про Link field, для ссылок из контента существует модуль gotwo. Предпосылки могут быть разные, но задача скрыть ссылку — не такая редка вещь.</p>
<p>Дано: Drupal 7.8, тип содержимого с единственной ссылкой (link field).</p>
<p>Задача: сделать так, чтобы ссылка отображалась в виде /node/*nid*/goto, а при нажатии перекидывала посетителя на адрес, фактически содержащийся в ссылке (link url).</p>
<p>Потребуются: модули <a href="http://drupal.org/project/redirect">redirect</a>, <a href="http://drupal.org/project/custom_formatters">custom formatters</a>, <a href="http://drupal.org/project/rules">rules</a>.</p>
<p>Custom Formatters можно заменить на шаблон поля. Для примера field&#8211;field-url.tpl.php</p>
<pre><code>&lt;?php foreach ($items as $delta => $item) : ?&#038;gt
&lt;a rel="nofollow"
     title="&lt;?php print $element['#object']->field_url['und'][0]['title']; ?&gt;"
     href="/node/&lt;?php print $element['#object']->nid;?>/goto"&gt;LINK TEXT&lt;/a&gt;
&lt;?php endforeach; ?&gt;
</code></pre>
<p>Текст ссылки можно заменить на любое значение из $element['#object'], это все данные по текущему документу (node).<br />
Custom formatter слегка удобнее использовать и оперативно редактировать. У меня получился такой код для link_field:</p>
<pre><code>
// Custom formatter for a link_field.
$node = $variables['#object'];
foreach (element_children($variables['#items']) as $delta) {
  $item = $variables['#items'][$delta];

  $source = "Перейти по ссылке";
  $destination = 'node/'.$node->nid.'/goto';

  return l($source, $destination, array('html' => false, 'attributes'=>array('rel'=>'nofollow', 'title'=>'Перейти в по ссылке '.$node->title, 'class'=>array('my-link-field'))));
}
</code></pre>
<p>Затем для нужного view mode меняем вывод нужной ссылки (Структура — Типы материалов — ВашТип — Управление отображением). Все, ссылку заготовили, но она пока ведет в никуда. Точнее, на ту же страницу, что и /node/*nid*, как любая ссылка на /node/*nid*/whatever.</p>
<p>Правило (Rule) настраиваем на событие &#8220;После редактирования существующего документа&#8221; и &#8220;После сохранения нового документа&#8221;, чтобы не пропустить возможные изменения ссылки. Отфильтровываем условиями тип материала, если необходимо. Действие будет типа PHP code (модуль PHP нужно заранее включить). Код примерно такой, взят почти полностью из тестов, идущих с модулем Redirect.</p>
<pre><code>
$redirect_defaults = array(
          'uid' => $node->uid,
          'status_code' => 302,
        );
    $redirect_path = $node->field_url['und'][0]['url']; // real URL to redirect to
    $source_path = 'node/'.$node->nid.'/goto'; // fake url (tweak to your link field custom formatter)
    redirect_delete_by_path($source_path); // delete existing redirects to avoid PDO errors
    $source_parsed = redirect_parse_url($source_path);
    $redirect['source'] = $source_parsed['url'];
    if (isset($source_parsed['query'])) {
      $redirect['source_options']['query'] = $source_parsed['query'];
    }

    $redirect_parsed = redirect_parse_url($redirect_path);
    $redirect['redirect'] = $redirect_parsed['url'];
    if (isset($redirect_parsed['query'])) {
      $redirect['redirect_options']['query'] = $redirect_parsed['query'];
    }
    if (isset($redirect_parsed['fragment'])) {
      $redirect['redirect_options']['fragment'] = $redirect_parsed['fragment'];
    }

    $redirect = (object) $redirect;
    redirect_object_prepare($redirect, $redirect_defaults);
    redirect_save($redirect);

</code></pre>
<p>Теперь после создания или изменения документа будет выполняться правило, которое создает перенаправление с локального адреса /node/NNN/goto на адрес, указанный в поле field_url документа с идентификатором NNN.</p>
<p>Если контент уже был, то нужно «передернуть» все материалы нужного типа — сфабриковать событие, по которому сработает правило. Я для этого использовал views bulk operations (VBO).</p>
<p>Вероятно, не самый простой и изящный способ, но вполне прозрачный и рабочий, по-моему.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.znm.ru/skryvaem-ssylku-za-redirektom-drupal-7-276/feed</wfw:commentRss>
		<feedburner:origLink>http://www.znm.ru/skryvaem-ssylku-za-redirektom-drupal-7-276</feedburner:origLink></item>
		<item>
		<title>Памятка: Plesk, Nginx, Apache</title>
		<link>http://feedproxy.google.com/~r/zanami/~3/4lvrgrrdSwA/pamyatka-plesk-nginx-apache-270</link>
		<comments>http://www.znm.ru/pamyatka-plesk-nginx-apache-270#comments</comments>
		<pubDate>Tue, 08 Nov 2011 07:41:02 +0000</pubDate>
		<dc:creator>scoff</dc:creator>
		
		<category><![CDATA[Работа]]></category>

		<category><![CDATA[plesk]]></category>

		<category><![CDATA[хостинг]]></category>

		<guid isPermaLink="false">http://www.znm.ru/?p=270</guid>
		<description><![CDATA[Надо собрать все вместе, а то на память надежды нет. Собрано в кучу из нескольких источников.
Дано: CentOS 5 (64bit), Plesk 10.3, Apache 2.
Нужный результат: Nginx отсылает статику, Apache все остальное (php в основном).
1. Установка nginx на CentOS 5 (без фанатизма).

# rpm -ihv http://centos.alt.ru/repository/centos/5/x86_64/centalt-release-5-3.noarch.rpm
# yum install nginx
# chkconfig –level 35 nginx on

Меняем порт Apache по инструкции [...]]]></description>
			<content:encoded><![CDATA[<p>Надо собрать все вместе, а то на память надежды нет. Собрано в кучу из нескольких источников.</p>
<p>Дано: CentOS 5 (64bit), Plesk 10.3, Apache 2.</p>
<p>Нужный результат: Nginx отсылает статику, Apache все остальное (php в основном).</p>
<p><strong>1. Установка nginx на CentOS 5 (без фанатизма).</strong></p>
<pre><code>
# rpm -ihv http://centos.alt.ru/repository/centos/5/x86_64/centalt-release-5-3.noarch.rpm
# yum install nginx
# chkconfig –level 35 nginx on
</code></pre>
<p><strong>Меняем порт Apache по <a href="http://kb.parallels.com/11232">инструкции</a> Parallels (Plesk 10.2, на 10.3 сработало)</strong></p>
<pre><code>
# mysql -uadmin -p`cat /etc/psa/.psa.shadow` -D psa -e'replace into misc (param, val) values ("http_port", 8080)'
# mysql -uadmin -p`cat /etc/psa/.psa.shadow` -D psa -e'replace into misc (param, val) values ("https_port", 8080)'</code></pre>
<p>Здесь 8080 — новый порт. Аналогичный указываем в /etc/httpd/conf/httpd.conf (Listen 80 &rarr; Listen 8080).<br />
Ахтунг! В документации Plesk 10 есть тема про правку шаблона /usr/local/psa/admin/conf/templates/default/domain/domainVirtualHost.php и замену $VAR->server->webserver->httpPort на нужный порт — делать это не надо и очень вредно, Apache ругается: VirtualHost x.x.x.x:8080 overlaps with VirtualHost x.x.x.x:8080, the first has precedence, perhaps you need a NameVirtualHost directive).</p>
<pre><code>
# mysql -uadmin -p`cat /etc/psa/.psa.shadow` -D psa -e'replace into misc (param, val) values ("http_port", 8080)'
# mysql -uadmin -p`cat /etc/psa/.psa.shadow` -D psa -e'replace into misc (param, val) values ("https_port", 8080)'
# /usr/local/psa/admin/bin/httpdmng --reconfigure-all
</code></pre>
<p>У более ранних версий Plesk (до 9.5) была отдельная команда на этот случай (websrvmng –set-http-port –port=8080).</p>
<p>Дальше берем в <a href="http://www.grafxsoftware.com/faq.php/HOW-TO-configure-PLESK-with-NGinx-proxy-reverse/1/1/">этом малость устаревшем руководстве</a> нужные файлы (<a href="http://www.grafxsoftware.com/download/nginx/nginx_setup.zip">тыц</a>) и распаковываем куда-нибудь в рабочую папку. Копируем nginx.conf &rarr; /etc/nginx/nginx.conf и proxy.conf &rarr; /etc/nginx/proxy.conf — они подхачены для использования с Plesk.</p>
<p><strong>UPDATE: По ссылке выше файлы не актуальны для Plesk 10 — там жестко зашито расположение корневых папок (document root) для доменов и поддоменов.</strong> В новом Плеске их можно произвольно переносить или переименовывать через панель управления, а сами данные хранятся в базе. <strong>Здесь <a href="/wp-content/uploads/2011/11/nginx_plesk10_conf.tgz">исправленная версия generate_nginx_conf.sh</a> для Plesk 10 и сопутствующие шаблоны</strong>, в которых тоже есть изменения. Не проверял и пока не менял ничего в настройке списков рассылки, webmail и sitebuilder.</p>
<p>Запускаем sh generate_nginx_conf.sh — скрипт выбирает из базы все домены и поддомены и создает в каждой папке /var/www/vhosts/*/conf/nginx.conf. Если порт для Апача выбран не 8080, то предварительно нужно поправить шаблоны template_dom.conf, template_subdom.conf (там порт жестко зашит).</p>
<p>Порт, на котором работает Apache (8080 или другой) нужно открыть в iptables. Делать это пришлось через панель управления,  команда (iptables -A INPUT -p tcp &#8211;dport 8080 -j ACCEPT) не лечит. </p>
<p>Готово, вроде, перезапускаем httpd и nginx.</p>
<p>Проблемы по ходу дела — не запускался nginx, пришлось увеличивать server_names_hash_max_size 1024 (было 512) и    server_names_hash_bucket_size 128 (было 64). Это /etc/nginx/nginx.conf.</p>
<p>TODO: После добавления домена в Plesk нужно создать конфиг для nginx. Скрипт generate_nginx_conf.sh каждый раз перезаписывает настройки виртуального хоста (/var/www/vhosts/*/nginx.conf) из шаблонов заново (нужно оставлять измененные).</p>
<hr />
<p><strong>UPDATE</strong>: Повесил скрипт создания/обновления nginx.conf на <a href="http://download1.parallels.com/Plesk/PP10/10.3.0/Doc/en-US/online/plesk-administrator-guide/index.htm?fileName=59205.htm">события в Plesk</a>: Website created/updated/deleted (аналогично для Subdomain и Domain alias). Теперь конфигурация для nginx создается/обновляется автоматически.</p>
<p>Осталось одно желание — иметь возможность настраивать конфигурацию для каждого сайта отдельно. Сейчас все конфиги переписываются из шаблона и похожи как однояйцевые близнецы. Можно встроить проверку существования файла и не трогать его (только создавать новые), но это плохой выход, поскольку все поддомены/синонимы настраиваются в одном файле — после добавления алиаса или поддомена надо будет руками править nginx.conf.</p>
<p>Делать подключение еще одного файла на каждый домен/поддомен тоже бессмысленно — nginx не принимает переопределение, то есть 2 одинаковых директивы (location /, например) в «главном» и «подключаемом» конфигах сделать не получится, а без этого затея теряет смысл. Надо какой-то ум применить, пока не придумал ничего.</p>
<hr />
<strong>Реверансы</strong></p>
<p>http://wiki.mediatemple.net/w/%28dv%29:Configure_nginx_as_reverse_proxy_web_server</p>
<p>http://www.grafxsoftware.com/faq.php/HOW-TO-configure-PLESK-with-NGinx-proxy-reverse/1/1/</p>
<p>http://kb.parallels.com/11232</p>
<p>http://www.x83.net/plesk-10-nginx-reverse-proxy-configuration-in-front-of-apache/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.znm.ru/pamyatka-plesk-nginx-apache-270/feed</wfw:commentRss>
		<feedburner:origLink>http://www.znm.ru/pamyatka-plesk-nginx-apache-270</feedburner:origLink></item>
		<item>
		<title>Посмотрел Adobe Muse beta3</title>
		<link>http://feedproxy.google.com/~r/zanami/~3/7W5TqGz7jsU/posmotrel-adobe-muse-beta3-268</link>
		<comments>http://www.znm.ru/posmotrel-adobe-muse-beta3-268#comments</comments>
		<pubDate>Tue, 27 Sep 2011 03:10:40 +0000</pubDate>
		<dc:creator>scoff</dc:creator>
		
		<category><![CDATA[Журнал]]></category>

		<category><![CDATA[muse]]></category>

		<category><![CDATA[дизайн]]></category>

		<guid isPermaLink="false">http://www.znm.ru/?p=268</guid>
		<description><![CDATA[Случайно скачал Adobe Muse beta3. Muse — кодовое название инструмента для создания сайтов людьми. далекими от кода HTML, не говоря уж об более серьезных вещах. Работает это все на технологии Adome Air, то есть кроссплатформенность в Mu присутствует.

Работа начинается с создания нового сайта и назначения общих свойств. Ширина страницы (контентной части) задается в точках, без [...]]]></description>
			<content:encoded><![CDATA[<p>Случайно скачал Adobe Muse beta3. Muse — кодовое название инструмента для создания сайтов людьми. далекими от кода HTML, не говоря уж об более серьезных вещах. Работает это все на технологии Adome Air, то есть кроссплатформенность в Mu присутствует.</p>
<p><img src="http://www.znm.ru/wp-content/uploads/2011/09/new-site.jpg" alt="Muse: Новый Сайт" border="0" width="600" height="436" /></p>
<p>Работа начинается с создания нового сайта и назначения общих свойств. Ширина страницы (контентной части) задается в точках, без вариантов.</p>
<p><img src="http://www.znm.ru/wp-content/uploads/2011/09/muse-plan.jpg" alt="Muse Plan" title="Muse-Plan.jpg" border="0" width="500" height="429" /></p>
<p>Структура сата (закладка Plan) представлена в виде многоуровневого «дерева», страницы добавляются слева-справа (братья и сестры) и снизу (отпрыски, то есть дети). Сначала будет полезно отредактировать стартовые шаблоны — вставить логотип, навигацию и прочие общие для всех страниц элементы.</p>
<p><img src="http://www.znm.ru/wp-content/uploads/2011/09/muse-design.jpg" alt="Muse Design" title="Muse-Design.jpg" border="0" width="500" height="302" /></p>
<p>Design — режим редактирования шаблонов и самих страниц. Полнейший WYSIWYG, все свойства объектов управляются выбором значений, пунктов, галочек, величин. Muse знает стандартный набор современных фишечек — скругленные углы, всплывающие  состояния (rollover, mousedown etc.), модные градиенты и содержит набор готовых к использованию виджетов — галерея, слайдшоу, вкладки, динамически меняющиеся блоки с текстом и т.п.</p>
<p>С Preview все понятно — тут можно оценить свое творение с точки зрения браузера. Работает? Нормально выглядит? Едем дальше, к публикации.</p>
<p>Автоматически можно опубликовать <a href="http://testingsol.businesscatalyst.com/">получившийся сайт</a> на хостинг Busyness Catalyst, пока так. Ничего хорошего о нем сказать не могу — по-моему дорого и глупо (от $19 в месяц). Гораздо разумнее экспортировать сайт в виде набора HTML файлов.</p>
<p><img src="http://www.znm.ru/wp-content/uploads/2011/09/museexport.jpg" alt="MuseExport" title="MuseExport.jpg" border="0" width="500" height="438" /></p>
<p>Файлы документов с русскими названиями Muse называет по-русски, равно как и соответствующие им css. В итоге в коде встречаются такие неудобочитаемые вещи: css/%d0%bd%d0%be%d0%b2%d0%be%d1%81%d1%82%d0%b8.css. Ну по идее никто из пользователей Muse кодом интересоваться не должен. Использование jQuery и «плужков» к нему тоже должно остаться незаметным.</p>
<p>Вердикт: отличный вариант для небольших организаций, для создания маленьких и простых сайтов. Эдакий Frontpage 21 века.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.znm.ru/posmotrel-adobe-muse-beta3-268/feed</wfw:commentRss>
		<feedburner:origLink>http://www.znm.ru/posmotrel-adobe-muse-beta3-268</feedburner:origLink></item>
		<item>
		<title>Drupal Commerce Shipping — самовывоз</title>
		<link>http://feedproxy.google.com/~r/zanami/~3/Gp83SQm-q8M/drupal-commerce-shipping-samovyvoz-262</link>
		<comments>http://www.znm.ru/drupal-commerce-shipping-samovyvoz-262#comments</comments>
		<pubDate>Wed, 21 Sep 2011 13:49:05 +0000</pubDate>
		<dc:creator>scoff</dc:creator>
		
		<category><![CDATA[Журнал]]></category>

		<category><![CDATA[drupal]]></category>

		<category><![CDATA[ecommerce]]></category>

		<guid isPermaLink="false">http://www.znm.ru/?p=262</guid>
		<description><![CDATA[За последние 3-4 недели успел поставить Drupal 7 и Drupal Commerce, поковырять его, отложить в сторону, поставить Ubercart 2 в лице адской сборки Openstore, поковыряться… и снова вернуться к Drupal Commerce. Возможно, это не последняя итерация.
Если коротко — Ubercart хорош для задач, которые он выполняет &#8220;из коробки&#8221;. Если эта коробка называется Openstore, то многим больше [...]]]></description>
			<content:encoded><![CDATA[<p>За последние 3-4 недели успел поставить Drupal 7 и <a href="http://www.drupalcommerce.org/">Drupal Commerce</a>, поковырять его, отложить в сторону, поставить Ubercart 2 в лице адской сборки <a href="http://openstore.org.ua/">Openstore</a>, поковыряться… и снова вернуться к Drupal Commerce. Возможно, это не последняя итерация.</p>
<p>Если коротко — Ubercart хорош для задач, которые он выполняет &#8220;из коробки&#8221;. Если эта коробка называется Openstore, то многим больше ничего не потребуется. Я с неделю занимался обратным процессом — выбрасывал из сборки ненужные мне модули. Закончилось тем, что оставшееся не выглядело сколько-нибудь лучше Drupal Commerce (для моей задачи).</p>
<p>Drupal Commerce — гол, как сокол. Я устанавливал сборку (профиль) Commerce Kickstart. Доставки нет, нужен отдельный модуль. Почти для всего нужен отдельный модуль, которого или вообще не существует, или он находится на dev, alpha, beta стадиях (вялой) разработки.</p>
<p>Ладно, перестаю ныть, начинаю <del>похваляться</del> делиться информацией. Задача была простая — добавить в Drupal Commerce два способа доставки — курьером (за фиксированную сумму) и &#8220;самовывоз&#8221;, который никакая не доставка, но выбор такой клиенту дать нужно. Пока пытаюсь сделать все правильно, используя модуль <a href="http://drupal.org/project/commerce_shipping">Commerce Shipping</a>. Половину дела сделал легко — курьерскую доставку можно реализовать на основе модуля Flat Rate, простого и понятного — фиксированная цена доставки. Дальше начались трудности.</p>
<p>Модуль Commerce Shipping добавляет новый профиль (user profile) для пользователя и соответствующую панель (pane) на страницу расчета (checkout). Процедура оформления покупки в Drupal Commerce многостраничная, панели можно передвигать между страницами произвольно. По-умолчанию панель с адресом доставки (shipping profile) помещается на самую первую страницу. Для многих это логично — от адреса доставки могут зависеть доступные способы доставки или способы оплаты. У меня ситуация обратная — город известен заранее, стоимость доставки тоже. Остается реализовать &#8220;самовывоз&#8221;, то есть отключить панель адреса доставки (shipping profile) в случае выбора соответствующего способа доставки.</p>
<p>1. Помещаем панель shipping на первой странице (checkout), панель shipping profile переносим на вторую (review). Так мы принуждаем клиента выбрать способ доставки и меешм шанс не спрашивать адрес в случае самовывоза.</p>
<p>2. Создаем новый модуль (это за пределами заметки) и добавляем в него свой хук для переопределения панелей модуля commerce checkout.</p>
<p><code>
<pre>
/*
 * Hook hook_commerce_checkout_pane_info_alter($checkout_pane)
 */
function mymodule_commerce_checkout_pane_info_alter(&#038;$checkout_pane) {
	global $user;
	// $checkout_pane на самом деле содержит массив из всех панелей...
	foreach($checkout_pane as $pane_name => &#038;$pane_data) {
		// …нам нужна только она из них — панель с профилем доствки
		if($pane_name == 'customer_profile_shipping' &#038;&#038; $pane_data['enabled']) {
			// загружаем текущий заказ
		    $order = commerce_cart_order_load($user->uid);
		    // $order->data был найден с помощью dsm()
		    // в нем не было ничего за исключением 'shipping_method' со строкой
		    // rules_pick_up это ID склонированного способа доставки flat rate
			if($order->data['shipping_method'] == 'flat_rate|rules_pick_up') {
				// панель была изначально включена в админке, отключаем ее
				$pane_data['enabled'] = 0;
			}
		}
	}
}
</pre>
<p></code></p>
<p>В итоге получается то, что задумывалось — если на первом этапе оформления выбран некий способ доставки (самовывоз), то на на следующем у клиента не попросят ввести адрес доставки.</p>
<p>У меня нет никакой уверенности, что это правильный и эффективный способ выполнить задуманное. Глядя на Drupal Commerce вообще, я был уверен, что найду способ сделать подобное с помощью Правил (Rules), но готовых &#8220;действий&#8221; не нашлось (панели не контролируются правилами), а приделать такое сбоку мне оказалось не по силам.</p>
<p>Если кто-то знает более изящные способы справиться с задачей — намекните. Проблема с Commerce в том и состоит, что документации не очень много, примеры в основном примитивные, знающие люди неохотно делятся информацией (заняты они), а основной шум создают недоучки, вроде меня.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.znm.ru/drupal-commerce-shipping-samovyvoz-262/feed</wfw:commentRss>
		<feedburner:origLink>http://www.znm.ru/drupal-commerce-shipping-samovyvoz-262</feedburner:origLink></item>
		<item>
		<title>Уязвимость timthumb.php</title>
		<link>http://feedproxy.google.com/~r/zanami/~3/fYm-JN2Bpz8/uyazvimost-timthumbphp-260</link>
		<comments>http://www.znm.ru/uyazvimost-timthumbphp-260#comments</comments>
		<pubDate>Thu, 04 Aug 2011 08:55:23 +0000</pubDate>
		<dc:creator>scoff</dc:creator>
		
		<category><![CDATA[Журнал]]></category>

		<category><![CDATA[wordpress]]></category>

		<category><![CDATA[безопасность]]></category>

		<guid isPermaLink="false">http://www.znm.ru/?p=260</guid>
		<description><![CDATA[Проверьте свои Wordpress блоги — в платных и бесплатных темах оформления часто используется скрипт для генерации картинок timthumb.php, в котором обнаружили уязвимость — злоумышленник может загрузить на сайт с дырявым скриптом все, что ему заблагорассудится.
Измененный timthumb.php можно скачать тут.
Можно ничего не скачивать, просто открыть файл и удалить переменную $allowedSites. Разумеется, если вы не пользуетесь удаленной [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Проверьте свои Wordpress блоги — в платных и бесплатных темах оформления часто используется скрипт для генерации картинок timthumb.php, в котором обнаружили уязвимость — злоумышленник может загрузить на сайт с дырявым скриптом все, что ему заблагорассудится.</strong></p>
<p>Измененный <a href="http://timthumb.googlecode.com/svn/trunk/timthumb.php">timthumb.php можно скачать тут</a>.</p>
<p>Можно ничего не скачивать, просто открыть файл и удалить переменную $allowedSites. Разумеется, если вы не пользуетесь удаленной загрузкой, в которой вся проблема и кроется.</p>
<p>Суть «дырки» в том, что скрипт позволяет скачивать файлы с удаленных серверов, белый список настраивается в параметрах, но проверяется по ходу выполнения неверно — если разрешено загружать картинки с flickr.com, то и webshell с какого-нибудь flickr.com.hackersplace.com тоже можно загрузить.</p>
<p>Подробно об уязвимости timthumb.php <a href="http://markmaunder.com/2011/zero-day-vulnerability-in-many-wordpress-themes/">пишет в своем блоге Mark Maunder</a> фром хиз харт ин инглиш.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.znm.ru/uyazvimost-timthumbphp-260/feed</wfw:commentRss>
		<feedburner:origLink>http://www.znm.ru/uyazvimost-timthumbphp-260</feedburner:origLink></item>
		<item>
		<title>HTML5 темы для Wordpress</title>
		<link>http://feedproxy.google.com/~r/zanami/~3/qkCtgEQCQ-o/html5-temy-dlya-wordpress-256</link>
		<comments>http://www.znm.ru/html5-temy-dlya-wordpress-256#comments</comments>
		<pubDate>Fri, 08 Jul 2011 05:46:45 +0000</pubDate>
		<dc:creator>scoff</dc:creator>
		
		<category><![CDATA[Ссылки]]></category>

		<category><![CDATA[html5]]></category>

		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.znm.ru/?p=256</guid>
		<description><![CDATA[Просмотрел подборку «адптивных» тем для Wordpress, которые пытаются хорошо выглядеть на экране компьютера и на мобильных устройствах, типа iPhone / iPad и на их жалких копиях 
Буду позже разбираться предметно, пока просто списочек на память:
Lab.SixtyFive
http://www.labsixtyfive.com/responsive-web/
Blaskan
http://blaskan.net/demo/
Thematic 320 And Up
http://www.ejhansel.com/thematic320andup/sample-page/
Ari
http://ari.elmastudio.de/
Scherzo
http://leonpaternoster.com/scherzo/
Constellation
http://constellationtheme.com/demo/
Yoko
http://yoko.elmastudio.de/
Все темы простые и бесплатные, для Wordpress 3.x, большинство появились в этом году. Ссылки ведут на странички с [...]]]></description>
			<content:encoded><![CDATA[<p>Просмотрел подборку «адптивных» тем для Wordpress, которые пытаются хорошо выглядеть на экране компьютера и на мобильных устройствах, типа iPhone / iPad и на их жалких копиях <img src='http://www.znm.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Буду позже разбираться предметно, пока просто списочек на память:</p>
<p><strong>Lab.SixtyFive</strong><br />
<a href="http://www.labsixtyfive.com/responsive-web/">http://www.labsixtyfive.com/responsive-web/</a><br />
<strong>Blaskan</strong><br />
http://blaskan.net/demo/</p>
<p><strong>Thematic 320 And Up</strong><br />
<a href="http://www.ejhansel.com/thematic320andup/sample-page/">http://www.ejhansel.com/thematic320andup/sample-page/</a></p>
<p><strong>Ari</strong><br />
<a href="http://ari.elmastudio.de/">http://ari.elmastudio.de/</a></p>
<p><strong>Scherzo</strong><br />
<a href="http://leonpaternoster.com/scherzo/">http://leonpaternoster.com/scherzo/</a></p>
<p><strong>Constellation</strong><br />
<a href="http://constellationtheme.com/demo/">http://constellationtheme.com/demo/</a></p>
<p><strong>Yoko</strong><br />
<a href="http://yoko.elmastudio.de/">http://yoko.elmastudio.de/</a></p>
<p>Все темы простые и бесплатные, для Wordpress 3.x, большинство появились в этом году. Ссылки ведут на странички с демо-сайтами.</p>
<p>Есть еще такая тема, тоже HTML5 — <a href="http://themble.com/bones/">Bones</a>, но там смотреть нечего — это тема исключительно для разработчиков.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.znm.ru/html5-temy-dlya-wordpress-256/feed</wfw:commentRss>
		<feedburner:origLink>http://www.znm.ru/html5-temy-dlya-wordpress-256</feedburner:origLink></item>
		<item>
		<title>Пробуем Google+</title>
		<link>http://feedproxy.google.com/~r/zanami/~3/MFy3ECF-B_o/probuem-google-254</link>
		<comments>http://www.znm.ru/probuem-google-254#comments</comments>
		<pubDate>Fri, 08 Jul 2011 02:24:45 +0000</pubDate>
		<dc:creator>scoff</dc:creator>
		
		<category><![CDATA[Статьи]]></category>

		<category><![CDATA[facebook]]></category>

		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://www.znm.ru/?p=254</guid>
		<description><![CDATA[Пошла движуха — кто-то прислал комраду S3N инвайт в Google+, который тут же вирусно размножился на еще пачку приглашений, так что френдов в Плюсе уже немало.
Беглый осмотр показал, что Google+ отличается от Facebook, но не все отличия можно записать в преимущества.
Круги. Их несколько изначально и можно создавать свои. Это удобнее Групп в ФБ,  а [...]]]></description>
			<content:encoded><![CDATA[<p>Пошла движуха — кто-то прислал комраду S3N инвайт в Google+, который тут же вирусно размножился на еще пачку приглашений, так что френдов в Плюсе уже немало.</p>
<p>Беглый осмотр показал, что Google+ отличается от Facebook, но не все отличия можно записать в преимущества.</p>
<p>Круги. Их несколько изначально и можно создавать свои. Это удобнее Групп в ФБ,  а сам интерфейс выглядит несоразмерно красивее.</p>
<p><img src="http://www.znm.ru/wp-content/uploads/2011/07/google-plus.jpg" alt="Google plus"  border="0" width="500" height="214" /></p>
<p>Просто перетаскиваете мордашки друзей и знакомых в нужный круг. Группы изолированы друг от друга, то есть можно написать что-то для одного круга, для нескольких, для всех своих кругов или для расширенных кругов (друзей своих друзей). Можно, понятно, вообще не ограничивать доступ — пусть читают все.</p>
<p>Google+ ненавязчиво предложил добавить в круги людей, которых нашел в адресной книге Gmail — в итоге у меня за 5 минут «френдов» образовалось больше, чем в ФБ за год.</p>
<p>На «стене» можно оставлять тексты, ссылки, адреса, фото и видео. Больше пока ничего не нашел — опросов нет, приложений нет. В настройках — только уведомления о различных действиях, по-умолчанию все включено и приходит на электронную почту.</p>
<p>В рамки социальной сети включили фотоальбомы Picasa, скромно переименовав ее в Фотографии. Фотка профиля загрузилась в Пикасу (у меня там был аккаунт), где создался новый альбом Фотографии профиля.</p>
<p>Как я уже упоминал — в социальной сети Google+ пока нет никаких приложений, тем более сторонних. Также отсутствует аналог Фейсбучных Страниц (Fanpages), а я как раз только вчера разбирался как импортировать в эти страницы контент с блога по RSS.</p>
<p>Покак как-то так. Google потихоньку подгребает под себя разные составляющие интернет-активности граждан и бизнеса: поиск, реклама, видео, фото, теперь вот социальная сеть. Что любопытно, Google+ изначально «говорит» по-русски, причем существенно лучше корявого ФБ.</p>
<p>Facebook в ответ представил (совместно со Skype) свои видео-звонки. Я <a href="http://tagmac.ru/mac-os-x/facebook-video-chat-2240">пробовал</a>, довольно удобно, но это не определяющий сервис, да и в Гугле он тоже есть.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.znm.ru/probuem-google-254/feed</wfw:commentRss>
		<feedburner:origLink>http://www.znm.ru/probuem-google-254</feedburner:origLink></item>
		<item>
		<title>Познакомьтесь с Google AdWords</title>
		<link>http://feedproxy.google.com/~r/zanami/~3/y9dgo_BG8Z4/poznakomtes-s-google-adwords-251</link>
		<comments>http://www.znm.ru/poznakomtes-s-google-adwords-251#comments</comments>
		<pubDate>Tue, 31 May 2011 06:00:26 +0000</pubDate>
		<dc:creator>scoff</dc:creator>
		
		<category><![CDATA[Журнал]]></category>

		<category><![CDATA[AdWords]]></category>

		<category><![CDATA[реклама]]></category>

		<guid isPermaLink="false">http://www.znm.ru/?p=251</guid>
		<description><![CDATA[Google снова прислал почту — настоящую, бумажную. На этот раз в конверте обнаружился буклетик с рекламой AdWords и купон на 1400 рублей, который можно активировать только новым пользователям. Плодить аккаунты смысла нет, поэтому забирайте.
DYGS-DJ7F-D66E-2BVT-6U2

Маленький подвох — при регистрации надо будет уплатить 400 рублей, это минимальный платеж. Еще один нюанс — купон надо активировать до 16 [...]]]></description>
			<content:encoded><![CDATA[<p>Google снова прислал почту — настоящую, бумажную. На этот раз в конверте обнаружился буклетик с рекламой <a rel="nofollow" href="http://google.ru/adwords">AdWords</a> и купон на 1400 рублей, который можно активировать только новым пользователям. Плодить аккаунты смысла нет, поэтому забирайте.</p>
<p>DYGS-DJ7F-D66E-2BVT-6U2</p>
<p><img src="http://www.znm.ru/wp-content/uploads/2011/05/adwords-1400plus.jpg" alt="Adwords купон 1400 рублей DYGS-DJ7F-D66E-2BVT-6U2" title="DYGS-DJ7F-D66E-2BVT-6U2" border="0" width="500" height="360" /></p>
<p>Маленький подвох — при регистрации надо будет уплатить 400 рублей, это минимальный платеж. Еще один нюанс — купон надо активировать до 16 июня 2011.</p>
<p>Вообще-то я считаю эту «щедрость» Google свинством. «Корпорация добра» регулярно раздает эти купоны по поводу и без — недавно мне прислали кодик с трогательным сопроводительным письмом в стиле «вернись, мы скучаем» (я долго не пользовался их услугами). Подозреваю, таких подарков было разослано много, то есть в конкуренцию за позиции в рекламном блоке включилось немало людей (и сайтов), которые тратят не свои деньги. Делается это за счет ставок — чем дороже, тем выше, так что «нормальным» рекламодателям приходится уравнивать и повышать, но уже за свой счет. Google в выигрыше, растут ставки и выручка, следовательно — свинство.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.znm.ru/poznakomtes-s-google-adwords-251/feed</wfw:commentRss>
		<feedburner:origLink>http://www.znm.ru/poznakomtes-s-google-adwords-251</feedburner:origLink></item>
		<item>
		<title>Parallels продолжает извиваться (и издеваться)</title>
		<link>http://feedproxy.google.com/~r/zanami/~3/8SwbgvU5JRw/parallels-prodolzhaet-izvivatsya-i-izdevatsya-248</link>
		<comments>http://www.znm.ru/parallels-prodolzhaet-izvivatsya-i-izdevatsya-248#comments</comments>
		<pubDate>Wed, 25 May 2011 03:28:39 +0000</pubDate>
		<dc:creator>scoff</dc:creator>
		
		<category><![CDATA[Журнал]]></category>

		<category><![CDATA[plesk]]></category>

		<category><![CDATA[хостинг]]></category>

		<guid isPermaLink="false">http://www.znm.ru/?p=248</guid>
		<description><![CDATA[Мои страдания с Parallels Plesk потихоньку продолжаются. Я уже тихо смеюсь, несколько истерически, впрочем.
Для начала снова про биллинг (простите, Customer and Business Manager — так звучит солиднее). Люди из Parallels путаются в показаниях, что-то постоянно выдумывают и меняют.
Напоминаю, нынешний CBM (бывший Billing &#038; Modernbill) появился в качестве бесплатного дополнения к панели Plesk 10. В установщике [...]]]></description>
			<content:encoded><![CDATA[<p>Мои <a href="http://www.znm.ru/plesk-10-eto-ad-241">страдания с Parallels Plesk</a> потихоньку продолжаются. Я уже тихо смеюсь, несколько истерически, впрочем.</p>
<p>Для начала снова про биллинг (простите, Customer and Business Manager — так звучит солиднее). Люди из Parallels путаются в показаниях, что-то постоянно выдумывают и меняют.</p>
<p>Напоминаю, нынешний CBM (бывший Billing &#038; Modernbill) появился в качестве бесплатного дополнения к панели Plesk 10. В установщике Plesk до сих пор так и написано — Customer &#038; Business Manager (free, recommended for shared hosting).</p>
<p><img src="http://www.znm.ru/wp-content/uploads/2011/05/plesk-cbm-free-lol.jpg" alt="Customer &#038; Business Manager (free, recommended for shared hosting)" title="plesk-cbm-free-lol.jpg" border="0" width="499" height="285" /></p>
<p>На сайте информация уже несколько иная — CBM бесплатно включен только в неограниченные версии Plesk. </p>
<p><img src="http://www.znm.ru/wp-content/uploads/2011/05/plesk-billing-free-unlim.jpg" alt="Plesk CBM" title="plesk-billing-free-unlim.jpg" border="0" width="500" height="83" /></p>
<p>Дальше на горизонте появляется какой-то Unlimited Hosting Suite и становится ясно, что неограниченные версии тоже бывают разные и биллинг входит не во все. Еще точнее — не входит ни в одну из тех, что есть у людей — Hosting Suite изобретен одновременно с выходом  Plesk 10.2 (или 10.0, я не слежу настолько пристально).</p>
<p>Небольшая выдержка с форума Parallels.</p>
<blockquote><p>Sorry for not responding earlier, the problem has recently been raised to my attention and it took sometime to find its roots. First of all I have to apologize for this unfortunate case and all the inconvenience caused. The issue is a little complicated so let me explain:</p>
<p>1. We didn&#8217;t mean to force all of you to purchase any additional key or something like that. The issue is basically a very unfortunate coincidence and miscommunication which I will explain below.</p>
<p>2. CBM is made free for Plesk Unlimited Hosting Suite key only. That&#8217;s what is meant in Plesk Autoinstaller and the text will be fixed to reflect it better - other keys have no CBM included.</p>
<p>3. Versions prior to 10.2 had a bug letting to utilize CBM even if it is not included in the key. CBM 10.2 got it fixed. It is not a change of pricing policies or anything - those are completely defined by license key content, not by software. If you open its source you&#8217;ll see that &#8220;mb_accounts&#8221; property is zero (no CBM allowed).</p></blockquote>
<p>Досадная ошибка, о которой никого не известили, не предупредили перед обновлением и о которую забыли вписать в <a rel="nofollow" href="http://download1.parallels.com/Plesk/PP10/whatsnew-unix.htm">CHANGELOG</a>.</p>
<p><strong>Коротко — ни одна лицензия от Plesk 9.x CBM в Plesk 10.2 поддерживать не будет, хотя сама панель работает со старыми ключами.</strong></p>
<p>На форуме же я получил личное сообщение, в ответ отправил номер своего ключа и получил через пару дней бесплатную лицензию на 6 месяцев, которая позволяет включить CBM. Через 6 месяцев надо будет покупать крутую лицензию для крутых хостеров.</p>
<blockquote><p>We apologize for any confusion experienced regarding your usage of the Parallels Customer &#038; Business Manager (CBM) in your Plesk Panel. The license currently installed in your panel does not include support for the CBM component. The only licenses that include the CBM component are known as &#8220;Hosting Suite&#8221; licenses.</p>
<p>To resolve this, we have issued you a license upgrade PLSK.*********.0000 that does include this option. The license upgrade will be valid for six months at no additional charge to you. In fact, the new license even includes other components such as the Parallels SiteBuilder! At the end of the six months, you will have the option to upgrade your license permanently to the Hosting Suite, or you can allow it to revert again to your current license.</p></blockquote>
<p>Барышня из саппорта Parallels любезно прислала мне цены на Plesk для Unix. Я плакал, как говорится.</p>
<blockquote><p>Leasing</p>
<p>* <strong>Parallels® Plesk Panel 10 – Hosting Suite – Unlimited Domains</strong><br />
Includes Parallels Plesk Panel 10 (Unlimited Domains), Parallels Plesk Sitebuilder (100 Domains) and Parallels Plesk Billing (1,000 Clients) at no additional charge!   <strong>$69.99 / month</strong></p>
<p>* <strong>Parallels® Plesk Panel 10 – Standalone Product – Unlimited Domains</strong><br />
For those with alternative billing and site design tools who only need the control panel (with unlimited domains) <strong>$69.99 / month</strong></p>
<p>Perpetual</p>
<p>* Plesk Plus<br />
A bundle of Plesk Unlimited Domain License, Plesk Power Pack, Unlimited Language Packs, 1 year of Single Server Email Support for up to 20 incidents, and a One Year Software Update Service. At the time of purchase, you are eligible to receive a 20% discount on Parallels Premium Antivirus.       $1,399.00</p></blockquote>
<p>Для ясности я выделил жирным — Hosting Suite включает биллинг, но стоит ровно столько же, сколько Standalone, который его не включает. В чем смысл такого извращения с ценообразованием? В том, что лицензия на Plesk Standalone 10 есть у всех, кто пользовался Plesk 9.x (они совместимы), а лицензии на Hosting Suite нет ни у кого из них — так изящно Parallels отсекает «халявщиков».</p>
<p>Я бесплатную эту шестимесячную подачку скачивать не стал — покупать неограниченную лицензию (как и любую другую) непосредственно у Parallels за $70 в месяц я принципиально не буду. После пары месяцев мытарств уже нет никакого желания доверять этому непредсказуемому чудищу еще и денежные расчеты. Кстати, у моего провайдера неограниченная лицензия стоит $30, если я правильно помню.</p>
<p>Маленькая иллюстрация напоследок. При каких-то обстоятельствах Plesk 10.2 убивается, если на него <a href="http://forum.parallels.com/showthread.php?t=110073">зайти по https браузером Firefox</a>. Больше 10 дней назад об этом известили разработчиков — до сих пор тишина. Очень показательно, как по мне.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.znm.ru/parallels-prodolzhaet-izvivatsya-i-izdevatsya-248/feed</wfw:commentRss>
		<feedburner:origLink>http://www.znm.ru/parallels-prodolzhaet-izvivatsya-i-izdevatsya-248</feedburner:origLink></item>
	</channel>
</rss>

