Регистрация: 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 бол.
....
)