/** * Создает информацию для последующего сохранения свойства для товара положенного в корзину из входящего массива. * @param mixed $arr */ public function createProperty($arr) { $productId = $arr['inCartProductId']; $product = new Models_Product(); unset($arr['inCartProductId']); unset($arr['buyWithProp']); unset($arr['amount_input']); unset($arr['ajax']); unset($arr['updateCart']); unset($arr['delFromCart']); unset($arr['propertySetId']); unset($arr['calcPrice']); $property = ''; // Фиктивная информация о характеристиках, выводимая в публичной части, в понятном пользователям виде. $propertyReal = ''; // Реальная защищенная информация о характеристиках, не выводимая в публичной части, хранящаяся в сессии в корзине. foreach ($arr as $key => $value) { // Разбор зашифрованых ключей (номер характеристики#номер пункта), для множественной характеристики (чекбоксы). $keyParse = array(); $pattern = "/^(.*)#(.*)\$/"; preg_match($pattern, $key, $matches); if (isset($matches[1]) && isset($matches[2])) { // Получили данные из ключа, теперь по ним можно достать реальную информацию о добавочной стоимости пункта. $keyParse = array('property_id' => $matches[1], 'numberElement' => $matches[2]); } // В значении тоже может передаваться дополнительная стоимость, это если доступен только один пункт (select и radiobutton). $valueParse = array(); preg_match($pattern, $value, $matches); if (isset($matches[1]) && isset($matches[2])) { // Получили данные из ключа, теперь по ним можно достать реальную информацию о добавочной стоимости пункта. $valueParse = array('property_id' => $matches[1], 'numberElement' => $matches[2]); } $parseData = null; // Если и ключ и значение удалось распарсить, приоритет ключу. if (!empty($keyParse)) { $parseData = $keyParse; } elseif (!empty($valueParse)) { $parseData = $valueParse; } if (in_array($keyParse['property_id'], array(60, 61, 63))) { unset($parseData); //return array('property' => $property, 'propertyReal' => $propertyReal); } // Если ключ расшифрован найден, надо дописывать добавочные стоимости. if (!empty($parseData)) { $item = $product->getProduct($productId); // воспроизводим набор реальных характеристик, чтобы избежать бага с перезаписью сессиии из второй вкладки $propertyFormData = $product->createPropertyForm($param = array('id' => $productId, 'productUserFields' => $item['thisUserFields'], 'maxCount' => $item['count'], 'blockedProp' => $product->noPrintProperty(), 'currency_iso' => $item['currency_iso'])); $currencyRate = MG::getSetting('currencyRate'); $currencyShort = MG::getSetting('currencyShort'); $currencyRate = $currencyRate[$item['currency_iso']]; $currencyShort = $currencyShort[$item['currency_iso']]; $realVal = $propertyFormData['propertyNodummy'][$parseData['property_id']][$parseData['numberElement']]['value']; $realName = $propertyFormData['propertyNodummy'][$parseData['property_id']][$parseData['numberElement']]['name']; $data = $product->parseMarginToProp($realVal); if (empty($data) && !empty($realVal)) { $data['name'] = $realVal; $data['margin'] = 0; } if (!empty($data)) { $plus = $product->addMarginToProp($data['margin'], $currencyRate); $plus = OUTPUT_MARGIN == '0' ? '' : $plus; $property .= '<div class="prop-position"> <span class="prop-name">' . $realName . ': ' . str_replace('_', ' ', $data['name']) . '</span> <span class="prop-val">' . $plus . '</span></div>'; $propertyReal .= '<div class="prop-position"> <span class="prop-name">' . $realName . ': ' . str_replace('_', ' ', $data['name']) . '</span> <span class="prop-val"> ' . $realVal . '</span></div>'; } } else { if (in_array($keyParse['property_id'], array(60, 61, 63))) { $realName = $productId == 63 ? "Ткани для блузок" : ($productId == 60 ? "Ткани для платьев" : "Ткани для юбок"); $data_v = explode("#", $value); $property .= '<div class="prop-position"> <span class="prop-name">' . $realName . ': ' . str_replace('_', ' ', $data_v[0]) . '</span> <span class="prop-val"> ' . $data_v[1] . ' руб.</span></div>'; $propertyReal .= '<div class="prop-position"> <span class="prop-name">' . $realName . ': ' . str_replace('_', ' ', $data_v[0]) . '</span> <span class="prop-val"> ' . $value . '</span></div>'; //unset($keyParse); //return array('property' => $property, 'propertyReal' => $propertyReal); } else { // Иначе, выбрана обычная характеристика без стоимости. $property .= '<div class="prop-position"> <span class="prop-name">' . str_replace('_', ' ', $key) . '</span>: <span class="prop-val">' . $value . '</span></div>'; } } } return array('property' => $property, 'propertyReal' => $propertyReal); }
/** * Создает информацию для последующего сохранения свойства для товара положенного в корзину из входящего массива. * @param mixed $arr */ public function createProperty($arr) { $product = new Models_Product(); unset($arr['inCartProductId']); unset($arr['buyWithProp']); unset($arr['amount_input']); unset($arr['ajax']); unset($arr['updateCart']); unset($arr['delFromCart']); $property = ''; // Фиктивная информация о характеристиках, выводимая в публичной части, в понятном пользователям виде. $propertyReal = ''; // Реальная защищенная информация о характеристиках, не выводимая в публичной части, хранящаяся в сессии в корзине. foreach ($arr as $key => $value) { // Разбор зашифрованых ключей (номер характеристики#номер пункта), для множественной характеристики (чекбоксы). $keyParse = array(); $pattern = "/^(.*)#(.*)\$/"; preg_match($pattern, $key, $matches); if (isset($matches[1]) && isset($matches[2])) { // Получили данные из ключа, теперь по ним можно достать реальную информацию о добавочной стоимости пункта. $keyParse = array('property_id' => $matches[1], 'numberElement' => $matches[2]); } // В значении тоже может передаваться дополнительная стоимость, это если доступен только один пункт (select и radiobutton). $valueParse = array(); preg_match($pattern, $value, $matches); if (isset($matches[1]) && isset($matches[2])) { // Получили данные из ключа, теперь по ним можно достать реальную информацию о добавочной стоимости пункта. $valueParse = array('property_id' => $matches[1], 'numberElement' => $matches[2]); } $parseData = null; // Если и ключ и значение удалось распарсить, приоритет ключу. if (!empty($keyParse)) { $parseData = $keyParse; } elseif (!empty($valueParse)) { $parseData = $valueParse; } // Если ключ расшифрован найден, надо дописывать добавочные стоимости. if (!empty($parseData)) { $realVal = $_SESSION['propertyNodummy'][$parseData['property_id']][$parseData['numberElement']]['value']; $realName = $_SESSION['propertyNodummy'][$parseData['property_id']][$parseData['numberElement']]['name']; $data = $product->parseMarginToProp($realVal); if (empty($data) && !empty($realVal)) { $data['name'] = $realVal; $data['margin'] = 0; } if (!empty($data)) { $plus = $product->addMarginToProp($data['margin']); $property .= '<div class="prop-position"> <span class="prop-name">' . $realName . ': ' . str_replace('_', ' ', $data['name']) . '</span> <span class="prop-val">' . $plus . '</span></div>'; $propertyReal .= '<div class="prop-position"> <span class="prop-name">' . $realName . ': ' . str_replace('_', ' ', $data['name']) . '</span> <span class="prop-val"> ' . $realVal . '</span></div>'; } } else { // Иначе, выбрана обычная характеристика без стоимости. $property .= '<div class="prop-position"> <span class="prop-name">' . str_replace('_', ' ', $key) . '</span>: <span class="prop-val">' . $value . '</span></div>'; } } return array('property' => $property, 'propertyReal' => $propertyReal); }