Перейти к основному содержимому

Интеграция коммерческих данных с контентом

«Content commerce», «shop everywhere», стирание границ между контентом и торговлей — это ключевые фразы, которые всплывают в каждом современном e-commerce проекте. Благодаря своему интегрированному подходу Pimcore реализует именно эту концепцию и предоставляет инструменты для создания наилучшего пользовательского опыта.

Одним из таких инструментов являются Renderlets. Они предоставляют отличный способ интеграции динамического контента объектов (и, следовательно, данных коммерции) в документы Pimcore.

Демо

Следуйте этим шагам, чтобы создать тизер продукта, аналогичный тому, что представлен в нашей демо-версии.

Создание кирпичика области (Area Brick) MyProductTeaser с использованием Renderlet

Реализация класса MyProductTeaser

<?php  

namespace App\Document\Areabrick;

class MyProductTeaser extends AbstractAreabrick
{
public function getName(): string
{
return 'My Product Teaser';
}
}


Шаблон MyProductTeaser

<div class="row">  
{% for i in pimcore_block('teaserblock').iterator %}
{{ pimcore_renderlet('productteaser', {
controller: 'shop',
action: 'productCell',
width: 270,
height: 370,
title: 'Drag a product here',
editmode: editmode
}) }}
{% endfor %}
</div>

Создание контроллера и экшена для содержимого тизера

Экшен контроллера

    public function productCellAction(Request $request): Response  
{
$id = $request->attribute->getInt('id');
$type = $request->attribute->get('type');

if ($type === 'object') {
$product = Product::getById($id);

return $this->render('product/product_cell.html.twig', ['product' => $product]);
}

throw new \Exception('Invalid Type');
}

Шаблон

{% set col = app.request.get('editmode') ? 12 : 3 %}  

<div class="col-sm-{{ col }} col-lg-{{ col }} col-md-{{ col }}">
<div class="thumbnail product-list-item">
<a href="{{ product.linkProduct.detailUrl }}">
{{ product.getFirstImage('productList').html({class: 'product-image'}) }}
<div class="caption">
<h4 class="pull-right">{{ product.OSPrice }}</h4>

<h4>{{ product.OSName }}</h4>

<p>{{ product.description|striptags|trim[:70] }}</p>

</div>
</a>

<div class="buttons">
<div class="row">
<div class="col-md-6">
</div>
<div class="col-md-6">
<a href="{{ pimcore_url({
language: language,
action: 'add',
item: product.id,
}, 'cart') }}" class="btn btn-success btn-product">
<span class="glyphicon glyphicon-shopping-cart"></span>
{{ 'shop.buy'|trans }}
</a>
</div>
</div>
</div>
</div>
</div>


Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.