Jump to content

Recommended Posts

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

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

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

Link to post
Share on other sites

Если Вы используете версию 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.ххх желаю!!!

Link to post
Share on other sites

Я не программер, поэтому не судите строго.
Для версии 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 этого свойства. Как сделать удобнее, например через ассоциативный массив я написал раньше. Если у Вас есть затруднения пишите. Я сам так же разбираюсь потихоньку со всем.

Link to post
Share on other sites

просто перепишите запрос так:

$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}

Link to post
Share on other sites

В 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;
}

Link to post
Share on other sites
  • 8 months later...
  • 2 months later...
  • 6 years later...

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

 

а строчку

 

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

 

замените на

 

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

 

СПАСИБО ОГРОМНОЕ! Это то, что я искал. Перерыл кучу всего, два дня мучился. Это реально сработало и именно так как надо)

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...