elbidouiller / sylius-terms-plugin
Sylius terms and conditions plugin
Installs: 216
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 12
Type:sylius-plugin
Requires
- php: >=8.1
- behat/transliterator: ^1.3
- doctrine/collections: ^1.6
- doctrine/orm: ^2.7
- knplabs/knp-menu: ^3.1
- monsieurbiz/sylius-rich-editor-plugin: ^2.7
- sylius/resource-bundle: ^1.6
- symfony/config: ^4.4 || ^5.4 || ^6.0
- symfony/dependency-injection: ^4.4 || ^5.4 || ^6.0
- symfony/form: ^4.4 || ^5.4 || ^6.0
- symfony/http-foundation: ^4.4 || ^5.4 || ^6.0
- symfony/http-kernel: ^4.4 || ^5.4 || ^6.0
- symfony/options-resolver: ^4.4 || ^5.4 || ^6.0
- symfony/routing: ^4.4 || ^5.4 || ^6.0
- symfony/translation-contracts: ^1.1 || ^2.4
- thecodingmachine/safe: ^1.1
- twig/twig: ^2.14 || ^3.3
- webmozart/assert: ^1.9
Requires (Dev)
- phpspec/phpspec: ^7.1
- phpunit/phpunit: ^9.5
- psalm/plugin-phpunit: ^0.16.1
- psalm/plugin-symfony: ^2.4
- setono/code-quality-pack: ^2.1.1
- sylius/sylius: ~1.10.14
- symfony/debug-bundle: ^5.1
- symfony/dotenv: ^5.1
- symfony/intl: ^4.4 || ^5.0
- symfony/proxy-manager-bridge: ^4.4.25
- symfony/web-profiler-bundle: ^5.0
This package is auto-updated.
Last update: 2025-03-04 11:36:31 UTC
README
Will add the requirement to check off terms and conditions when the customer checks out
Screenshots
Shop
Before the customer can place order, he/she has to check the required terms
Admin
Here is a list of terms. Notice the terms_and_conditions
which is associated with multiple channels.
The Explanation
field is the text shown on the complete order page. Notice you can use a placeholder ([link:Link text]
) to tell where the link should be.
Installation
Step 1: Download the plugin
Open a command console, enter your project directory and execute the following command to download the latest stable version of this plugin:
$ composer require setono/sylius-terms-plugin
This command requires you to have Composer installed globally, as explained in the installation chapter of the Composer documentation.
Step 2: Enable the plugin
Then, enable the plugin by adding it to the list of registered plugins/bundles
in the config/bundles.php
file of your project:
<?php # config/bundles.php return [ // ... Setono\SyliusTermsPlugin\SetonoSyliusTermsPlugin::class => ['all' => true], // It is important to add plugin before the grid bundle Sylius\Bundle\GridBundle\SyliusGridBundle::class => ['all' => true], // ... ];
NOTE that you must instantiate the plugin before the grid bundle, else you will see an exception like You have requested a non-existent parameter "setono_sylius_terms.model.terms.class".
Step 3: Import config
# config/packages/_sylius.yaml imports: # ... - { resource: "@SetonoSyliusTermsPlugin/Resources/config/app/config.yaml" } # ...
Step 4: Import routing
# config/routes/setono_sylius_terms.yaml setono_sylius_terms_shop: resource: "@SetonoSyliusTermsPlugin/Resources/config/shop_routing.yaml" prefix: /{_locale} requirements: _locale: ^[a-z]{2}(?:_[A-Z]{2})?$ setono_sylius_terms_admin: resource: "@SetonoSyliusTermsPlugin/Resources/config/admin_routing.yaml" prefix: /admin
Step 5: Update your database schema
$ php bin/console doctrine:migrations:diff $ php bin/console doctrine:migrations:migrate
Step 6: Override checkout complete form
Override the Sylius Form:
-
If you haven't your own
templates/bundles/SyliusShopBundle/Checkout/Complete/_form.html.twig
yet:$ cp vendor/sylius/sylius/src/Sylius/Bundle/ShopBundle/Resources/views/Checkout/Complete/_form.html.twig \ templates/bundles/SyliusShopBundle/Checkout/Complete/_form.html.twig
-
If you already have it:
Add terms field (exactly this conditional way):
{# templates/bundles/SyliusShopBundle/Checkout/Complete/_form.html.twig #} {% if form.terms is defined %} {% form_theme form.terms '@SetonoSyliusTermsPlugin/Shop/Form/termsTheme.html.twig' %} {{ form_row(form.terms) }} {% endif %}
So the final template will look like this:
{# templates/bundles/SyliusShopBundle/Checkout/Complete/_form.html.twig #} {{ form_row(form.notes, {'attr': {'rows': 3}}) }} {% if form.terms is defined %} {% form_theme form.terms '@SetonoSyliusTermsPlugin/Shop/Form/termsTheme.html.twig' %} {{ form_row(form.terms) }} {% endif %}
Troubleshooting
-
If you see
Neither the property "terms" nor one of the methods "terms()", "getterms()"/"isterms()"/"hasterms()" or "__call()" exist and have public access in class "Symfony\Component\Form\FormView".
Then see Setono#13 and double-check you added terms field at template like described at
Override checkout complete form
section. -
If you see
Grid "setono_sylius_terms_terms" does not exists
Then you forgot to import config from
Step 3: Import config
section. -
If you see
Uncaught ReferenceError: $ is not defined
in your js consoleThis means
jQuery
was loaded after plugin's javascript code. Plugin's javascript code injecting into main template viasylius.shop.layout.javascripts
Sonata block. So check your customtemplates/bundles/SyliusShopBundle/layout.html.twig
it'sjavascript
block should be like this:{# layout.html.twig #} {% block javascripts %} // We expect jquery to be loaded here {% include '@SyliusUi/_javascripts.html.twig' with {'path': 'assets/shop/js/app.js'} %} // But if you have it as separate script - just make sure // it placed before `sylius.shop.layout.javascripts` sonata block {{ sonata_block_render_event('sylius.shop.layout.javascripts') }} {% endblock %}