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

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

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

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

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

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

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

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

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

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

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

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

*

crazygeorgio

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

*

ilyar

набросал кастом

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 из текущей языковой версии(   

Кастом будет работать, если указать идентификатор языка версии сайта с базовым контентом:

$errors = array();
$elementId = $hierarchy->getIdByPath($elementPath, false, $errors, false, $langId);

Идентификатор языка можно просто указать, но это будет не универсально, можно воспользоваться API, например:

$baseLangPrefix = 'ru';
$langId = langsCollection::getInstance()->getLangId($baseLangPrefix);

или

$langId = langsCollection::getInstance()->getDefaultLang()->getId();

*

ilyar

upage думаю будет работать если использовать id страницы, а не путь...

Если известен id страницы то проще воспользоваться API:
$page = umiHierarchy::getInstance()->getElement($pageId);

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

UPage и другие протоколы и тоже в своей реализации так или иначе используют выборки к базе.

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

Кастомный метод не волшебник и данные без обращения к базе не предоставит, кроме случая когда данные находятся в другом месте.

Если реализовать Вашу задачу в кастомный методе, то придется воспользоваться либо new selector() (на нем построен протокол USel), либо методы API страниц umiHierarchy::getInstance() в обоих случаях это запрос к базе.

Можно посмотреть результирующий SQL, для этого надо включить отладку запросов:
define('SQL_QUERY_DEBUG', true);
define('DEBUG_SQL_SELECTOR',  true);

*

crazygeorgio

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

Цитировать
Кастомный метод не волшебник и данные без обращения к базе не предоставит, кроме случая когда данные находятся в другом месте.
Евгений говорил как-то что лучше использовать кастом с селектором, нежели подобный usel, я поверил на слово

*

crazygeorgio

  • ***
  • 140
  • +7/-0
    • Просмотр профиля
Цитировать
$errors = array();
$elementId = $hierarchy->getIdByPath($elementPath, false, $errors, false, $langId);

ок! не понимаю почему в доках не описать было два последних параметра, как обычно в общем-то)