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

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

Приглашаем в блог Amiro.CMS. Регулярные обзоры, опыт, решения, практикумы.
Форум  ->   Разработка плагинов, вопросы по API  ->  Связь товара и его свойств (точнее их названий)


Показать все сообщения в этой ветке


Добавлено: 28.08.14 22:51:22  




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


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

Пытаюсь сделать выгрузку на Яндекс.Маркет со свойствами товаров (чего, как ни странно, в стандартной реализации нет).
Вытряс из ТП вот такой ответ:

Здравствуйте,

Если не перечислять вручную, то можно организовать через php-функицю, например, так -

function getCustomFieldsXML ($id) {
$ret = '';
$oItem = AMI::getResourceModel('eshop_item/table'->find($id);
foreach($oItem->getData() as $key => $value) {
if(strpos($key, 'custom_field_' === 0 && isset($value) && mb_strlen($value) > 0) {
$ret .= '<'.$key.'>'.$value.'</'.$key.">\n";
}
}
return $ret;
}

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


Долго бился над тем, как же имея готовую и, в принципе, рабочую функцию, получить dataset_data. Оказалось что ни как.
В итоге написал вот такой код:
function getCustomFieldsXML($id) {
    $ret = '';
    $oRes = AMI::getResourceModel('eshop_item/table');
    $oRes->setActiveDependence('cat');
    $oItem = $oRes->getList();
    $oItem->addColumn('*');
    $oItem->addColumn('dataset_data', 'cat');
    $oItem->setWhereDef("AND i.id=".$id);
    $oItem->load();
    if ($oItem->count() > 0) {
        $data = $oItem->current()->getData();
        $ret .= print_r($data,TRUE);
        $dataSet = unserialize($data['cat_dataset_data']);
        $ret .= print_r($dataSet,TRUE);
        /*foreach ($data as $key => $value) {
            if (strpos($key, 'custom_field_') === 0 && isset($value) && mb_strlen($value) > 0) {
                $cfId = str_replace('custom_field_', "", $key);
                $ret .= '<prop name="' . $dataSet['fields_captions'][$cfId] . '">' . $value . "</prop>\n";
            }
        }*/
    }
    return $ret;
}


В целом оно все работает, значение custom_field товара получаем. dataset_data тоже получаем (в данном случае поле называется cat_dataset_data).
Но есть одно большое и противное НО, с которым я не понимаю как бороться: в результате запроса я получаю значения custom_field_N товара, где N[6,35], и названия свойств в массиве cat_dataset_data[fields_captions][M], где M[71,87].

А теперь вопрос: как связать название свойства и его значение, если идентификаторы названий идут от 71 до 87, а идентификаторы значений от 6 до 35?
Где логика?

Кто ни чего не понял, результаты выполнения функции можно посмотреть тут: http://business.rame0.biz/

Для примера, ситуация с доп.изображениями:
Значения у товара хранятся как:
Array
(
.......
    [custom_field_26] => _mod_files/ce_images/eshop/eshop-noim-s.jpg
    [custom_field_27] => _mod_files/ce_images/eshop/eshop-noim.jpg
    [custom_field_28] => _mod_files/ce_images/eshop/eshop-noim-s.jpg
    [custom_field_29] => _mod_files/ce_images/eshop/eshop-noim.jpg
    [custom_field_30] => _mod_files/ce_images/eshop/eshop-noim-s.jpg
    [custom_field_31] => _mod_files/ce_images/eshop/eshop-noim.jpg
    [custom_field_32] => _mod_files/ce_images/eshop/eshop-noim-s.jpg
    [custom_field_33] => _mod_files/ce_images/eshop/eshop-noim.jpg
    [custom_field_34] => _mod_files/ce_images/eshop/eshop-noim-s.jpg
    [custom_field_35] => _mod_files/ce_images/eshop/eshop-noim.jpg
......
)


А вот названия свойств хранятся как:
[fields_captions] => Array
        (
....
            [90] => Доп. изображение 1 мал.
            [91] => Доп. изображение 1 бол.
            [92] => Доп. изображение 2 мал.
            [93] => Доп. изображение 2 бол.
            [94] => Доп. изображение 3 мал.
            [95] => Доп. изображение 3 бол.
            [96] => Доп. изображение 4 мал.
            [97] => Доп. изображение 4 бол.
            [98] => Доп. изображение 5 мал.
            [99] => Доп. изображение 5 бол.
....
)



0


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