Не зарегистрирован
Вход
Забыли пароль?
Регистрация
Подписаться
Сэкономьте время — перед вопросом на форуме узнайте, как найти ответ быстрее
По техническим проблемам необходимо обращаться в Консультационный центр

Поиск по форуму: 

Приглашаем в блог Amiro.CMS. Регулярные обзоры, опыт, решения, практикумы.

Форум  ->   Разработка плагинов, вопросы по API  ->  Справочники товаров

Раздел для разработчиков. Обсуждение создания плагинов, вопросы и пожелания по API Amiro.CMS

Добавлено: 02.06.16 01:49:34 #1



Регистрация: 18.05.16
Сообщений: 7


Обратиться по имени

Здравствуйте!
Подскажите пожалуйста, как работать со справочниками товаров по API, а именно
- вывести все справочки
- получить данные из справочника

с категориями товаров вроде все понятно...
$oEshopCatModel = AMI::getResourceModel('eshop_cat/table');
        $oEshopCatList =
            $oEshopCatModel
                ->getList()
                ->addColumns(array('id', 'header', 'id_parent'))
                ->load();
        foreach($oEshopCatList as $oEshopCatItem){
            $categories[$oEshopCatItem->id] = $oEshopCatItem->header;
        }





Добавлено: 03.06.16 18:55:25 #2



Регистрация: 18.05.16
Сообщений: 7


Обратиться по имени

Поддержка работает???



Добавлено: 06.06.16 09:36:37 #3



Регистрация: 22.10.12
Сообщений: 73


Обратиться по имени

В тех.поддержке ответ был дан третьего числа, дублируем сюда:

У справочников пока своей модели нет, получить данные о них можно с помощью sql-выборки, например:

$oDB = AMI::getSingleton('db');

$aRefTables = array();
$oRS = $oDB->select(DB_Query::getSnippet('show tables like %s')->q('cms_es_reference_%'));
foreach($oRS as $aRecord){
    $aRefTables[] = array_pop($aRecord);
}

foreach($aRefTables as $table) {
    $oRS = $oDB->select(DB_Query::getSnippet('select `id`, `value_1` from `%s`')->plain($table));
    foreach($oRS as $aRecord) {
        // ...
    }
}

Описание приведенных методов есть в документации, http://manual.amiro.ru/docs/api6/DB/AMI_DB.html



Добавлено: 06.06.16 11:40:26 #4



Регистрация: 18.05.16
Сообщений: 7


Обратиться по имени

ок, спасибо, с этим понятно.

А еще такой вопрос:
у товара есть производитель, этот производитель является элементом справочника "Производители".
В таблице с товарами я вижу этого производителя, но только само значение (custom_field_17 = Москва)...
Как мне получить id этого производителя в выборке товаров?
Товары выбираю следующим образом:
$oModel = AMI::getResourceModel('eshop_item/table',
	        array(
	            array('extModeOnConstruct' => 'common', 'doRemapListItems'=>false)
	        )
 		);
$tmp = $oModel->getList()->addColumns(array('id', 'header', 'sku', 'cat_id', 'description', 'body'))->load();

foreach($tmp as $oEshopCatItem){
	# code
}



Добавлено: 06.06.16 12:37:45 #5



Регистрация: 22.10.12
Сообщений: 73


Обратиться по имени

Сначала надо получить номер справочника, привязанного к полю (из ext_eshop_custom_fields/table), дальше опять же sql-выборкой.

В простейшем случае:

$oCustomField = AMI::getResourceModel('ext_eshop_custom_fields/table')->find(17); // custom_field_17

if($oCustomField->value_type == 'ref_value') { // хранится по значению из справочника.
    $oDB = AMI::getSingleton('db');
    $id = $oDB->fetchValue(
        DB_Query::getSnippet('select `id` from `%s` where value_1 = %s')
            ->plain(sprintf('cms_es_reference_%04d', $oCustomField->ref_table_num))
            ->q('Москва')
    );
}



Добавлено: 06.06.16 13:50:41 #6



Регистрация: 18.05.16
Сообщений: 7


Обратиться по имени

C выбором вроде понятно, а если я хочу поменять этого производителя у определенного товара с помощью API это возможно?

Например имея id записи из словаря id = 53 (Ижевск) вставить в товар с id = 2101 (к примеру)

Или же все таки так же запросами?



Добавлено: 06.06.16 18:39:30 #7

Партнер


Регистрация: 22.02.09
Сообщений: 469


Обратиться по имени

Некоторое уточнение:
$oCustomField = AMI::getResourceModel('ext_eshop_custom_fields/table')->find(17); // custom_field_17
этот код вернет не свойство номер 17 (custom_field_17), а свойство с id = 17 и это почти наверняка будут совершенно разные свойства.
17 - это номер свойства, который хранится в поле fnum и более того, может быть два свойства с одинаковым номером - одно обычное свойство, а другое - подвид товара.
Поэтому, зная номер свойства, нужно использовать метод findByFields вместо find и передавать ему значения этих двух полей.
Например:
$oCustomField = AMI::getResourceModel('ext_eshop_custom_fields/table')->findByFields(array('fnum' => 17, 'is_prop' => 0)); // custom_field_17

user57659299:
а если я хочу поменять этого производителя у определенного товара с помощью API это возможно?
Для сохранения значения свойства товара можно использовать модель данных товара - задать значение требуемому полю и использовать метод save для его сохранения.





Создать новую тему

Всего тем: 6629
Всего сообщений: 27746
Всего зарегистрированных пользователей: 48918
Последний зарегистрированный пользователь: alexcool097