Перейти к содержимому


Фотография
* * * * * 1 Голосов

Слетают языковые константы в табах после переключения языка сайта

баги мультиязычный сайт табы

  • Закрытая тема Тема закрыта
Сообщений в теме: 6

#1 Станислав

Станислав

Отправлено 10 April 2015 - 20:28

Добрый день! Несмотря на то, что у разработчиков есть и более критичные баги на повестке дня, хочу обратить внимание на следующий баг.

 

Есть мультиязычный сайт: стандартная настроенная мультиязычность Joomla + ZOOLingual  для контента ZOO/JBZoo.

Все работает прекрасно за исключением заголовков табов в шаблоне full, которые созданы по примерам в документации. Шаблон приложения - UIKit.

 

Например, текущий язык сайта английский

 

1. После первого открытия страницы с табами заголовки отображаются нормально
Properties | Gallery

2. После переключения языка на русский

JBZOO_ITEM_TAB_PROPS | JBZOO_ITEM_TAB_GALLERY

3. После обновления страницы (без переключения языка) заголовки становятся нормальными.
Характеристики | Галерея

 

Что проверялось.

 

а) Отключил все кеширование и минификацию: в Joomla, в шаблоне, в самом JBZoo, системный плагин кеша отключен. Сторонних приблуд для кеширования нет. В итоге в кеше остается только jbzoo_assets и jbzoo_currency - результат тот же.

 

2. В начале шаблона сделал вывод языка:

$lang =& JFactory::getLanguage();
echo "Current language is: " . $lang->getName();

При отработке видно что язык выбирается правильно.

 

3.  Добавил еще вот так в начало страницы:

echo "JBZOO_ITEM_TAB_PROPS = " . JText::_('JBZOO_ITEM_TAB_PROPS')

В начале страницы константы выводятся так же, как и внутри скриптованного таба.

 

4. Потом решил принудительно переинициализировать языковой файл JBZoo как это делается при инициализации приложения, добавив в начало:

$zoo = App::getInstance('zoo');
$zoo->system->language->load('com_jbzoo', $zoo->path->path('applications:jbuniversal'), null, true);

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

 

Что делать, куда копать? Или как исключить определенную часть вывода из кэша JBZoo, так как я все-таки подозреваю, что дело именно в нем. Повторяется вне зависимости от релиза, начиная с самых ранних.

 

На всякий случай привожу код шаблона full:

<?php
/**
 * JBZoo App is universal Joomla CCK, application for YooTheme Zoo component
 *
 * @package     jbzoo
 * @version     2.x Pro
 * @author      JBZoo App http://jbzoo.com
 * @copyright   Copyright (C) JBZoo.com,  All rights reserved.
 * @license     http://jbzoo.com/license-pro.php JBZoo Licence
 * @coder       Sergey Kalistratov <kalistratov.s.m@gmail.com>
 */

// no direct access
defined('_JEXEC') or die('Restricted access');

$tabsId = uniqid('jbzoo-tabs-');
$align = $this->app->jbitem->getMediaAlign($item, $layout);
echo $this->renderPosition('title', array('style' => 'jbtitle'));
?>

<div class="uk-grid">
    <div class="uk-width-1-1">
    <?php if ($this->checkPosition('image')) : ?>
        <div class="item-image uk-align-<?php echo $align; ?>">
            <?php echo $this->renderPosition('image'); ?>
        </div>
    <?php endif; ?>
    <?php if ($this->checkPosition('text')) : ?>
        <div class="item-text">
            <?php echo $this->renderPosition('text'); ?>
        </div>
    <?php endif; ?>
    <div class="uk-clearfix"></div>
    <?php if ($this->checkPosition('list')) : ?>
        <div class="item-price">
            <?php echo $this->renderPosition('list'); ?>
        </div>
    <?php endif; ?>
    </div>
</div>

<div class="uk-clearfix"></div>

<?php if ($this->checkPosition('tab-properties')
    || $this->checkPosition('tab-gallery')
    || $this->checkPosition('tab-reviews')
) :

    $positionParams = array(
        'style'    => 'jbblock',
        'tag'      => 'div',
        'labelTag' => 'h3',
        'clear'    => true
    );

    ?>
    <div class="tab-container uk-panel uk-panel-box uk-article-divider">
        <ul class="uk-tab" data-uk-tab="{connect:'#<?php echo $tabsId; ?>'}">
            <?php if ($this->checkPosition('tab-properties')) : ?>
                <li><a href="#tab-properties"><?php echo JText::_('JBZOO_ITEM_TAB_PROPS'); ?></a></li>
            <?php endif; ?>

            <?php if ($this->checkPosition('tab-gallery')) : ?>
                <li><a href="#tab-gallery"><?php echo JText::_('JBZOO_ITEM_TAB_GALLERY'); ?></a></li>
            <?php endif; ?>

            <?php if ($this->checkPosition('tab-reviews')) : ?>
                <li><a href="#tab-reviews"><?php echo JText::_('JBZOO_ITEM_TAB_REVIEWS'); ?></a></li>
            <?php endif; ?>
        </ul>

        <ul id="<?php echo $tabsId; ?>" class="uk-switcher uk-margin">
            <?php if ($this->checkPosition('tab-properties')) : ?>
                <li id="tab-properties">
                    <table class="uk-table uk-table-hover uk-table-striped uk-table-condensed">
                        <?php echo $this->renderPosition('tab-properties', array('style' => 'jbtable', 'tooltip' => 1)); ?>
                    </table>
                    <div class="clear clr"></div>
                </li>
            <?php endif; ?>
            <?php if ($this->checkPosition('tab-gallery')) : ?>
                <li id="tab-gallery">
                    <?php echo $this->renderPosition('tab-gallery', $positionParams); ?>
                    <div class="clear clr"></div>
                </li>
            <?php endif; ?>
            <?php if ($this->checkPosition('tab-reviews')) : ?>
                <li id="tab-reviews">
                    <?php echo $this->renderPosition('tab-reviews', $positionParams); ?>
                    <div class="clear clr"></div>
                </li>
            <?php endif; ?>
        </ul>
    </div>
<?php endif; ?>

<?php echo $this->renderPosition('related', array('style' => 'jbblock', 'labelTag' => 'h2', 'clear' => true)); ?>


Сообщение отредактировал Станислав: 10 April 2015 - 20:36

  • 1

«Ну и зачем все это, лучше бы водки выпили». Из писем Белинского Гоголю.

 


#2 SmetDenis

SmetDenis

Отправлено 13 April 2015 - 07:08

Спасибо за подробное разъяснение.

 

Или как исключить определенную часть вывода из кэша JBZoo, так как я все-таки подозреваю, что дело именно в нем.
 

Если весь кеш отключен, то как он может что-то сохранять?

В jbzoo_assets хранится только css (переваренные less) и js, если он минимизировался.

Мне кажется дело в другом.

 

 

Сейчас для загрузки языков в бутстрапе используется этот код

$lang = JFactory::getLanguage();
$lang->load('com_zoo');
$lang->load('com_jbzoo', $this->app->path->path('jbapp:'), null, true);
$lang->load('com_zoo', JPATH_ADMINISTRATOR);

Код выполняется в любом случае и всегда (через Init  в системном плагине JBzoo). Поэтому у меня когнитивный диссонанс.

 

А в наших модулях константы сработали?


  • 1
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#3 Станислав

Станислав

Отправлено 13 April 2015 - 15:42

А в наших модулях константы сработали?

 

Вот только сегодня дошел до фильтров цены и проблема действительно повторилась в модуле фильтра.

L4FQIgg.png


 


  • 0

«Ну и зачем все это, лучше бы водки выпили». Из писем Белинского Гоголю.

 


#4 Станислав

Станислав

Отправлено 13 April 2015 - 23:05

Доступа к jbzoo.php у меня нет по понятным причинам :)

В общем, чтобы хоть как-то работало, причем везде, прикрутил пока глобальный костыль:

 

В administrator/components/com_zoo/events/application.php в init() после:

// load site language
    if ($app->system->application->isSite()) {
        $app->system->language->load('com_zoo', $application->getPath(), null, true);

добавил

        $app->system->language->load('com_jbzoo', $application->getPath(), null, true);

Можно было бы и в системном плагине JBZoo после вот этого...

        $jbzooBootstrap = JPATH_ROOT . '/media/zoo/applications/' . JBZOO_APP_GROUP . '/framework/jbzoo.php';
        if (JFile::exists($jbzooBootstrap)) {
            require_once($jbzooBootstrap);
            JBZoo::init();

Но ZOO я обновляю реже, чем JBZoo, так что пока оставил так, пока причина не найдется...


Сообщение отредактировал Станислав: 13 April 2015 - 23:14

  • 0

«Ну и зачем все это, лучше бы водки выпили». Из писем Белинского Гоголю.

 


#5 SmetDenis

SmetDenis

Отправлено 14 April 2015 - 07:19

Давно, пару раз европейские клиенты тоже жаловались на подобное. Потом внезапно находили решение.

В итоге я не придал значения.

 

Можете дать мне через личку ZOOLingual ?

Тот что есть у меня - 2х летней давности. Смотрел его в академических целях.


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#6 Станислав

Станислав

Отправлено 14 April 2015 - 10:51

Спасибо за ответ Денис. Скинул в личку.

 

Есть еще одна проблема, связанная с ZooLingual: если категории, материалы, фильтры, цены и т.д. работает ок, то с compare - проблемы. В шаблон вывода попадают все поля без учета языка. Скорее всего проблема в специфичности контроллера compare и ZOOLingual просто его не поддерживает. Одна надежда на вас.

 

P.S. Могу дать в личку ссылочку посмотреть, доступ к сайту, FTP и т.п..
 


  • 0

«Ну и зачем все это, лучше бы водки выпили». Из писем Белинского Гоголю.

 


#7 SmetDenis

SmetDenis

Отправлено 21 April 2015 - 08:51

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

Оставил решение на Stable, т.к сейчас могу промотать очень много времени на ковыряние 3х фремворков (Zoo, JBZoo, ZL) + Joomla.
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.






Темы с аналогичным тегами баги, мультиязычный сайт, табы

Click to return to top of page in style!