Code
Explorer
You are a developer and looking for Shopware projects?
Apply Now!
ProductMediaCollection example
$this
->eventDispatcher->
dispatch
(
new
ProductPageCriteriaEvent
(
$productId
,
$criteria
,
$context
)
)
;
$result
=
$this
->productDetailRoute->
load
(
$productId
,
$request
,
$context
,
$criteria
)
;
$product
=
$result
->
getProduct
(
)
;
if
(
$product
->
getMedia
(
)
)
{
$product
->
getMedia
(
)
->
sort
(
fn
(
ProductMediaEntity
$a
, ProductMediaEntity
$b
)
=>
$a
->
getPosition
(
)
<=>
$b
->
getPosition
(
)
)
;
}
if
(
$product
->
getMedia
(
)
&&
$product
->
getCover
(
)
)
{
$product
->
setMedia
(
new
ProductMediaCollection
(
array_merge
(
[
$product
->
getCover
(
)
->
getId
(
)
=>
$product
->
getCover
(
)
]
,
$product
->
getMedia
(
)
->
getElements
(
)
)
)
)
;
}
if
(
$category
=
$product
->
getSeoCategory
(
)
)
{
$request
->request->
set
(
'navigationId',
$category
->
getId
(
)
)
;
}
$page
=
$this
->genericLoader->
load
(
$request
,
$context
)
;
$page
= ProductPage::
createFrom
(
$page
)
;
$mediaEntity
->
setId
(
$mediaId
)
;
$tempProductMedia
=
new
ProductMediaEntity
(
)
;
$tempProductMedia
->
setId
(
$mediaId
)
;
$tempProductMedia
->
setMediaId
(
$mediaId
)
;
$tempProductMedia
->
setMedia
(
$mediaEntity
)
;
$tempProductMedia
->
setPosition
(
$i
)
;
$productMedia
[
]
=
$tempProductMedia
;
}
return
new
ProductMediaCollection
(
$productMedia
)
;
}
protected
function
getResolverContext
(
ProductMediaCollection
$productMediaCollection
, ?string
$coverId
= null
)
: EntityResolverContext
{
$manufacturer
=
new
ProductManufacturerEntity
(
)
;
$manufacturer
->
setId
(
'manufacturer_01'
)
;
$product
=
new
SalesChannelProductEntity
(
)
;
$product
->
setId
(
'product_01'
)
;
$product
->
setManufacturer
(
$manufacturer
)
;
$product
->
setMedia
(
$productMediaCollection
)
;
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
(
)
)
{
/** @var ProductMediaCollection $sliderItems */
$sliderItems
=
new
ProductMediaCollection
(
array_merge
(
[
$productEntity
->
getCoverId
(
)
=>
$productEntity
->
getCover
(
)
]
,
$sliderItems
->
getElements
(
)
)
)
;
}
}
foreach
(
$sliderItems
->
getMedia
(
)
as
$media
)
{
$imageSliderItem
=
new
ImageSliderItemStruct
(
)
;
$imageSliderItem
->
setMedia
(
$media
)
;
$imageSlider
->
addSliderItem
(
$imageSliderItem
)
;
}
}
return
$this
->
filter
(
function
DProductEntity
$product
)
use
(
$optionIds
)
{
$ids
=
$product
->
getOptionIds
(
)
??
[
]
;
$same
=
array_intersect
(
$ids
,
$optionIds
)
;
return
\
count
(
$same
)
=== \
count
(
$optionIds
)
;
}
)
;
}
public
function
getCovers
(
)
: ProductMediaCollection
{
return
new
ProductMediaCollection
(
$this
->
fmap
(
fn
(
ProductEntity
$product
)
=>
$product
->
getCover
(
)
)
)
;
}
public
function
getApiAlias
(
)
: string
{
return
'product_collection';
}
protected
function
getExpectedClass
(
)
: string
{
return
ProductEntity::
class
;
}
}