О формате WebP

По четкости WEBP не уступает JPEG, но перевирает цвета, а при многократном пересжатии мылит картинку как на превью. Зато размер при сопоставимом качестве выходит на 25-33% меньше. Это значительно, если на вашем сайте идет огромный трафик на изображениях. Читать далее «О формате WebP»

Как перейти на формат WebP с минимальными изменениями сайта

Некоторое время назад появился новый формат для графических изображений — WebP. Этот формат обладает рядом преимуществ по сравнению с JPEG: поддерживает как сжатие с потерями, так и сжатие без потерь, а также прозрачность изображений (альфа-канал), и во многих случаях сжимает изображения эффективнее (на моих сайтах — изображения в WebP получаются 30-35% меньше). Но к сожалению, полностью перейти на этот формат пока не так просто. Во-первых, сейчас его полноценно поддерживают только Web-броузеры, работающие на основе WebKit, а Firefox и IE/Edge — нет. Во-вторых, исправить на уже существующем сайте расширения всех файлов с .jpg на .webp может быть весьма трудоемкой задачей. Но недавно я нашел интересное решение, которое предложил Vincent Orback на Github: использовать подмену JPEG на WebP с помощью mod_rewrite. Для этого добавим в .htaccess такие строки:

AddType image/webp .webp<IfModule mod_rewrite.c>
 RewriteEngine On

 # Check if browser support WebP images
 RewriteCond %{HTTP_ACCEPT} image/webp

 # Check if WebP replacement image exists
 RewriteCond %{DOCUMENT_ROOT}/$1.webp -f

 # Serve WebP image instead
 RewriteRule (.+)\.(jpe?g|png)$ $1.webp [T=image/webp,E=accept:1]
</IfModule><IfModule mod_headers.c>   Header append Vary Accept env=REDIRECT_accept </IfModule> 

Работает это так: если броузер в заголовке Accept указал, что он принимает формат image/webp, то проверяем, есть ли на сервере файл с тем же именем, но расширением .webp, и, если да, отдаем его вместо запрошенного. Если нет — отдаем файл как обычно. Строка Header Append Vary Accept означает, что содержимое ответа может меняться в зависимости от заголовка Accept (это нужно для корректного кеширования на proxy-серверах). 

Таким образом получаем, что в HTML-коде сайта менять ничего не требуется, а достаточно конвертировать файлы графики из JPEG в WebP. Если на сервере установлен пакет ImageMagic, то можно сделать это с помощью утилиты mogrify:

mogrify -format webp *.jpg

Из недостатков этого решения можно назвать разве что некоторое увеличение нагрузки на дисковую систему сервера из-за необходимости проверять существование двух файлов, а не одного.

Настройка Liqpay для Webasyst CMS


&amp;lt;!--?php
include 'LiqPay.php';


function smarty_function_liqpay( $params, &amp;amp;$smarty )
{

	$public_key = '';								//Публичный ключ
	$private_key= '';	//Приватный ключ
	$comission=1.0282776349614;													//Добавим комиссию в счет покупателя
	if($params['type']=='order'){
		$order_id=$params['orderID'];		
		$sql="SELECT  `shipping_type`, `statusID`, `customer_lastname`, `customer_email`,	`shipping_module_id`,	`payment_module_id` ,`payment_type`,  `order_amount` ,  `currency_code` ,  `currency_value` 
				FROM  `SC_orders` 
				WHERE  `orderID` =".$order_id."
				LIMIT 1";
		if($res=mysql_query($sql))
		$row=mysql_fetch_assoc($res);
		if ($row['payment_module_id']==36)//Если в заказе выбрана оплата Liqpay
		{
			if($row['statusID']==25){
			$order_summary=round((round($row['currency_value']*$row['order_amount'],0))*$comission,2);
			$server_url='https://.com.ua/liqpay/';		//адрес страницы на которой будет происходить обработка ответа из банка
			$result_url='https://.com.ua/result/';	
			
			$liqpay = new LiqPay($public_key, $private_key);
			$html = $liqpay---&amp;gt;cnb_form(array(
			'version'	     =&amp;amp;gt; '3',
			'public_key'	 =&amp;amp;gt; $public_key,
			'private_key'	 =&amp;amp;gt; $private_key,
			'action'         =&amp;amp;gt; 'pay',
			'amount'         =&amp;amp;gt; $order_summary, // сумма заказа
			'currency'       =&amp;amp;gt; 'UAH',
			'description'    =&amp;amp;gt; 'Оплата заказа № '.$order_id, 
			'order_id'       =&amp;amp;gt; $order_id,	
			'result_url'	 =&amp;amp;gt;	$result_url,
			'server_url'	 =&amp;amp;gt;	$server_url,
			'language'		 =&amp;amp;gt;	'ru'
			));	
			echo $html; // вернем нашу сгенерированную форму для отправки
			
			$_SESSION["order_id"]=$order_id;
			$_SESSION["customer_email"]=$row['customer_email'];
			$_SESSION["customer_lastname"]=$row['customer_lastname'];
			
			//echo "Сумма заказа ".round($row['currency_value']*$row['order_amount'],0);
			//echo " Сумма оплаты ".$order_summary;
			//echo " Заказ ".$order_id;
		}
		else
		{
			echo "Кнопка для оплаты будет доступна после подтверждения заказа";	
		}
		}		
	}
	else if($params['type']=='answer'){
		
		$sign=$_POST['signature'];	
		$data=$_POST['data'];
		$signature=base64_encode(sha1($private_key + $data + $private_key));
		$result= json_decode( base64_decode($data));	
		$date=date("Y-m-d H-i-s");			
	
			if( $result-&amp;amp;gt;status == 'success' ){
				$comment = "Заказ успешно оплачен";
				$sql='UPDATE SC_orders SET statusID="14" WHERE orderID="'.$result-&amp;amp;gt;order_id.'"';
				mysql_query($sql);
			}elseif( $result-&amp;amp;gt;status == 'error' ){
				$comment = "Неуспешный платеж. Некорректно заполнены данные";
			}elseif( $result-&amp;amp;gt;status == 'failure' ){
				$comment = "Неуспешный платеж";			
			}elseif( $result-&amp;amp;gt;status == 'reversed' ){
				$comment = "Платеж возвращен";		
			}elseif( $result-&amp;amp;gt;status == 'subscribed' ){
				$comment = "Подписка успешно оформлена";		
			}elseif( $result-&amp;amp;gt;status == 'unsubscribed' ){
				$comment = "Подписка успешно деактивирована";		
			}
		
			$sql="INSERT INTO `SC_order_status_changelog` 
			(`orderID`, `status_name`, `status_change_time`, `status_comment`) VALUES 
			(".$result-&amp;amp;gt;order_id.", 'Оплачен', '".$date."', '".$comment."')";
			mysql_query($sql);		
			
	}else if($params['type']=='result'){	
		echo  "Ваш платеж проверяется";
		$form='
&amp;lt;form name="mainForm" method="post" action="/order_status/?orderID='.$orderID.'&amp;amp;amp;code='.base64_encode($_SESSION[" customer_email"]).'"=""&amp;gt;

&amp;lt;div class="form_wrapper"&amp;gt;
				&amp;lt;input type="hidden" name="orderID" value="'.	$_SESSION[" order_id"].'"=""&amp;gt;
				&amp;lt;input type="hidden" name="customer_email" value="'.$_SESSION[" customer_email"].'"=""&amp;gt;							
				&amp;lt;input type="hidden" name="customer_last_name" value="'.$_SESSION[" customer_lastname"].'"=""&amp;gt;
				
&amp;lt;input type="submit" name="find" value="Показать информацию о заказе"&amp;gt;
&amp;lt;/div&amp;gt;

		&amp;lt;/form&amp;gt;';
		
		echo $form;
	}	
}	
	


Настройка электронной торговли Analytics в Simpla CMS

{literal}
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-31871436-2']);
_gaq.push(['_trackPageview']);
{/literal}
{$t1 = $order->date|truncate:18:"":true}
{$t2 = date("Y-m-d H:i:s")|truncate:18:"":true}
{if $order->status==0 && $t1 == $t2}
{literal}
<!-- Google Analitycs-->
_gaq.push(['_addTrans','{/literal}{$order->id}{literal}','panda-shop.od.ua','{/literal}{$order->total_price}{literal}','0.00','{/literal}{$order->delivery_price|convert}{literal}','{/literal}{$order->address|escape}{literal}','','']);
{/literal}{foreach $purchases as $purchase}{literal}
_gaq.push(['_addItem','{/literal}{$order->id}{literal}','{/literal}{$purchase->variant->sku|escape}{literal}','{/literal}{$purchase->product_name|escape} ({$purchase->product->brand|escape}){literal}','{/literal}{$purchase->product->cat|escape}{literal}','{/literal}{$purchase->price}{literal}','{/literal}{$purchase->amount}{literal}']);
{/literal}{/foreach}{literal}
_gaq.push(['_trackTrans']); 
{/literal}
{/if}
{literal}
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();   
</script>
{/literal}

Настройка электронной торговли в Analytics на примере CMS Simpla

WordPress Rainbow Hilite

 {literal}
&lt;script type='text/javascript'>
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-31871436-2']);
_gaq.push(['_trackPageview']);
{/literal}
{$t1 = $order->date|truncate:18:"":true}
{$t2 = date("Y-m-d H:i:s")|truncate:18:"":true}
{if $order->status==0 &amp;&amp; $t1 == $t2}
{literal}
&lt;!-- Google Analitycs-->
_gaq.push(['_addTrans','{/literal}{$order->id}{literal}','panda-shop.od.ua','{/literal}{$order->total_price}{literal}','0.00','{/literal}{$order->delivery_price|convert}{literal}','{/literal}{$order->address|escape}{literal}','','']);
{/literal}{foreach $purchases as $purchase}{literal}
_gaq.push(['_addItem','{/literal}{$order->id}{literal}','{/literal}{$purchase->variant->sku|escape}{literal}','{/literal}{$purchase->product_name|escape} ({$purchase->product->brand|escape}){literal}','{/literal}{$purchase->product->cat|escape}{literal}','{/literal}{$purchase->price}{literal}','{/literal}{$purchase->amount}{literal}']);
{/literal}{/foreach}{literal}
_gaq.push(['_trackTrans']); 
{/literal}
{/if}
{literal}
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();   
&lt;/script>
{/literal}

Настройка оплаты для Google Merchant Center

Для прохождения модерации сайта в системе Google Merchant, клиент Вашего сайта должен иметь возможность выбрать удобный способ оплаты и совершить оплату не выполняя лишний действий. В случае с оплатой на карту, клиент должен получить реквизиты в подтверждении сделки. Читать далее «Настройка оплаты для Google Merchant Center»