Skip to content

Commit ccee940

Browse files
committed
OP-289: Add products in bundle section on admin product show page
1 parent 04f657e commit ccee940

3 files changed

Lines changed: 40 additions & 1 deletion

File tree

src/Resources/config/services/twig.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
<service id="bitbag_sylius_product_bundle.twig.extension.product_bundles"
1313
class="BitBag\SyliusProductBundlePlugin\Twig\Extension\ProductBundlesExtension" public="false">
1414
<argument type="service" id="bitbag_sylius_product_bundle.repository.product_bundle"/>
15+
<argument type="service" id="bitbag_sylius_product_bundle.repository.product_bundle_item"/>
1516
<tag name="twig.extension"/>
1617
</service>
1718
</services>

src/Resources/views/Admin/Product/show.html.twig

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,39 @@
1616
<h4 class="ui top attached large header">{{ 'bitbag_sylius_product_bundle.ui.bundles'|trans }}</h4>
1717
{% for bundle in bundles %}
1818
<div class="ui attached segment text-break">
19-
<a href="{{ path('sylius_admin_product_update', {id: bundle.product.id}) }}">
19+
<a href="{{ path('sylius_admin_product_show', {id: bundle.product.id}) }}">
2020
{{ bundle.product.name }}
2121
</a>
2222
</div>
2323
{% endfor %}
2424
</div>
2525
{% endif %}
26+
27+
{% if product.isBundle %}
28+
{% set bundledProducts = bitbag_get_products_from_bundle(product) %}
29+
<div class="ui hidden divider"></div>
30+
<h4 class="ui top attached large header">{{ 'bitbag_sylius_product_bundle.ui.products_in_bundle'|trans }}</h4>
31+
<div class="ui attached segment">
32+
{% for bundledProduct in bundledProducts %}
33+
{% set variant = bundledProduct.productVariant %}
34+
{% set product = variant.product %}
35+
<div class="ui header">
36+
{% include '@SyliusAdmin/Product/_mainImage.html.twig' with {'product': product, 'filter': 'sylius_admin_product_thumbnail'} %}
37+
<div class="content">
38+
<div class="sylius-product-name" title="{{ product.name }}">
39+
<a href="{{ path('sylius_admin_product_show', {id: product.id}) }}">
40+
{{ product.name }}
41+
</a>
42+
</div>
43+
<span class="sub header sylius-product-variant-code" title="{{ variant.code }}">
44+
{{ variant.code }}
45+
</span>
46+
<span class="sub header sylius-product-variant-code" title="{{ 'sylius.ui.qty'|trans }}">
47+
{{ 'sylius.ui.qty'|trans }}: {{ bundledProduct.quantity }}
48+
</span>
49+
</div>
50+
</div>
51+
{% endfor %}
52+
</div>
53+
{% endif %}
2654
{% endblock %}

src/Twig/Extension/ProductBundlesExtension.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
namespace BitBag\SyliusProductBundlePlugin\Twig\Extension;
1313

1414
use BitBag\SyliusProductBundlePlugin\Entity\ProductBundleInterface;
15+
use BitBag\SyliusProductBundlePlugin\Entity\ProductBundleItemInterface;
1516
use BitBag\SyliusProductBundlePlugin\Entity\ProductInterface;
17+
use BitBag\SyliusProductBundlePlugin\Repository\ProductBundleItemRepositoryInterface;
1618
use BitBag\SyliusProductBundlePlugin\Repository\ProductBundleRepositoryInterface;
1719
use Twig\Extension\AbstractExtension;
1820
use Twig\TwigFunction;
@@ -21,13 +23,15 @@ final class ProductBundlesExtension extends AbstractExtension
2123
{
2224
public function __construct(
2325
private readonly ProductBundleRepositoryInterface $productBundleRepository,
26+
private readonly ProductBundleItemRepositoryInterface $productBundleItemRepository,
2427
) {
2528
}
2629

2730
public function getFunctions(): array
2831
{
2932
return [
3033
new TwigFunction('bitbag_get_bundles_containing_product', [$this, 'getBundlesForProduct'], ['is_safe' => ['html']]),
34+
new TwigFunction('bitbag_get_products_from_bundle', [$this, 'getProductsFromBundle'], ['is_safe' => ['html']]),
3135
];
3236
}
3337

@@ -36,4 +40,10 @@ public function getBundlesForProduct(ProductInterface $product): array
3640
{
3741
return $this->productBundleRepository->findBundlesByVariants($product->getVariants());
3842
}
43+
44+
/** @return ProductBundleItemInterface[] */
45+
public function getProductsFromBundle(ProductInterface $product): array
46+
{
47+
return $this->productBundleItemRepository->findByBundleCode((string) $product->getCode());
48+
}
3949
}

0 commit comments

Comments
 (0)