Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Модуль Меню - заголовки для блоков меню их поля "Название"

Автор AxiomateriaРаздел Шаблоны XSLT

Ответов: 8
Просмотров: 7275
Последний ответ 06 Июня 2014, 12:06:35
от admin
Тип поля "Состаное"

Автор SumrakrndРаздел Настройка системы и модулей

Ответов: 4
Просмотров: 2184
Последний ответ 28 Декабря 2016, 17:14:17
от Sumrakrnd
Задать значени поля тип "Составное"?

Автор muldyРаздел Custom макросы

Ответов: 5
Просмотров: 5263
Последний ответ 14 Апреля 2014, 21:20:45
от ilyar
Мультизагрузка файлов в поля "набор изображения"

Автор atachРаздел Настройка системы и модулей

Ответов: 0
Просмотров: 1308
Последний ответ 26 Апреля 2017, 19:26:48
от atach
Добавление поля "объем" в карточку товара, которое влияло бы на цену

Автор prukonРаздел Настройка системы и модулей

Ответов: 5
Просмотров: 2889
Последний ответ 06 Ноября 2016, 14:44:49
от aghigay

0 Пользователей и 1 Гость просматривают эту тему.

*

31rus

  • *
  • 46
  • +2/-0
    • Просмотр профиля
Есть несколько языковых версий, в каждой одинаковая структура с идентичными url страницами

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

Протокол Upage позволяет получить по id и пути, но посколько url идентичны, то выводится данные из текущего языка.
Как без кастом макросов решить данную проблему?

Например
http://wbhcambodia.com/ru/our-rooms/
Имеется Grop[@name='slider'], что бы не вставлять в другие языки заново фото, вывести данную группу из основного языка
« Последнее редактирование: 09 Января 2016, 11:11:58 от 31rus »

*

crazygeorgio

  • ***
  • 140
  • +7/-0
    • Просмотр профиля
как-то так document(concat('upage://(', substring-after(result/page/@link, result/@pre-lang) ,')'))//group[@name='slider']

*

31rus

  • *
  • 46
  • +2/-0
    • Просмотр профиля
У меня не срабатывает(

Буду ковырять дальше

*

ilyar

Рекомендую посмотреть в сторону Выборки из БД: протокол USel и построить  usel://getOriginPage/?pagePath=/foo/bar/&group=slider или usel://getOriginPage/(/foo/bar/)/slider/ это пример использования, еще надо сам запрос построить см. доку.
« Последнее редактирование: 16 Января 2016, 15:25:03 от ilyar »

*

crazygeorgio

  • ***
  • 140
  • +7/-0
    • Просмотр профиля
Цитировать
У меня не срабатывает(

Буду ковырять дальше

так а куда вы вставляете, в какую ноду, какой доступ к переменным, естественно document(concat('upage://(', substring-after(result/page/@link, result/@pre-lang) ,')'))//group[@name='slider'] достаточно образный запрос, если нет доступа к result/page/@link result/@pre-lang, то их можно задать как переменные или параметры в корневом шаблоне

естественно если мы в языковой версии по-умолчанию, то там это не сработает, так что можно использовать xsl:choose c проверкой на result/@pre-lang
« Последнее редактирование: 16 Января 2016, 16:00:22 от crazygeorgio »

*

31rus

  • *
  • 46
  • +2/-0
    • Просмотр профиля
Цитировать
У меня не срабатывает(

Буду ковырять дальше

так а куда вы вставляете, в какую ноду, какой доступ к переменным, естественно document(concat('upage://(', substring-after(result/page/@link, result/@pre-lang) ,')'))//group[@name='slider'] достаточно образный запрос, если нет доступа к result/page/@link result/@pre-lang, то их можно задать как переменные или параметры в корневом шаблоне

естественно если мы в языковой версии по-умолчанию, то там это не сработает, так что можно использовать xsl:choose c проверкой на result/@pre-lang


Вызываю с основного шаблона layouts/default.xsl, построен на основе demodizzy. вызываю из дополнительного языка, не основного.

Решил получить ID страницы из основного языка <xsl:value-of select="document(concat('upage://(',substring-after(result/page/@link, result/@pre-lang),')'))/result/@pageId"/>
В выводе отсутсвует ID

<xsl:value-of select="document(concat('upage://(', substring-after(result/page/@link, result/@pre-lang) ,')'))//property[@name ='slider-foto1']/value != ''"> выводит данные из текущего языка
substring-after(result/page/@link, result/@pre-lang) вывод правльный URl
Все переменные lang и pre-lang присутствуют в выдаче xml
« Последнее редактирование: 16 Января 2016, 16:28:41 от 31rus »

*

31rus

  • *
  • 46
  • +2/-0
    • Просмотр профиля
Рекомендую посмотреть в сторону Выборки из БД: протокол USel и построить  usel://getOriginPage/?pagePath=/foo/bar/&group=slider или usel://getOriginPage/(/foo/bar/)/slider/ это пример использования, еще надо сам запрос построить см. доку.

А какой смысл делать выборку usel ради одной страницы?
Upage должен решить мою задачу, вопрос почему он не хочет отрабатывать корректно?

*

crazygeorgio

  • ***
  • 140
  • +7/-0
    • Просмотр профиля
ага, точно upage выводит из текущей языковой версии, даже и не знал об этом, тогда я бы написал кастомный метод, те же манипуляции с адресом, а потом по адресу получаешь id страницы с помощью метода getidbypath, ну а дальше можешь id через upage или сразу через extGroups

Цитировать
Решил получить ID страницы из основного языка <xsl:value-of select="document(concat('upage://(',substring-after(result/page/@link, result/@pre-lang),')'))/result/@pageId"/>
В выводе отсутсвует ID

upage не отдает result, там udata/page/@id
« Последнее редактирование: 16 Января 2016, 16:37:20 от crazygeorgio »

*

31rus

  • *
  • 46
  • +2/-0
    • Просмотр профиля
ага, точно upage выводит из текущей языковой версии, даже и не знал об этом, тогда я бы написал кастомный метод, те же манипуляции с адресом, а потом по адресу получаешь id страницы с помощью метода getidbypath, ну а дальше можешь id через upage или сразу через extGroups

Цитировать
Решил получить ID страницы из основного языка <xsl:value-of select="document(concat('upage://(',substring-after(result/page/@link, result/@pre-lang),')'))/result/@pageId"/>
В выводе отсутсвует ID

upage не отдает result, там udata/page/@id

Сильно не меняет это решения проблемы, что за странность с upage(

*

crazygeorgio

  • ***
  • 140
  • +7/-0
    • Просмотр профиля
Я же написал в первой части, напишите кастомный метод, возвращающий id страницы или сразу все данные

*

ilyar

А какой смысл делать выборку usel ради одной страницы?
Upage должен решить мою задачу, вопрос почему он не хочет отрабатывать корректно?

Используя Upage также происходит выборка и теоретически она будет работать в рамках текущей языковой версии т.е. не получить в EN страницу RU (не проверял, могу ошибаться).

Я предлагаю Usel т.е. вместо выборки которую реализует протокол Upage использовать Usel полностью полностью контролируемую выборку с возможностью оптимизировать запрос под задачу. Так же, в данном случае, это лучшая альтернатива реализации кастомнного метод в котором тоже придется решать через выборку,
« Последнее редактирование: 17 Января 2016, 01:15:09 от ilyar »

*

31rus

  • *
  • 46
  • +2/-0
    • Просмотр профиля
А какой смысл делать выборку usel ради одной страницы?
Upage должен решить мою задачу, вопрос почему он не хочет отрабатывать корректно?

Используя Upage также происходит выборка и теоретически она будет работать в рамках текущей языковой версии т.е. не получить в EN страницу RU (не проверял, могу ошибаться).

Я предлагаю Usel т.е. вместо выборки которую реализует протокол Upage использовать Usel полностью полностью контролируемую выборку с возможностью оптимизировать запрос под задачу. Так же, в данном случае, это лучшая альтернатива реализации кастомнного метод в котором тоже придется решать через выборку,

Спасибо за идею и не только за эту!
Ну я не специалист конечно, но мне кажется что, при варианте с Usel сначала происходите выборка страницы с учетом требований, а потом результат обрабатывается, вто время как при Upage сразу обрабатываем полученные результат, разве это не так?

На данном проекте это не критично, а вот с проектом тысяч на 10 страниц, может быть серьезным приростом в скорости.

*

crazygeorgio

  • ***
  • 140
  • +7/-0
    • Просмотр профиля
upage думаю будет работать если использовать id страницы, а не путь, и врядли upage можно назвать выборкой, это скорее всего просто обращение к странице. Если речь о производительности, то как раз вместо usel лучше использовать кастомный метод без всяких выборок и прочего.

*

31rus

  • *
  • 46
  • +2/-0
    • Просмотр профиля
набросал кастом

public function getLanguageId($url, $lang_prefix)
                {
                              
                     $pattern = "/\/$lang_prefix/";
                      $lang_prefix_new = preg_replace($pattern,'' ,$url);
                   
                      $hierarchy = umiHierarchy::getInstance();
                      //Получим id страницы по ее url'у
                     $elementId = $hierarchy->getIdByPath($lang_prefix_new);
                     
                      return "$elementId";
                 }   

Но все равно возвращает id из текущей языковой версии(   

*

31rus

  • *
  • 46
  • +2/-0
    • Просмотр профиля
А какой смысл делать выборку usel ради одной страницы?
Upage должен решить мою задачу, вопрос почему он не хочет отрабатывать корректно?

Используя Upage также происходит выборка и теоретически она будет работать в рамках текущей языковой версии т.е. не получить в EN страницу RU (не проверял, могу ошибаться).

Я предлагаю Usel т.е. вместо выборки которую реализует протокол Upage использовать Usel полностью полностью контролируемую выборку с возможностью оптимизировать запрос под задачу. Так же, в данном случае, это лучшая альтернатива реализации кастомнного метод в котором тоже придется решать через выборку,

А как мы через USEL это можем получит, ну найти потомков от текущей страницы, понятно.
Но поля мы не получим, нам все равно нужен будет Upage потом, для обработки результатов выдачи?
Или я что то не понимаю(