Skip to content

Commit a675e9f

Browse files
Merge branch 'dev/Umbraco11' of https://github.com/patrickdemooij9/SeoToolkit.Umbraco into dev/Umbraco11
2 parents ac9ac0a + acabfa4 commit a675e9f

3 files changed

Lines changed: 75 additions & 1 deletion

File tree

src/SeoToolkit.Umbraco.ScriptManager.Core/Composers/ScriptManagerComposer.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ public void Compose(IUmbracoBuilder builder)
5050
.Add<GoogleTagManagerDefinition>()
5151
.Add<GoogleAnalyticsDefinition>()
5252
.Add<HotjarDefinition>()
53-
.Add<CustomScriptDefinition>();
53+
.Add<CustomScriptDefinition>()
54+
.Add<PiwikProDefinition>();
5455

5556
builder.Components().Append<EnableModuleComponent>();
5657

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
using SeoToolkit.Umbraco.ScriptManager.Core.Enums;
2+
using SeoToolkit.Umbraco.ScriptManager.Core.Helpers;
3+
using SeoToolkit.Umbraco.ScriptManager.Core.Interfaces;
4+
using SeoToolkit.Umbraco.ScriptManager.Core.Models.Business;
5+
using System;
6+
using System.Collections.Generic;
7+
using System.Linq;
8+
using System.Text;
9+
using System.Threading.Tasks;
10+
using Umbraco.Cms.Core.PropertyEditors;
11+
12+
namespace SeoToolkit.Umbraco.ScriptManager.Core.ScriptDefinitions
13+
{
14+
public class PiwikProDefinition : IScriptDefinition
15+
{
16+
private readonly ViewRenderHelper _viewRenderHelper;
17+
private const string accountAddressKey = "accountAddress";
18+
private const string siteIdKey = "siteId";
19+
20+
//Name of the definition
21+
public string Name => "Piwik PRO";
22+
//Alias of the definition. Used in the database
23+
public string Alias => "piwikpro";
24+
25+
//Umbraco Configuration fields of the definition
26+
public ConfigurationField[] Fields => new ConfigurationField[]
27+
{
28+
new () {
29+
Key = accountAddressKey,
30+
Name = "Account Address",
31+
Description = "Your Piwik PRO account address. Make sure the address contains https:// and a trailing slash.",
32+
View = "textstring"
33+
},
34+
new () {
35+
Key = siteIdKey,
36+
Name = "Site Id",
37+
Description = "Your Piwik PRO site ID",
38+
View = "textstring"
39+
}
40+
};
41+
42+
public PiwikProDefinition(ViewRenderHelper viewRenderHelper)
43+
{
44+
_viewRenderHelper = viewRenderHelper;
45+
}
46+
47+
//Render function where you add your script to the correct location. You can use the ViewRenderHelper to render a cshtml view.
48+
public void Render(ScriptRenderModel model, Dictionary<string, object> config)
49+
{
50+
if (!config.ContainsKey(accountAddressKey) || string.IsNullOrWhiteSpace(config[accountAddressKey]?.ToString()))
51+
return;
52+
53+
if (!config.ContainsKey(siteIdKey) || string.IsNullOrWhiteSpace(config[siteIdKey]?.ToString()))
54+
return;
55+
56+
var accountAddress = config[accountAddressKey].ToString();
57+
var siteId = config[siteIdKey].ToString();
58+
59+
string[] viewData = new[] { accountAddress, siteId };
60+
61+
model.AddScript(ScriptPositionType.BodyTop, _viewRenderHelper.RenderView("~/Views/ScriptManager/PiwikPro/Script.cshtml", viewData));
62+
}
63+
}
64+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
@model string[]
2+
<script type="text/javascript">
3+
(function(window, document, dataLayerName, id) {
4+
window[dataLayerName]=window[dataLayerName]||[],window[dataLayerName].push({start:(new Date).getTime(),event:"stg.start"});var scripts=document.getElementsByTagName('script')[0],tags=document.createElement('script');
5+
var qP=[];dataLayerName!=="dataLayer"&&qP.push("data_layer_name="+dataLayerName);var qPString=qP.length>0?("?"+qP.join("&")):"";
6+
tags.async=!0,tags.src="@Model[0]"+id+".js"+qPString,scripts.parentNode.insertBefore(tags,scripts);
7+
!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"]);
8+
})(window, document, 'dataLayer', '@Model[1]');
9+
</script>

0 commit comments

Comments
 (0)