Правильное использование языковых констант из .ini файлов будем осуществлять с помощью стандартной библиотеки MooTools, которая подгрузить нужный нам объект JText для клиентской части, куда в дальнейшем передадим массив с константами.

Как выше уже я упомянул про объект JText, данный объект используется как в серверной части так и в клиентской, отличие использования только на разных языках, в API Joomla - это будет статический класс JText::_('CONSTANT'), в клиентской части сайта - это будет Joomla.JText.strings.CONSTANT.

Начну объяснять на примере модуля (скачать можно в конце статьи), точнее с файла точки входа:

mod_testjslang.php :

  1. <?php
  2. /**
  3.  * 
  4.  * @package     Joomla.Site
  5.  * @subpackage  mod_testjslang
  6.  *
  7.  * @copyright   Copyright (C) 2016 Korotkov Vadim http://siterybinsk.ru All rights reserved.
  8.  * @license     GNU General Public License version 2 or later; see LICENSE.txt
  9.  */
  10.  
  11. defined('_JEXEC') or die;
  12.  
  13. // Include helper
  14. require_once __DIR__ . '/helper.php';
  15.  
  16. // framework include 
  17. JHtml::_('behavior.framework',true);
  18.  
  19. // load media files
  20. ModtTestjslangHelper::LoadMedia();
  21.  
  22. $moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx'), ENT_COMPAT, 'UTF-8');
  23. require JModuleHelper::getLayoutPath('mod_testjslang', $params->get('layout', 'default'));

Особое внимание стоит уделить строке 17, а именно методу:

JHtml::_('behavior.framework', true);

который подгрузит js фреймворк и позволит работать с объектом Joomla.JText.

Далее осуществляем извлечение констант из .ini файла, более детально можно увидеть на примере ниже.

helper.php :

  1. <?php
  2. /**
  3.  * 
  4.  * @package     Joomla.Site
  5.  * @subpackage  mod_testjslang
  6.  *
  7.  * @copyright   Copyright (C) 2016 Korotkov Vadim http://siterybinsk.ru All rights reserved.
  8.  * @license     GNU General Public License version 2 or later; see LICENSE.txt
  9.  */
  10.  
  11. defined ( '_JEXEC' ) or  die ;
  12.  
  13. /**
  14.  * Helper for mod_testjslang
  15.  *
  16.  * @package     Joomla.Site
  17.  * @subpackage  mod_testjslang
  18.  * @since       1.5
  19.  */
  20. class ModtTestjslangHelper
  21. {
  22.  
  23.  /**
  24.  * 
  25.  * Load media for page
  26.  *
  27.  */
  28.      public static  function LoadMedia ( )  {
  29.  
  30.          // initialize with options
  31.          $script  =  array ( "window.addEvent('domready',function(){" ) ;
  32.              $script [ ] = "Joomla.JText.load(" . self::_getLanguage( ) . ");" ;
  33.          $script [ ] = '});' ;
  34.  
  35.          $script [ ] = 'function modtestjslang(num){' ;
  36.              $script [ ] = 'switch(num){' ;
  37.                  $script [ ] = 'case 1: alert(Joomla.JText.strings.MOD_TESTJSLANG_JS_ONE); break;' ;
  38.                  $script [ ] = 'case 2: alert(Joomla.JText.strings.MOD_TESTJSLANG_JS_TWO); break;' ;
  39.                  $script [ ] = 'case 3: alert(Joomla.JText.strings.MOD_TESTJSLANG_JS_THREE); break;' ;
  40.                  $script [ ] = 'case 4: alert(Joomla.JText.strings.MOD_TESTJSLANG_JS_END); break;' ;
  41.                  $script [ ] = 'default: break;' ;
  42.              $script [ ] = '}' ;
  43.          $script [ ] = '};' ;
  44.  
  45.         JFactory::getDocument()->addScriptDeclaration( implode ( " \n" , $script ) );
  46.  
  47.      }
  48.  
  49.  /**
  50.  * Language
  51.  *
  52.  * @return  array
  53.  */
  54.      private static  function _getLanguage() {
  55.  
  56.          // uses string to ini file
  57.          $strings  =  array (
  58.              'ONE' ,
  59.              'TWO' ,
  60.              'THREE' ,
  61.              'END'
  62.          ) ;
  63.  
  64.          // array data lang    
  65.          $output  =  array ( ) ;
  66.  
  67.          // version Joomla > 3.7.0 
  68.          if (  method_exists(new JText(), 'getScriptStrings') )  {
  69.              foreach  ( $strings  as  $string )  {
  70.                 JText::script ( 'MOD_TESTJSLANG_JS_' . $string );
  71.              }
  72.              $output  = JText::script( 'MOD_TESTJSLANG_JS_' . $string );
  73.          } 
  74.          // version Joomla < 3.7.0 
  75.          else  {
  76.              foreach  ( $strings  as  $string )  {
  77.                  $output [ ]  = JText::script ( 'MOD_TESTJSLANG_JS_' . $string );
  78.              }
  79.          }
  80.  
  81.          // return array data lang
  82.          return  json_encode( $output );
  83.      }
  84.  
  85. }
  86.  

Из основных моментов стоит отметить, инициализацию метода Joomla.JText.load() на 32 строке.

И применение объекта в строке 68, где мы собираем константы, используя статический метод

JText::script('MOD_TESTJSLANG_JS_'.$string);

Собственно рассказывать и показывать больше нечего. Надеюсь пример оказался вполне наглядным и не составит труда для восприятия.


zipМодуль (демо) - применение констант на клиенте с Joomla (размер: 4.72 kb, скачиваний: 0)
Вы можете пожертвовать любую сумму для мотивации новых статей.
Создание сайтов

Читайте также:

Полезное из Web