Beispiel #1
0
 /**
  * Создает информацию для последующего сохранения свойства для товара положенного в корзину из входящего массива.
  * @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);
 }
Beispiel #2
0
 /**
  * Создает информацию для последующего сохранения свойства для товара положенного в корзину из входящего массива.
  * @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);
 }