Мультиязычность - перевод выпадающих списков — различия между версиями
VITL' (обсуждение | вклад) (Новая страница: «Если необходимо для другой языковой версии сайта перевести названия элементов выпадающе…») |
Mad grant (обсуждение | вклад) |
||
(не показана 1 промежуточная версия 1 участника) | |||
Строка 1: | Строка 1: | ||
− | Если необходимо для другой языковой версии сайта перевести названия элементов выпадающего списка, то для выполнения данной задачи можно воспользоваться кастомным макросом, который пропишем в файле classes/modules/custom.php | + | Если необходимо для другой языковой версии сайта перевести названия элементов выпадающего списка, то для выполнения данной задачи можно воспользоваться кастомным макросом, который пропишем в файле classes/modules/custom.php, после слов TODO: |
<source lang="php"> | <source lang="php"> | ||
public function optionslang($objcet_id, $title){ | public function optionslang($objcet_id, $title){ | ||
− | $cor = cmsController::getInstance(); | + | $cor = cmsController::getInstance(); |
+ | $id = (int) $objcet_id; | ||
$cur_lang_prefix = $cor->getLang()->getPrefix(); | $cur_lang_prefix = $cor->getLang()->getPrefix(); | ||
if($cur_lang_prefix == 'ru') return $title; | if($cur_lang_prefix == 'ru') return $title; | ||
− | $object = umiObjectCollection::getInstacne()->getObject($ | + | $object = umiObjectCollection::getInstacne()->getObject($id); |
if($object instanceof umiObject){ | if($object instanceof umiObject){ | ||
if($value = $object->getValue($cur_lang_prefix)){ | if($value = $object->getValue($cur_lang_prefix)){ | ||
return $value; | return $value; | ||
− | } | + | }else{ |
return $title; | return $title; | ||
} | } | ||
Строка 16: | Строка 17: | ||
</source> | </source> | ||
− | Перед его использованием необходимо открыть на редактирование | + | Перед его использованием необходимо открыть на редактирование справочник, в который необходимо добавить переводы полей (модуль "Шаблоны данных" - "Справочники"). В справочник необходимо добавить группу полей, а также поля с идентификатором = префиксу языковой версии сайта, допустим: en, fr, de, сам тип поля выбираем "Строковый". Далее необходимо открыть содержимое справочника и для каждого элемента прописать переводы, в только что созданных полях. |
− | + | Если для формирования выпадающего списка вы используете блок '''search_block_line_relation''', то необходимо также добавить блок '''search_block_line_item_relation''' (tpls/catalog/search.tpl): | |
− | %custom optionslang(% | + | <pre> |
+ | $FORMS['search_block_line_item_relation'] = <<<END | ||
+ | <option value="%object_id%">%custom optionslang(%object_id%, %object_name%)%</option> | ||
+ | END; | ||
+ | </pre> | ||
+ | |||
+ | Если используется блок '''reflection_field_relation''', то добавляем блок '''reflection_field_relation_option''' (tpls/data/reflection/webforms.tpl): | ||
+ | <pre> | ||
+ | $FORMS['reflection_field_relation_option'] = <<<END | ||
+ | <option value="%id%">%custom optionslang(%id%, %name%)%</option> | ||
+ | END; | ||
+ | </pre> | ||
+ | |||
+ | Суть использования кастомного макроса в том, что мы в него передаем object_id элемента выпадающего списка и название этого объекта (элемента списка), в самом макросе стоит проверка, если текущий язык ru, то возвращается исходное название объекта, если текущий язык не ru, то и из объекта берется значение поля с идентификатором равным префиксу текущей языковой версии сайта. | ||
+ | [[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]] |
Текущая версия на 12:49, 5 июня 2013
Если необходимо для другой языковой версии сайта перевести названия элементов выпадающего списка, то для выполнения данной задачи можно воспользоваться кастомным макросом, который пропишем в файле classes/modules/custom.php, после слов TODO:
public function optionslang($objcet_id, $title){
$cor = cmsController::getInstance();
$id = (int) $objcet_id;
$cur_lang_prefix = $cor->getLang()->getPrefix();
if($cur_lang_prefix == 'ru') return $title;
$object = umiObjectCollection::getInstacne()->getObject($id);
if($object instanceof umiObject){
if($value = $object->getValue($cur_lang_prefix)){
return $value;
}else{
return $title;
}
}
}
Перед его использованием необходимо открыть на редактирование справочник, в который необходимо добавить переводы полей (модуль "Шаблоны данных" - "Справочники"). В справочник необходимо добавить группу полей, а также поля с идентификатором = префиксу языковой версии сайта, допустим: en, fr, de, сам тип поля выбираем "Строковый". Далее необходимо открыть содержимое справочника и для каждого элемента прописать переводы, в только что созданных полях.
Если для формирования выпадающего списка вы используете блок search_block_line_relation, то необходимо также добавить блок search_block_line_item_relation (tpls/catalog/search.tpl):
$FORMS['search_block_line_item_relation'] = <<<END <option value="%object_id%">%custom optionslang(%object_id%, %object_name%)%</option> END;
Если используется блок reflection_field_relation, то добавляем блок reflection_field_relation_option (tpls/data/reflection/webforms.tpl):
$FORMS['reflection_field_relation_option'] = <<<END <option value="%id%">%custom optionslang(%id%, %name%)%</option> END;
Суть использования кастомного макроса в том, что мы в него передаем object_id элемента выпадающего списка и название этого объекта (элемента списка), в самом макросе стоит проверка, если текущий язык ru, то возвращается исходное название объекта, если текущий язык не ru, то и из объекта берется значение поля с идентификатором равным префиксу текущей языковой версии сайта.