|
Перед мной встала задача подружить эти два компонента. В первую очередь я скачал PhocaGallery JoomFish Files. Скачанный архив я поставил в JoomFish. Для этого зашел в “Элементы материала” - “Установить”. Всё успешно установилось! После этого я скопировал все изображения и категории PhocaGallery с языка ru на eng. Всё удачно скопировалось, пока всё олично. Идем дальше. Пробую написать перевод описания категории и изображения. Всё супер - перевод работает.
Что можно отнести к минусам:
1. В переводах при просмотре изображений и категорий галереи нет фильтров.
При большом количестве фотографий, очень захотелось фильтр по категориям. Также в переводах при просмотре категорий PhocaGallery, нужен фильтр по категориям. (потому как в списке выводятся все категории и подкатегории - один список). У меня оказалось так что некоторые названия подкатегорий совпадают с названиями категорий - я даже сначала подумал что JoomFish по два,три раза скопировал одну и ту же категорию.
Какая несправедливость - почему при переводе стандартных материалов Joomla есть фильтр по категории и разделу, а для JoomFish нету :(
Решение проблемы:
Логика (как всегда) проста - понять как работают фильтры для стандартных материалов Joomla и сделать по аналогии.
Первое что я посмотрел это файл administrator/components/com_joomfish/contentelements/content.xml
В этом файле хранится информация о том как же JoomFish переводить таблицу #__content (таблица хранит все стандартные материалы Joomla). А также в этом xml-файле есть отдельная секция translationfilters, содержащая список фильтров:
<translationfilters>
<frontpage>id</frontpage>
<section>sectionid</section>
<category>catid</category>
<author>created_by</author>
<keyword>title</keyword>
<published>published</published>
<changed>created|modified</changed>
<trash>state</trash>
<archive>state</archive>
<id>id</id>
</translationfilters>
Возник конечно резонный вопрос: как эти фильтры обрабатываются? Узнаем! Т.е. необходимо найти где же происходит чтение и обработка этого xml. Сделал я следующее: взял в руки FireBug, посмотрел параметры POST запроса, при смене элемента материала, параметр task содержал translate.show. Недолго думаю я зашел в administrator/components/com_joomfish/controllers/translate.php, нашел там функцию showTranslate, далее перешел в функцию showTranslationOverview, в которой уже нашел следующие строки:
JLoader::import( 'models.TranslationFilter',JOOMFISH_ADMINPATH);
$tranFilters = getTranslationFilters($catid,$contentElement);
Как не сложно догадаться, первая строчка грузит модель TranslationFilter, а вторая выполняет функцию получения списка фильтров с параметрами $catid,$contentElement, где $catid - идентификатор элемента материала, $contentElement - собственно сам объект элемента материала.
Хорошо, открываем файл модели TranslationFilter и смотрим найденную функцию TranslationFilter. В ней выполняется метод $filterNames=$contentElement->getAllFilters(); который собственно и получает из xml файла список фильтров. Далее этот список перебирается и подключаются (инклудятся) все найденные файлы фильтров JPATH_SITE."/administrator/components/com_joomfish/contentelements/$filterType.php" ;
где $filterType = "translation".ucfirst(strtolower($key))."Filter" ; $key - это название фильтра из xml файла.
и создаются объекты этих фильтров: $filters[strtolower($key)] = new $filterType($contentElement);
Собственно опишу сам родительский класс фильтра: translationFilter
атрибуты класса:
var $filterNullValue; // нулевое значение фильтра
var $filterType; // тип фильтра (должен совпадать с именем из xml файла элемента)
var $filter_value; // значение фильтра
var $filterField = false; // название поля в базе, по которому необходимо фильтровать
var $tableName = "";// название таблицы базы данных, по которой фильтруем
var $filterHTML=""; // html фильтра (не используется)
два метода:
"translation[имя фильтра]Filter" // метод констуктора
_createfilterHTML // метод создания html для фильтра, должен возвращать массив вида:
$arr[‘html’] - должен содержать поле фильтра (отмечу что можно любой html сюда вставлять)
$arr[‘title’] - заголовок фильтра - это та строчка которая выводится сверху html-а
собственно задача состоит в том чтобы создать класс фильтра и правильно описать эти две функции
2. Проблема при переводе пунктов меню, указывающих на галерею.
Описание проблемы:
1. Меняем стандартные глобальные настройки PhocaGallery
2. Создаем пункт меню с типом галереи. при создании не меняем настройки - а используем все по умолчанию
3. Заходим в JoomFish и копируем пункты меню на другой язык
4. В итоге получаем: В пунктах меню в скопированном языке установлены совсем не те глобальные параметры что нам нужны :(. А установлены первоначальные (дефолтные) глобальные параметры PhocaGallery.
Что делать?
Есть два варианта:
1. Ставить параметры для всех пунктов меню заново. (если их много - это будет долго)
2. Перед копированием на другой язык изменить файл, хранящий дефолтные глобальные параметры компонента “administrator/components/com_joomfish/config.xml”. (в нем придется разобраться - при том что и параметров у фоки не мало) |