Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Как передать атрибуты в корзину?


Recommended Posts

3 минуты назад, tanya2307 сказал:

Да, я понимаю, что тут надо добавлять. Но, наверное, еще и в контроллере?

да, в контроллере корзины

посмотрите как получаются атрибуты в карточке товара, сделайте функцию которая получит только нужный атрибут и прям в библиотеке ее втулите

Надіслати
Поділитися на інших сайтах

В /system/library/cart/cart.php добавляю:

	public function getProducts() {
		$product_data = array();

		$cart_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "cart WHERE api_id = '" . (isset($this->session->data['api_id']) ? (int)$this->session->data['api_id'] : 0) . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "'");

		foreach ($cart_query->rows as $cart) {
			$stock = true;

			$product_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_to_store p2s LEFT JOIN " . DB_PREFIX . "product p ON (p2s.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND p2s.product_id = '" . (int)$cart['product_id'] . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.date_available <= NOW() AND p.status = '1'");

              <!--Вставка начинается-->
			if ($product_query->num_rows && ($cart['quantity'] > 0)) {
			    
			    $product_attribute_group_data = array();

		$product_attribute_group_query = $this->db->query("SELECT ag.attribute_group_id, agd.name FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "attribute a ON (pa.attribute_id = a.attribute_id) LEFT JOIN " . DB_PREFIX . "attribute_group ag ON (a.attribute_group_id = ag.attribute_group_id) LEFT JOIN " . DB_PREFIX . "attribute_group_description agd ON (ag.attribute_group_id = agd.attribute_group_id) WHERE pa.product_id = '" . (int)$product_query->row['product_id'] . "' AND agd.language_id = '" . (int)$this->config->get('config_language_id') . "' GROUP BY ag.attribute_group_id ORDER BY ag.sort_order, agd.name");

		foreach ($product_attribute_group_query->rows as $product_attribute_group) {
			$product_attribute_data = array();

			$product_attribute_query = $this->db->query("SELECT a.attribute_id, ad.name, pa.text FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "attribute a ON (pa.attribute_id = a.attribute_id) LEFT JOIN " . DB_PREFIX . "attribute_description ad ON (a.attribute_id = ad.attribute_id) WHERE pa.product_id = '" . (int)$product_query->row['product_id'] . "' AND a.attribute_group_id = '" . (int)$product_attribute_group['attribute_group_id'] . "' AND ad.language_id = '" . (int)$this->config->get('config_language_id') . "' AND pa.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY a.sort_order, ad.name");

			foreach ($product_attribute_query->rows as $product_attribute) {
				$product_attribute_data[] = array(
					'attribute_id' => $product_attribute['attribute_id'],
					'name'         => $product_attribute['name'],
					'text'         => $product_attribute['text']
				);
			}

			$product_attribute_group_data[] = array(
				'attribute_group_id' => $product_attribute_group['attribute_group_id'],
				'name'               => $product_attribute_group['name'],
				'attribute'          => $product_attribute_data
			);
		}
              <!--Конец вставки-->

В $product_data[] = array добавляю 

'attribute'		  => $product_attribute_group_data,

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

Может подскажете?

Надіслати
Поділитися на інших сайтах


1 час назад, tanya2307 сказал:

не могу понять, что и где менять в контроллере?

$attributes = array();
foreach ($product['attribute'] as $attr) {
    // тут выбираете какие нужно
    // и добавляете в массив $attribures
}
$data['products'][] = array(
    // добавляем в массив с товарами
    'attributes' => $attributes,
    'cart_id' => $product['cart_id'],
    'thumb' => $image,
    'name' => $product['name'],
    'model' => $product['model'],
    'option' => $option_data,
    'recurring' => $recurring,
    'quantity' => $product['quantity'],
    'stock' => $product['stock'] ? true : !(!$this->config->get('config_stock_checkout') || $this->config->get('config_stock_warning')),
    'reward' => ($product['reward'] ? sprintf($this->language->get('text_points'), $product['reward']) : ''),
    'price' => $price,
    'total' => $total,
    'href' => $this->url->link('product/product', 'product_id=' . $product['product_id'])
);

 

Надіслати
Поділитися на інших сайтах

  • 4 months later...

Кому надо для 1.5.6.4 и simple 
/system/library/cart/cart.php 

после 

// Downloads		
$download_data = array();     		

$download_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_to_download p2d LEFT JOIN " . DB_PREFIX . "download d ON (p2d.download_id = d.download_id) LEFT JOIN " . DB_PREFIX . "download_description dd ON (d.download_id = dd.download_id) WHERE p2d.product_id = '" . (int)$product_id . "' AND dd.language_id = '" . (int)$this->config->get('config_language_id') . "'");

foreach ($download_query->rows as $download) {
....
}

Вставил код ( где 52 - id нужного атрибута )

//present
$present_data = array();
        
$present_query = $this->db->query("SELECT a.attribute_id, ad.name, pa.text FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "attribute a ON (pa.attribute_id = a.attribute_id) LEFT JOIN " . DB_PREFIX . "attribute_description ad ON (a.attribute_id = ad.attribute_id) WHERE pa.product_id = '" . (int)$product_id . "' AND ad.language_id = '" . (int)$this->config->get('config_language_id') . "' AND pa.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY a.sort_order, ad.name");

foreach ($present_query->rows as $product_presents) {
   if ($product_presents['attribute_id'] == 52) {
       $present_data[] = array(
           'name'         => $product_presents['name'],
           'text'         => $product_presents['text']		 	
       );
   }
}

После 

$this->data[$key] = array(
....
'download'                  => $download_data,

добавил 

'presents'                  => $present_data,

Дальше в файле 

/catalog/controller/checkout/simplecheckout_cart.php

после кода 

$option_data = array();

foreach ($product['option'] as $option) {
.....
}

Вставил 

//present_attr
$present = array();

foreach ($product['presents'] as $presents) {
  $present[] = array(
    'name'  => $presents['name'],
    'text'  => $presents['text']
  );
} 

В 3 местах после 

$this->_templateData['products'][] = array(
....
'option'              => $option_data,

Вставил

'present'             => $present,

 

Ну и в сам файл шаблона 

/catalog/view/theme/default/template/checkout/simplecheckout_cart.tpl

после 

<div class="options">
 	<?php foreach ($product['option'] as $option) { ?>
 		 &nbsp;<small> - <?php echo $option['name']; ?>: <?php echo $option['value']; ?></small><br />
	<?php } ?>

 Вставил код 

<?php foreach ($product['present'] as $attr) { ?>
- <small><?php echo $attr['name']; ?>: <?php echo $attr['text']; ?></small><br />
<?php } ?>

Вроде все работает, подскажите плз есть ли разница где делать условие в файле /system/library/cart/cart.php или в /catalog/controller/checkout/simplecheckout_cart.php

Змінено користувачем roman21
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.