Перейти к содержанию
Официальный форум поддержки Simpla

Вывести в корзину характеристики товара (свойства)


Рекомендуемые сообщения

Добрый день!
Подскажите, пожалуйста, каким образом можно вывести в корзине одно из свойств товара (например, цвет). Заранее спасибо!

Ссылка на сообщение
Поделиться на другие сайты
  • 1 год спустя...

Для версии 2.2.4

правим файл /docs/api/Cart.php

  $images = $this->products->get_images(array('product_id'=>$products_ids));
                foreach($images as $image)
                    $products[$image->product_id]->images[$image->id] = $image;


                $features = $this->features->get_options(array('product_id'=>$products_ids));
                foreach($features as $feature)
                    $products[$feature->product_id]->features[$feature->feature_id] = $feature;
                
                foreach($items as $variant_id=>$item)
 
*жирным выделен кусок кода, кода, который нужно добавить.

в шаблоне у товара появилось свойство features, которое содержит свойства товара.
Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...
		$features = $this->features->get_options(array('product_id'=>$products_ids));
		foreach($purchases as &$purchase)
                	$products[$feature->product_id]->features[$feature->feature_id] = $feature;

 

после

 

		foreach($variants as $variant)
			$products[$variant->product_id]->variants[] = $variant;

Ссылка на сообщение
Поделиться на другие сайты

а код этот запихивать в /api/orders.php? потому что там я не нашел :

 

foreach($variants as $variant)
			$products[$variant->product_id]->variants[] = $variant;

а в Cart.php 

 

у меня есть только (закомментированы строки свойств для корзины):

 

				foreach($variants as $variant)
				{
					$items[$variant->id] = new stdClass();
					$items[$variant->id]->variant = $variant;
					$items[$variant->id]->amount = $session_items[$variant->id];
					$products_ids[] = $variant->product_id;
				}
	
				$products = array();
				foreach($this->products->get_products(array('id'=>$products_ids)) as $p)
					$products[$p->id]=$p;
				
				$images = $this->products->get_images(array('product_id'=>$products_ids));
				foreach($images as $image)
					$products[$image->product_id]->images[$image->id] = $image;
			
				// Свойства
//				$features = $this->features->get_product_options($products_ids);
//				foreach($features as &$feature)
//				{
//					$products[$feature->product_id]->features[] = $feature;
//				}

Ссылка на сообщение
Поделиться на другие сайты

Спасибо, а теперь добавляю в ордер.тпл:

 

	{foreach $purchase->product->features as $f}
	<li>
		<label>{$f->name}</label>
		<span>{$f->value}</span>
	</li>
	{/foreach}

но ничего не происходит. может не то добавляю?

Ссылка на сообщение
Поделиться на другие сайты

прошу прощения... ошибочка в моих строках

 

		$features = $this->features->get_product_options($products_ids);
		foreach($features as &$feature)
                	$products[$feature->product_id]->features[$feature->feature_id] = $feature;

Ссылка на сообщение
Поделиться на другие сайты
  • 10 месяцев спустя...

Версия simpla 2.3.3

 

Задача стояла вывести в корзине свойство товара(только свойство, без имени свойства). Почему-то в файле /api/Features.php в функции get_options вручную была прописана группировка результатов, игнорируя переменную $group_by. 

 

/api/Features.php: закомментировать

if(isset($filter['feature_id']))
    $group_by = 'GROUP BY feature_id, value';

после 

if(isset($filter['features']))
   foreach($filter['features'] as $feature=>$value)
   {
      $features_filter .= $this->db->placehold('AND (po.feature_id=? OR po.product_id in (SELECT product_id FROM __options WHERE feature_id=? AND value=? )) ', $feature, $feature, $value);
   }

вставляем 

if(isset($filter['count'])){
			$count_product_id ='';
		} else $count_product_id = ', count(po.product_id) as count';

В этом же фале меняем 

$query = $this->db->placehold("SELECT po.product_id, po.feature_id, po.value, count(po.product_id) as count
            FROM __options po
            $visible_filter
            $category_id_filter
            WHERE 1 $feature_id_filter $product_id_filter $brand_id_filter $features_filter GROUP BY po.feature_id, po.value ORDER BY value=0, -value DESC, value");

на 

$query = $this->db->placehold("SELECT po.product_id, po.feature_id, po.value $count_product_id
            FROM __options po
            $visible_filter
            $category_id_filter
            WHERE 1 $feature_id_filter $product_id_filter $brand_id_filter $features_filter $group_by ORDER BY value=0, -value DESC, value");

/api/Cart.php: 

После

$images = $this->products->get_images(array('product_id'=>$products_ids));
				foreach($images as $image)
					$products[$image->product_id]->images[$image->id] = $image;

вставить

$features = $this->features->get_options(array('product_id'=>$products_ids, 'feature_id'=>'ид свойства', 'count'=>'false'));
				foreach($features as $feature)
				$products[$feature->product_id]->features[$feature->feature_id] = $feature;

если в параметрах функции get_options не указывать 'feature_id', тогда она вернет массив всех свойств.

 

Ну и вывод в cart.tpl

{foreach $purchase->product->features as $f}
   <span>{$f->value}</span>
{/foreach}
Ссылка на сообщение
Поделиться на другие сайты
  • 1 год спустя...

Версия simpla 2.3.3

 

Задача стояла вывести в корзине свойство товара(только свойство, без имени свойства). Почему-то в файле /api/Features.php в функции get_options вручную была прописана группировка результатов, игнорируя переменную $group_by. 

 

/api/Features.php: закомментировать

if(isset($filter['feature_id']))
    $group_by = 'GROUP BY feature_id, value';

после 

if(isset($filter['features']))
   foreach($filter['features'] as $feature=>$value)
   {
      $features_filter .= $this->db->placehold('AND (po.feature_id=? OR po.product_id in (SELECT product_id FROM __options WHERE feature_id=? AND value=? )) ', $feature, $feature, $value);
   }

вставляем 

if(isset($filter['count'])){
			$count_product_id ='';
		} else $count_product_id = ', count(po.product_id) as count';

В этом же фале меняем 

$query = $this->db->placehold("SELECT po.product_id, po.feature_id, po.value, count(po.product_id) as count
            FROM __options po
            $visible_filter
            $category_id_filter
            WHERE 1 $feature_id_filter $product_id_filter $brand_id_filter $features_filter GROUP BY po.feature_id, po.value ORDER BY value=0, -value DESC, value");

на 

$query = $this->db->placehold("SELECT po.product_id, po.feature_id, po.value $count_product_id
            FROM __options po
            $visible_filter
            $category_id_filter
            WHERE 1 $feature_id_filter $product_id_filter $brand_id_filter $features_filter $group_by ORDER BY value=0, -value DESC, value");

/api/Cart.php: 

После

$images = $this->products->get_images(array('product_id'=>$products_ids));
				foreach($images as $image)
					$products[$image->product_id]->images[$image->id] = $image;

вставить

$features = $this->features->get_options(array('product_id'=>$products_ids, 'feature_id'=>'ид свойства', 'count'=>'false'));
				foreach($features as $feature)
				$products[$feature->product_id]->features[$feature->feature_id] = $feature;

если в параметрах функции get_options не указывать 'feature_id', тогда она вернет массив всех свойств.

 

Ну и вывод в cart.tpl

{foreach $purchase->product->features as $f}
   <span>{$f->value}</span>
{/foreach}

пробую в версии 2.3.7 - не работает - может сталкивались? - а нет, все работает!! - руки :)

Изменено пользователем xsepa
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...