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

Gudym

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

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

Для просмотра ссылки Войди или Зарегистрируйся

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

Для просмотра ссылки Войди или Зарегистрируйся

Плагин простенький, но свою задачу выполняет и, главное, работает на 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 я то прописал (см. скриншот ниже), но как сделать, чтобы оно прописывалось в базу данных и подключалось в соответствии с выбранным языком в магазине, для меня сложная задача.

Для просмотра ссылки Войди или Зарегистрируйся

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

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

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

Вложения

  • plg_ JoomShopping Simple discount.zip
    3,4 KB · Просмотры: 26
Последнее редактирование модератором:
В общем удалось решить данный вопрос на джумлофоруме. Слава Богу мир не без добрых людей :)

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

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" у вас может быть для любого другого языка.

Вот и все!

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

Вложения

  • plg_ JoomShopping Simple discount (multilanguage).zip
    8,4 KB · Просмотры: 36
А как сделать чтобы скидка не применялась на товары, которые уже имеют скидку (Акционные товары)?
 
Назад
Сверху