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

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

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


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


Добавлено: 30.08.14 01:40:20  




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


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

Заметил в предыдущих своих постах опечатку:
Вместо
 $ret .= '<prop name="' . ... . '">' . ... . "</prop>\n";

Должно быть
 $ret .= '<param name="' . ... . '">' . ... . "</param>\n";


Собственно, вот что у меня получилось в итоге:

// Составление параметров для выгрузки на маркет
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']], ";"));
                        $refName = $oDB->select("SELECT `name` FROM `cms_es_reference_" . sprintf("%04d", $custtypes[$key]['ref_table_num']) . "` where id in(" . $rIds . ")");
                        foreach ($refName as $item) {
                            $ret .= '<param name="' . $value . '">' . $item['name'] . "</param>\n";
                        }
                        break;
                    // Все остальные типы свойств
                    default :
                        $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;
}



0


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