Перейти к содержимому


Фото
* * * * * 1 голосов

Свойства товара

Своства товара

  • Чтобы отвечать, сперва войдите на форум
20 ответов в теме

#1 cheltemov

cheltemov
  • Пользователь
  • 5 сообщений

Опубликовано 22.02.2012 - 00:08

Добры день всем пользователям данного форума.

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

Заранее спасибо.
Симпла планируется 2.0.2



#2 nwnet

nwnet
  • Пользователь
  • 332 сообщений

Опубликовано 22.02.2012 - 07:13

Лучше ковыряйте 2.1, т.к. на 2.0 похоже забили и соответственно те баги, которые перешли с 2.0 в 2.1 будут исправляться только в 2.1.



#3 SupermarioBros

SupermarioBros
  • Пользователь
  • 19 сообщений

Опубликовано 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 cheltemov

cheltemov
  • Пользователь
  • 5 сообщений

Опубликовано 22.02.2012 - 10:41

спасибо большое буду ковырять дальше



#5 SupermarioBros

SupermarioBros
  • Пользователь
  • 19 сообщений

Опубликовано 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 SupermarioBros

SupermarioBros
  • Пользователь
  • 19 сообщений

Опубликовано 22.02.2012 - 11:23

опечатался, всесто

$products[$propertie->product_id]->properties[$propertie->id] = $propertie->value;

надо

$products[$propertie->product_id]->features[$propertie->id] = $propertie->value;



#7 SupermarioBros

SupermarioBros
  • Пользователь
  • 19 сообщений

Опубликовано 22.02.2012 - 11:25

тогда в шаблоне сработает {$product->features[id_свойства]} или можете оставить как первый вариант, но тогда в шаблоне {$product->properties[id_свойства]}



#8 cheltemov

cheltemov
  • Пользователь
  • 5 сообщений

Опубликовано 22.02.2012 - 11:44

еще раз большое спасибо!



#9 cheltemov

cheltemov
  • Пользователь
  • 5 сообщений

Опубликовано 22.02.2012 - 12:09

еще раз извините, заработало только в хит продаж, в каталоге нет и в выводе товара нет (((



#10 SupermarioBros

SupermarioBros
  • Пользователь
  • 19 сообщений

Опубликовано 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 SupermarioBros

SupermarioBros
  • Пользователь
  • 19 сообщений

Опубликовано 22.02.2012 - 12:29

чотко.



#12 SupermarioBros

SupermarioBros
  • Пользователь
  • 19 сообщений

Опубликовано 22.02.2012 - 12:34

блеать в спешке, надо было так:

а строчку

$products[$propertie->product_id]->features[$propertie->id] = $propertie->value;

замените на

$products[$propertie->product_id]->features[] = $propertie;



#13 SupermarioBros

SupermarioBros
  • Пользователь
  • 19 сообщений

Опубликовано 22.02.2012 - 12:34

чотко.



#14 SupermarioBros

SupermarioBros
  • Пользователь
  • 19 сообщений

Опубликовано 22.02.2012 - 12:37

ес-ау. пора спать.



#15 cheltemov

cheltemov
  • Пользователь
  • 5 сообщений

Опубликовано 22.02.2012 - 12:39

мне нужно в хитах в каталоге товара и в выводе самого товара проверить свойство типа {if {$product->features[4]}=='Зима'} то тото {/if}



#16 SupermarioBros

SupermarioBros
  • Пользователь
  • 19 сообщений

Опубликовано 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 Slavik911

Slavik911
  • Пользователь
  • 151 сообщений

Опубликовано 16.11.2012 - 10:19

Большое Вам спасибо!



#18 Slavik911

Slavik911
  • Пользователь
  • 151 сообщений

Опубликовано 18.01.2013 - 11:10

перестали работать связаные товары, вместо этого - абракадабра



#19 Slavik911

Slavik911
  • Пользователь
  • 151 сообщений

Опубликовано 18.01.2013 - 11:12

из-за удаления этой строчки return $this->db->results(); как связать возвраты фунцкий?



#20 SergeyKH

SergeyKH
  • Пользователь
  • 154 сообщений

Опубликовано 19.01.2013 - 11:51

http://forum.simplac...akts-tpl#Item_6
Может так.







Также с меткой «Своства, товара»

0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых