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

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

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

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

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

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

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

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

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

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

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

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

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

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

надо

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

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

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

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

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

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

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

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

а строчку

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

замените на

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

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

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

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • 8 месяцев спустя...
  • 2 месяца спустя...
  • 6 лет спустя...

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

 

а строчку

 

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

 

замените на

 

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

 

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

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

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

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

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

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

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

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

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

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

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