acerus Posted March 30, 2015 Report Share Posted March 30, 2015 (edited) Как лучше сделать? Есть свойство товаров, одно, значения которого нужно выводить рядом с названиями этих товаров. id свойства известен и не меняется, id категорий товаров тоже Edited March 30, 2015 by acerus Quote Link to post Share on other sites
yr4ik Posted March 30, 2015 Report Share Posted March 30, 2015 Нужно в списке товаров или на странице товара? Quote Link to post Share on other sites
Kors Posted March 30, 2015 Report Share Posted March 30, 2015 Нужно в списке товаров или на странице товара?На странице товара стандартно выводятся ВСЕ свойства. Вывод избранных свойств в списках товаров Предлагается способ вывода в списках товаров нескольких избранных свойств (с указанными ID). Создавалось для версии 2.3.6. Скорее всего, годится и для других версий 2.x http://simpla-tuning.com/products/vyvod-izbrannyh-svojstv-v-spiskah-tovarov 15$ Quote Link to post Share on other sites
yr4ik Posted March 30, 2015 Report Share Posted March 30, 2015 Если не заметили - то ТС не нужны все! А исходя из того что написано: Есть свойство товаров, одно, значения которого нужно выводить рядом с названиями этих товаров Скорее всего нужно и в списке товаров... Quote Link to post Share on other sites
acerus Posted March 30, 2015 Author Report Share Posted March 30, 2015 Да! Если быть точным - добавлять перед названием каждого товара в списке товаров + добавлять в title карточки товара. Quote Link to post Share on other sites
shooroop Posted March 31, 2015 Report Share Posted March 31, 2015 acerus загугли я искал тут подобное решение оно было в другой теме Quote Link to post Share on other sites
yr4ik Posted March 31, 2015 Report Share Posted March 31, 2015 (edited) view/View.php после: $this->design->smarty->registerPlugin("function", "get_discounted_products", array($this, 'get_discounted_products_plugin'));Добавляем: $this->design->smarty->registerPlugin("function", "get_options", array($this, 'get_options_plugin'));Затем в конец класса View добавляем функцию: public function get_options_plugin($params, &$smarty) { if(empty($params['var'])) $params['var'] = 'my_options'; if(empty($params['product_id'])){ $params['product_id'] = array(); if(!empty($params['products'])){ foreach($params['products'] as $p) if(!empty($p->id)) $params['product_id'][] = $p->id; }elseif(!empty($params['purchases'])){ foreach($params['purchases'] as $p) if(!empty($p->product->id)) $params['product_id'][] = $p->product->id; } } $result = array(); $options = $this->features->get_options($params); if($options){ if(empty($params['feature_id'])){ $result = $options; } else { foreach($options as $o){ $result[$o->product_id] = $o; } } } $smarty->assign($params['var'], $result); } После данных манипуляций в шаблоне появится возможность получать опции как в php. Только если передать ид свойства feature_id и список товаров products или product_id то на выходе получим массив ид_товара => опция. К примеру в категориях design/тема/html/products.tpl делаем так: после {if $products} дописываем: {get_options products=$products feature_id=id_свойства var="my_options"} ........... после для вывода свойства в заголовке достаточно будет написать: {if !empty($my_options[id_товара])}{$my_options[id_товара]->value}{/if} для карточки товара {get_options product_id=$product->id feature_id=id_свойства var="my_options"} и вывод аналогичный: {if !empty($my_options[$product->id])}{$my_options[$product->id]->value}{/if} Вроде все! У себя не проверял но должно работать. Edited March 31, 2015 by yr4ik Quote Link to post Share on other sites
shooroop Posted March 31, 2015 Report Share Posted March 31, 2015 yr4ik а как вывести в order_print.tpl ? Quote Link to post Share on other sites
yr4ik Posted March 31, 2015 Report Share Posted March 31, 2015 (edited) shooroop, поправил функцию. Добавил параметр purchases. Примерно будет так: {get_options purchases=$purchases feature_id=id_свойства var="my_options"}вывод аналогичен... Или вы в админке хотите вывести? Если да то в simpla/IndexAdmin.php добавить и зарегистрировать функцию как в view/View.php Edited March 31, 2015 by yr4ik Quote Link to post Share on other sites
shooroop Posted March 31, 2015 Report Share Posted March 31, 2015 shooroop, поправил функцию. Добавил параметр purchases. Примерно будет так: {get_options purchases=$purchases feature_id=id_свойства var="my_options"}вывод аналогичен... Или вы в админке хотите вывести? Если да то в simpla/IndexAdmin.php добавить и зарегистрировать функцию как в view/View.php спс Quote Link to post Share on other sites
Kors Posted March 31, 2015 Report Share Posted March 31, 2015 (edited) Если еще в админке захочется, то уж очень сложно выходит. Если для Вас это одно свойство товара так важно, то, возможно, проще поддерживать его отдельным полем в админке у товара. А то еще понадобится прописывать это свойство на странице корзины, заказа, и в письмо из админки, и на главную... И уже сейчас видна некоторая нерациональность: get_options_plugin получает в параметрах $params['products'], $params['purchases'] явно избыточные данные, тогда как лучше было бы передать только набор ID товаров. Edited March 31, 2015 by Kors Quote Link to post Share on other sites
yr4ik Posted March 31, 2015 Report Share Posted March 31, 2015 И уже сейчас видна некоторая нерациональность: get_options_plugin получает в параметрах $params['products'], $params['purchases'] явно избыточные данные, тогда как лучше было бы передать только набор ID товаров.Это какая же не рациональность? Хотите иды - передавайте product_id. А переменные products и purchases сделаны специально что бы уменьшить количество действий в шаблонах... На php данный перебор проще сделать чем через шаблонными функциями... Quote Link to post Share on other sites
Kors Posted March 31, 2015 Report Share Posted March 31, 2015 Как используется $params['products'] ? Из него извлекаются $params['products'][]->id. Остальное не используется. Налицо передача лишних данных - причем объем лишних данных существенно больше объема действительно нужной части. Аналогично с $params['purchases']. Если посмотреть на аналогичные стандартные функции в View.php, то там такого не наблюдается. Тем Simpla и хороша, что сделано рационально и экономно, а предлагаемый стиль - некрасивый и портит картину. Quote Link to post Share on other sites
yr4ik Posted March 31, 2015 Report Share Posted March 31, 2015 То есть вы предлагаете делать перебор $products и формирование массива идов в tpl? Это по вашему рационально? Что измениться кроме как размер кода? Quote Link to post Share on other sites
Kors Posted March 31, 2015 Report Share Posted March 31, 2015 Если посмотрите, как делается сейчас, то увидите, что подобное делается легко и просто в PHP-файлах папки view. То, что Вы переносите эту обработку (в разных вариантах) в get_options_plugin - меняете шило на мыло, и в качестве бонуса получаете передачу лишних массивов данных. Quote Link to post Share on other sites
yr4ik Posted March 31, 2015 Report Share Posted March 31, 2015 Я еще раз говорю: передавай в параметрах product_id -> массив идов. Никто ж не заставляет тебя передавать именно параметр products К примеру, в категориях, можешь через array_keys сделать. {get_options product_id=$products|array_keys feature_id=id_свойства var="my_options"}Но для просмотренных товаров - такой возможности нет. Поэтому я сделал параметр productsИ соответственно в шаблонах корзины и страниц заказа (где purchases) массивов идов - нет. Поэтому сделал параметр purchases места где нет идов - можно доработать что бы они были. Но зачем? Сколько памяти ты сэкономишь если уберешь перебор массива в котором, скорей всего, будет максимум до 100 значений? А так все нужные действия происходят в шаблоне и не нужно затрагивать кучу php и шаблонов Quote Link to post Share on other sites
acerus Posted April 17, 2015 Author Report Share Posted April 17, 2015 спасибо kors, все сделали достаточно лаконично и просто Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.