Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

Дизайн и модификация Invision Community

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.
Русский язык для Invision Community 5

Как вывеси значение кастомного поля для продукта?

Здравствуйте!

 

В Commerce можно добавлять для товаров свои значения. Но я никак не пойму как мне в нужных местах эти поля выводить в шаблоне. Пробовал по разному.

 

Так:

 

{$package->fieldValues()['field_4']|raw}

 

И так:

 

{$item->fieldValues()['field_4']|raw}

 

Даже так:

 

{$product->fieldValues()['field_4']|raw}

 

Подскажите, верный синтаксис, пожалуйста.

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

выводить в шаблоне.

В каком шаблоне?

  • Автор

Желательно без привязки к конкретному месту, но вообще я хотел вывести здесь:

 

{template="cartContents" group="store" params="$location, $currency"}

без привязки к конкретному месту,

Если в шаблоне нет данных, то их нужно сперва получить, чтобы в дальнейшем с ними работать.

но вообще я хотел вывести здесь:
Здесь нет ничего, связанного с продуктом/полями.

Данный код выводиться на странице /store/cart/. Там уже есть поля.

fields.png

 

Посмотрите шаблон cartContents. Там есть примеры, как загружать продукты и поля

  • Автор

Да, все верно они там уже выводятся, но по умолчанию, не подходит.

 

Я пытался вытащить конкретное поле из foreach, но пока результатов не добился.

 

Нужно иметь управление над каждым полем в отдельности. Пытался осознать вот этот код, но PHP так быстро не сдается:

 

{{foreach $item->details as $k => $v}}
<strong>{lang="nexus_pfield_{$k}"}: </strong> {expression="\IPS\nexus\Package\CustomField::load( $k )->displayValue( $v )" raw="true"}<br>
{{endforeach}}

 

Работаю методом тыка, подыскиваю похожие примеры, но пока не сообразил, как все это делается.

Говоря по-простому, на указанной странице все продукты находятся в массиве $_SESSION

Вот код, который можете рассматривать

{{if count( $_SESSION['cart'] )}}
{{foreach $_SESSION['cart'] as $id => $item}}
	{{if $item instanceof \IPS\nexus\extensions\nexus\Item\Package}}
		{{try { $package = \IPS\nexus\Package::load( $item->id ); } catch( \OutOfRangeException $e ) { continue; } }}
	{{endif}}
	{{foreach $item->details as $k => $v}}
		<strong>{lang="nexus_pfield_{$k}"}: </strong> {expression="\IPS\nexus\Package\CustomField::load( $k )->displayValue( $v )" raw="true"}<br>
	{{endforeach}}
{{endforeach}}
{{endif}}

 

Пытался осознать вот этот код, но PHP так быстро не сдается:

В $item->details содержатся поля со введенными значениями

 

$k - ID поля

$v - значение

 

Можете проверять ID

  • Автор

Спасибо, понял. Но как вывести $k вне цикла? Мне нужно управлять каждый полем в отдельности, потому что не все нужно выводить и у каждого свое формление.

{{if count( $_SESSION['cart'] )}}
   {{foreach $_SESSION['cart'] as $id => $item}}
       {{if $item instanceof \IPS\nexus\extensions\nexus\Item\Package}}
           {{try { $package = \IPS\nexus\Package::load( $item->id ); } catch( \OutOfRangeException $e ) { continue; } }}
       {{endif}}
       {{foreach $item->details as $k => $v}}
		{{if $k == 1}}
			Оформление для поля с ID #1
		{{elseif $k == 2}}
			Оформление для поля с ID #2
		{{endif}}
       {{endforeach}}
   {{endforeach}}
{{endif}}

Оформляете 2 поля. Остальные не будут выведены

  • Автор

Спасибо. Это работает как надо.

Создайте аккаунт или войдите в него для комментирования

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.