<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>WEB рукоделие &#187; Shop-Script</title>
	<atom:link href="http://www.handmadesite.net/topics/shop-script/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.handmadesite.net</link>
	<description>Какой механизм?! Все вручную!</description>
	<lastBuildDate>Sun, 13 Nov 2011 23:18:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Список статей блога WebAsyst ShopScript</title>
		<link>http://www.handmadesite.net/2011/11/list-of-blog-posts-webasyst-shopscrip/</link>
		<comments>http://www.handmadesite.net/2011/11/list-of-blog-posts-webasyst-shopscrip/#comments</comments>
		<pubDate>Sun, 13 Nov 2011 23:18:01 +0000</pubDate>
		<dc:creator>Сергей</dc:creator>
				<category><![CDATA[Shop-Script]]></category>
		<category><![CDATA[WASS]]></category>

		<guid isPermaLink="false">http://www.handmadesite.net/?p=420</guid>
		<description><![CDATA[Список статей блога, честно говоря, в webasyst сделан довольно бестолково. Лично мне больше нравится, как сделано в WordPress — с возможностью убирать часть поста&#187;под кат&#187;, т.е. в основном списке публиковать только часть статьи и ссылку &#171;читать дальше&#187; для тех, кто заинтересовался. Вообще есть один или несколько плагинов, продаваемых умельцами, которые позволяют делать такую ленту с [...]]]></description>
			<content:encoded><![CDATA[<p>Список статей блога, честно говоря, в webasyst сделан довольно бестолково. Лично мне больше нравится, как сделано в WordPress — с возможностью убирать часть поста&raquo;под кат&raquo;, т.е. в основном списке публиковать только часть статьи и ссылку &laquo;читать дальше&raquo; для тех, кто заинтересовался.</p>
<p>Вообще есть один или несколько плагинов, продаваемых умельцами, которые позволяют делать такую ленту с анонсами и даже прикреплять картинку к анонсу. Этот вариант я запомнил и решил, что если быстро ничего не придумаю, то куплю.</p>
<p>Сначала решил, что самое простым решением будет оборачивать часть статьи в DIV и в CSS прописать ему свойство &#8216;display:none;&#8217;. Грубо, но должно получиться. Единственное, что меня остановило — статьи пишу не я, а объяснять как &laquo;оборачивать в DIV&raquo; мне очень не хочется. И еще контролировать, чтоб вложенность тэгов соблюдалась.</p>
<p>Тогда я обратил внимание, что при написании постов никто не пользуется тэгом HR (горизонтальная линия) и решил, что это будет отличный разделитель. Кнопка для вставки этого тэга есть в стандартном визуальном редакторе, так что проблем у авторов статей возникнуть не должно.<span id="more-420"></span></p>
<p>Файл с шаблоном списка статей (/published/SC/html/scripts/templates/news.frontend.list.tpl.html) поменял как-то так: на показ статей там цикл {section}{sectionelse}{/section}. Вот сразу после {section} и добавил пару строк — тут создаются полезные переменные: URL статьи и ссылка &laquo;читать дальше&raquo;.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>assign <span style="color: #000000; font-weight: bold;">var</span><span style="color: #339933;">=</span>article_url value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;?ukey=news&amp;amp;blog_id=&quot;</span><span style="color: #339933;">|</span>cat<span style="color: #339933;">:</span><span style="color: #000088;">$news_posts</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span>NID<span style="color: #339933;">|</span>set_query_html<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#123;</span>assign <span style="color: #000000; font-weight: bold;">var</span><span style="color: #339933;">=</span>readmore value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&lt;p class=<span style="color: #000099; font-weight: bold;">\&quot;</span>readmore<span style="color: #000099; font-weight: bold;">\&quot;</span>&gt;&lt;a href=<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #339933;">|</span>cat<span style="color: #339933;">:</span><span style="color: #000088;">$article_url</span><span style="color: #339933;">|</span>cat<span style="color: #339933;">:</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span>&gt;Читать полностью &amp;raquo;&lt;/a&gt;&lt;/p&gt;&quot;</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p>а там, где выводится текст новости, т.е. просто показывается переменная $news_posts[i].textToPulication, заменил ее на 2 такие строки:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>assign <span style="color: #000000; font-weight: bold;">var</span><span style="color: #339933;">=</span>textToPublication value<span style="color: #339933;">=</span><span style="color: #000088;">$news_posts</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span>textToPublication<span style="color: #339933;">|</span>regex_replace<span style="color: #339933;">:</span><span style="color: #0000ff;">&quot;/[<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span>]/iu&quot;</span><span style="color: #339933;">:</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#123;</span><span style="color: #000088;">$textToPublication</span><span style="color: #339933;">|</span>regex_replace<span style="color: #339933;">:</span><span style="color: #0000ff;">&quot;/&lt;hr.*&gt;.*/iu&quot;</span><span style="color: #339933;">:</span><span style="color: #000088;">$readmore</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p>После этого в файле шаблона, который отвечает за показ одной статьи блога (/published/SC/html/scripts/templates/news.frontend.post.tpl.html) добавил код, просто убирающий сам тэг HR. Вместо</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span><span style="color: #000088;">$news_posts</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span>textToPublication<span style="color: #009900;">&#125;</span></pre></div></div>

<p>написал вот так:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span><span style="color: #000088;">$news_posts</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span>textToPublication<span style="color: #339933;">|</span>regex_replace<span style="color: #339933;">:</span><span style="color: #0000ff;">&quot;/&lt;hr.*&gt;/&quot;</span><span style="color: #339933;">:</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p>Вот и все. Обошлись малой кровью, все довольны, все смеются :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.handmadesite.net/2011/11/list-of-blog-posts-webasyst-shopscrip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Проверка логина в Shop-Script</title>
		<link>http://www.handmadesite.net/2010/10/proverka-logina-v-shop-script/</link>
		<comments>http://www.handmadesite.net/2010/10/proverka-logina-v-shop-script/#comments</comments>
		<pubDate>Fri, 29 Oct 2010 17:11:59 +0000</pubDate>
		<dc:creator>Сергей</dc:creator>
				<category><![CDATA[Shop-Script]]></category>

		<guid isPermaLink="false">http://www.handmadesite.net/?p=384</guid>
		<description><![CDATA[На форуме WebAsyst&#8217;а увидел пост про проверку логина, введенного при регистрации. Как обычно впал в ступор от изящного решения. Весь рассматриваемый код находится в файле core_functions/registration_functions.php. Достал напильник и немного подточил. Во первых есть функция _testStrInvalidSymbol($str). Проверяет строку на наличие неправильных символов. Неправильные символы, с точки зрения авторов скрипта: одинарные и двойные кавычки, знаки больше [...]]]></description>
			<content:encoded><![CDATA[<p>На форуме WebAsyst&#8217;а увидел <a href="http://forum.webasyst.ru/viewtopic.php?pid=46941" target="_blank">пост про проверку логина, введенного при регистрации</a>. Как обычно впал в ступор от изящного решения. Весь рассматриваемый код находится в файле <var> core_functions/registration_functions.php</var>. Достал напильник и немного подточил.</p>
<p>Во первых есть функция <var>_testStrInvalidSymbol($str)</var>. Проверяет строку на наличие неправильных символов. Неправильные символы, с точки зрения авторов скрипта: одинарные и двойные кавычки, знаки больше и меньше, а также обратный слэш &#8212; всего пять. Угадайте с одного раза сколько раз в теле функции проверяется условие if. :) Если в строке найден &laquo;неправильный&raquo; символ, то функция возвращает FALSE, если все в порядке &#8212; TRUE.</p>
<p><span id="more-384"></span></p>
<p>
Заменил все внутренности на равноценную регулярку:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">return</span> <span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/\'\\\&quot;\&lt;\&gt;\`/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$str</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span></pre></div></div>

<p>Заодно добавил символ обратной кавычки или как оно там называется &#8212; то что на клавиатуре, левее кнопки с цифрой 1? :)
</p>
<p>Ну, раз занялся регулярками и проверками, вернулся к упомянутой на форуме функции <var>regVerifyContactInfo()</var> &#8212; там есть странное условие: первый символ логин должен быть латинской буквой. Почему буквой? Почему если буквой, то именно латинской, если дальше могут быть любые символы, кроме пяти &laquo;запрещенных&raquo;? Было бы логично требование, чтобы логин состоял из букв латинского алфавита, цифр, знаков тире, подчеркивания и точки. Или даже без точки :) Оставил это решение на совести разработчиков скрипта, но мимо самой проверки пройти не смог спокойно. вместо сложновложенного <var>if (ord($login) &lt;&#8217;a'&#8230;</var> тоже сделал регулярку (исходную строку найдете по имени константы):</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/^[a-z]/i'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$login</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>
<span style="color: #000088;">$error</span> <span style="color: #339933;">=</span> ERROR_LOGIN_SHOULD_START_WITH_LATIN_SYMBOL<span style="color: #339933;">;</span></pre></div></div>

</p>
<p>
Заодно, раз уж открыл файл, заменил пяток вызовов функции ereg() &#8211; она считается устаревшей и неподдерживаемой с версии PHP 5.3</p>
]]></content:encoded>
			<wfw:commentRss>http://www.handmadesite.net/2010/10/proverka-logina-v-shop-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Множественные уязвимости Shop-Script</title>
		<link>http://www.handmadesite.net/2010/06/mnozhestvennyie-uyazvimosti-shop-script/</link>
		<comments>http://www.handmadesite.net/2010/06/mnozhestvennyie-uyazvimosti-shop-script/#comments</comments>
		<pubDate>Mon, 14 Jun 2010 10:27:37 +0000</pubDate>
		<dc:creator>Сергей</dc:creator>
				<category><![CDATA[Shop-Script]]></category>
		<category><![CDATA[безопасность]]></category>
		<category><![CDATA[уязвимость]]></category>

		<guid isPermaLink="false">http://www.handmadesite.net/?p=365</guid>
		<description><![CDATA[По привычке, время от времени, просматриваю сообщения об уязвимости скрипта Shop-Script. Компания Артикус, автор этого скрипта, уже давно перестала его поддерживать и продает теперь новую версию, более навороченную и красивую. Тем не менее этот скрипт разошелся по сети в миллионах копий, как легальных, так и нелегальных. А также породил великое множество продолжений и улучшений. Поэтому [...]]]></description>
			<content:encoded><![CDATA[<p>По привычке, время от времени, просматриваю сообщения об уязвимости скрипта Shop-Script. <a href="http://www.articus.ru/" target="_blank">Компания Артикус</a>, автор этого скрипта, уже давно перестала его поддерживать и продает теперь новую версию, более навороченную и красивую. Тем не менее этот скрипт разошелся по сети в миллионах копий, как легальных, так и нелегальных. А также породил великое множество продолжений и улучшений. Поэтому обнаруженный мною отчет, несмотря на то, что ему уже 2 месяца, будет интересен многим.</p>
<p>В отчете рассматривался Shop-Script Free &#8212; это как раз бесплатная версия того, что ходит по интернету огромным тиражом. На Free версии основана <a href="http://lego.piconline.ru/" target="_blank">наиболее цельная и популярная доработка под названием &laquo;Shop-Script Free Lego Edition&raquo;</a>.</p>
<p>Вывод неутешительный. На 14 апреля в скрипте имелось <a href="http://www.vupen.com/english/advisories/2010/0882" target="_blank">27 уязвимостей, позволяющих атакующему получить доступ к базе данных, манипулировать данными и скомпрометировать систему</a>.</p>
<p>В частности ошибки, позволяющие выполнять команды SQL, в обработке параметров, передаваемых в скрипт: (1) add2cart, (2) c_id, (3) categoryID, (4)  list_price, (5) name, (6) new_offer, (7) price, (8) product_code, (9)  productID, (10) rating, and (11) save_product. <a href="http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2010-1463" target="_blank">Пруфлинк</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.handmadesite.net/2010/06/mnozhestvennyie-uyazvimosti-shop-script/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Показ товаров в категории Shop-Script</title>
		<link>http://www.handmadesite.net/2008/12/ss-products-in-category/</link>
		<comments>http://www.handmadesite.net/2008/12/ss-products-in-category/#comments</comments>
		<pubDate>Sat, 13 Dec 2008 14:56:50 +0000</pubDate>
		<dc:creator>Сергей</dc:creator>
				<category><![CDATA[Shop-Script]]></category>
		<category><![CDATA[сортировка]]></category>
		<category><![CDATA[товар]]></category>

		<guid isPermaLink="false">http://www.handmadesite.net/?p=77</guid>
		<description><![CDATA[Во всех магазинах товар имеет свойство заканчиваться. Однако мы все надеемся на лучшее и временно отсутствующий товар с сайта не убираем. В ShopScript есть 2 пути не дать заказать пользователю отсутствующий товар &#8212; включить в разделе «Настройки -&#62;Корзина и оформление заказов» опцию «Вести учет товаров на складе» и тогда в свойствах товара надо будет вести [...]]]></description>
			<content:encoded><![CDATA[<p>Во всех магазинах товар имеет свойство заканчиваться. Однако мы все надеемся на лучшее и временно отсутствующий товар с сайта не убираем.</p>
<p>В ShopScript есть 2 пути не дать заказать пользователю отсутствующий товар &#8212; включить в разделе <em>«Настройки -&gt;Корзина и оформление заказов»</em> опцию <strong>«Вести учет товаров на складе»</strong> и тогда в свойствах товара надо будет вести количество по каждой позиции. Второй путь проще: установить товару нулевую цену, тогда ShopScript не будет показывать для этого товара ссылку на добавление в корзину.</p>
<p>Лично я предпочитаю второй путь, он для меня немного проще.</p>
<p>Однако, при показе товаров в категории <strong>ShopScript</strong> сортирует их по полям <em>sort_order</em> (порядок сортировки) и <em>name</em> (название). Из-за этого отсутствующие товары идут вперемешку с наличиствующими. Хотелось бы наоборот, чтобы те товары, которых в данный момент нет в наличии отображались бы в конце списка и на это не влиял выбор порядка сортировки (по имени, по цене и т.п.). То есть, чтобы все типы сортировок, которые науказывал посетитель применялись к тем товарам, которые можно заказать, а отсутствующие были все равно в конце списка.<span id="more-77"></span></p>
<p>Соседи вчера попросили сделать для них такой тип отображения. Чтобы не мучиться, я решил его сделать неотключаемым, просто добавить в запрос к базе данных на выборку товаров из категории еще одно правило. Оно должно быть первым, чтоб было самым главным :-) Вероятно я мог что-то упустить, но, с виду все работает как ожидается. Для сортировки по условию «поле Price равно нулю или нет» я использовал <a href="http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html#function_if">функцию MySQL IF()</a>. Должен получаться вот такой запрос:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span>
	categoryID<span style="color: #66cc66;">,</span> name<span style="color: #66cc66;">,</span> brief_description<span style="color: #66cc66;">,</span>
	customers_rating<span style="color: #66cc66;">,</span> Price<span style="color: #66cc66;">,</span> in_stock<span style="color: #66cc66;">,</span>
	customer_votes<span style="color: #66cc66;">,</span> list_price<span style="color: #66cc66;">,</span> productID<span style="color: #66cc66;">,</span>
	default_picture<span style="color: #66cc66;">,</span> sort_order<span style="color: #66cc66;">,</span> items_sold<span style="color: #66cc66;">,</span>
	enabled<span style="color: #66cc66;">,</span> product_code<span style="color: #66cc66;">,</span> description<span style="color: #66cc66;">,</span>
	shipping_freight
<span style="color: #993333; font-weight: bold;">FROM</span> SS_products
<span style="color: #993333; font-weight: bold;">WHERE</span> enabled<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">1</span> <span style="color: #993333; font-weight: bold;">AND</span> categoryID<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">3</span>
<span style="color: #808080; font-style: italic;">/* Здесь может быть много категорий */</span>
<span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span>
	<span style="color: #993333; font-weight: bold;">IF</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">`Price`</span><span style="color: #66cc66;">,</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">,</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">ASC</span><span style="color: #66cc66;">,</span>
	sort_order<span style="color: #66cc66;">,</span> name;</pre></div></div>

<p>Если используется учет количества товаров, то вместо поля `Price` надо использовать поле `in_stock`, как я понимаю.</p>
<p>За получение списка товаров для показа отвечает функция <strong>prdSearchProductByTemplate</strong> в файле <em>core_functions/product_functions.php</em>. Функция здоровая, из нее нам нужен кусок, который начинается с:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$order_by_clause</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;order by sort_order, name&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Вот эту строчку и всю ересь далее удаляем, вплоть до строчки

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$sqlQueryCount</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;select count(*) from &quot;</span><span style="color: #339933;">.</span>PRODUCTS_TABLE<span style="color: #339933;">.</span></pre></div></div>

<p>Строка выше должна остаться. ;-) Перед ней вставляем вот такой код:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$order_by_clause</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;order by IF(`Price`,1,0) DESC, &quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>
	<span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$callBackParam</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;sort&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span>
	<span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$callBackParam</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;sort&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
		<span style="color: #0000ff;">&quot;categoryID&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;brief_description&quot;</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">&quot;in_stock&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;Price&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;customer_votes&quot;</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">&quot;customers_rating&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;list_price&quot;</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">&quot;sort_order&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;items_sold&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;product_code&quot;</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">&quot;shipping_freight&quot;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$order_by_clause</span> <span style="color: #339933;">.=</span> <span style="color: #000088;">$callBackParam</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;sort&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$callBackParam</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;direction&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$callBackParam</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;direction&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">&quot;DESC&quot;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$order_by_clause</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot; DESC&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$order_by_clause</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;sort_order, name&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Не идеально, но на скорую руку сойдет. Вот и все, собственно. Теперь все товары с нулевой ценой будут в конце списка. Как сделать различие по другоу полю я уже написал.</p>
<p><strong>Attention please</strong>. Не успел достаточно это протестировать, возможно эта функция вызывается еще откуда-нибудь. Перед внесением изменений сделайте себе про запас копию оригинальных файлов, которые собираетесь изменить. ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.handmadesite.net/2008/12/ss-products-in-category/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Формат строки с ценой</title>
		<link>http://www.handmadesite.net/2008/11/format-price-string/</link>
		<comments>http://www.handmadesite.net/2008/11/format-price-string/#comments</comments>
		<pubDate>Fri, 07 Nov 2008 22:47:44 +0000</pubDate>
		<dc:creator>Сергей</dc:creator>
				<category><![CDATA[Shop-Script]]></category>
		<category><![CDATA[доработка]]></category>
		<category><![CDATA[оптимизация]]></category>

		<guid isPermaLink="false">http://www.handmadesite.net/?p=17</guid>
		<description><![CDATA[Дорабатываем напильником функцию форматирования значения цены. Заменяем 32 строки PHP кода на одну.]]></description>
			<content:encoded><![CDATA[<p>В <strong>Shop-script Pro</strong> и <strong>Premium</strong> весьма интересная реализована функция форматирования числа в денежный формат. Чтоб точка была разделителем, разряды отделялись запятой и т.д. Приводить весь &laquo;оригинальный&raquo; код смысла нет, кто интересуется &#8211; может это сделать самостоятельно.</p>
<p>Весь этот чудесный функционал находится в файле <em>/core_functions/functions.php</em>. Интересующая нас функция называется <em>_formatPrice()</em>. Все содержимое этой функции надо закомментировать и написать только одну строчку:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">return</span> <span style="color: #990000;">number_format</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>float<span style="color: #009900;">&#41;</span><span style="color: #000088;">$price</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Закомментированные 32 строки, в том числе 3 цикла делали то же самое. :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.handmadesite.net/2008/11/format-price-string/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Кэшируй, кэшируй, кэшируй запрос назло буржуазной Европе!</title>
		<link>http://www.handmadesite.net/2008/11/cache-queries/</link>
		<comments>http://www.handmadesite.net/2008/11/cache-queries/#comments</comments>
		<pubDate>Sun, 02 Nov 2008 12:45:00 +0000</pubDate>
		<dc:creator>Сергей</dc:creator>
				<category><![CDATA[Shop-Script]]></category>
		<category><![CDATA[доработка]]></category>
		<category><![CDATA[кэширование]]></category>
		<category><![CDATA[оптимизация]]></category>

		<guid isPermaLink="false">http://www.handmadesite.net/?p=24</guid>
		<description><![CDATA[Кэшируем запросы к базе данных в Shop-Script]]></description>
			<content:encoded><![CDATA[<p>Предыстория этого вопроса такова: одно время магаз на ShopScript работал у меня на довольно хилом VDS и посещения поисковых ботов практически клали сервер на обе лопатки. Типичная, так сказать, DDOS атака :-) Поэтому я озаботился производительностью самого скрипта. Предпринял следующие логичные, как мне кажется, шаги:</p>
<ol>
<li>Добавил недостающие индексы в разные таблицы с товаром, параметрами товара, категории, валюты и т.д.</li>
<li><a href="http://kossak.blogspot.com/2008/11/shop-script.html">Убрал подсчет запросов категорий и товаров</a>. Во-первых это оказалась бесполезная фича, во-вторых это было просто.</li>
<li>Закэшировал несколько запросов.</li>
</ol>
<p>Эти три пункта помогли решить проблему. Не знаю, какой оказал бОльшее влияние, но первого точно было недостаточно.<span id="more-24"></span></p>
<p>Объяснять как установить PEAR, добавить в include_path путь до него не буду.</p>
<p>Первый вариант кэширования я сделал с помощью <a href="http://pear.php.net/package/Cache_Lite/" target="_blank">класса Cache_Lite</a> из <a href="http://pear.php.net" target="_blank">PEAR</a>. В общем-то можно было бы обойтись и просто сохранением в файл, но мне не улыбалось писать код для сравнения даты создания файла, вычисления устаревания кэша и т.д. – все это уже сделано, зачем мне писать то же самое?</p>
<p>Что бы нам такого закэшировать? Посмотрим код <strong>ShopScript</strong>’a. Ух-ты! Есть вот такой перл в самом <em>index.php</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//load all categories to array $cats to avoid multiple DB queries</span>
<span style="color: #666666; font-style: italic;">//(frequently used in future - but not always!)</span>
  <span style="color: #000088;">$cats</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$q</span> <span style="color: #339933;">=</span> db_query<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT categoryID, name, parent, products_count, description, picture FROM &quot;</span><span style="color: #339933;">.</span>
    CATEGORIES_TABLE<span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; where categoryID&lt;&gt;0
    ORDER BY sort_order, name&quot;</span><span style="color: #009900;">&#41;</span>
   or <span style="color: #990000;">die</span> <span style="color: #009900;">&#40;</span>db_error<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span> <span style="color: #339933;">=</span> db_fetch_row<span style="color: #009900;">&#40;</span><span style="color: #000088;">$q</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
      <span style="color: #000088;">$cats</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$row</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span></pre></div></div>

<p>Загружаются подряд все категории товаров! Когда это 5-10 категорий – не очень страшно. Если общее количество категорий приближается к сотне, да еще есть описания, то общий объем данных получается очень приличным. Да еще этот код срабатывает при каждом запуске скрипта, нужен-не нужен – пофиг.</p>
<p>Категории меняются редко, поэтому вполне достаточно выполнять такой запрос, скажем, раз в сутки. Вот этим и займемся.</p>
<p>Создадим директорию <em>cache</em> и разрешим скрипту туда запись. Если директория в корне сайта, лучше в нее добавить файлик <em>.htaccess</em> со строчкой ‘Deny from all’.</p>
<p>В начало <em>index.php</em> добавим подключение класса Cache_Lite и создание экземпляра класса. У меня получилось вот так:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$cache_options</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
  <span style="color: #0000ff;">'cacheDir'</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'DOCUMENT_ROOT'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/cache/'</span><span style="color: #339933;">,</span>
  <span style="color: #0000ff;">'lifeTime'</span><span style="color: #339933;">=&gt;</span><span style="color: #cc66cc;">86400</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$cache_categories_id</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'category'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">require_once</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Cache/Lite.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$CacheLite</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Cache_Lite<span style="color: #009900;">&#40;</span><span style="color: #000088;">$cache_options</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>В переменной <em>$cache_categories_id</em> – метка, по которой будет извлекаться данные из кэша. В общем, <a href="http://pear.php.net/manual/en/package.caching.cache-lite.php" target="_blank">доку по Cache_Lite</a> надо хотя-бы просто просмотреть.</p>
<p>А код, где делается запрос к БД на выборку изменим на такой:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//load all categories to array $cats to avoid multiple DB queries</span>
<span style="color: #666666; font-style: italic;">//(frequently used in future - but not always!)</span>
&nbsp;
 <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$cats_str</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$CacheLite</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cache_categories_id</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
 <span style="color: #009900;">&#123;</span>
   <span style="color: #000088;">$cats</span><span style="color: #339933;">=</span><span style="color: #990000;">unserialize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cats_str</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
 <span style="color: #b1b100;">else</span>
 <span style="color: #009900;">&#123;</span>
   <span style="color: #000088;">$cats</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$q</span> <span style="color: #339933;">=</span> db_query<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT categoryID, name, parent,
                 products_count, description, picture
                 FROM &quot;</span><span style="color: #339933;">.</span>
                 CATEGORIES_TABLE<span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;
                 where categoryID&lt;&gt;0
                 ORDER BY sort_order, name&quot;</span><span style="color: #009900;">&#41;</span>
       or <span style="color: #990000;">die</span> <span style="color: #009900;">&#40;</span>db_error<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span> <span style="color: #339933;">=</span> db_fetch_row<span style="color: #009900;">&#40;</span><span style="color: #000088;">$q</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
     <span style="color: #000088;">$cats</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$row</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
   <span style="color: #000088;">$CacheLite</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">save</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">serialize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cats</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$cache_categories_id</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span></pre></div></div>

<p>Вот и все. Еще в том же <em>index.php</em> есть запрос на выборку всех валют – тоже хороший кандидат на кэширование.</p>
<p>Еще можно внимательно рассмотреть запросы при выводе информации о товаре (includes/produc_detailed.php) и подумать о том, что информацию о товаре тоже можно кэшировать. Но в случае изменения неплохо бы и сбрасывать кэш.</p>
<p>Схема с PEAR::Cache_Lite прожила довольно долго. VDS я сменил на другой, у которого памяти побольше было и это позволило установить кэшер байткода <a href="http://xcache.lighttpd.net/" target="_blank">XCache</a>. А некоторое время назад я обнаружил, что ZendFramework научился работать с этим самым <a href="http://xcache.lighttpd.net/" target="_blank">XCache</a>. И я переделал работу с Cache_Lite на Zend_Cache с бэкендом XCache. Теперь переменные хранятся вообще в памяти.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.handmadesite.net/2008/11/cache-queries/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Отключаем у Shop-Script показ погоды на Луне</title>
		<link>http://www.handmadesite.net/2008/11/otklyuchaem-u-shop-script-pokaz-pogodyi-na-lune/</link>
		<comments>http://www.handmadesite.net/2008/11/otklyuchaem-u-shop-script-pokaz-pogodyi-na-lune/#comments</comments>
		<pubDate>Sat, 01 Nov 2008 22:50:00 +0000</pubDate>
		<dc:creator>Сергей</dc:creator>
				<category><![CDATA[Shop-Script]]></category>
		<category><![CDATA[оптимизация]]></category>

		<guid isPermaLink="false">http://www.handmadesite.net/?p=29</guid>
		<description><![CDATA[Уменьшаем количество бесполезных операций записи в БД на каждый запрос страницы -- отключаем врущие счетчики]]></description>
			<content:encoded><![CDATA[<blockquote><p>— Как же так, Родион, старушку – всего за 20 копеек!!!<br />
— Ну не скажите, Порфирий Петрович… Пять старушек – уже рупь…</p></blockquote>
<p>Сначала обоснование. Счетчик показов информации о товаре и показов категории – обычное целочисленное поле в БД. Каждый раз когда запрашивается категория или просмотр информации о товаре, Shop-Script прибавляет к значению единицу. В теории должна получиться статистика просмотров и распределение товаров по популярности. Но кроме людей сайт посещает еще много разной живности, да и, скажем троекратный, просмотр товара одним пользователем не может считаться тремя просмотрами. В итоге такие сомневающиеся пользователи вместе с шумной и прожорливой толпой поисковых ботов накручивают эти счетчики. Как следствие — наиболее точно эти самые счетчики показывают погоду на Луне.<span id="more-29"></span></p>
<p>Сэкономить миллисекунды на 1 запросе – тоже хлеб.</p>
<p>Отключаем счетчик просмотра информации по товару. Для этого в файле <em>/includes/product_detailed.php </em>закомментариваем строчки:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;vote&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
      IncrementProductViewedTimes<span style="color: #009900;">&#40;</span><span style="color: #000088;">$productID</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Отключаем счетчик просмотра категорий. Для этого в файле /includes/category.php надо закомментировать строчку:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">IncrementCategoryViewedTimes<span style="color: #009900;">&#40;</span><span style="color: #000088;">$categoryID</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Можно порадоваться, какие мы экономные. ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.handmadesite.net/2008/11/otklyuchaem-u-shop-script-pokaz-pogodyi-na-lune/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Улучшаем URL в Shop-Script</title>
		<link>http://www.handmadesite.net/2008/11/uluchshaem-url-v-shop-script/</link>
		<comments>http://www.handmadesite.net/2008/11/uluchshaem-url-v-shop-script/#comments</comments>
		<pubDate>Sat, 01 Nov 2008 21:33:46 +0000</pubDate>
		<dc:creator>Сергей</dc:creator>
				<category><![CDATA[Shop-Script]]></category>
		<category><![CDATA[sef]]></category>
		<category><![CDATA[чпу]]></category>

		<guid isPermaLink="false">http://www.handmadesite.net/?p=33</guid>
		<description><![CDATA[Идея в общем-то простая – с помощью апачевского модуля mod_rewrite преобразовать “красивые” URL в такой набор параметров, которые понимает скрипт. Самые частые пути: www.shopscripsite.ru/index.php?productID=nnnn www.shopscripsite.ru/index.php?productID=nnnn&#38;discuss=yes www.shopscripsite.ru/index.php?categoryID=nnnn Создадим в корне сайта файл .htaccess, если, конечно, его еще нет. И добавим в него такие строчки: &#60;IfModule mod_rewrite.c&#62; RewriteEngine On RewriteRule ^product/([^/]*)/discuss /product/$1/?discuss=yes [QSA,NE,L] RewriteRule ^product/([0-9]*) /index.php?productID=$1 [QSA,NE,L] [...]]]></description>
			<content:encoded><![CDATA[<p>Идея в общем-то простая – с помощью апачевского модуля mod_rewrite преобразовать “красивые” URL в такой набор параметров, которые понимает скрипт.</p>
<p>Самые частые пути:</p>
<pre>www.shopscripsite.ru/index.php?productID=nnnn
www.shopscripsite.ru/index.php?productID=nnnn&amp;discuss=yes
www.shopscripsite.ru/index.php?categoryID=nnnn</pre>
<p>Создадим в корне сайта файл .htaccess, если, конечно, его еще нет. И добавим в него такие строчки:</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;">&lt;<span style="color: #000000; font-weight:bold;">IfModule</span> mod_rewrite.c&gt;
      <span style="color: #00007f;">RewriteEngine</span> <span style="color: #0000ff;">On</span>
      <span style="color: #00007f;">RewriteRule</span> ^product/([^/]*)/discuss /product/$1/?discuss=yes [QSA,NE,L]
      <span style="color: #00007f;">RewriteRule</span> ^product/([<span style="color: #ff0000;">0</span>-<span style="color: #ff0000;">9</span>]*) /index.php?productID=$1 [QSA,NE,L]
      <span style="color: #00007f;">RewriteRule</span> ^category/([<span style="color: #ff0000;">0</span>-<span style="color: #ff0000;">9</span>]*) /index.php?categoryID=$1 [QSA,NE,L]
&lt;/<span style="color: #000000; font-weight:bold;">IfModule</span>&gt;</pre></div></div>

<p>Скажу честно – я не профессионал в составлении правил для mod_rewrite и Perl-овые регулярки знаю поверхностно. Наверняка эти команды можно оптимизировать, но надо же с чего-то начинать.</p>
<p>Собственно добавлением этих строчек все и заканчивается. Теперь вместе с теми URL, которые я написал выше будут работать и такие:</p>
<pre>www.shopscripsite.ru/product/nnnn
www.shopscripsite.ru/product/nnnn/discuss
www.shopscripsite.ru/category/nnnn</pre>
<p>А дальше надо править шаблоны. И, кое-где, файлы скрипта. Искать строчки типа</p>

<div class="wp_syntax"><div class="code"><pre class="smarty" style="font-family:monospace;">index.php?productID=<span style="color: #D36900;">&#123;</span><span style="color: #00aaff;">$product_info</span>.<span style="color: #006600;">productID</span><span style="color: #D36900;">&#125;</span></pre></div></div>

<p>и заменять на</p>

<div class="wp_syntax"><div class="code"><pre class="smarty" style="font-family:monospace;">/product/<span style="color: #D36900;">&#123;</span><span style="color: #00aaff;">$product_info</span>.<span style="color: #006600;">productID</span><span style="color: #D36900;">&#125;</span></pre></div></div>

<p>Переменная у Smarty может называться и по-другому – зависит от шаблона. В общем смотреть, где формируются ссылки на категории и продукты. А также менять относительные ссылки на картинки и т.п. на абсолютные. В смысле</p>

<div class="wp_syntax"><div class="code"><pre class="smarty" style="font-family:monospace;"><span style="color: #009000;">&lt;img src=&quot;producst_pictures/{какая-то_переменная_Smarty}&quot; alt=&quot;&quot; /&gt;</span></pre></div></div>

<p>на</p>

<div class="wp_syntax"><div class="code"><pre class="smarty" style="font-family:monospace;"><span style="color: #009000;">&lt;img src=&quot;/producst_pictures/{какая-то_переменная_Smarty}&quot; alt=&quot;&quot; /&gt;</span></pre></div></div>

<p>Какие еще URL перезаписать? :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.handmadesite.net/2008/11/uluchshaem-url-v-shop-script/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

