Code
Explorer
You are a developer and looking for Shopware projects?
Apply Now!
resolveEntityValue example
$config
=
$slot
->
getFieldConfig
(
)
;
$image
=
new
ImageStruct
(
)
;
$slot
->
setData
(
$image
)
;
$urlConfig
=
$config
->
get
(
'url'
)
;
if
(
$urlConfig
!== null
)
{
if
(
$urlConfig
->
isStatic
(
)
)
{
$image
->
setUrl
(
$urlConfig
->
getStringValue
(
)
)
;
}
if
(
$urlConfig
->
isMapped
(
)
&&
$resolverContext
instanceof EntityResolverContext
)
{
$url
=
$this
->
resolveEntityValue
(
$resolverContext
->
getEntity
(
)
,
$urlConfig
->
getStringValue
(
)
)
;
if
(
$url
)
{
$image
->
setUrl
(
$url
)
;
}
}
$newTabConfig
=
$config
->
get
(
'newTab'
)
;
if
(
$newTabConfig
!== null
)
{
$image
->
setNewTab
(
$newTabConfig
->
getBoolValue
(
)
)
;
}
}
$slot
->
setData
(
$image
)
;
$mediaConfig
=
$config
->
get
(
'previewMedia'
)
;
if
(
$mediaConfig
&&
$mediaConfig
->
getValue
(
)
)
{
$this
->
addMediaEntity
(
$slot
,
$image
,
$result
,
$mediaConfig
,
$resolverContext
)
;
}
}
private
function
addMediaEntity
(
CmsSlotEntity
$slot
, ImageStruct
$image
, ElementDataCollection
$result
, FieldConfig
$config
, ResolverContext
$resolverContext
)
: void
{
if
(
$config
->
isMapped
(
)
&&
$resolverContext
instanceof EntityResolverContext
)
{
$media
=
$this
->
resolveEntityValue
(
$resolverContext
->
getEntity
(
)
,
$config
->
getStringValue
(
)
)
;
if
(
$media
instanceof MediaEntity
)
{
$image
->
setMediaId
(
$media
->
getUniqueIdentifier
(
)
)
;
$image
->
setMedia
(
$media
)
;
}
}
if
(
$config
->
isStatic
(
)
)
{
$image
->
setMediaId
(
$config
->
getStringValue
(
)
)
;
$searchResult
=
$result
->
get
(
'media_' .
$slot
->
getUniqueIdentifier
(
)
)
;
$this
->
addMedia
(
$slot
,
$imageSlider
,
$result
,
$sliderItem
)
;
}
}
if
(
$sliderItemsConfig
->
isDefault
(
)
)
{
foreach
(
$sliderItemsConfig
->
getArrayValue
(
)
as
$sliderItem
)
{
$this
->
addDefaultMediaToImageSlider
(
$imageSlider
,
$sliderItem
)
;
}
}
if
(
$sliderItemsConfig
->
isMapped
(
)
&&
$resolverContext
instanceof EntityResolverContext
)
{
$sliderItems
=
$this
->
resolveEntityValue
(
$resolverContext
->
getEntity
(
)
,
$sliderItemsConfig
->
getStringValue
(
)
)
;
if
(
$sliderItems
=== null
||
(
is_countable
(
$sliderItems
)
? \
count
(
$sliderItems
)
: 0
)
< 1
)
{
return
;
}
$this
->
sortItemsByPosition
(
$sliderItems
)
;
if
(
$sliderItemsConfig
->
getStringValue
(
)
=== 'product.media'
)
{
/** @var ProductEntity $productEntity */
$productEntity
=
$resolverContext
->
getEntity
(
)
;
if
(
$productEntity
->
getCover
(
)
)
{
$slot
->
setData
(
$struct
)
;
$productConfig
=
$config
->
get
(
'product'
)
;
if
(
$productConfig
=== null ||
$productConfig
->
getValue
(
)
=== null
)
{
return
;
}
$product
= null;
if
(
$productConfig
->
isMapped
(
)
&&
$resolverContext
instanceof EntityResolverContext
)
{
$product
=
$this
->
resolveEntityValue
(
$resolverContext
->
getEntity
(
)
,
$productConfig
->
getStringValue
(
)
)
;
}
if
(
$productConfig
->
isStatic
(
)
)
{
$product
=
$this
->
getSlotProduct
(
$slot
,
$result
,
$productConfig
->
getStringValue
(
)
)
;
}
if
(
$product
=== null
)
{
return
;
}
$crossSellings
=
$this
->crossSellingLoader->
load
(
$product
->
getId
(
)
,
new
Request
(
)
,
$context
,
new
Criteria
(
)
)
->
getResult
(
)
;
if
(
$productConfig
=== null
)
{
return
;
}
$request
=
$resolverContext
->
getRequest
(
)
;
$ratingSuccess
=
(bool)
$request
->
get
(
'success', false
)
;
$data
->
setRatingSuccess
(
$ratingSuccess
)
;
$product
= null;
if
(
$productConfig
->
isMapped
(
)
&&
$resolverContext
instanceof EntityResolverContext
)
{
$product
=
$this
->
resolveEntityValue
(
$resolverContext
->
getEntity
(
)
,
$productConfig
->
getStringValue
(
)
)
;
}
if
(
$productConfig
->
isStatic
(
)
)
{
$product
=
$this
->
getSlotProduct
(
$slot
,
$result
,
$productConfig
->
getStringValue
(
)
)
;
}
/** @var SalesChannelProductEntity|null $product */
if
(
$product
!== null
)
{
$data
->
setProduct
(
$product
)
;
$data
->
setReviews
(
$this
->
loadProductReviews
(
$product
,
$request
,
$resolverContext
->
getSalesChannelContext
(
)
)
)
;
}
}
$productConfig
=
$config
->
get
(
'products'
)
;
if
(
$productConfig
=== null
)
{
return
;
}
if
(
$productConfig
->
isStatic
(
)
)
{
$this
->
enrichFromSearch
(
$slider
,
$result
, self::STATIC_SEARCH_KEY . '_' .
$slot
->
getUniqueIdentifier
(
)
,
$resolverContext
->
getSalesChannelContext
(
)
)
;
}
if
(
$productConfig
->
isMapped
(
)
&&
$resolverContext
instanceof EntityResolverContext
)
{
$products
=
$this
->
resolveEntityValue
(
$resolverContext
->
getEntity
(
)
,
$productConfig
->
getStringValue
(
)
)
;
if
(
$products
=== null
)
{
$this
->
enrichFromSearch
(
$slider
,
$result
, self::PRODUCT_SLIDER_ENTITY_FALLBACK . '_' .
$slot
->
getUniqueIdentifier
(
)
,
$resolverContext
->
getSalesChannelContext
(
)
)
;
}
else
{
$slider
->
setProducts
(
$products
)
;
}
}
if
(
$productConfig
->
isProductStream
(
)
&&
$productConfig
->
getValue
(
)
)
{
$entitySearchResult
=
$result
->
get
(
self::PRODUCT_SLIDER_ENTITY_FALLBACK . '_' .
$slot
->
getUniqueIdentifier
(
)
)
;
if
(
$entitySearchResult
=== null
)
{
return
;
}
private
function
getConfigUrl
(
FieldConfig
$config
, ResolverContext
$resolverContext
)
: ?string
{
if
(
$config
->
isStatic
(
)
)
{
return
$config
->
getStringValue
(
)
;
}
if
(
!
$resolverContext
instanceof EntityResolverContext
)
{
return
null;
}
return
$this
->
resolveEntityValue
(
$resolverContext
->
getEntity
(
)
,
$config
->
getStringValue
(
)
)
;
}
private
function
getMedia
(
CmsSlotEntity
$slot
, ElementDataCollection
$result
, FieldConfig
$config
, ResolverContext
$resolverContext
)
: ?MediaEntity
{
if
(
$config
->
isStatic
(
)
)
{
$searchResult
=
$result
->
get
(
'media_' .
$slot
->
getUniqueIdentifier
(
)
)
;
if
(
!
$searchResult
)
{
return
null;
}
/** @var MediaEntity|null $media */
if
(
$resolverContext
instanceof EntityResolverContext
)
{
$content
=
(string)
$this
->
resolveEntityValues
(
$resolverContext
,
$content
)
;
}
$text
->
setContent
(
$content
)
;
return
;
}
if
(
$contentConfig
->
isMapped
(
)
&&
$resolverContext
instanceof EntityResolverContext
)
{
$content
=
$this
->
resolveEntityValue
(
$resolverContext
->
getEntity
(
)
,
$contentConfig
->
getStringValue
(
)
)
;
$text
->
setContent
(
(string)
$content
)
;
}
}
}
public
function
analyze
(
ProductEntity
$product
, Context
$context
, array
$configFields
)
: AnalyzedKeywordCollection
{
$keywords
=
new
AnalyzedKeywordCollection
(
)
;
foreach
(
$configFields
as
$configField
)
{
$path
=
$configField
[
'field'
]
;
$isTokenize
=
(bool)
$configField
[
'tokenize'
]
;
$ranking
=
(int)
$configField
[
'ranking'
]
;
$values
=
array_filter
(
$this
->
resolveEntityValue
(
$product
,
$path
)
)
;
if
(
$isTokenize
)
{
$nonScalarValues
=
array_filter
(
$values
,
fn
(
$value
)
=> !\
is_scalar
(
$value
)
)
;
if
(
$nonScalarValues
!==
[
]
)
{
continue
;
}
/** @var array<int, string> $onlyScalarValues */
$onlyScalarValues
=
$values
;
$values
=
$this
->
tokenize
(
$onlyScalarValues
,
$context
)
;
}
$buyBox
=
new
BuyBoxStruct
(
)
;
$slot
->
setData
(
$buyBox
)
;
$productConfig
=
$slot
->
getFieldConfig
(
)
->
get
(
'product'
)
;
if
(
$productConfig
=== null
)
{
return
;
}
$product
= null;
if
(
$productConfig
->
isMapped
(
)
&&
$resolverContext
instanceof EntityResolverContext
)
{
$product
=
$this
->
resolveEntityValue
(
$resolverContext
->
getEntity
(
)
,
$productConfig
->
getStringValue
(
)
)
;
}
if
(
$productConfig
->
isStatic
(
)
)
{
$product
=
$this
->
getSlotProduct
(
$slot
,
$result
,
$productConfig
->
getStringValue
(
)
)
;
}
/** @var SalesChannelProductEntity|null $product */
if
(
$product
!== null
)
{
$buyBox
->
setProduct
(
$product
)
;
$buyBox
->
setProductId
(
$product
->
getId
(
)
)
;
$buyBox
->
setConfiguratorSettings
(
$this
->configuratorLoader->
load
(
$product
,
$resolverContext
->
getSalesChannelContext
(
)
)
)
;
$productBox
=
new
ProductBoxStruct
(
)
;
$slot
->
setData
(
$productBox
)
;
$productConfig
=
$slot
->
getFieldConfig
(
)
->
get
(
'product'
)
;
if
(
$productConfig
=== null ||
$productConfig
->
getValue
(
)
=== null
)
{
return
;
}
if
(
$resolverContext
instanceof EntityResolverContext &&
$productConfig
->
isMapped
(
)
)
{
/** @var SalesChannelProductEntity $product */
$product
=
$this
->
resolveEntityValue
(
$resolverContext
->
getEntity
(
)
,
$productConfig
->
getStringValue
(
)
)
;
$productBox
->
setProduct
(
$product
)
;
$productBox
->
setProductId
(
$product
->
getId
(
)
)
;
}
if
(
$productConfig
->
isStatic
(
)
)
{
$this
->
resolveProductFromRemote
(
$slot
,
$productBox
,
$result
,
$productConfig
->
getStringValue
(
)
,
$resolverContext
->
getSalesChannelContext
(
)
)
;
}
}
private
function
resolveProductFromRemote
(
break
;
}
$smartDetect
= false;
}
return
$value
;
}
protected
function
resolveEntityValueToString
(
?Entity
$entity
, string
$path
, EntityResolverContext
$resolverContext
)
: string
{
$content
=
$this
->
resolveEntityValue
(
$entity
,
$path
)
;
if
(
$content
instanceof \DateTimeInterface
)
{
$dateFormatter
=
new
\
IntlDateFormatter
(
$resolverContext
->
getRequest
(
)
->
getLocale
(
)
,
\IntlDateFormatter::MEDIUM,
\IntlDateFormatter::MEDIUM
)
;
$content
=
$dateFormatter
->
format
(
$content
)
;
}
if
(
$content
=== null || \
is_scalar
(
$content
)
||
(
\
is_object
(
$content
)
&& \
method_exists
(
$content
, '__toString'
)
)
)
{