acerus Опубликовано 30 марта, 2015 Жалоба Поделиться Опубликовано 30 марта, 2015 (изменено) Как лучше сделать? Есть свойство товаров, одно, значения которого нужно выводить рядом с названиями этих товаров. id свойства известен и не меняется, id категорий товаров тоже Изменено 30 марта, 2015 пользователем acerus Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 30 марта, 2015 Жалоба Поделиться Опубликовано 30 марта, 2015 Нужно в списке товаров или на странице товара? Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 30 марта, 2015 Жалоба Поделиться Опубликовано 30 марта, 2015 Нужно в списке товаров или на странице товара?На странице товара стандартно выводятся ВСЕ свойства. Вывод избранных свойств в списках товаров Предлагается способ вывода в списках товаров нескольких избранных свойств (с указанными ID). Создавалось для версии 2.3.6. Скорее всего, годится и для других версий 2.x http://simpla-tuning.com/products/vyvod-izbrannyh-svojstv-v-spiskah-tovarov 15$ Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 30 марта, 2015 Жалоба Поделиться Опубликовано 30 марта, 2015 Если не заметили - то ТС не нужны все! А исходя из того что написано: Есть свойство товаров, одно, значения которого нужно выводить рядом с названиями этих товаров Скорее всего нужно и в списке товаров... Цитата Ссылка на сообщение Поделиться на другие сайты
acerus Опубликовано 30 марта, 2015 Автор Жалоба Поделиться Опубликовано 30 марта, 2015 Да! Если быть точным - добавлять перед названием каждого товара в списке товаров + добавлять в title карточки товара. Цитата Ссылка на сообщение Поделиться на другие сайты
shooroop Опубликовано 31 марта, 2015 Жалоба Поделиться Опубликовано 31 марта, 2015 acerus загугли я искал тут подобное решение оно было в другой теме Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 31 марта, 2015 Жалоба Поделиться Опубликовано 31 марта, 2015 (изменено) 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} Вроде все! У себя не проверял но должно работать. Изменено 31 марта, 2015 пользователем yr4ik Цитата Ссылка на сообщение Поделиться на другие сайты
shooroop Опубликовано 31 марта, 2015 Жалоба Поделиться Опубликовано 31 марта, 2015 yr4ik а как вывести в order_print.tpl ? Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 31 марта, 2015 Жалоба Поделиться Опубликовано 31 марта, 2015 (изменено) shooroop, поправил функцию. Добавил параметр purchases. Примерно будет так: {get_options purchases=$purchases feature_id=id_свойства var="my_options"}вывод аналогичен... Или вы в админке хотите вывести? Если да то в simpla/IndexAdmin.php добавить и зарегистрировать функцию как в view/View.php Изменено 31 марта, 2015 пользователем yr4ik Цитата Ссылка на сообщение Поделиться на другие сайты
shooroop Опубликовано 31 марта, 2015 Жалоба Поделиться Опубликовано 31 марта, 2015 shooroop, поправил функцию. Добавил параметр purchases. Примерно будет так: {get_options purchases=$purchases feature_id=id_свойства var="my_options"}вывод аналогичен... Или вы в админке хотите вывести? Если да то в simpla/IndexAdmin.php добавить и зарегистрировать функцию как в view/View.php спс Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 31 марта, 2015 Жалоба Поделиться Опубликовано 31 марта, 2015 (изменено) Если еще в админке захочется, то уж очень сложно выходит. Если для Вас это одно свойство товара так важно, то, возможно, проще поддерживать его отдельным полем в админке у товара. А то еще понадобится прописывать это свойство на странице корзины, заказа, и в письмо из админки, и на главную... И уже сейчас видна некоторая нерациональность: get_options_plugin получает в параметрах $params['products'], $params['purchases'] явно избыточные данные, тогда как лучше было бы передать только набор ID товаров. Изменено 31 марта, 2015 пользователем Kors Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 31 марта, 2015 Жалоба Поделиться Опубликовано 31 марта, 2015 И уже сейчас видна некоторая нерациональность: get_options_plugin получает в параметрах $params['products'], $params['purchases'] явно избыточные данные, тогда как лучше было бы передать только набор ID товаров.Это какая же не рациональность? Хотите иды - передавайте product_id. А переменные products и purchases сделаны специально что бы уменьшить количество действий в шаблонах... На php данный перебор проще сделать чем через шаблонными функциями... Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 31 марта, 2015 Жалоба Поделиться Опубликовано 31 марта, 2015 Как используется $params['products'] ? Из него извлекаются $params['products'][]->id. Остальное не используется. Налицо передача лишних данных - причем объем лишних данных существенно больше объема действительно нужной части. Аналогично с $params['purchases']. Если посмотреть на аналогичные стандартные функции в View.php, то там такого не наблюдается. Тем Simpla и хороша, что сделано рационально и экономно, а предлагаемый стиль - некрасивый и портит картину. Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 31 марта, 2015 Жалоба Поделиться Опубликовано 31 марта, 2015 То есть вы предлагаете делать перебор $products и формирование массива идов в tpl? Это по вашему рационально? Что измениться кроме как размер кода? Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 31 марта, 2015 Жалоба Поделиться Опубликовано 31 марта, 2015 Если посмотрите, как делается сейчас, то увидите, что подобное делается легко и просто в PHP-файлах папки view. То, что Вы переносите эту обработку (в разных вариантах) в get_options_plugin - меняете шило на мыло, и в качестве бонуса получаете передачу лишних массивов данных. Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 31 марта, 2015 Жалоба Поделиться Опубликовано 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 и шаблонов Цитата Ссылка на сообщение Поделиться на другие сайты
acerus Опубликовано 17 апреля, 2015 Автор Жалоба Поделиться Опубликовано 17 апреля, 2015 спасибо kors, все сделали достаточно лаконично и просто Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.