cheltemov Опубликовано 21 февраля, 2012 Жалоба Поделиться Опубликовано 21 февраля, 2012 Добры день всем пользователям данного форума.Подскажите пожалуста как сделать доступными для вывода свойства товара в хитах и в каталоге. Вроде весь форум перерыл так и не нашел. Если есть на форуме то ткните носом.Заранее спасибо.Симпла планируется 2.0.2 Цитата Ссылка на сообщение Поделиться на другие сайты
nwnet Опубликовано 22 февраля, 2012 Жалоба Поделиться Опубликовано 22 февраля, 2012 Лучше ковыряйте 2.1, т.к. на 2.0 похоже забили и соответственно те баги, которые перешли с 2.0 в 2.1 будут исправляться только в 2.1. Цитата Ссылка на сообщение Поделиться на другие сайты
SupermarioBros Опубликовано 22 февраля, 2012 Жалоба Поделиться Опубликовано 22 февраля, 2012 Если Вы используете версию 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.ххх желаю!!! Цитата Ссылка на сообщение Поделиться на другие сайты
cheltemov Опубликовано 22 февраля, 2012 Автор Жалоба Поделиться Опубликовано 22 февраля, 2012 спасибо большое буду ковырять дальше Цитата Ссылка на сообщение Поделиться на другие сайты
SupermarioBros Опубликовано 22 февраля, 2012 Жалоба Поделиться Опубликовано 22 февраля, 2012 Я не программер, поэтому не судите строго.Для версии 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 этого свойства. Как сделать удобнее, например через ассоциативный массив я написал раньше. Если у Вас есть затруднения пишите. Я сам так же разбираюсь потихоньку со всем. Цитата Ссылка на сообщение Поделиться на другие сайты
SupermarioBros Опубликовано 22 февраля, 2012 Жалоба Поделиться Опубликовано 22 февраля, 2012 опечатался, всесто$products[$propertie->product_id]->properties[$propertie->id] = $propertie->value;надо$products[$propertie->product_id]->features[$propertie->id] = $propertie->value; Цитата Ссылка на сообщение Поделиться на другие сайты
SupermarioBros Опубликовано 22 февраля, 2012 Жалоба Поделиться Опубликовано 22 февраля, 2012 тогда в шаблоне сработает {$product->features[id_свойства]} или можете оставить как первый вариант, но тогда в шаблоне {$product->properties[id_свойства]} Цитата Ссылка на сообщение Поделиться на другие сайты
cheltemov Опубликовано 22 февраля, 2012 Автор Жалоба Поделиться Опубликовано 22 февраля, 2012 еще раз большое спасибо! Цитата Ссылка на сообщение Поделиться на другие сайты
cheltemov Опубликовано 22 февраля, 2012 Автор Жалоба Поделиться Опубликовано 22 февраля, 2012 еще раз извините, заработало только в хит продаж, в каталоге нет и в выводе товара нет ((( Цитата Ссылка на сообщение Поделиться на другие сайты
SupermarioBros Опубликовано 22 февраля, 2012 Жалоба Поделиться Опубликовано 22 февраля, 2012 просто перепишите запрос так: $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} Цитата Ссылка на сообщение Поделиться на другие сайты
SupermarioBros Опубликовано 22 февраля, 2012 Жалоба Поделиться Опубликовано 22 февраля, 2012 чотко. Цитата Ссылка на сообщение Поделиться на другие сайты
SupermarioBros Опубликовано 22 февраля, 2012 Жалоба Поделиться Опубликовано 22 февраля, 2012 блеать в спешке, надо было так:а строчку$products[$propertie->product_id]->features[$propertie->id] = $propertie->value;замените на$products[$propertie->product_id]->features[] = $propertie; Цитата Ссылка на сообщение Поделиться на другие сайты
SupermarioBros Опубликовано 22 февраля, 2012 Жалоба Поделиться Опубликовано 22 февраля, 2012 чотко. Цитата Ссылка на сообщение Поделиться на другие сайты
SupermarioBros Опубликовано 22 февраля, 2012 Жалоба Поделиться Опубликовано 22 февраля, 2012 ес-ау. пора спать. Цитата Ссылка на сообщение Поделиться на другие сайты
cheltemov Опубликовано 22 февраля, 2012 Автор Жалоба Поделиться Опубликовано 22 февраля, 2012 мне нужно в хитах в каталоге товара и в выводе самого товара проверить свойство типа {if {$product->features[4]}=='Зима'} то тото {/if} Цитата Ссылка на сообщение Поделиться на другие сайты
SupermarioBros Опубликовано 22 февраля, 2012 Жалоба Поделиться Опубликовано 22 февраля, 2012 В 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; } Цитата Ссылка на сообщение Поделиться на другие сайты
Slavik911 Опубликовано 16 ноября, 2012 Жалоба Поделиться Опубликовано 16 ноября, 2012 Большое Вам спасибо! Цитата Ссылка на сообщение Поделиться на другие сайты
Slavik911 Опубликовано 18 января, 2013 Жалоба Поделиться Опубликовано 18 января, 2013 перестали работать связаные товары, вместо этого - абракадабра Цитата Ссылка на сообщение Поделиться на другие сайты
Slavik911 Опубликовано 18 января, 2013 Жалоба Поделиться Опубликовано 18 января, 2013 из-за удаления этой строчки return $this->db->results(); как связать возвраты фунцкий? Цитата Ссылка на сообщение Поделиться на другие сайты
SergeyKH Опубликовано 19 января, 2013 Жалоба Поделиться Опубликовано 19 января, 2013 http://forum.simplacms.ru/discussion/1203/kak-vyvodit-svoystva-tovara-v-bloke-tovara-v-kategoriyah-v-prodakts-tpl#Item_6Может так. Цитата Ссылка на сообщение Поделиться на другие сайты
WIXVW Опубликовано 3 августа, 2019 Жалоба Поделиться Опубликовано 3 августа, 2019 блеать в спешке, надо было так: а строчку $products[$propertie->product_id]->features[$propertie->id] = $propertie->value; замените на $products[$propertie->product_id]->features[] = $propertie; СПАСИБО ОГРОМНОЕ! Это то, что я искал. Перерыл кучу всего, два дня мучился. Это реально сработало и именно так как надо) Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.