Jump to content

Recommended Posts

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

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

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

Edited by LSDance
Link to post
Share on other sites

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

 

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>

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

 

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

Всем Добра!)

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...