product_custom_fields баг или фича?

Смотрим shopCsvProductupload.controller.php


        /**
         * @event product_custom_fields
         * @return array[string]string $return[%plugin_id%]['product'] array
         * @return array[string]string $return[%plugin_id%]['sku'] array
         */
        $custom_fields = wa('shop')->event('product_custom_fields');
        if ($custom_fields) {
            foreach ($custom_fields as $plugin_id => $custom_plugin_fields) {
                # %plugin_id%-plugin became %plugin_id%_plugin
                $plugin_id = preg_replace('@-plugin$@', '_plugin', $plugin_id);
                if (isset($custom_plugin_fields['product'])) {
                    foreach ($custom_plugin_fields['product'] as $field_id => $field_name) {
                        $fields['product_custom_fields'][$plugin_id.':'.$field_id] = $field_name;
                    }
                }
                if (isset($custom_plugin_fields['sku'])) {
                    foreach ($custom_plugin_fields['sku'] as $field_id => $field_name) {
                        $fields['sku_custom_fields']['skus:-1:'.$plugin_id.':'.$field_id] = $field_name;
                    }
                }
            }
        }

Обратите внимание, что в $fields у нас основной ключ sku_custom_fields

Смотрим далее:

if ($flat) {
$fields_ = $fields;
$fields = array();
$flat_order = array(
'product:name',
'sku:skus:-1:name',
'sku:skus:-1:sku',
'product:currency'
);

foreach ($flat_order as $field) {
list($type, $field) = explode(':', $field, 2);
$fields[$field] = $fields_[$type][$field];
unset($fields_[$type][$field]);
}
$fields += $fields_['sku'];
$fields += $fields_['product'];
}

return $fields;

Отсюда мы видим, что вся работа, которая произошла в хуке product_custom_fields в дальнейшем не используется.

Соответственно при экспорте дополнительные поля не видны.

Если это реально баг, прошу исправить это в срочном порядке. Если не баг, объясните что я делаю не так:


Если я пользуюсь этим хуком:

public function productCustomFields()
{
return array(
'sku' => array(
'opt_sku_price' => _wp('User category price'),
'opt_sku_user_category_id' => _wp('User category id'),
)
);
}

Эти поля не видны при экспорте.

1 ответ

  • 2
    Алексей Webasyst 6 декабря 2016 12:37 #

    https://developers.webasyst.ru/hooks/shop/product_...
    Позволяет объявить собственные поля товара и артикула для импорта из CSV-файла.

    • +2
      ITFrogs ITFrogs 6 декабря 2016 13:40 #

      я говорю о том, что данные пропадают и не объявляются. посмотрите код. Там кто-то напутал в индексах.

      • +1
        Алексей Алексей Webasyst 6 декабря 2016 14:31 #

        Пропадают при каком действии?
        Вы объявили поля, при импорте CSV в списке они появились для указания соответствия. Потом в плагине обработали данные.

        • +1
          ITFrogs ITFrogs 6 декабря 2016 16:23 #

          Давайте с другого боку зайдем...

          Вот вы готовите массивы данных:

          $fields['product_custom_fields']
          $fields['sku_custom_fields']

          Но потом их нигде не используете.

          Ну и сотрите их тогда раз они не нужны. Зачем лишнее действие выполняете?

          А, если не стереть и исправить, то поля, подготовленные плагином, появятся при экспорте.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите