Hi, in case, if I want to show Cookie Consent dialog only on specific URL, is there a way to show it conditionally (only on select page or pages)?
What would be the behaviour on those where itâs not shown? Iâd go with the CM JS api here. There are dedicated methods to save the consent decision as well as to simply display the form once again. There are also code samples available here.
So, we want to have 2 different behaviors.
- Pages without consent: analytics collects data as it is.
- Pages with consent: analytics supposes to collect data after user accept it.
Is it possible to do with CM API?
Try to run the following code on pages where youâd like the consent to be applied automatically:
ppms.cm.api(
"setInitialComplianceSettings",
{ consents: ["analytics"] },
function () {},
function () {}
);
ppms.cm.api(
"setComplianceSettings",
{ consents: { analytics: { status: 1 } } },
function () {},
function () {}
);
document.getElementById('ppms_cm_consent_popup_<your site id>').style.display = "none";
But this will also store the consent decision globally for all other pages. Not sure what youâd like to achieve.
You can also do it the other way round. To open the consent form after the consents have been saved, you can use the following code:
ppms.cm.api('openConsentForm', function(){}, function(){});
Alternatively, you could install another container code on those sites that youâd like to track always. You configure this container to not require consent and add the custom async tag to start tracking data. Here you have example code: how to install analytics via custom tag.
For better understanding what I want to achieve:
We have an application where users can create landing pages and publish with unique URL. Then users can track analytics on that pages. On our app, PIWIK analytics installed globally, and we filter data by user id, org id etc. to show specific data for specific URL. And we want to have an option to add or remove cookie consent for each page user creates.
As I understood from your message above, itâs not really achievable?
Didnât say that. There are multiple ways to configure it. I suggested a few, and hope those will be useful.
Hi, I tried your solution:
ppms.cm.api('openConsentForm', function(){}, function(){});
to show the form after page load. But this do not work. If I call this in the browser console, the form will appear.
I guess I have to wait for the API to be ready and therefore i put this call into
document.addEventListener("DOMContentLoaded", function(){
ppms.cm.api('openConsentForm', function(){}, function(){});
});
but without luck. Is there a callback function which I can use for it?
Background is, since it is not possible to hide the consent on specific pages
like Privacy Policy or Impressum.
(or did this change menawhile?)
We use a link to another page where the user can modify the settings.
To avoid the user must click once more to get the modal open, we would like to show this after loading the page automaticly.
Iâd suggest to fire this code via our integrated Tag Manager. Just pick the custom async tag type and that will make sure you fire the code at the right time.
Thank you for your answer.
as suggested I created a custom async tag with trigger
âLoad this tag right after the browserâ â Loaded all page elements (page load)
but this do not open the modal.
Then I used the trigger stg.timer which do open the modal, but a bit late.
What would be the best trigger for the goal to show the modal right after the page was opened
Thatâs weird. Can you share the website URL where itâs implemented? Here or on priv.
No sorry, it is a local docker environment. I didnât deploy this on the production page
Ok, so maybe some more details on how the container is implemented? Whatâs the technology used to build the app?
It is a ddev environment based on docker container. It is a 1:1 image from production CMS. We build an extension (TYPO3) to implement Piwik pro on.
It is already running at https://rw.net
There is the requirement that the modal should not show on defined pages.
We use a link to another page where the user can modify the settings.
To avoid the user must click once more to get the modal open, we would like to show this after loading the page automatically.
Thanks for the context. And how this extension adds the installation code to the website? I know that different CMS have different policies on that.
By a script tag in the html code. You can see this by viewing the source code.
The script tag position is at the end and we are working with variables for the key and the url,
but this should not be the probem, isnât?
<script type="text/javascript">
const consentManagerKey = `xxx`;
const consentManagerURL = `xxx`;
(function(window, document, dataLayerName, id) {
window[dataLayerName]=window[dataLayerName]||[],window[dataLayerName].push({start:(new Date).getTime(),event:"stg.start"});var scripts=document.getElementsByTagName('script')[0],tags=document.createElement('script');
function stgCreateCookie(a,b,c){var d="";if(c){var e=new Date;e.setTime(e.getTime()+24*c*60*60*1e3),d="; expires="+e.toUTCString()}document.cookie=a+"="+b+d+"; path=/"}
var isStgDebug=(window.location.href.match("stg_debug")||document.cookie.match("stg_debug"))&&!window.location.href.match("stg_disable_debug");stgCreateCookie("stg_debug",isStgDebug?1:"",isStgDebug?14:-1);
var qP=[];dataLayerName!=="dataLayer"&&qP.push("data_layer_name="+dataLayerName),isStgDebug&&qP.push("stg_debug");var qPString=qP.length>0?("?"+qP.join("&")):"";
tags.async=!0,tags.src="//" + consentManagerURL + "/"+id+".js"+qPString,scripts.parentNode.insertBefore(tags,scripts);
!function(a,n,i){a[n]=a[n]||{};for(var c=0;c<i.length;c++)!function(i){a[n][i]=a[n][i]||{},a[n][i].api=a[n][i].api||function(){var a=[].slice.call(arguments,0);"string"==typeof a[0]&&window[dataLayerName].push({event:n+"."+i+":"+a[0],parameters:[].slice.call(arguments,1)})}}(i[c])}(window,"ppms",["tm","cm"]);
})(window, document, 'dataLayer', consentManagerKey);
</script>
No. Those are the URL for the tag manager container and the property ID. Iâve forwarded the question about needed delay to the dev team, maybe they will have some ideas.
Some additional information from debug screen.
My custom tag is fired and the string âtagâ will get out in the Browser devtools, but the modal do not open
Letâs try with ppms.cm.api('openConsentForm', console.log, console.error);
to see a bit more.
Uh, yes. If I switch from
ppms.cm.api('openConsentForm', function(){}, function(){});
to
ppms.cm.api('openConsentForm', console.log, console.error);
do I get the following error in the Browser console.
ApiCommandError: Failed to render consent popup: No templates