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

Вывести в шаблоне значения одного свойства


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

Как лучше сделать?

 

Есть свойство товаров, одно, значения которого нужно выводить рядом с названиями этих товаров. id свойства известен и не меняется, id категорий товаров тоже

Изменено пользователем acerus
Ссылка на сообщение
Поделиться на другие сайты

Нужно в списке товаров или на странице товара?

На странице товара стандартно выводятся ВСЕ свойства.

 

Вывод избранных свойств в списках товаров

Предлагается способ вывода в списках товаров нескольких избранных свойств (с указанными ID).

Создавалось для версии 2.3.6.

Скорее всего, годится и для других версий 2.x

http://simpla-tuning.com/products/vyvod-izbrannyh-svojstv-v-spiskah-tovarov

15$

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

Если не заметили - то ТС не нужны все! А исходя из того что написано:

 

 

Есть свойство товаров, одно, значения которого нужно выводить рядом с названиями этих товаров

 

Скорее всего нужно и в списке товаров...

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

Да! Если быть точным - добавлять перед названием каждого товара в списке товаров + добавлять в title карточки товара. 

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

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}

 

Вроде все! У себя не проверял но должно работать. 

Изменено пользователем yr4ik
Ссылка на сообщение
Поделиться на другие сайты

shooroop, поправил функцию. Добавил параметр purchases. 

 

Примерно будет так:

{get_options purchases=$purchases feature_id=id_свойства var="my_options"}

вывод аналогичен...

 

Или вы в админке хотите вывести? Если да то в simpla/IndexAdmin.php добавить и зарегистрировать функцию как в view/View.php 

Изменено пользователем yr4ik
Ссылка на сообщение
Поделиться на другие сайты

shooroop, поправил функцию. Добавил параметр purchases. 

 

Примерно будет так:

{get_options purchases=$purchases feature_id=id_свойства var="my_options"}

вывод аналогичен...

 

Или вы в админке хотите вывести? Если да то в simpla/IndexAdmin.php добавить и зарегистрировать функцию как в view/View.php 

 

спс

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

Если еще в админке захочется, то уж очень сложно выходит.

 

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

 

А то еще понадобится прописывать это свойство на странице корзины, заказа, и в письмо из админки, и на главную...

 

И уже сейчас видна некоторая нерациональность: get_options_plugin получает в параметрах $params['products'], $params['purchases'] явно избыточные данные, тогда как лучше было бы передать только набор ID товаров.

Изменено пользователем Kors
Ссылка на сообщение
Поделиться на другие сайты

И уже сейчас видна некоторая нерациональность: get_options_plugin получает в параметрах $params['products'], $params['purchases'] явно избыточные данные, тогда как лучше было бы передать только набор ID товаров.

Это какая же не рациональность? Хотите иды - передавайте product_id. А переменные products и purchases сделаны специально что бы уменьшить количество действий в шаблонах... На php данный перебор проще сделать чем через шаблонными функциями...
Ссылка на сообщение
Поделиться на другие сайты

Как используется $params['products'] ? Из него извлекаются $params['products'][]->id. Остальное не используется. Налицо передача лишних данных - причем объем лишних данных существенно больше объема действительно нужной части.

Аналогично с $params['purchases'].

Если посмотреть на аналогичные стандартные функции в View.php, то там такого не наблюдается.

Тем Simpla и хороша, что сделано рационально и экономно, а предлагаемый стиль - некрасивый и портит картину.

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

То есть вы предлагаете делать перебор $products и формирование массива идов в tpl?

Это по вашему рационально? Что измениться кроме как размер кода?

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

Если посмотрите, как делается сейчас, то увидите, что подобное делается легко и просто в PHP-файлах папки view.

То, что Вы переносите эту обработку (в разных вариантах) в get_options_plugin - меняете шило на мыло, и в качестве бонуса получаете передачу лишних массивов данных.

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

Я еще раз говорю: передавай в параметрах product_id -> массив идов. 

Никто ж не заставляет тебя передавать именно параметр products 

К примеру, в категориях, можешь через array_keys сделать.

 

{get_options product_id=$products|array_keys feature_id=id_свойства var="my_options"}

Но для просмотренных товаров - такой возможности нет. Поэтому я сделал параметр products

И соответственно в шаблонах корзины и страниц заказа (где purchases) массивов идов - нет. Поэтому сделал параметр purchases

 

места где нет идов - можно доработать что бы они были. Но зачем? Сколько памяти ты сэкономишь если уберешь перебор массива в котором, скорей всего, будет максимум до 100 значений? А так все нужные действия происходят в шаблоне и не нужно затрагивать кучу php и шаблонов

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

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

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

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

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

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

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

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

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

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