Современные
информационные технологии / 3. Программное обеспечение
к.т.н.
Крючин О.В.
Тамбовский государственный университет им. Г.Р.
Державина, Россия
Разработка модуля
сокрытия цены товара для интернет-магазинов базирующихся на движке Magento
Как известно, Magento, является самым популярным на сегодняшний день движком для создания интернет-магазинов [1]. Частой проблемой владельцев таких магазинов являются боты (автоматические скрипты) считывающие цену товаров (например, для Яндекс.Маркет или другой подобной системы). Для решения этой проблемы в рамках данной работы создается модуль Webxmore_UnbootPrices, который позволяет отключить вывод цен в тестовом виде и заменить их на картинки.

Рис. 1. Снимок экрана с конфигурацией модуля из панели администрирования.
Для
конфигурации модуля в меню System->Configuration создается новая
вкладка UnbootPrices (рис 1). Как можно видеть, она содержит несколько
секций — General (здесь можно включить/отключить модель) и по одной
вкладке для каждого типа отображения товара — Personal (для личной
страницы товара), Category (для страницы категорий), Upsell (для
списка) и JMProduct (для индивидуальной настройки, например, на
индексной странице). Вкладки отображения цены содержат следующие параметры —
шрифт, которым будет отображаться цена, размер шрифта, файл фоновой картинки и
величина смещения.
Для
вывода шаблона скрытой цены в модель добавлен файл layout/webxmore_unbootprices.xml,
который позволяет заменить стандартный вывод цены на webxmore_unbootprices/price.phtml
<?xml version="1.0"?>
<layout>
<default>
<reference
name="catalog_product_price_template">
<action
method="addPriceBlockType">
<type>simple</type>
<block>catalog/product_price</block>
<template>webxmore_unbootprices/price.phtml</template>
</action>
</reference>
</default>
</layout>
В
файле price.phtml происходит создание экземпляра класса Unboot, в
который передаются текст цены, тип страницы и указатель на товар. Экземпляр
загружает необходимую конфигурацию (нужные шрифты, размеры и т. п.),
создает картинку с текстом цены и сохраняет ее по адресу $_SERVER["DOCUMENT_ROOT"]
. "/" .
"media/priceimages/$this->suffix/$this->text.png". После
этого происходит вывод следующего шаблона
<script
type="text/javascript"
src="/skin/frontend/default/webxmore_unbootprices/js/unbootprices.js">
</script>
<script>
if(!window.jQuery){
var src = "/js/webxmore/jquery-1.10.2.js";
var sc = "<script type=\"text/javascript\"
src=\"" + src + "\"><\/script>";
document.write(sc);
}
</script>
<span
class="pi_{product}_{prefix}_{text}"></span>
<script>
getPriceImage('{text}','{prefix}','{product}')
</script>
То
есть, вместо вывода цены происходит вызов функции getPriceImage, в
которую передаются текст цены, префикс, определяющий тип и указатель на товар.
Функция getPriceImage при
помощи AJAX загружает картинку и выводит ее в тег span с классом pi_{product}_{prefix}_{text}. Эта функция имеет следующее
содержание
function getPriceImage(value, type, id) {
jQuery.ajax({
url: "/unbootprices/ajax/index",
type: "POST",
data: "product="+id+"&type="+type+"&value="+value,
success: function(data) {
jQuery(".pi_"+id+"_"+type+"_"+value).html(data);
}
});
}
Как можно
видеть, здесь вызывается контроллер /unbootprices/ajax/index
<?php
class Webxmore_UnbootPrices_AjaxController
extends Mage_Core_Controller_Front_Action {
public function indexAction() {
$block =
$this->getLayout()->createBlock('core/template')->setTemplate('webxmore_unbootprices/imageprice.phtml');
$this->getResponse()->setBody($block->toHtml());
}
}
?>
который выводит шаблон webxmore_unbootprices/imageprice.phtml отображающий картинку с ценой
<?php
$filename =
"/media/priceimages/".$_REQUEST["type"]."/".$_REQUEST["value"].".png";
echo "<img
src=\"$filename\" height=\"15px\">";
?>
Таким
образом, в рамках данной работы, был разработан модуль, позволяющий
предотвратить считывание цен товаров ботами. Модуль используется несколькими
сайтами, например http://cameraforme.co.il
Литература