protected function parseValue($value, $type) { $dimensions = shopDimension::getInstance(); $data = array(); if (strpos($type, '.')) { $type = preg_replace('/^.+\\./', '', $type); if (!is_array($value) || count($value) == 1) { $matches = null; $value = trim(is_array($value) ? reset($value) : $value); if (preg_match('/^(\\-?\\d+([\\.,]\\d+)?)\\s+(.+)$/', $value, $matches)) { $value = array('value' => $this->castValue('double', $matches[1]), 'unit' => shopDimension::castUnit($type, trim($matches[3]))); } else { $value = array('value' => $this->castValue('double', $value), 'unit' => ''); } } $value['type'] = $type; } if (!empty($value['code'])) { if (strpos($value['code'], '.')) { list($data['type'], $data['unit']) = explode('.', $value['code'], 2); //$dimension = $dimensions->getDimension($data['type']); } elseif ($dimension = $dimensions->getDimension(empty($value['type']) ? $value['code'] : $value['type'])) { $data['type'] = !empty($value['type']) ? $value['type'] : $value['code']; $data['unit'] = !empty($value['unit']) ? $value['unit'] : $dimension['base_unit']; } else { $data['unit'] = !empty($value['unit']) ? $value['unit'] : ''; $data['type'] = null; } } else { $data['type'] = !empty($value['type']) ? $value['type'] : ''; if ($dimension = $dimensions->getDimension($data['type'])) { $data['unit'] = !empty($value['unit']) ? $value['unit'] : $dimension['base_unit']; } else { $data['unit'] = !empty($value['unit']) ? $value['unit'] : ''; } } $data['unit'] = $dimensions->fixUnit($data['type'], $data['unit']); $data['value'] = isset($value['value']) ? $this->castValue('double', $value['value']) : 0; $data['value_base_unit'] = $dimensions->convert($data['value'], $data['type'], null, $data['unit']); return $data; }