Добры день всем пользователям данного форума.
Подскажите пожалуста как сделать доступными для вывода свойства товара в хитах и в каталоге. Вроде весь форум перерыл так и не нашел. Если есть на форуме то ткните носом.
Заранее спасибо.
Симпла планируется 2.0.2

#1
Опубликовано 22.02.2012 - 00:08
#2
Опубликовано 22.02.2012 - 07:13
Лучше ковыряйте 2.1, т.к. на 2.0 похоже забили и соответственно те баги, которые перешли с 2.0 в 2.1 будут исправляться только в 2.1.
#3
Опубликовано 22.02.2012 - 09:09
Если Вы используете версию 1.4, то нужно в classes/Storefront.class.php в методе get_products (...) перед return вставить код добавления свойств товара:
$query = sql_placeholder("SELECT properties_values.product_id,properties_values.value FROM properties, properties_values WHERE properties_values.product_id in (?@) AND properties_values.property_id = properties.property_id AND enabled ORDER BY properties.order_num", $ids);
$this->db->query($query);
$properties = $this->db->results();
foreach($properties as $propertie){
$products[$propertie->product_id]->properties[] = $propertie->value;
}
И тогда в шаблоне Smarty будет доступно свойство товара по ссылке
$product->properties[xxx], где ххх - индекс соответсвующего свойства. Как понимаете не удобно.
//////////////////////////////////////////
Для себя добавил в таблицу products_properties дополнительное поле name_lat (ну и соответсвенно в шаблон в админке), в котором для каждого свойства записываю его латинскую название, тогда
$query = sql_placeholder("SELECT properties_values.product_id,properties_values.value,properties.name_lat FROM properties, properties_values WHERE properties_values.product_id in (?@) AND properties_values.property_id = properties.property_id AND enabled ORDER BY properties.order_num", $ids);
$this->db->query($query);
$properties = $this->db->results();
foreach($properties as $propertie){
$products[$propertie->product_id]->properties[$propertie->name_lat] = $propertie->value;
}
Теперь в шаблоне очень логично обращаться к свойтвам товара по их латинскому имени, например:
{if $product->properties.oldprice>0}
- просто и понятно, чего и симпла 2.ххх желаю!!!
#4
Опубликовано 22.02.2012 - 10:41
спасибо большое буду ковырять дальше
#5
Опубликовано 22.02.2012 - 11:17
Я не программер, поэтому не судите строго.
Для версии 2.1 Вы можете сделать следующее:
в файле api/Products.php в функцию (метод) public function get_products($filter = array()) добавить в конец перед закрывающей скобкой такой код:
$query = $this->db->placehold($query);
$this->db->query($query);
/************** НОВЫЙ КОД *******************/
$temp_products = $this->db->results();
$products = array();
if(is_array($temp_products)){
foreach($temp_products as $product){
$products[$product->id] = $product;
}
$ids = array_keys($products);
//добавляем к классу товара поля свойств товара
$query = $this->db->placehold("SELECT o.product_id, o.value, f.id FROM __options o LEFT JOIN __features f ON f.id = o.feature_id WHERE o.product_id in (?@) ORDER BY f.position", $ids);
$this->db->query($query);
$properties = $this->db->results();
if(is_array($properties))
foreach($properties as $propertie){
$products[$propertie->product_id]->properties[$propertie->id] = $propertie->value;
}
}
return $products;
/************** /НОВЫЙ КОД *******************/
//return $this->db->results(); - это мы закоментировали
} // - та самая закрывающая скобка
Теперь в шаблонах *.tpl при обходе массива
{foreach $products as $product}
.....
{$product->features[1]}
....
{/foreach}
Обратите внимание! $product->features[1] , 1 - это id свойства в таблице s_features
, таким образом Вы обращаетесь к свойству товара по id этого свойства. Как сделать удобнее, например через ассоциативный массив я написал раньше. Если у Вас есть затруднения пишите. Я сам так же разбираюсь потихоньку со всем.
#6
Опубликовано 22.02.2012 - 11:23
опечатался, всесто
$products[$propertie->product_id]->properties[$propertie->id] = $propertie->value;
надо
$products[$propertie->product_id]->features[$propertie->id] = $propertie->value;
#7
Опубликовано 22.02.2012 - 11:25
тогда в шаблоне сработает {$product->features[id_свойства]} или можете оставить как первый вариант, но тогда в шаблоне {$product->properties[id_свойства]}
#8
Опубликовано 22.02.2012 - 11:44
еще раз большое спасибо!
#9
Опубликовано 22.02.2012 - 12:09
еще раз извините, заработало только в хит продаж, в каталоге нет и в выводе товара нет (((
#10
Опубликовано 22.02.2012 - 12:27
просто перепишите запрос так:
$query = $this->db->placehold("SELECT o.product_id, o.value, f.id, f.name FROM __options o LEFT JOIN __features f ON f.id = o.feature_id WHERE o.product_id in (?@) ORDER BY f.position", $ids);
а строчку
$products[$propertie->product_id]->features[$propertie->id] = $propertie->value;
замените на
$products[$propertie->product_id]->features[] = $propertie->value;
и тогда никаких id_свойтва вам знать не надо, все зависит от задачи - мне надо разделять свойства товаров по именам свойств, а вам может и ни к чему.
И теперь обойти и вывести все свойства в шаблоне можно как обычно (верстку подставите свою):
{if $product->features}
<!-- Характеристики товара -->
<h2>Характеристики</h2>
<ul class="features">
{foreach $product->features as $f}
<li>
<label>{$f->name}</label>
<span>{$f->value}</span>
</li>
{/foreach}
</ul>
<!-- Характеристики товара (The End)-->
{/if}
#11
Опубликовано 22.02.2012 - 12:29
чотко.
#12
Опубликовано 22.02.2012 - 12:34
блеать в спешке, надо было так:
а строчку
$products[$propertie->product_id]->features[$propertie->id] = $propertie->value;
замените на
$products[$propertie->product_id]->features[] = $propertie;
#13
Опубликовано 22.02.2012 - 12:34
чотко.
#14
Опубликовано 22.02.2012 - 12:37
ес-ау. пора спать.
#15
Опубликовано 22.02.2012 - 12:39
мне нужно в хитах в каталоге товара и в выводе самого товара проверить свойство типа {if {$product->features[4]}=='Зима'} то тото {/if}
#16
Опубликовано 22.02.2012 - 23:48
В 2.1 популярные товары и товары для каталога выбираются через api/Products.php get_products(...).
Для проверки свойства в выводе товара нужно аналогично произвести изменения в
api/Products.php get_product(...).
На глазок будет так, работоспособность проверьте самостоятельно:
$this->db->query($query);
$product = $this->db->result();
/*********************************/
if($product){
$query = $this->db->placehold("SELECT o.value, f.id FROM __options o LEFT JOIN __features f ON f.id = o.feature_id WHERE o.product_id=? ORDER BY f.position", $product->id);
$this->db->query($query);
$properties = $this->db->results();
if(is_array($properties))
foreach($properties as $propertie){
$product->features[$propertie->id] = $propertie->value;
}
}
/*********************************/
return $product;
}
#17
Опубликовано 16.11.2012 - 10:19
Большое Вам спасибо!
#18
Опубликовано 18.01.2013 - 11:10
перестали работать связаные товары, вместо этого - абракадабра
#19
Опубликовано 18.01.2013 - 11:12
из-за удаления этой строчки return $this->db->results(); как связать возвраты фунцкий?
Также с меткой «Своства, товара»
Дизайн и шаблоны →
Бесплатные шаблоны →
Настройка фильтраАвтор: луут • Дата: 03.10.2017 ![]() |
|
![]()
|
||
Дизайн и шаблоны →
Общие вопросы по дизайну магазина →
Добавление текста в карточку товараАвтор: Evgen81 • Дата: 14.10.2015 ![]() |
|
![]()
|
||
Simpla CMS →
Безопасность →
Не импортируются свойства товара с ЯМАвтор: DarAmal • Дата: 17.07.2014 ![]() |
|
![]()
|
||
Simpla CMS →
Готовые решения →
Восстановление свойств товара при их удаленииАвтор: trueocean • Дата: 04.12.2013 ![]() |
|
![]()
|
||
Simpla CMS →
Общие вопросы →
Цена товараАвтор: clubbox • Дата: 20.02.2013 ![]() |
|
![]()
|
0 пользователей читают эту тему
0 пользователей, 0 гостей, 0 скрытых