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

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

И снова здравствуйте, кто-нибудь уже делал вывод только тех свойств, которые были отмечены (в админке) для конкретной группы или товара? Имеется в виду не полная карточка, а именно в списке товаров ( ProductsView ). Превью во вложении.

post-19436-0-44164800-1496207083_thumb.png

post-19436-0-67100900-1496207083_thumb.png

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

И так, вот решение для вывода свойств товара для каждой КАТЕГОРИИ:

 

1. База данных

Добавляем новое поле в таблице s_features  - in_category - int(11) . На всякий случай указал обычный int , но можно поставить и меньше.

 

2. api/Features.php

в конец класса после метода get_product_options всталяем новый метод :

public function get_visible_options($product_id)
{

$query = $this->db->placehold("SELECT f.id as feature_id, f.name, po.value, po.product_id 
    FROM __options po 
    LEFT JOIN __features f ON f.id=po.feature_id 
    WHERE po.product_id in(?@) AND f.in_category = 1 
    ORDER BY f.position", (array)$product_id);

$this->db->query($query);
return $this->db->results();

}

 

 

Это метод который возвращает нам видимые для категории свойства

 

3. simpla/design/html/features.tpl

 

строка 35 добавляем Добавляем ajax кнопку для включения / выключения свойства

<div id="list">
{foreach $features as $feature}
     <div class="{if $feature->in_filter}in_filter{/if} {if !$feature->in_category}invisible{/if} row">
     ...
          <div class="icons cell">
                <!-- Добавляем ajax кнопку для включения / выключения свойства -->
		<a title="Использовать в категории" class="in_category enable" href='#' ></a>
		<a title="Использовать в фильтре" class="in_filter" href='#' ></a>
		<a title="Удалить" class="delete" href='#' ></a>
	  </div>
          <div class="clear"></div>
     </div>
{/foreach}
</div>

После фунции на 157 строке (a.in_filter) добавляем еще одну

	// Указать "в категории"/"не в категории"
	// Показать категорию
	$("a.enable").click(function() {
		var icon        = $(this);
		var line        = icon.closest(".row");
		var id          = line.find('input[type="checkbox"][name*="check"]').val();
		var state       = line.hasClass('invisible')?1:0;
		icon.addClass('loading_icon');
		$.ajax({
			type: 'POST',
			url: 'ajax/update_object.php',
			data: {'object': 'feature', 'id': id, 'values': {'in_category': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
			success: function(data){
				icon.removeClass('loading_icon');
				if(state)
					line.removeClass('invisible');
				else
					line.addClass('invisible');				
			},
			dataType: 'json'
		});	
		return false;	
	});

4. simpla/design/html/feature.tpl

добавляем чекбокс для свойств в категории 77 строка

<div class="block">
     <h2>Настройки свойства</h2>
	<ul>
	<li><input type=checkbox name=in_filter id=in_filter {if $feature->in_filter}checked{/if} value="1">            <label for=in_filter>Использовать в фильтре</label></li>
				
		<!-- Update in_catergory -->
		<li><input type=checkbox name=in_category id=in_category {if $feature->in_category}checked{/if} value="1"> <label for=in_category>Использовать в категории</label></li>
	</ul>
</div>

5. simpla/FeatureAdmin.php

после 14 строки вставляем код

14 строка $feature->in_filter = intval($this->request->post('in_filter'));
// <!-- Update in_catergory -->
$feature->in_category = intval($this->request->post('in_category'));

 

 

6. view/ProductsView.php

после строк: 

foreach($products as &$product)
			{
				if(isset($product->variants[0]))
					$product->variant = $product->variants[0];
				if(isset($product->images[0]))
					$product->image = $product->images[0];
			}

всавляем: 

// Вывод свойств товара в ленту
$properties = $this->features->get_visible_options($products_ids);
foreach($properties as $property) {
	$products[$property->product_id]->options[] = $property;
}    

у меня это 196 строка перед строками 

$this->design->assign('products', $products);

7 И выводим в шаблоне

<ul class="product_features">
    {foreach $product->options as $f}
     <li>
         <label>{$f->name}</label>
         <span>{$f->value}</span>
     </li>
    {/foreach}
</ul>

Вот вроде и все. Данная модификация позволяет выводить в ленту товаров только те свойства, которы вы хотите использовать в данной категории и ни как не влияет на выводимые свойства в карточке.

 

ВАЖНО!!! Перед тем как модифицировать что-либо, делайте Бэкап!!! 

Всем Добра!)

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

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

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

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

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

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

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

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

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

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