PHPackages                             pringuin/opendxp-dataprivacybundle - 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. [Templating &amp; Views](/categories/templating)
4. /
5. pringuin/opendxp-dataprivacybundle

ActiveOpendxp-bundle[Templating &amp; Views](/categories/templating)

pringuin/opendxp-dataprivacybundle
==================================

Dataprivacy Bundle for OpenDXP

v1.2(3mo ago)212↓50%GPL-3.0-or-laterJavaScriptPHP ^8.3

Since Oct 10Pushed 3mo agoCompare

[ Source](https://github.com/pringuin/opendxp-dataprivacybundle)[ Packagist](https://packagist.org/packages/pringuin/opendxp-dataprivacybundle)[ Docs](https://github.com/pringuin/opendxp-dataprivacybundle)[ RSS](/packages/pringuin-opendxp-dataprivacybundle/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (3)Dependencies (1)Versions (4)Used By (0)

Data privacy bundle for OpenDXP
===============================

[](#data-privacy-bundle-for-opendxp)

Add data privacy features (GDPR / DSGVO) to OpenDXP

Version 1.x can be used for OpenDXP 1.

Features
--------

[](#features)

- Does support multiple domains (using OpenDXP sites)
- Easy installation in OpenDXP projects (drop-in-solution)
- Admin interface to configure trackers and tools
- Frontend with cookie and tracking consent features

[![Backend Interface](docs/img/localized_admin_interface.png)](docs/img/localized_admin_interface.png)

Dependencies
------------

[](#dependencies)

This bundle does include the [tarteaucitron.js](https://github.com/AmauriC/tarteaucitron.js) script in the `pringuin/DataprivacyBundle/Resources/public/js/tarteaucitron` folder.

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

[](#installation)

### Composer Installation

[](#composer-installation)

1. Add code below to your `composer.json` or install it via command line

```
"require": {
"pringuin/opendxp-dataprivacybundle" : "^1.0"
}
```

### Add the bundle

[](#add-the-bundle)

Add the bundle to your Kernel in src/Kernel.php like this:

```
public function registerBundlesToCollection(BundleCollection $collection): void
{
$collection->addBundle(new \pringuin\DataprivacyBundle\pringuinDataprivacyBundle(), 70);
}
```

You might also need to add it to your config/bundles.php:

```
    \pringuin\DataprivacyBundle\pringuinDataprivacyBundle::class => ['all' => true],
```

### Install the assets

[](#install-the-assets)

After you have installed the Dataprivacy Bundle via composer:

- Execute: `$ bin/console assets:install`

### Configure trackers, tools and services

[](#configure-trackers-tools-and-services)

The backend configuration should now be available. below the search in your OpenDXP admin backend. You can set your tracking IDs (for example your UA-XXXXXXXX-X) there. This will generate files in the folder `OPENDXP_INSTALLATION/config/pringuin_dataprivacy`. The file for the default site will be `siteconfig_default.yml`The next sites will follow the OpenDXP IDs and look like `siteconfig_1.yml`, `siteconfig_2.yml`. You can also change these files directly using your favorite IDE. They can be archived using git.

### Installation into your template

[](#installation-into-your-template)

To include the cookie consent into your frontend layout, you can use the following twig code. Simply insert it into your template (e.g. layout.html.twig) before the closing body Tag:

```
{{ render(controller('pringuin\\DataprivacyBundle\\Controller\\DefaultController::defaultAction', [])) }}
```

Hint: You can always override this template by implementing your own template in the folder `OPENDXP_INSTALLATION/app/Resources/pringuinDataprivacyBundle/views/default/default.html.twig`

[![Default Frontend Interface](docs/img/frontend_locale_cookie_consent.png)](docs/img/frontend_locale_cookie_consent.png)

### Adaption of button colors

[](#adaption-of-button-colors)

You can always use your own css to override the default css of tarteaucitron. If you'd like to keep the default css but have all buttons in the same color (as required by TTDSG for example), you can use the following CSS:

```
html body #tarteaucitronRoot #tarteaucitron .tarteaucitronAllow, html body #tarteaucitronRoot #tarteaucitron .tarteaucitronDeny,
html body #tarteaucitronRoot #tarteaucitronAlertBig .tarteaucitronAllow, html body #tarteaucitronRoot #tarteaucitronAlertBig .tarteaucitronDeny, html body #tarteaucitronRoot #tarteaucitronAlertBig #tarteaucitronCloseAlert,
#tarteaucitronAlertBig #tarteaucitronCloseAlert, #tarteaucitronAlertBig #tarteaucitronPersonalize, .tarteaucitronCTAButton, #tarteaucitron #tarteaucitronPrivacyUrl, #tarteaucitron #tarteaucitronPrivacyUrlDialog, #tarteaucitronRoot .tarteaucitronDeny {
    background: black !important;
    color: white !important;
}
```

Supported Tackers and Tools
---------------------------

[](#supported-tackers-and-tools)

This package does currently ship with the following trackers/tools integrations:

- Crazy Egg
- eKomi
- eTracker
- Facebook Pixel
- Google Analytics (supporting different implementations)
- Google Adwords Remarketing
- Google Fonts
- Google Tag Manager
- Hubspot
- Matomo (formerly Piwik)
- Mautic
- Zopim
- YouTube
- Vimeo
- Dailymotion

Note that you'll take care of the implementation of your video brick to make YouTube, Vimeo and Daily Motion work.

Sample code by [breakone](https://github.com/breakone):

```
{% set autoplay = autoplay.isChecked() ? true : false %}
{% set loop = loop.isChecked() ? true : false %}
{% set mute = muted.isChecked ? true: false %}

{% set video = opendxp_video('video') %}

{% if video.getVideoType == 'youtube' %}

{% elseif video.getVideoType == 'vimeo' %}

{% elseif video.getVideoType == 'dailymotion' %}

{% else %}
  {{ video|raw }}
{% endif %}
```

### Add your own tracker or tool consent

[](#add-your-own-tracker-or-tool-consent)

If a tracker or tool is missing, please check if the tool is integrated into [tarteaucitron.js](https://github.com/AmauriC/tarteaucitron.js) first. You can do this using the source code or the official [tarteaucitron.js website](https://opt-out.ferank.eu/en/install/) using the installation guide.

If the tracker or tool **is not** included into the tarteaucitron.js package, please integrate it there first (they accept pull requests). Alternatively you can directly include your custom service using this example code from tarteaucitron.js:

```
tarteaucitron.services.mycustomservice = {
    "key": "mycustomservice",
    "type": "social|analytic|ads|video|support",
    "name": "MyCustomService",
    "needConsent": true,
    "cookies": ['cookie', 'cookie2'],
    "readmoreLink": "/custom_read_more", // If you want to change readmore link
    "js": function () {
        "use strict";
        // When user allow cookie
    },
    "fallback": function () {
        "use strict";
        // when use deny cookie
    }
};
(tarteaucitron.job = tarteaucitron.job || []).push('mycustomservice');
```

To get a tracker or tool which **is** included in the tarteaucitron.js package into this bundle, you'll have to do the following steps:

#### Add it to the default configuration

[](#add-it-to-the-default-configuration)

The default configuration is the base for all site specific configurations. Changes to the default configuration will also change your configuration files for the sites. The default configuration is located at Resources/var/defaultconfiguration.yml

#### Add the view output

[](#add-the-view-output)

The necessary code for the templates can be found in the [tarteaucitron.js installation instructions](https://opt-out.ferank.eu/en/install/) easily. Simply select Free manual installation and scroll down to the next step. Search for your service to get the installation code, typically looking like this:

```

    tarteaucitron.user.etracker = 'data-secure-code';
    (tarteaucitron.job = tarteaucitron.job || []).push('etracker');

```

Add it to the other codes in the `Resources/views/default/default.html.twig` file and replace dynamic parameters like the data-secude-code above with twig values as shown in the currently implemented trackers and tools.

#### Add a translation

[](#add-a-translation)

Finally add a backend translation entry in the file `Resources/translations/admin.en.yml` and/or `admin.de.yml`The key will be the same you used in the `defaultconfiguration.yml`. You can also append a `_helptext` to the key to insert a custom helptext for editors.

#### Final step

[](#final-step)

Test your implementation and please create a pull request in this repository so everybody can now use your newly implemented service, tracker or tool. Thanks!

Updating
--------

[](#updating)

### Migrating from Pimcore

[](#migrating-from-pimcore)

If you migrate from Pimcore to OpenDXP you should be able to simply switch from [dataprivacybundle for pimcore](https://github.com/pringuin/dataprivacybundle) 2.X to the OpenDXP dataprivacybundle 1.X version. Simply replace it in your composer.json

Contributing
------------

[](#contributing)

While we consider this bundle stable and ready for productive use, we'd be very happy if you'd support us and the whole OpenDXP community by improving this bundle with pull requests. This is our first public OpenDXP bundle so constructive feedback would be very welcome too!

Copyright and license
---------------------

[](#copyright-and-license)

Copyright: [PRinguin GbR](https://pringuin.de)
For licensing details please visit [LICENSE.md](LICENSE.md)

###  Health Score

41

—

FairBetter than 88% of packages

Maintenance86

Actively maintained with recent releases

Popularity10

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity52

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 66.7% of commits — single point of failure

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 ~54 days

Total

3

Last Release

103d ago

### Community

Maintainers

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

---

Top Contributors

[![Cruiser13](https://avatars.githubusercontent.com/u/2771909?v=4)](https://github.com/Cruiser13 "Cruiser13 (2 commits)")[![PRinguinDevs](https://avatars.githubusercontent.com/u/256159816?v=4)](https://github.com/PRinguinDevs "PRinguinDevs (1 commits)")

---

Tags

composerconsentcookiedataprivacy-bundleopendxptrackertwigdataprivacyopendxp

### Embed Badge

![Health badge](/badges/pringuin-opendxp-dataprivacybundle/health.svg)

```
[![Health](https://phpackages.com/badges/pringuin-opendxp-dataprivacybundle/health.svg)](https://phpackages.com/packages/pringuin-opendxp-dataprivacybundle)
```

###  Alternatives

[mustache/mustache

A Mustache implementation in PHP.

3.3k44.6M291](/packages/mustache-mustache)[roots/acorn

Framework for Roots WordPress projects built with Laravel components.

9682.1M97](/packages/roots-acorn)[mopa/bootstrap-bundle

Easy integration of twitters bootstrap into symfony2

7042.9M33](/packages/mopa-bootstrap-bundle)[limenius/react-bundle

Client and Server-side react rendering in a Symfony Bundle

3871.2M](/packages/limenius-react-bundle)[symfony/ux-icons

Renders local and remote SVG icons in your Twig templates.

545.8M69](/packages/symfony-ux-icons)[nystudio107/craft-twigpack

Twigpack is a bridge between Twig and webpack, with manifest.json &amp; webpack-dev-server HMR support

97341.4k17](/packages/nystudio107-craft-twigpack)

PHPackages © 2026

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