UMIhelp

Разработка дополнительного функционала => Custom макросы => Тема начата: korogan от 23 Октября 2012, 19:23:02

Название: Получить имя значения справочника
Отправлено: korogan от 23 Октября 2012, 19:23:02
Здравствуйте!

Помогите реализовать следующую задачу.
НЕ получается ....

Нужно получить имя значения справочника.
То есть, есть страница на которой пользователь проводит поиск
_http://pro-busy.ru.xsph.ru/search_in_a_stone/?fields_filter[a]=679

679 - это id камня по которому проводится поиск.

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

К примеру:
Поиск по камню "Авантюрин"

В данный момент получилось вытащить только его id
Название: Re:Получить имя значения справочника
Отправлено: Rodogor от 24 Октября 2012, 09:55:09
Интересная задача. На тему подписался, будет интересно посмотреть решение.

Я до конца решения не вижу, но попробую свои мысли сформировать.

Думаю, что решение через javascript это лишь выход из ситуации, было бы инетерсно как это запилить на xslt :)

Мне кажется, что можно описать отдельный шаблон на формирование <head> ... </head> ну и через param передавать нужный title. Но вот что-то мне подсказывает, что много менять придётся, если за основу взят demodizzy....
Название: Re:Получить имя значения справочника
Отправлено: korogan от 24 Октября 2012, 10:27:37
Проблема заключается еще в том, что используется TPL шаблонизатор.

Нужна помощь!!!!
Название: Re:Получить имя значения справочника
Отправлено: Vladimir от 24 Октября 2012, 17:53:07
$filter = getRequest('fields_filter');
$name = '';
if($filter and isset($filter['a'])){
$id = (int)$filter['a'];
$o = umiObjectsCollection::getInstance();
if($obj = $o->getObject($id)){
$name = $obj->getName();
}
}
return $name;
Название: Re:Получить имя значения справочника
Отправлено: Vladimir от 24 Октября 2012, 17:55:13
Хотя, если 'a' - это имя поля, то вам поможет data getPropertyOfObject
Название: Re:Получить имя значения справочника
Отправлено: korogan от 24 Октября 2012, 18:54:21
Немного не понял, объясните пожалуйста как использовать кастом

a - это не имя поля, это справочник буквы А где хранятся камни этой буквы.
Есть еще другие буквы b, с, d итд   
Название: Re:Получить имя значения справочника
Отправлено: Vladimir от 24 Октября 2012, 19:23:48
Тогда не понял я. Как из "А" следует "Авантюрин". А если там будет 25 камней?
Название: Re:Получить имя значения справочника
Отправлено: Vladimir от 24 Октября 2012, 19:24:53
Про кастомы http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/razrabotka_sobstvennyh_makrosov_i_modulej/sozdanie_modulya/#write_macrosses
Название: Re:Получить имя значения справочника
Отправлено: korogan от 24 Октября 2012, 19:39:26
a - это справочник,
камни в нем каждый под своим id лежат
Название: Re:Получить имя значения справочника
Отправлено: Vladimir от 24 Октября 2012, 21:01:52
Все равно непонятно. Зачем имя справочника? Да еще, поди, и на русском языке? Справочнику нужен id  или имя поля, к которому он привязан
Название: Re:Получить имя значения справочника
Отправлено: korogan от 24 Октября 2012, 21:04:08
Справочник несет значения для фильтрации товаров.
При фильтрации к примеру по камню Агат нужно на страницы получить его имя.
Название: Re:Получить имя значения справочника
Отправлено: Vladimir от 25 Октября 2012, 11:13:05
Нет. Вы говорите, что "а" - это не имя поля. Тогда что это? Я не могу понять как вы фильтруете по имени справочника.

Например
fields_filter[vendor]=2541368
vendor - имя поля в типе данных страницы
2541368 - id элемента справочника

Как у вас в аналогичной записи вдруг оказалось имя справочника??? И тогда - а где вы вообще это имя задаете?

Без претензий - может, вы и правы, а я не знаю какого-то очевидного способа.  Но пока мне непонятны ваши действия.
Название: Re:Получить имя значения справочника
Отправлено: korogan от 25 Октября 2012, 11:22:08
a - это имя поля. Вы меня просто не поняли.
К нему подцеплен справочник

fields_filter[a]=659
a - поле
679 - авнтюрин

 
Название: Re:Получить имя значения справочника
Отправлено: Vladimir от 25 Октября 2012, 12:54:42
Разобрались. Тогда, на мой взгляд, проще всего макросом. С некоторой корректировкой:
$filter = getRequest('fields_filter');
$name = '';
if($filter){
$id = (int)$filter[key($filter)];
$o = umiObjectsCollection::getInstance();
if($obj = $o->getObject($id)){
$name = $obj->getName();
}
}
return $name;
Название: Re:Получить имя значения справочника
Отправлено: korogan от 25 Октября 2012, 13:14:22
Может кому пригодится.

Решение следующее:
В файл /classes/modules/content/__custom.php
Вставляем слудующий код

public function getStoneName(){

$filter = getRequest('fields_filter');
$name = '';
if($filter){
$id = (int)$filter[key($filter)];
$o = umiObjectsCollection::getInstance();
if($obj = $o->getObject($id)){
$name = $obj->getName();
}
}
return $name;
}

};

Макрос для вывода %content getStoneName()%

Огромное спасибо Владимиру!!!
Название: Re:Получить имя значения справочника
Отправлено: korogan от 25 Октября 2012, 14:52:27
Хотя есть небольшая заковырка:

Если пользователь не залогинен или находится в группе пользователи, получаем следующее сообщение:

You are not allowed to execute content/getStoneName

Как разрешить?