LINUX.ORG.RU

Magento — любовь моя!

 , , ,


1

1

Ситуация таковая: есть один маленький ынтырпрайзный модуль, который использует объект сессии как временное хранилище данных, которые необходимы для его работы.

Пример кода

private function preparedData(){
    $result = array();
    $session = Mage::getSingleton('checkout/session');
    $order = Mage::getModel('sales/order')->loadByIncrementId($session->getLastRealOrderId());

    foreach ($order->getAllVisibleItems() as $itemId => $item)
    {
      $result['orders_sales'][] = array(
          'name'  => $item->getName(),
          'price' => (string)number_format($item->getPrice(), 2, '.', ''),
          'count' => (int)$item->getQtyOrdered()

      );
    }
	//var_dump($session); die;
    $result['order_id_unique'] = $order->getRealOrderId().'_'.uniqid();
    $result['store_passwd'] = $this->getConfigData('shoppassword');
    $result['store_id'] = $this->getConfigData('shopident');
    $result['amount'] = (string)number_format($order->getGrandTotal(), 2, '.', '');
    $result['merchantType'] = (string)$session->system;
    $result['partsCount'] = (string)$session->parts;
    $result['currency'] = $order->getOrderCurrencyCode();
    $result['responseUrl'] = Mage::getUrl('payparts/payment/return/', array('transaction_id' => $order->getRealOrderId()));
    $result['redirectUrl'] = Mage::getUrl('payparts/payment/fail/');
    $result['products_string'] = "";
	
    if($order->getTaxAmount()){
      $result['orders_sales'][] = array(
          'name' => 'Tax',
          'price' => (string)number_format($this->getTax($order), 2, '.', ''),
          'count' => 1
      );
    }

    for ($i=0; $i<count($result['orders_sales']);$i++)
    {
      $result['products_string'] .= $result['orders_sales'][$i]['name']
          .(string)$result['orders_sales'][$i]['count']
          .str_replace('.', '', $result['orders_sales'][$i]['price']);
    }

    $requestData = json_encode(
        array(
            "storeId"      => $result['store_id'],
            "orderId"      => $result['order_id_unique'],
            "amount"       => $result['amount'],
            "currency"     => $result['currency'],
            "partsCount"   => $result['partsCount'],
            "merchantType" => $result['merchantType'],
            "products"     => $result['orders_sales'],
            "responseUrl"  => $result['responseUrl'],
            "redirectUrl"  => $result['redirectUrl'],
            "signature"    => $this->getSignature($result)
        )
    );

    //var_dump($requestData); die;
    return $requestData;
  }

Но вот незадача, другой модуль также использует как я понимаю этот же объект сессии для своих целей и затирает данные.

В результате первый модуль делает «Опаньки!»

Модуль не мой.

Вопрос: как и где в Мадженто сохранять промежуточные данные, чтобы избежать такой проблемы?

Ткните в документацию пожалуйста :-)

★★★★★

Ответ на: комментарий от r_asian

Тоже о нем думаю, пока не читал доки, а как его прикрутить на впске?

Twissel ★★★★★
() автор топика

Сохраняй их в битрикс, на маженте в РФ делать нечего, одна трахань. Модули друг с другом не дружат, половина под ionCube, ну нафиг, мы наигрались и переехали.

BaBL ★★★★★
()

В смысле затирает? Ключи одинаковые?
Если данные нужны в рамках одного запроса, то я бы использовал context, если он там есть.

ritsufag ★★★★★
()
Ответ на: комментарий от crutch_master

Вот или постараюсь промониторить или перепишу сам модуль, чтобы он не использовал сессии.

Twissel ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

Может просто для этого модуля создать отдельную сессию.

Я так думаю.

Twissel ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.