Доброго времени суток.
Не прошло и два года, как тема поддержки многоязычности Zoolingual в сравнении продуктов стала не просто хотелкой, а насущной необходимостью. Наверное, это единственный функционал в связке JBZoo & Zoolingual, который не заработал "из коробки", но его отсутствие достаточно неприятно для многоязычного сайта. Для понимания изменений (а для кого-то и в плане обучения) я разместил в коде комментарии, которые безусловно можно удалить.
Итак, наш пациент:
media/zoo/applications/jbuniversal/framework/render/compare.php
а именно функция getPositionData
public function getPositionData($position, $type, $appId, $forceLayout = null)
{
if (!$forceLayout) {
$forceLayout = $this->_layout;
}
$app = $this->app->table->application->get($appId);
$path = $app->getGroup() . '.' . $type . '.' . $forceLayout;
$config = $this->getConfig('item')->get($path);
if ($config) {
$positions = $config[$position];
$plugin = JPluginHelper::getPlugin('system', 'zoolingual'); // Если установлен и активирован плагин ZOOLingual
if ($plugin != NULL) {
$lang = JFactory::getLanguage(); // Получаем тег выбранного языка
$tag = $lang->getTag();
$delete_keys = array(); // Элементы для удаления
foreach ($positions as $key => $pos) { // Для каждого элемента перебираем набор атрибутов
if (array_key_exists("zoolingual", $pos)) { // Если есть атрибут многоязычности ZOOLingual
$langs = $pos["zoolingual"]["_languages"]; // Определяем назначеные элементу языки
if (!in_array($tag, $langs)) { // Если выбранного языка в списке назначенных нет, то
array_push ($delete_keys, $key); // добавляем элемент на удаление
}
}
}
// И после завершения перебора всех элементов, удаляем не подходящие по языку
$positions = array_diff_key($positions, array_flip($delete_keys));
}
return isset($config[$position]) ? $positions : array();
}
return array();
}
P.S. Очень хотелось бы увидеть это изменение кода в ядре JBZoo, чтобы не заниматься патчами при обновлениях.











