PHPackages                             asdoria/sylius-pickup-point-plugin - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. asdoria/sylius-pickup-point-plugin

ActiveSylius-plugin[Utility &amp; Helpers](/categories/utility)

asdoria/sylius-pickup-point-plugin
==================================

Asdoria Pickup point plugin for Sylius

0.1.6(2y ago)45116MITPHPPHP ^8.0

Since Sep 14Pushed 2y agoCompare

[ Source](https://github.com/asdoria/SyliusPickupPointPlugin)[ Packagist](https://packagist.org/packages/asdoria/sylius-pickup-point-plugin)[ RSS](/packages/asdoria-sylius-pickup-point-plugin/feed)WikiDiscussions main Synced 3w ago

READMEChangelog (6)Dependencies (3)Versions (8)Used By (0)

[![Asdoria Lgoo](doc/asdoria.jpg)](doc/asdoria.jpg)

Asdoria Sylius Pickup Point Plugin
==================================

[](#asdoria-sylius-pickup-point-plugin)

This plugin allows you to retrieve and use pickup points from different providers in your Sylius Shop

[![Pickup Point Plugin](doc/presentation.gif)](doc/presentation.gif)

Installation
------------

[](#installation)

### Require plugin with composer:

[](#require-plugin-with-composer)

```
$ composer require asdoria/sylius-pickup-point-plugin
```

### Register bundles in `config/bundles.php`:

[](#register-bundles-in-configbundlesphp)

```
[...]
Bazinga\Bundle\JsTranslationBundle\BazingaJsTranslationBundle::class => ['all' => true],
Setono\SyliusPickupPointPlugin\SetonoSyliusPickupPointPlugin::class => ['all' => true],
Asdoria\SyliusPickupPointPlugin\AsdoriaSyliusPickupPointPlugin::class => ['all' => true],
FOS\JsRoutingBundle\FOSJsRoutingBundle::class => ['all' => true],
[...]
```

### Import configuration:

[](#import-configuration)

```
# config/packages/asdoria_sylius_pickup_point.yaml
imports:
    - { resource: "@SetonoSyliusPickupPointPlugin/Resources/config/app/config.yaml" }
    - { resource: "@AsdoriaSyliusPickupPointPlugin/Resources/config/config.yaml" }

setono_sylius_pickup_point:
    resources:
        pickup_point:
            classes:
                model: Asdoria\SyliusPickupPointPlugin\Entity\PickupPoint

asdoria_sylius_pickup_point:
    chrono_relay:
        enabled: true
        options:
            accountNumber: JOHNDOE
            password: 123456
    mondial_relay:
        enabled: false
        options:
            accountNumber: JOHNDOE
            password: 123456
    colissimo_relay:
        enabled: false
        options:
            accountNumber: JOHNDOE
            password: 123456
    shop2shop_relay:
        enabled: false
        options:
            accountNumber: JOHNDOE
            password: 123456
            maxPointChronopost: 20
    dpd_relay:
        enabled: false
        options:
            key: KEY
```

### Import routes:

[](#import-routes)

```
# config/routes/setono_sylius_pickup_point.yaml
setono_sylius_pickup_point_plugin:
    resource: "@SetonoSyliusPickupPointPlugin/Resources/config/routing.yaml"

# config/routes/fos_js_routing.yaml
fos_js_routing:
    resource: "@FOSJsRoutingBundle/Resources/config/routing/routing-sf4.xml"
    prefix: /{_locale}

# config/packages/js_translation.yaml
bazinga_js_translation:
    resource: "@BazingaJsTranslationBundle/Resources/config/routing/routing.yml"
    prefix: /{_locale}
```

### Paste the following content to the `src/Entity/Shipping/Shipment.php file`:

[](#paste-the-following-content-to-the-srcentityshippingshipmentphp-file)

```

```

### Tell Sylius to use your own extended resources in `config/packages/_sylius.yaml`:

[](#tell-sylius-to-use-your-own-extended-resources-in-configpackages_syliusyaml)

```
sylius_shipping:
    resources:
        shipment:
            classes:
                model: App\Entity\Shipping\Shipment
        shipping_method:
            classes:
                model: App\Entity\Shipping\ShippingMethod
```

### Update schema database

[](#update-schema-database)

```
bin/console doctrine:migrations:diff
bin/console doctrine:migrations:migrate
```

### Run following commands:

[](#run-following-commands)

```
bin/console cache:clear
bin/console fos:js-routing:dump --format=json --target=public/js/fos_js_routes.json
bin/console bazinga:js-translation:dump public/js --format=json
bin/console sylius:install:assets
```

Front
-----

[](#front)

### 0/ Admin

[](#0-admin)

Add `{{ form_row(form.pickupPointProvider) }}` in ShippingMethod form. You can copy the template overrides from the plugin directory :

```
From: [shop_dir] vendor/asdoria/sylius-pickup-point-plugin/src/Resources/views/bundles/SyliusAdminBundle/*
To: [shop_dir] templates/bundles/SyliusAdminBundle/*

```

### 1/ Steps

[](#1-steps)

1. In `templates/bundles/SyliusShopBundle/Checkout/selectShipping.html.twig`, put react instance element with class `react-pickup-point` and locale with `data-pkp-locale="{{ app.request.locale }}"`

```
{% block content %}
[...]

{% endblock %}
```

2. In `templates/bundles/SyliusShopBundle/Checkout/SelectShipping/_shipment.html.twig`, put `` with class `react-pickup-point-input-hidden`

```
{% form_theme form.pickupPointId '@SetonoSyliusPickupPointPlugin/Form/theme.html.twig' %}

    {{ form_errors(form.method) }}

    {% for key, choice_form in form.method %}
        {% set fee = form.method.vars.shipping_costs[choice_form.vars.value] %}
        {% set method = form.method.vars.choices[key].data %}
        {% include '@SyliusShop/Checkout/SelectShipping/_choice.html.twig' with {'form': choice_form, 'method': method, 'fee': fee} %}
    {% else %}
        {% include '@SyliusShop/Checkout/SelectShipping/_unavailable.html.twig' %}
    {% endfor %}

    {#

    #}

    {% if form.method|length %}
        {{ form_widget(form.pickupPointId, {'attr': {'class': 'react-pickup-point-input-hidden'}}) }}
        {{- form_errors(form.pickupPointId) -}}
    {% endif %}

```

3. In your JS context, you must create a new entrypoint in webpack.

```
.addEntry('pickup-point', [
    './assets/shop/js/app/pickup-point.js'
])
```

4. In `templates/bundles/SyliusShopBundle/Checkout/selectShipping.html.twig`, call javascripts and stylesheets events, and `pickup-point` script after other scripts.

```
{% block stylesheets %}
    {{ parent() }}
    {{ sylius_template_event('asdoria.pickup.point.stylesheets') }}
{% endblock %}

{% block javascripts %}
    {{ parent() }}
    {{ sylius_template_event('asdoria.pickup.point.javascripts') }}
    {{ encore_entry_script_tags('pickup-point', null, 'shop') }}
{% endblock %}
```

5. Create the file `assets/shop/js/app/pickup-point.js`

```
document.addEventListener('DOMContentLoaded', async () => {
    const providersWithPickupPoint = [...document.querySelectorAll('input.input-shipping-method[data-pickup-point-provider]')]
    if (!providersWithPickupPoint.length) return

    const providerCheckedByDefault = providersWithPickupPoint.find(providerHTML => providerHTML.checked)

    const paramsForEventBus = {}

    if (providerCheckedByDefault) {
        const elToTeleportPickupPoint = getElToTeleportPickupPoint(providerCheckedByDefault)

        if (!elToTeleportPickupPoint) return

        paramsForEventBus.providerCode = providerCheckedByDefault.dataset?.pickupPointProvider
        paramsForEventBus.csrfToken    = providerCheckedByDefault.dataset?.csrfToken

        window.asdoriaPickupEventBus.dispatchEvent('EVENT_INSTANCE_PICKUP_POINT', {
            ...paramsForEventBus,
            elToTeleport: elToTeleportPickupPoint
        })
    }

    providersWithPickupPoint.forEach(providerWithPickupPoint => {
        providerWithPickupPoint.addEventListener('change', (e) => {
            const elToTeleportPickupPoint = getElToTeleportPickupPoint(e.target)

            if (!elToTeleportPickupPoint) return

            const instanceAppReact = document.querySelector('.pkp-app')

            paramsForEventBus.providerCode = e.target.dataset?.pickupPointProvider
            paramsForEventBus.csrfToken    = e.target.dataset?.csrfToken

            if (instanceAppReact) {
                window.asdoriaPickupEventBus.dispatchEvent('EVENT_SET_PICKUP_POINT', {
                    ...paramsForEventBus,
                    elToTeleport: elToTeleportPickupPoint
                })

                return
            }

            window.asdoriaPickupEventBus.dispatchEvent('EVENT_INSTANCE_PICKUP_POINT', {
                ...paramsForEventBus,
                elToTeleport: elToTeleportPickupPoint
            })
        })
    })

    const providersWithoutPickupPoint = [...document.querySelectorAll('input.input-shipping-method:not([data-pickup-point-provider])')]

    providersWithoutPickupPoint.forEach(providerWithoutPickupPoint => {
        providerWithoutPickupPoint.addEventListener('change', (e) => {
            window.asdoriaPickupEventBus.dispatchEvent('EVENT_HIDE_PICKUP_POINT')
        })
    })

    updateCurrentPoint()
})

/**
 *
 * @param inputRadio
 * @returns {*|null}
 */
const getElToTeleportPickupPoint = (inputRadio) => {
    const reactParentTeleportPickupPoint = inputRadio.closest('.react-parent-teleport-pickup-point')

    if (!reactParentTeleportPickupPoint) return null

    const elToTeleportPickupPoint = reactParentTeleportPickupPoint.querySelector('.react-teleport-pickup-point')

    if (!elToTeleportPickupPoint) return null

    return elToTeleportPickupPoint
}

const updateCurrentPoint = () => {
    const elInstance = document.querySelector('.react-pickup-point')
    const inputHidden = document.querySelector('.react-pickup-point-input-hidden')

    if (!elInstance || !inputHidden) return

    window.asdoriaPickupEventBus.addEventListener('EVENT_UPDATE_CURRENT_PICKUP_POINT', ({ detail: getCurrentPoint }) => {
        inputHidden.value = getCurrentPoint.code
    })
}
```

6. Map will teleport in current choice of provider. To do it, in `templates/bundles/SyliusShopBundle/Checkout/SelectShipping/_choice.html.twig`put class `react-parent-teleport-pickup-point` in choice container, and class `react-teleport-pickup-point` in a child `` of this container.

```
{% import '@SyliusShop/Macro/images.html.twig' as Image %}
{% import '@SyliusShop/Common/Macro/money.html.twig' as money %}

    {{ form_row(form, sylius_test_form_attribute('shipping-method-select')) }}

    [...]

    {% if method.pickupPointProvider is not empty %}

    {% endif %}

```

7. Create file `config/routes/js_translation.yaml`

```
bazinga_js_translation:
    resource: "@BazingaJsTranslationBundle/Resources/config/routing/routing.yml"
    prefix: /{_locale}
    requirements:
        _locale: ^[A-Za-z]{2,4}(_([A-Za-z]{4}|[0-9]{3}))?(_([A-Za-z]{2}|[0-9]{3}))?$
```

### 2/ Options

[](#2-options)

Data attributeValueExplicationDefault Value`data-pkp-height`pxSet height of map400px`data-pkp-height-mobile`pxSet height of map on mobile250px`data-pkp-marker-icon`stringSet marker icon with path/bundles/asdoriasyliuspickuppointplugin/images/marker-icon.png`data-pkp-zoom`intSet zoom of map13`data-pkp-filter-shop`0 or 1Enable shops filter0`data-pkp-zoom-control`0 or 1Display zoom controls1`data-pkp-scroll-wheel-zoom`0 or 1Enable zoom on scroll0`data-pkp-zoom-control-position`bottomleft, topright, etc...Position of zoom controlsbottomright```

    {% if form.method|length %}
    {{ form_row(form.pickupPointId) }}
    {% endif %}

```

###  Health Score

26

—

LowBetter than 41% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity20

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity43

Maturing project, gaining track record

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~7 days

Total

7

Last Release

969d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/a3c3d21a7e6143706fae64e77ded0b43dd880f3caa348009c1b9177ed51dc4d6?d=identicon)[Asdoria](/maintainers/Asdoria)

---

Top Contributors

[![pvasdoria](https://avatars.githubusercontent.com/u/36963822?v=4)](https://github.com/pvasdoria "pvasdoria (9 commits)")[![faasdoria](https://avatars.githubusercontent.com/u/38280413?v=4)](https://github.com/faasdoria "faasdoria (7 commits)")[![RemyLasseigne](https://avatars.githubusercontent.com/u/104015106?v=4)](https://github.com/RemyLasseigne "RemyLasseigne (6 commits)")[![hdasdoria](https://avatars.githubusercontent.com/u/42731924?v=4)](https://github.com/hdasdoria "hdasdoria (2 commits)")

---

Tags

ecommercephppickup-and-deliverypickup-locationssyliussylius-pluginsyliusshippingsylius-pluginasdoriapickup-point

### Embed Badge

![Health badge](/badges/asdoria-sylius-pickup-point-plugin/health.svg)

```
[![Health](https://phpackages.com/badges/asdoria-sylius-pickup-point-plugin/health.svg)](https://phpackages.com/packages/asdoria-sylius-pickup-point-plugin)
```

###  Alternatives

[sylius/refund-plugin

Plugin provides basic refunds functionality for Sylius application.

691.7M17](/packages/sylius-refund-plugin)[stefandoorn/sitemap-plugin

Sitemap Plugin for Sylius

841.1M](/packages/stefandoorn-sitemap-plugin)[tilleuls/sylius-click-n-collect-plugin

Click and Collect plugin for Sylius, to sell and deliver securely during the COVID-19 pandemic.

7814.4k](/packages/tilleuls-sylius-click-n-collect-plugin)[monsieurbiz/sylius-rich-editor-plugin

A Rich Editor plugin for Sylius.

74404.9k6](/packages/monsieurbiz-sylius-rich-editor-plugin)[synolia/sylius-scheduler-command-plugin

Scheduler Command Plugin.

35380.8k](/packages/synolia-sylius-scheduler-command-plugin)[stefandoorn/sylius-google-tag-manager-enhanced-ecommerce-plugin

Google Tag Manager Enhanced Ecommerce plugin for Sylius.

41242.2k](/packages/stefandoorn-sylius-google-tag-manager-enhanced-ecommerce-plugin)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
