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'),
)
);
}
Эти поля не видны при экспорте.
5 ответов
https://developers.webasyst.ru/hooks/shop/product_...
Позволяет объявить собственные поля товара и артикула для импорта из CSV-файла.
я говорю о том, что данные пропадают и не объявляются. посмотрите код. Там кто-то напутал в индексах.
Пропадают при каком действии?
Вы объявили поля, при импорте CSV в списке они появились для указания соответствия. Потом в плагине обработали данные.
Давайте с другого боку зайдем...
Вот вы готовите массивы данных:
Но потом их нигде не используете.
Ну и сотрите их тогда раз они не нужны. Зачем лишнее действие выполняете?
А, если не стереть и исправить, то поля, подготовленные плагином, появятся при экспорте.
А что с 16 года это так и не исправили? Пытаюсь обозвать дополнительные поля
При выгрузки в CSV получаю наименования полей в БД без переименования.