Skip to content

Commit f161dc6

Browse files
committed
make compatible with SXA local datasources
1 parent 2df33e8 commit f161dc6

File tree

4 files changed

+43
-22
lines changed

4 files changed

+43
-22
lines changed

src/Sitecore.Support.159068/Data/Fields/LayoutField.LinkRemover.cs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
using Sitecore.Diagnostics;
1010
using Sitecore.Layouts;
1111
using Sitecore.Links;
12+
using Sitecore.Pipelines.ResolveRenderingDatasource;
13+
using Sitecore.Pipelines;
1214

1315
public partial class LayoutField
1416
{
@@ -17,6 +19,7 @@ private class LinkRemover
1719
#region Properties
1820

1921
private readonly LayoutField layout;
22+
private readonly Item currentContextItem;
2023

2124
private static readonly MethodInfo GetParametersFieldsMethodInfo =
2225
typeof(Sitecore.Data.Fields.LayoutField).GetMethod("GetParametersFields",
@@ -26,9 +29,10 @@ private class LinkRemover
2629

2730
#region C'tors
2831

29-
public LinkRemover(LayoutField layout)
32+
public LinkRemover(LayoutField layout, Item currentContextItem)
3033
{
3134
this.layout = layout;
35+
this.currentContextItem = currentContextItem;
3236
}
3337

3438
#endregion
@@ -136,12 +140,23 @@ private void RemoveLinkFromRendering(ItemLink itemLink, RenderingDefinition rend
136140
{
137141
string targetItemId = itemLink.TargetItemID.ToString();
138142

139-
if (rendering.Datasource == itemLink.TargetPath)
143+
string currentDatasource = rendering.Datasource;
144+
if (!string.IsNullOrEmpty(rendering.Datasource))
145+
{
146+
using (new ContextItemSwitcher(currentContextItem))
147+
{
148+
ResolveRenderingDatasourceArgs resolveRenderingDatasourceArgs = new ResolveRenderingDatasourceArgs(rendering.Datasource);
149+
CorePipeline.Run("resolveRenderingDatasource", resolveRenderingDatasourceArgs, false);
150+
currentDatasource = resolveRenderingDatasourceArgs.Datasource;
151+
}
152+
}
153+
154+
if (currentDatasource != null && currentDatasource.Equals(itemLink.TargetPath, StringComparison.OrdinalIgnoreCase))
140155
{
141156
rendering.Datasource = string.Empty;
142157
}
143158

144-
if (rendering.Datasource == targetItemId)
159+
if (currentDatasource == targetItemId)
145160
{
146161
rendering.Datasource = string.Empty;
147162
}

src/Sitecore.Support.159068/Data/Fields/LayoutField.cs

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,19 @@
55
using Sitecore.Diagnostics;
66
using Sitecore.Layouts;
77
using Sitecore.Links;
8+
using Sitecore.Pipelines;
9+
using Sitecore.Pipelines.ResolveRenderingDatasource;
810
using Sitecore.Text;
911
using System;
1012
using System.Collections;
1113
using System.Xml.Linq;
1214

13-
public partial class LayoutField: Sitecore.Data.Fields.LayoutField
15+
public partial class LayoutField: Sitecore.XA.Foundation.SitecoreExtensions.CustomFields.LayoutField
1416
{
1517
public LayoutField(Item item) : base(item)
1618
{
1719
}
18-
19-
public LayoutField(Item item, string runtimeValue) : base(item, runtimeValue)
20-
{
21-
}
22-
20+
2321
public LayoutField(Field innerField) : base(innerField)
2422
{
2523
}
@@ -30,7 +28,7 @@ public LayoutField(Field innerField, string runtimeValue) : base(innerField, run
3028

3129
public override void RemoveLink(ItemLink itemLink)
3230
{
33-
LinkRemover linkRemover = new LinkRemover(this);
31+
LinkRemover linkRemover = new LinkRemover(this, base.InnerField.Item);
3432
linkRemover.RemoveLink(itemLink);
3533
}
3634
public override void Relink(ItemLink itemLink, Item newLink)
@@ -122,12 +120,23 @@ public override void Relink(ItemLink itemLink, Item newLink)
122120
rendering.ItemID = newLinkID;
123121
}
124122

125-
if (rendering.Datasource == targetItemID)
123+
string currentDatasource = rendering.Datasource;
124+
if (!string.IsNullOrEmpty(rendering.Datasource))
125+
{
126+
using (new ContextItemSwitcher(base.InnerField.Item))
127+
{
128+
ResolveRenderingDatasourceArgs resolveRenderingDatasourceArgs = new ResolveRenderingDatasourceArgs(rendering.Datasource);
129+
CorePipeline.Run("resolveRenderingDatasource", resolveRenderingDatasourceArgs, false);
130+
currentDatasource = resolveRenderingDatasourceArgs.Datasource;
131+
}
132+
}
133+
134+
if (currentDatasource == targetItemID)
126135
{
127136
rendering.Datasource = newLinkID;
128137
}
129138

130-
if (rendering.Datasource == itemLink.TargetPath)
139+
if (currentDatasource != null && currentDatasource.Equals(itemLink.TargetPath, StringComparison.OrdinalIgnoreCase))
131140
{
132141
rendering.Datasource = newLink.Paths.FullPath;
133142
}
@@ -166,13 +175,5 @@ public override void Relink(ItemLink itemLink, Item newLink)
166175
this.Value = layoutDefinition.ToXml();
167176
}
168177

169-
private RenderingParametersFieldCollection GetParametersFields(Item layoutItem, string renderingParameters)
170-
{
171-
UrlString parameters = new UrlString(renderingParameters);
172-
RenderingParametersFieldCollection parametersFields;
173-
RenderingParametersFieldCollection.TryParse(layoutItem, parameters, out parametersFields);
174-
return parametersFields;
175-
}
176-
177178
}
178179
}

src/Sitecore.Support.159068/Sitecore.Support.159068.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@
4646
<HintPath>..\packages\SC.Sitecore.Kernel.9.0.1\lib\Sitecore.Kernel.dll</HintPath>
4747
<Private>False</Private>
4848
</Reference>
49+
<Reference Include="Sitecore.XA.Foundation.SitecoreExtensions, Version=3.6.0.0, Culture=neutral, processorArchitecture=MSIL">
50+
<HintPath>..\packages\SXA90.Sitecore.XA.Foundation.SitecoreExtensions.1.6.0\lib\Sitecore.XA.Foundation.SitecoreExtensions.dll</HintPath>
51+
<Private>False</Private>
52+
</Reference>
4953
<Reference Include="System" />
5054
<Reference Include="System.Drawing" />
5155
<Reference Include="System.Web" />
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
<?xml version="1.0" encoding="utf-8"?>
1+
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
33
<package id="SC.Sitecore.Kernel" version="9.0.1" targetFramework="net462" />
4-
</packages>
4+
<package id="SXA90.Sitecore.XA.Foundation.SitecoreExtensions" version="1.6.0" targetFramework="net462" />
5+
</packages>

0 commit comments

Comments
 (0)