1. Уважаемые пользователи, прежде чем ответить в теме или создать новую,
    внимательно ознакомьтесь с правилами раздела

    Кому лень работать или руки не оттуда - пользуйтесь услугами специалистов
  2. Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.."

    Есть JED!!! Ищите там!!!

Обсуждение Локализация плагина скидки JoomShopping Simple discount

Тема в разделе "JoomShopping", создана пользователем Gudym, 28 июл 2015.

Информация :
  • Уважаемые пользователи, прежде чем ответить в теме или создать новую, внимательно ознакомьтесь с правилами раздела
  • Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.." Есть JED!!! Ищите там!!!
  • Аналоги ищите там же - на JED!!!
  • Новая версия? - У кого будет - тот выложит!
  1. Gudym

    Gudym Постоялец

    Регистр.:
    19 мар 2013
    Сообщения:
    55
    Симпатии:
    23
    Здравствуйте, товарищи! Как-то раньше где-то скачал плагин скидок JoomShopping Simple discount, который выводит сообщение в корзине о скидке при покупке товаров на сумму больше заданной в плагине и, соответственно, вычитает сумму скидки из конечной стоимости товаров.

    Вот так это выглядит:

    [​IMG]

    А вот админка плагина:

    [​IMG]

    Плагин простенький, но свою задачу выполняет и, главное, работает на Joomla 3.x.

    Магазин 2-х язычный (UA / RU) и у меня возникла трудность с его локализацией на украинский язык.

    При установке плагин заливает файлы украинской и русской локализации админки.

    administrator/language/uk-UA/uk-UA.plg_jshoppingcheckout_simple_discount.ini
    administrator/language/ru-RU/ru-RU.plg_jshoppingcheckout_simple_discount.ini

    Но файлов локализации фронтенда в папке /language нет. Нужно перевести сообщение о скидке "Всего %s отделяет Вас от скидки -%s", которое прописывается в админке плагина.

    Плагин состоит из двух файлов:

    simple_discount.php:

    Код:
    <?php
    /**
    * @copyright   Copyright (C) 2005 - 2012 fisk.te.ua All rights reserved.
    * @license     Vyacheslav Lopatynskyj
    */
    
    defined('_JEXEC') or die('Restricted access');
    
    /**
    * An simple JoomShopping discount plugin.
    */
    class plgJshoppingCheckoutSimple_discount extends JPlugin{
     
       //plugin options array
       var $options = array();
     
       /**
        * Constructor
        *
        * @access  protected
        * @param  object  $subject The object to observe
        * @param  array  $config  An array that holds the plugin configuration
        * @since  1.5
        */
       public function __construct(& $subject, $config)
       {
         parent::__construct($subject, $config);
         $this->options['amount_to_get_discount'] = (float)$this->params->get('amount_to_get_discount');
         $this->options['discount_type'] = (int)$this->params->get('discount_type');
         $this->options['discount_value'] = (float)$this->params->get('discount_value');
         $this->options['show_message'] = $this->params->get('show_message');
         $this->options['message'] = $this->params->get('message');
       }
    
     
       function onAfterCartLoad(&$cart){
         if ($cart->getSummForCalculeDiscount() >= $this->options['amount_to_get_discount']) {
           $cart->setRabatt(NULL, $this->options['discount_type'], $this->options['discount_value']);
         } else {
           $cart->setRabatt(NULL, NULL, NULL);
         }
      }
     
       function onBeforeDisplayCartView(&$view) {
         if ($this->options['show_message'] != 0 && $view->fullsumm < $this->options['amount_to_get_discount']) {
           $html = '<div style="color: red; font-size: 20px; text-align: center;">';
           $html .= sprintf($this->options['message'],
                   formatprice($this->options['amount_to_get_discount'] - $view->fullsumm),
                   ($this->options['discount_type'] == "1" ? formatprice($this->options['discount_value']) : $this->options['discount_value']."%"));
           $html .= '</div>';
           if ($this->options['show_message'] == 1) {
             $view->_tmp_ext_html_cart_start = $html;
           } else {
             $view->_tmp_ext_html_before_discount = $html;
           }
         }
       }
    }
    //TODO add array of discounts
    //TODO select categories for discount
    //TODO optional merge plugin discount with user-group discount
    //TODO if delete plugin discount restore user-group discount

    simple_discount.xml:

    Код:
    <?xml version="1.0" encoding="utf-8"?>
    <extension version="1.7" type="plugin" group="jshoppingcheckout" method="upgrade">
       <name>JoomShopping Simple discount</name>
       <creationDate>02.12.2012</creationDate>
       <version>1.1</version>
       <author>Lopatynskiy Vyacheslav</author>
       <authorEmail>darkfisk@gmail.com</authorEmail>
       <authorUrl>http://fisk.te.ua</authorUrl>
       <copyright>Lopatynskiy Vyacheslav</copyright>
       <license>Lopatynskiy Vyacheslav</license>
       <description>Simple discount for JoomShopping</description>
       <files>
         <filename plugin="simple_discount">simple_discount.php</filename>
         <filename>index.html</filename>
       </files>
       <languages>
      <language tag="ru-RU">ru-RU.plg_jshoppingcheckout_simple_discount.ini</language>
        <language tag="uk-UA">uk-UA.plg_jshoppingcheckout_simple_discount.ini</language>
      </languages>
       <config>
         <fields name="params">
           <fieldset name="basic">
             <field name="amount_to_get_discount" type="text" default="500" label="PLG_SIMPLE_DISCOUNT_FIELD_AMOUNT_TO_GET_DISCOUNT" size='20' description=''/>
             <field name="discount_type" type="radio" default="2" label="PLG_SIMPLE_DISCOUNT_FIELD_DISCOUNT_TYPE">
               <option value="1">PLG_SIMPLE_DISCOUNT_STATIC_DISCOUNT_TYPE</option>
               <option value="2">PLG_SIMPLE_DISCOUNT_PERCENT_DISCOUNT_TYPE</option>
             </field>
             <field name="discount_value" type="text" default="5" label="PLG_SIMPLE_DISCOUNT_FIELD_DISCOUNT_VALUE" size='20' description=''/>
           
             <field type="spacer" hr="true" />
             <field type="spacer" name="spacer_message" class="text" label="PLG_SIMPLE_DISCOUNT_SEPARATOR_MESSAGE" />
             <field name="show_message" type="list"   default="0"   label="PLG_SIMPLE_DISCOUNT_FIELD_LIST_SHOW_MESSAGE_LABEL" description="PLG_SIMPLE_DISCOUNT_FIELD_LIST_SHOW_MESSAGE_DESC">
               <option   value="0">JNo</option>
               <option   value="1">PLG_SIMPLE_DISCOUNT_MESSAGE_ON_TOP</option>
               <option   value="2">PLG_SIMPLE_DISCOUNT_MESSAGE_ON_BOTTOM</option>
             </field>
             <field name="message" type="text" default="Всего %s отделяет Вас от скидки -%s" label="PLG_SIMPLE_DISCOUNT_FIELD_MESSAGE_FOR_DISCOUNT_LABEL" size='60' description='PLG_SIMPLE_DISCOUNT_FIELD_MESSAGE_FOR_DISCOUNT_DESC' />
           </fieldset>
         </fields>
       </config>
       <updateservers>
         <server type="extension" priority="1" name="JoomShopping Simple discount Update Site">http://fisk.te.ua/update/jshoppingcheckout_simple_discount-update.xml</server>
       </updateservers>
    </extension>

    Сообщение о скидке содержится в файле simple_discount.xml и при изменении его в админке плагина оно перезаписывается в базе данных.

    Код:
    <field name="message" type="text" default="Всего %s отделяет Вас от скидки -%s" label="PLG_SIMPLE_DISCOUNT_FIELD_MESSAGE_FOR_DISCOUNT_LABEL" size='60' description='PLG_SIMPLE_DISCOUNT_FIELD_MESSAGE_FOR_DISCOUNT_DESC' />
    В языковом файле админки плагина 12 констант:

    Код:
    PLG_SIMPLE_DISCOUNT_FIELD_AMOUNT_TO_GET_DISCOUNT="Сумма для получения скидки"
    PLG_SIMPLE_DISCOUNT_FIELD_DISCOUNT_TYPE="Тип скидки"
    PLG_SIMPLE_DISCOUNT_STATIC_DISCOUNT_TYPE="Сталая"
    PLG_SIMPLE_DISCOUNT_PERCENT_DISCOUNT_TYPE="Процентная"
    PLG_SIMPLE_DISCOUNT_FIELD_DISCOUNT_VALUE="Сумма скидки"
    PLG_SIMPLE_DISCOUNT_SEPARATOR_MESSAGE="Настройка сообщения о скидке"
    PLG_SIMPLE_DISCOUNT_FIELD_LIST_SHOW_MESSAGE_LABEL="Отображать сообщение?"
    PLG_SIMPLE_DISCOUNT_FIELD_LIST_SHOW_MESSAGE_DESC="Нужно ли отображать отображать сообщение о скидке на странице корзины"
    PLG_SIMPLE_DISCOUNT_MESSAGE_ON_TOP="Вверху страницы корзины"
    PLG_SIMPLE_DISCOUNT_MESSAGE_ON_BOTTOM="Внизу страницы корзины"
    PLG_SIMPLE_DISCOUNT_FIELD_MESSAGE_FOR_DISCOUNT_LABEL="Сообщение о скидке"
    PLG_SIMPLE_DISCOUNT_FIELD_MESSAGE_FOR_DISCOUNT_DESC="Сообщение в корзине сколько не хватает до скидки"

    Но константы, которая отвечает за перевод самого текста "Сообщения о скидке" не существует.

    В общем ума не приложу, как переводить это сообщение. Возникла идея организовать разные поля в админке для 2-х языков, 1 - "Сообщение о скидке (UA)", 2 -
    "Сообщение о скидке (RU)". Дополнительное поле в файле simple_discount.xml я то прописал (см. скриншот ниже), но как сделать, чтобы оно прописывалось в базу данных и подключалось в соответствии с выбранным языком в магазине, для меня сложная задача.

    [​IMG]

    Или вариант с дополнительным полем - путь тупиковый? Может возможно перевести более простым путям через константы?

    Заранее спасибо всем, кто откликнется! Архив с плагином прикрепил, может кому понадобится.

    Если вас есть хоть какие-нибудь идеи - подкидывайте, пожалуйста. Возможно это мне поможет решить задачу самому.
     

    Вложения:

    Последнее редактирование модератором: 29 июл 2015
  2. Gudym

    Gudym Постоялец

    Регистр.:
    19 мар 2013
    Сообщения:
    55
    Симпатии:
    23
    В общем удалось решить данный вопрос на джумлофоруме. Слава Богу мир не без добрых людей :)

    Решение следующее:

    1. Первым делом правим simple_discount.xml. Там дописываем дополнительно поле для второго языка в админку плагина. На моем примере это:

    Код:
    <field name="message" type="text" default="Всего %s отделяет Вас от скидки - %s" label="PLG_SIMPLE_DISCOUNT_FIELD_MESSAGE_FOR_DISCOUNT_LABEL" size='60' description='PLG_SIMPLE_DISCOUNT_FIELD_MESSAGE_FOR_DISCOUNT_DESC' />
    <field name="message-ua" type="text" default="Усього %s відділяє Вас від знижки - %s" label="PLG_SIMPLE_DISCOUNT_FIELD_MESSAGE_FOR_DISCOUNT_LABEL_UA" size='60' description='PLG_SIMPLE_DISCOUNT_FIELD_MESSAGE_FOR_DISCOUNT_DESC' />
    2. В языковых файлах ru-RU.plg_jshoppingcheckout_simple_discount.ini и uk-UA.plg_jshoppingcheckout_simple_discount.ini дописываем новую константу для второго языка. В моем случае - PLG_SIMPLE_DISCOUNT_FIELD_MESSAGE_FOR_DISCOUNT_LABEL_UA.

    3. В файле simple_discount.php нужно заменить строчку:

    Код:
    $this->options['message'] = $this->params->get('message');
    на условие:

    Код:
    if(JFactory::getLanguage()->getTag() == 'ru-RU'){
    $this->options['message'] = $this->params->get('message');;
    }
    elseif(JFactory::getLanguage()->getTag() == 'uk-UA') {
    $this->options['message'] = $this->params->get('message-ua');;
    }
    Name="message-ua" у вас может быть для любого другого языка.

    Вот и все!

    Для себя перепаковал арихвчик плагина со всеми доработками по мультиязычности. Поделюсь, может кому пригодится [​IMG]
     

    Вложения:

    Renny нравится это.
  3. snaypertoha

    snaypertoha Писатель

    Регистр.:
    7 сен 2014
    Сообщения:
    1
    Симпатии:
    0
    А как сделать чтобы скидка не применялась на товары, которые уже имеют скидку (Акционные товары)?