Перейти к публикации
View in the app

A better way to browse. Learn more.

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

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Опубликовано:

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

 

В 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 поля. Остальные не будут выведены

Опубликовано:
  • Автор

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

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

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.