VirtueMart хранит в базе данных (в таблице #__virtuemart_products) параметры товаров (product_box и ещё некоторые) в таком, скажем так, специфичном виде :)
Даже не знаю, почему так. Почему нельзя хранить, допустим, строку json...
Наверно, так сложилось исторически.
Делюсь решением парсинга и обратной упаковки, дабы упростить жизнь в будущем и себе, и людям.
Делал человеку скрипт для импорта товаров из 1С (со своеобразными условиями), столкнулся с этим вопросом.
Даже не знаю, почему так. Почему нельзя хранить, допустим, строку json...
Наверно, так сложилось исторически.
Делюсь решением парсинга и обратной упаковки, дабы упростить жизнь в будущем и себе, и людям.
Делал человеку скрипт для импорта товаров из 1С (со своеобразными условиями), столкнулся с этим вопросом.
// предположим, product_params из БД у нас в результате селекта
$old_params = $select->product_params;
// парсим
$old_params_arr = explode('|', $old_params);
$arr = [];
foreach ($old_params_arr as $o) {
if (empty(trim($o))) continue;
$para_arr = explode('=', $o);
$arr[trim($para_arr[0])] = trim(trim($para_arr[1]), '"');
unset($o, $para_arr);
}
// в массиве меняем, что хотим
$arr['product_box'] = 'что_хотим';
// упаковываем
foreach ($arr as $k => $ar) {
$new_params[] = $k.'="'.$ar.'"';
unset($k, $ar);
}
$prod->product_params = implode('|', $new_params).'|';
// заново упакованные параметры теперь в $prod->product_params
Особо комментировать не буду. Если что непонятно, обращайтесь в комментариях!
Комментариев нет:
Отправить комментарий