Skip to main content
Privacy-relevant services such as tracking codes, tracking pixels or embedded maps may only run once the shop visitor has agreed to them. The tags with the prefix AC- represent this consent in the template: you use them to build the consent banner, and you use them to enclose the services themselves so that a service never even makes it into the page without consent.

The underlying model

Three levels interlock, and the tags follow exactly this structure:
  • The individual service. Each privacy-relevant service is created as its own entry in the <AgreementCookies> section of the shop.config and receives an ID. The corresponding tags start with AC-Entry.
  • The grouping. Services can be combined into groups, for example “Statistics” or “Convenience”, so that the visitor does not have to decide on each individual service. The corresponding tags start with AC-ConsentGroup.
  • Everything at once. For the “Accept all” switch there are the tags with AC-ConsentAll.
In addition, there are some tags that query the state of consent as a whole, for example whether the visitor has made a decision at all. Guide: Consent to data processing · Reference: AgreementCookies section

Prerequisite: enabling the function

All AC- tags depend on the Allow parameter in the <AgreementCookies> section of the shop.config.
With Allow = no, the shop assumes consent: all enclosures on the templates are active, all services are executed and all cookies are set. The same applies if the <AgreementCookies> section is not present in the shop.config at all. A missing configuration therefore does not disable the services, it enables them.
With Allow = test, you can check a new consent banner without it becoming visible to visitors. Outside test mode, the shop behaves as with no.
The individual tags are described further below, but in the template they always appear together. The following example shows a banner with groupings that only appears while a decision is pending.
The detour via DC-DynamicLoop1 is necessary because AC-ConsentGroupList only returns a comma-separated list of group IDs and is not a loop tag. The dynamic loop splits this list, and AC-ConsentGroup() takes one ID per iteration. You then enclose the service itself at the point where it is embedded:
This enclosure is the actual purpose of the whole function. A banner that saves the selection but leaves the services unenclosed still loads the service.
Each service is assigned a type in the shop.config. The type determines how a set checkmark is to be read, and for one of the three types this is exactly the opposite of what you would expect. With OptOutChecked, the checkbox is therefore checked as long as the visitor has not consented, and the checkmark disappears as soon as they consent.
Label the checkbox to match the type. If an OptOutChecked service shows “I agree” next to a pre-set checkmark, the interface means the opposite of what the shop saves.
If a default for the checkbox is configured for a service and there is no cookie for it yet, the default wins. AC-Entry_CheckboxIsChecked then shows the default state, regardless of whether consent has been given. Once the visitor has made a decision, only their decision counts.
These tags refer to consent as a whole and are permitted in all templates.

AC-AgreementMade

The range is displayed if the shop visitor has made a decision on how their data is handled, i.e. has seen the banner and pressed the corresponding button.

AC-AgreementMade_CookieName

Outputs the name of the cookie that records that the visitor has made a declaration of intent.
The tag is mainly needed for the cookie overview in the privacy policy. There, the name remains correct even if it is changed in the configuration later.

AC-AgreementMadeForID()

The range is displayed if the visitor has consented to data processing by the service with the given ID. The ID comes from the configuration of the respective service.
Use this tag to enclose tracking codes, tracking pixels, JavaScripts and containers. The service is then only executed in the positive range.
Use the negative range for replacement content, for example a placeholder instead of an embedded map with a note on how to give consent later.

AC-AgreementNeedsUpdate

The range is displayed if the configuration of the privacy-relevant services has been changed in such a way that updated consent is required.

AC-AgreementNotMadeOrNeedsUpdate

The range is displayed if consent has not yet been given for all services or if an update is required. This is the usual enclosure around the entire banner.
This tag combines two cases that you would otherwise have to query separately: the initial decision and a subsequent change to the services. For the banner, this is exactly the right condition, because the visitor must be asked in both cases.

The individual services

AC-Entry is a single tag, range tag and loop tag at the same time. As a single tag it outputs the number of configured services, as a range tag it applies if at least one service is configured, and as a loop it iterates over all services. All other AC-Entry_ tags refer to the service of the current loop iteration. They are permitted in all templates. However, the AC-Entry_ tags require a service to be active, so they belong in the {@AC-Entry} loop.

AC-Entry()

Optionally, the tag accepts a group ID as an argument. It then counts and iterates over only the services of that grouping.
With group ID:
The argument belongs on the tag itself. Even within an AC-ConsentGroup() enclosure, ~AC-Entry~ outputs the number of all services, not those of the grouping. Only ~AC-Entry(123)~ counts the services of that one grouping.
If the specified group ID is unknown, the single tag outputs 0, the loop runs no iterations and the range remains hidden. A typo in the ID therefore does not show up as an error in the template, only as an empty list.

AC-Entry_AgreementMade

The range is displayed if the visitor has consented to the use of this service.

AC-Entry_CheckboxClass

Outputs the functional class names that must be assigned to the service’s checkbox.
Without this class, the supplied JavaScript cannot find the checkbox. The checkmark can then be set, but it is neither saved nor kept in sync by the higher-level switches. Add your own styling classes in addition to it, not instead of it.

AC-Entry_CheckboxIsChecked

Outputs checked if the checkbox is to be checked. The tag is placed directly in the input element, without an attribute name.
Whether a checkmark means consent or objection depends on the type of service. See the section on OptIn and OptOut above.

AC-Entry_ConsentGroupID

Outputs the ID of the grouping to which the service is assigned. As a range tag, you can use it to check whether the service belongs to a grouping at all.

AC-Entry_CookieName

Outputs the name of the cookie in which consent or objection to this service is stored.
This lets you build the cookie table of the privacy policy from the configuration instead of maintaining it by hand. If a service is added, it automatically appears in the table.

AC-Entry_Descr

Outputs the description of the service. As a range tag, it only applies if a description is stored.

AC-Entry_ID

Outputs the ID of the service. It is the same ID that you pass to AC-AgreementMadeForID().

AC-Entry_Name

Outputs the name of the service.

AC-Entry_TrackingFrameworkList

Outputs the list of tracking frameworks through which consent to this service can be received in the WEBSALE app.
For a pure web shop, this tag is irrelevant. It is only needed if an app is also in use.

AC-Entry_Type

Outputs the type of the service as a number: 0 for OptIn, 1 for OptOutChecked, 2 for OptOutUnchecked.
For display in the banner, AC-Entry_TypeIsOptIn and AC-Entry_TypeIsOptOut are the better choice. You mainly need the number for troubleshooting.

AC-Entry_TypeIsOptIn

The range is displayed if the service is configured as OptIn.

AC-Entry_TypeIsOptOut

The range is displayed if the service is configured as OptOut, i.e. as OptOutChecked or as OptOutUnchecked.
The tag does not distinguish between the two OptOut variants. For a label that depends on the initial state of the checkbox, also evaluate AC-Entry_Type.

The groupings

They are permitted in all templates. Except for AC-ConsentGroupList, they require a grouping to be currently enclosed.

AC-ConsentGroupList

Outputs all group IDs as a comma-separated list, in the order of the configuration.
The tag itself is not a loop. You therefore always need a dynamic loop that splits the list and passes each ID individually to AC-ConsentGroup().

AC-ConsentGroup()

Encloses the grouping whose ID is passed as an argument. Within this enclosure, all other AC-ConsentGroup_ tags are available.
Two AC-ConsentGroup() enclosures must not overlap or be nested inside each other. The shop only ever evaluates one grouping at a time and reports such an interleaving as an error instead of silently displaying it incorrectly.
A negative range is not provided for this tag. If you want to check whether there are any groupings at all, evaluate AC-ConsentGroupList.

AC-ConsentGroup_CheckboxClass

Outputs the functional class names for the grouping’s checkbox.
The call to ws_agreement_updatecheckboxes() is part of it. It keeps the checkmarks of the individual services and the “Accept all” switch in sync when the visitor toggles the grouping as a whole.

AC-ConsentGroup_CheckboxIsChecked

Outputs checked if the grouping’s checkbox is to be checked, i.e. if consent has been given or is considered pre-set for all services in the grouping.
This tag also takes into account the defaults of the individual checkboxes, whereas AC-ConsentGroup_FullAgreementMade does not. As long as the visitor has not yet decided, the group checkbox can therefore be checked even though no consent has been given yet.

AC-ConsentGroup_Descr

Outputs the description of the grouping.

AC-ConsentGroup_FullAgreementMade

The range is displayed if the visitor has consented to the use of all services in this grouping.

AC-ConsentGroup_ID

Outputs the ID of the grouping.

AC-ConsentGroup_Name

Outputs the name of the grouping.

All services together

These three tags belong to the “Accept all” switch. They do not require an enclosure and are permitted in all templates.

AC-ConsentAll_CheckboxClass

Outputs the functional class names for the checkbox that toggles all groupings and thus all services.

AC-ConsentAll_CheckboxIsChecked

Outputs checked if the checkbox is to be checked, i.e. if consent has been given or is considered pre-set for all services.

AC-ConsentAll_FullAgreementMade

The range is displayed if the visitor has consented to the use of all groupings and thus all services.
This lets you, for example, show a “Change privacy settings” link only to those who have not already consented to everything.
  • Guide: Consent to data processing
  • Reference: AgreementCookies section
  • Reference: DC-DynamicLoop1…9