Современные информационные технологии / 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

 

Литература

  1. Magento - Blog - eBay Agrees to Acquire Magento - eCommerce Software for Growth / [Электронный ресурс] http://www.magentocommerce.com/blog/comments/ebay-agrees-to-acquire-magento/