Не зарегистрирован
Приглашаем в
блог Amiro.CMS. Регулярные обзоры, опыт, решения, практикумы.
|
Форум -> Разработка плагинов, вопросы по API -> Связь товара и его свойств (точнее их названий)
|
Показать все сообщения в этой ветке |
|
Добавлено: Связь товара и его свойств (точнее их названий)06.09.14 19:16:32 |
|

Регистрация: 24.09.10
Сообщений: 63
Обратиться по имени |
Последняя, рабочая версия 
Добавлять надо в файл common_functions.php
// Составление параметров для выгрузки на маркет
function getCustomFieldsXML($id) {
$ret = "\n";
$oDB = AMI::getSingleton('db');
$custtypesDB = $oDB->select("SELECT * FROM `cms_es_custom_types`");
$custtypes = array();
foreach ($custtypesDB as $ct) {
if ($ct['isnot_all'] == 0 && $ct['is_prop'] == 0 && $ct['type_owner'] == 'item' && !in_array($ct['ftype'], array('picture'))) {
$ct['default_params'] = unserialize($ct['default_params']);
$custtypes[$ct['id']] = $ct;
}
}
//$ret.=print_r($custtypes, true);
$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();
$data['cat_dataset_data'] = unserialize($data['cat_dataset_data']);
//$ret .= print_r($data, TRUE);
foreach ($data['cat_dataset_data']['fields_captions'] as $key => $value) {
if (
// Проверяем, существует ли параметр в описании набора свойств
!empty($custtypes[$key]) &&
// Проверяем, заполнено ли значение параметра
((isset($data["custom_field_" . $custtypes[$key]['fnum']]) && mb_strlen($data["custom_field_" . $custtypes[$key]['fnum']]) > 0)
// Могут быть ситуации, когда значение параметра записано в custom_field_N_1
|| (isset($data["custom_field_" . $custtypes[$key]['fnum'] . "_1"]) && mb_strlen($data["custom_field_" . $custtypes[$key]['fnum'] . "_1"]) > 0))
) {
switch ($custtypes[$key]['value_type']) {
// Если свойство - набор флагов
case 'scalar':
if ($custtypes[$key]['ftype'] == 'flagmap') {
$ret .= flagmapToText($value, $custtypes[$key]['default_params']['flag'][$data['lang']], $data["custom_field_" . $custtypes[$key]['fnum'] . "_1"]);
}
break;
//если свойство - ссылка на знач. справочника или ссылка на много значений справочника
case 'ref_reference':
case 'ref_set':
$rIds = str_replace(";", ",", trim($data["custom_field_" . $custtypes[$key]['fnum']], ";"));
if(mb_strlen($rIds) > 0) {
$refName = $oDB->select("SELECT `name` FROM `cms_es_reference_" . sprintf("%04d", $custtypes[$key]['ref_table_num']) . "` where id in(" . $rIds . ")");
foreach ($refName as $item) {
if(mb_strlen($item['name'])>0)
$ret .= '<param name="' . $value . '">' . $item['name'] . "</param>\n";
}
}
break;
// Все остальные типы свойств
default :
if(mb_strlen($data["custom_field_" . $custtypes[$key]['fnum']])>0)
$ret .= '<param name="' . $value . '">' . $data["custom_field_" . $custtypes[$key]['fnum']] . "</param>\n";
break;
}
}
}
}
return $ret;
}
// Получаем текст из flagmap (набора флагов)
function flagmapToText($pname, $map, $value) {
$result = '' . $value;
foreach ($map as $key => $val) {
if ((pow(2, $key - 1) & $value) > 0) {
$result.= '<param name="' . $pname . '">' . $val['c'] . "</param>\n";
}
}
return $result;
}
|
|
|
| |
|
|
Чтобы добавить сообщение, пожалуйста зарегистрируйтесь и/или войдите в систему. |