<pre class='dw-error'>Error compiling template "Designs/Swift/Swift_Sitemap.xml.cshtml"
Line 53: The name 'RenderNodes' does not exist in the current context
Line 55: The name 'helper' does not exist in the current context
Line 57: The name 'RenderNode' does not exist in the current context
Line 57: The name 'node' does not exist in the current context
Line 59: The name 'helper' does not exist in the current context
Line 84: The name 'node' does not exist in the current context
Line 86: The name 'page' does not exist in the current context
Line 88: The name 'RenderEcommerceGroupNodes' does not exist in the current context
Line 88: The name 'page' does not exist in the current context
Line 88: The name 'node' does not exist in the current context
Line 88: The name 'productPageid' does not exist in the current context
Line 91: The name 'node' does not exist in the current context
Line 93: The name 'page' does not exist in the current context
Line 95: The name 'RenderNodes' does not exist in the current context
Line 95: The name 'node' does not exist in the current context
Line 97: The name 'helper' does not exist in the current context
Line 114: The name 'url' does not exist in the current context
Line 116: The name 'RenderEcommerceProductNodes' does not exist in the current context
Line 116: The name 'group' does not exist in the current context
Line 116: The name 'group' does not exist in the current context
Line 116: The name 'node' does not exist in the current context
Line 116: The name 'group' does not exist in the current context
Line 116: The name 'detailProductPageId' does not exist in the current context
Line 118: The name 'RenderEcommerceGroupNodes' does not exist in the current context
Line 118: The name 'group' does not exist in the current context
Line 118: The name 'node' does not exist in the current context
Line 118: The name 'detailProductPageId' does not exist in the current context
Line 120: The name 'helper' does not exist in the current context
Line 132: The name 'url' does not exist in the current context
Line 154: 'Shop' does not contain a definition for 'get_TopLevelGroups' and no accessible extension method 'get_TopLevelGroups' accepting a first argument of type 'Shop' could be found (are you missing a using directive or an assembly reference?)
Line 167: 'Shop' does not contain a definition for 'get_TopLevelGroups' and no accessible extension method 'get_TopLevelGroups' accepting a first argument of type 'Shop' could be found (are you missing a using directive or an assembly reference?)
<hr/>
<div class='source-code'>
<span class='line-number'>  1</span>     // &lt;auto-generated/&gt;
<span class='line-number'>  2</span>     #pragma warning disable 1591
<span class='line-number'>  3</span>     namespace CompiledRazorTemplates.Dynamic
<span class='line-number'>  4</span>     {
<span class='line-number'>  5</span>         #line hidden
<span class='line-number'>  6</span>         using System.Threading.Tasks;
<span class='line-number'>  7</span>         using System;
<span class='line-number'>  8</span>         using System.Collections.Generic;
<span class='line-number'>  9</span>         using System.Linq;
<span class='line-number'> 10</span>         using Dynamicweb.Ecommerce.Products;
<span class='line-number'> 11</span>         using Dynamicweb.Frontend.Navigation;
<span class='line-number'> 12</span>         internal class RazorEngine_4453152ab2d54784913c40c28290232d : Dynamicweb.Rendering.ViewModelTemplate&lt;Dynamicweb.Frontend.PageViewModel&gt;
<span class='line-number'> 13</span>         {
<span class='line-number'> 14</span>             #pragma warning disable 1998
<span class='line-number'> 15</span>             public async override global::System.Threading.Tasks.Task ExecuteAsync()
<span class='line-number'> 16</span>             {
<span class='line-number'> 17</span>                 WriteLiteral(&quot;\r\n&quot;);
<span class='line-number'> 18</span>       
<span class='line-number'> 19</span>     	var masterArea = Pageview.Area;
<span class='line-number'> 20</span>     	if (Pageview.Area.IsLanguage)
<span class='line-number'> 21</span>     	{
<span class='line-number'> 22</span>     		masterArea = Pageview.Area.MasterArea;
<span class='line-number'> 23</span>     	}
<span class='line-number'> 24</span>     
<span class='line-number'> 25</span>     	List&lt;int&gt; masterWebsiteAndLanguages = new List&lt;int&gt;();
<span class='line-number'> 26</span>     	masterWebsiteAndLanguages.Add(masterArea.ID);
<span class='line-number'> 27</span>     	if (masterArea.Languages is object &amp;&amp; masterArea.Languages.Any())
<span class='line-number'> 28</span>     	{
<span class='line-number'> 29</span>     		foreach (var language in masterArea.Languages)
<span class='line-number'> 30</span>     		{
<span class='line-number'> 31</span>     			masterWebsiteAndLanguages.Add(language.ID);
<span class='line-number'> 32</span>     		}
<span class='line-number'> 33</span>     	}
<span class='line-number'> 34</span>     
<span class='line-number'> 35</span>     
<span class='line-number'> 36</span>     	string hostname = Dynamicweb.Context.Current.Request.Url.GetLeftPart(UriPartial.Authority);
<span class='line-number'> 37</span>     	List&lt;NavigationTreeNodeViewModel&gt; allWebsiteAndLanguageNodes = new List&lt;NavigationTreeNodeViewModel&gt;();
<span class='line-number'> 38</span>     
<span class='line-number'> 39</span>     	foreach (int areaid in masterWebsiteAndLanguages)
<span class='line-number'> 40</span>     	{
<span class='line-number'> 41</span>     		var navigationSettingsMain = new Dynamicweb.Frontend.Navigation.NavigationSettings()
<span class='line-number'> 42</span>     		{
<span class='line-number'> 43</span>     			StartLevel = 1,
<span class='line-number'> 44</span>     			StopLevel = 10,
<span class='line-number'> 45</span>     			RootAreaId = areaid,
<span class='line-number'> 46</span>     			IncludeFoldersAndHidden = true,
<span class='line-number'> 47</span>     			ExpandMode = Dynamicweb.Frontend.Navigation.ExpandMode.All
<span class='line-number'> 48</span>     		};
<span class='line-number'> 49</span>     
<span class='line-number'> 50</span>     		allWebsiteAndLanguageNodes.AddRange(GetNavigation(navigationSettingsMain)?.Nodes);
<span class='line-number'> 51</span>     	}
<span class='line-number'> 52</span>                 WriteLiteral(&quot;&lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;UTF-8\&quot; ?&gt;\r\n&lt;urlset xmlns=\&quot;http://www.sitemaps.org/schemas/sitemap/0.9\&quot;&gt;\r\n\r\n&quot;);
<span class='line-number'> 53</span>       Write(RenderNodes(allWebsiteAndLanguageNodes, hostname));
<span class='line-number'> 54</span>                 WriteLiteral(&quot;\r\n&lt;/urlset&gt;\r\n\r\n&quot;);
<span class='line-number'> 55</span>                 Write(helper);
<span class='line-number'> 56</span>                 WriteLiteral(&quot; RenderNodes(IEnumerable&lt;NavigationTreeNodeViewModel&gt; nodes, string hostname)\r\n{\r\n\tforeach (NavigationTreeNodeViewModel node in nodes)\r\n\t{\r\n\t\t&quot;);
<span class='line-number'> 57</span>        Write(RenderNode(node, hostname));
<span class='line-number'> 58</span>                 WriteLiteral(&quot;\r\n\r\n\t}\r\n}\r\n\r\n&quot;);
<span class='line-number'> 59</span>                 Write(helper);
<span class='line-number'> 60</span>                 WriteLiteral(@&quot; RenderNode(NavigationTreeNodeViewModel node, string hostname)
<span class='line-number'> 61</span>     {
<span class='line-number'> 62</span>     	var page = Dynamicweb.Content.Services.Pages.GetPage(node.PageId);
<span class='line-number'> 63</span>     
<span class='line-number'> 64</span>     	bool isEcommerceNavigation = false;
<span class='line-number'> 65</span>     	string navsettings = string.Empty;
<span class='line-number'> 66</span>     	if (page.NavigationSettings != null &amp;&amp; page.NavigationSettings.UseEcomGroups)
<span class='line-number'> 67</span>     	{
<span class='line-number'> 68</span>     		isEcommerceNavigation = true;
<span class='line-number'> 69</span>     		navsettings = page.NavigationSettings.Groups;
<span class='line-number'> 70</span>     	}
<span class='line-number'> 71</span>     
<span class='line-number'> 72</span>     	if (isEcommerceNavigation)
<span class='line-number'> 73</span>     	{
<span class='line-number'> 74</span>     		if (page.Allowclick &amp;&amp; page.ShowInSitemap &amp;&amp; !page.Noindex)
<span class='line-number'> 75</span>     		{
<span class='line-number'> 76</span>     			var productPageid = node.PageId;
<span class='line-number'> 77</span>                 if (!string.IsNullOrEmpty(page.NavigationSettings.ProductPage)) { 
<span class='line-number'> 78</span>     				productPageid = Dynamicweb.Environment.Helpers.LinkHelper.GetInternalPageId(page.NavigationSettings.ProductPage);
<span class='line-number'> 79</span>     			}
<span class='line-number'> 80</span>     			&lt;url&gt;
<span class='line-number'> 81</span>     &quot;);
<span class='line-number'> 82</span>                 WriteLiteral(&quot;\t\t\t\t&lt;loc&gt;&quot;);
<span class='line-number'> 83</span>                     Write(hostname);
<span class='line-number'> 84</span>                              Write(node.Link);
<span class='line-number'> 85</span>                 WriteLiteral(&quot;&lt;/loc&gt;\r\n\t\t\t\t&lt;lastmod&gt;&quot;);
<span class='line-number'> 86</span>                         Write(page.Audit.LastModifiedAt.ToString(&quot;s&quot;));
<span class='line-number'> 87</span>                 WriteLiteral(&quot;&lt;/lastmod&gt;\r\n\t\t\t&lt;/url&gt;\r\n\r\n\t\t\t&quot;);
<span class='line-number'> 88</span>            Write(RenderEcommerceGroupNodes(GetGroupsBySettings(page.NavigationSettings), node, hostname, productPageid));
<span class='line-number'> 89</span>                 WriteLiteral(&quot;\r\n\t\t}\r\n\t}\r\n\telse\r\n\t{\r\n\t\tif (page.Allowclick &amp;&amp; page.ShowInSitemap &amp;&amp; !page.Noindex)\r\n\t\t{\r\n\t\t\t&lt;url&gt;\r\n\t\t\t\t&lt;loc&gt;&quot;);
<span class='line-number'> 90</span>                     Write(hostname);
<span class='line-number'> 91</span>                              Write(node.Link);
<span class='line-number'> 92</span>                 WriteLiteral(&quot;&lt;/loc&gt;\r\n\t\t\t\t&lt;lastmod&gt;&quot;);
<span class='line-number'> 93</span>                         Write(page.Audit.LastModifiedAt.ToString(&quot;s&quot;));
<span class='line-number'> 94</span>                 WriteLiteral(&quot;&lt;/lastmod&gt;\r\n\t\t\t&lt;/url&gt;\r\n\t\t}\r\n\t\tif (node.Nodes.Any())\r\n\t\t{\r\n\t\t\t&quot;);
<span class='line-number'> 95</span>            Write(RenderNodes(node.Nodes, hostname));
<span class='line-number'> 96</span>                 WriteLiteral(&quot;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n&quot;);
<span class='line-number'> 97</span>                 Write(helper);
<span class='line-number'> 98</span>                 WriteLiteral(@&quot; RenderEcommerceGroupNodes(IEnumerable&lt;Dynamicweb.Ecommerce.Products.Group&gt; groups, NavigationTreeNodeViewModel node, string hostname, int detailProductPageId)
<span class='line-number'> 99</span>     {
<span class='line-number'>100</span>     	foreach (Group group in groups)
<span class='line-number'>101</span>     	{
<span class='line-number'>102</span>     
<span class='line-number'>103</span>     		if (group.NavigationClickable &amp;&amp; group.NavigationShowInSiteMap)
<span class='line-number'>104</span>     		{
<span class='line-number'>105</span>     			//Remember to check if this group is not having another primary page
<span class='line-number'>106</span>     			//Remember to check if this group does not have multiple parents - and if it has, decide if the group should be shown here
<span class='line-number'>107</span>     			//int primarypageid = group.Meta.PrimaryPageId; //Use this if needed - send it into the product
<span class='line-number'>108</span>     			string url = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(&quot;&quot;Default.aspx?ID=&quot;&quot; + node.PageId + &quot;&quot;&amp;GroupID=&quot;&quot; + group.IdUrlEncoded);
<span class='line-number'>109</span>     
<span class='line-number'>110</span>     			&lt;url&gt;
<span class='line-number'>111</span>     &quot;);
<span class='line-number'>112</span>                 WriteLiteral(&quot;\t\t\t\t&lt;loc&gt;&quot;);
<span class='line-number'>113</span>                     Write(hostname);
<span class='line-number'>114</span>                              Write(url);
<span class='line-number'>115</span>                 WriteLiteral(&quot;&lt;/loc&gt;\r\n\t\t\t&lt;/url&gt;\r\n\t\t}\r\n\t\t&quot;);
<span class='line-number'>116</span>        Write(RenderEcommerceProductNodes(Dynamicweb.Ecommerce.Services.Products.GetProductsByGroupId(group.Id, true, group.LanguageId, false), node, hostname, group, detailProductPageId));
<span class='line-number'>117</span>                 WriteLiteral(&quot;\r\n\t\t&quot;);
<span class='line-number'>118</span>        Write(RenderEcommerceGroupNodes(group.Subgroups, node, hostname, detailProductPageId));
<span class='line-number'>119</span>                 WriteLiteral(&quot;\r\n\r\n\t}\r\n}\r\n\r\n&quot;);
<span class='line-number'>120</span>                 Write(helper);
<span class='line-number'>121</span>                 WriteLiteral(@&quot; RenderEcommerceProductNodes(IEnumerable&lt;Dynamicweb.Ecommerce.Products.Product&gt; products, NavigationTreeNodeViewModel node, string hostname, Group group, int detailProductPageId)
<span class='line-number'>122</span>     {
<span class='line-number'>123</span>     	//Locate the right pageid. This group is shown on a page that might link to another page to show product detail. So on this page, find the paragraph, lookup the setting, change pageid to the detail page.
<span class='line-number'>124</span>     	//The product might be in 2 groups - ensure this is the primary or default group of the product - if not, do not render
<span class='line-number'>125</span>     	foreach (Product product in products)
<span class='line-number'>126</span>     	{
<span class='line-number'>127</span>     		string url = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(&quot;&quot;Default.aspx?ID=&quot;&quot; + detailProductPageId + &quot;&quot;&amp;GroupID=&quot;&quot; + group.IdUrlEncoded + &quot;&quot;&amp;ProductID=&quot;&quot; + product.Id);
<span class='line-number'>128</span>     		&lt;url&gt;
<span class='line-number'>129</span>     &quot;);
<span class='line-number'>130</span>                 WriteLiteral(&quot;\t\t\t&lt;loc&gt;&quot;);
<span class='line-number'>131</span>                 Write(hostname);
<span class='line-number'>132</span>                          Write(url);
<span class='line-number'>133</span>                 WriteLiteral(&quot;&lt;/loc&gt;\r\n\t\t&lt;/url&gt;\r\n\t}\r\n}\r\n\r\n&quot;);
<span class='line-number'>134</span>             }
<span class='line-number'>135</span>             #pragma warning restore 1998
<span class='line-number'>136</span>                
<span class='line-number'>137</span>     
<span class='line-number'>138</span>     	public IEnumerable&lt;Dynamicweb.Ecommerce.Products.Group&gt; GetGroupsBySettings(Dynamicweb.Content.PageNavigationSettings ecomSettings)
<span class='line-number'>139</span>     	{
<span class='line-number'>140</span>     		IEnumerable&lt;Dynamicweb.Ecommerce.Products.Group&gt; topLevelGroups;
<span class='line-number'>141</span>     
<span class='line-number'>142</span>     		string languageId = Dynamicweb.Ecommerce.Common.Context.LanguageID;
<span class='line-number'>143</span>     		switch (ecomSettings.ParentType)
<span class='line-number'>144</span>     		{
<span class='line-number'>145</span>     			case Dynamicweb.Content.EcommerceNavigationParentType.Groups:
<span class='line-number'>146</span>     				{
<span class='line-number'>147</span>     					Dynamicweb.Ecommerce.Extensibility.Controls.ProductsAndGroupsHandler groupHandler = new Dynamicweb.Ecommerce.Extensibility.Controls.ProductsAndGroupsHandler(ecomSettings.Groups);
<span class='line-number'>148</span>     					if (groupHandler.Type == Dynamicweb.Ecommerce.Extensibility.Controls.HandlerConfigurationType.All)
<span class='line-number'>149</span>     					{
<span class='line-number'>150</span>     						Dynamicweb.Ecommerce.Shops.Shop shop = Dynamicweb.Ecommerce.Services.Shops.GetShop(string.IsNullOrEmpty(groupHandler.ShopSelected) ? ecomSettings.ShopID : groupHandler.ShopSelected);
<span class='line-number'>151</span>     						if (shop == null)
<span class='line-number'>152</span>     							topLevelGroups = Enumerable.Empty&lt;Dynamicweb.Ecommerce.Products.Group&gt;();
<span class='line-number'>153</span>     						else
<span class='line-number'>154</span>     							topLevelGroups = shop.get_TopLevelGroups(languageId);
<span class='line-number'>155</span>     					}
<span class='line-number'>156</span>     					else
<span class='line-number'>157</span>     						topLevelGroups = groupHandler.GroupsSelected;
<span class='line-number'>158</span>     					break;
<span class='line-number'>159</span>     				}
<span class='line-number'>160</span>     
<span class='line-number'>161</span>     			case Dynamicweb.Content.EcommerceNavigationParentType.Shop:
<span class='line-number'>162</span>     				{
<span class='line-number'>163</span>     					Dynamicweb.Ecommerce.Shops.Shop shop = Dynamicweb.Ecommerce.Services.Shops.GetShop(ecomSettings.ShopID);
<span class='line-number'>164</span>     					if (shop == null)
<span class='line-number'>165</span>     						topLevelGroups = Enumerable.Empty&lt;Dynamicweb.Ecommerce.Products.Group&gt;();
<span class='line-number'>166</span>     					else
<span class='line-number'>167</span>     						topLevelGroups = shop.get_TopLevelGroups(languageId);
<span class='line-number'>168</span>     					break;
<span class='line-number'>169</span>     				}
<span class='line-number'>170</span>     
<span class='line-number'>171</span>     			default:
<span class='line-number'>172</span>     				{
<span class='line-number'>173</span>     					topLevelGroups = Enumerable.Empty&lt;Dynamicweb.Ecommerce.Products.Group&gt;();
<span class='line-number'>174</span>     					break;
<span class='line-number'>175</span>     				}
<span class='line-number'>176</span>     		}
<span class='line-number'>177</span>     
<span class='line-number'>178</span>     		return topLevelGroups;
<span class='line-number'>179</span>     	}
<span class='line-number'>180</span>     
<span class='line-number'>181</span>         }
<span class='line-number'>182</span>     }
<span class='line-number'>183</span>     #pragma warning restore 1591
<span class='line-number'>184</span>     
</div>
<hr/>
<div class='template-code'>
<span class='line-number'>  1</span>     @inherits Dynamicweb.Rendering.ViewModelTemplate&lt;Dynamicweb.Frontend.PageViewModel&gt;
<span class='line-number'>  2</span>     @using System;
<span class='line-number'>  3</span>     @using System.Collections.Generic;
<span class='line-number'>  4</span>     @using System.Linq;
<span class='line-number'>  5</span>     @using Dynamicweb.Ecommerce.Products;
<span class='line-number'>  6</span>     @using Dynamicweb.Frontend.Navigation;
<span class='line-number'>  7</span>     
<span class='line-number'>  8</span>     @{
<span class='line-number'>  9</span>     	var masterArea = Pageview.Area;
<span class='line-number'> 10</span>     	if (Pageview.Area.IsLanguage)
<span class='line-number'> 11</span>     	{
<span class='line-number'> 12</span>     		masterArea = Pageview.Area.MasterArea;
<span class='line-number'> 13</span>     	}
<span class='line-number'> 14</span>     
<span class='line-number'> 15</span>     	List&lt;int&gt; masterWebsiteAndLanguages = new List&lt;int&gt;();
<span class='line-number'> 16</span>     	masterWebsiteAndLanguages.Add(masterArea.ID);
<span class='line-number'> 17</span>     	if (masterArea.Languages is object &amp;&amp; masterArea.Languages.Any())
<span class='line-number'> 18</span>     	{
<span class='line-number'> 19</span>     		foreach (var language in masterArea.Languages)
<span class='line-number'> 20</span>     		{
<span class='line-number'> 21</span>     			masterWebsiteAndLanguages.Add(language.ID);
<span class='line-number'> 22</span>     		}
<span class='line-number'> 23</span>     	}
<span class='line-number'> 24</span>     
<span class='line-number'> 25</span>     
<span class='line-number'> 26</span>     	string hostname = Dynamicweb.Context.Current.Request.Url.GetLeftPart(UriPartial.Authority);
<span class='line-number'> 27</span>     	List&lt;NavigationTreeNodeViewModel&gt; allWebsiteAndLanguageNodes = new List&lt;NavigationTreeNodeViewModel&gt;();
<span class='line-number'> 28</span>     
<span class='line-number'> 29</span>     	foreach (int areaid in masterWebsiteAndLanguages)
<span class='line-number'> 30</span>     	{
<span class='line-number'> 31</span>     		var navigationSettingsMain = new Dynamicweb.Frontend.Navigation.NavigationSettings()
<span class='line-number'> 32</span>     		{
<span class='line-number'> 33</span>     			StartLevel = 1,
<span class='line-number'> 34</span>     			StopLevel = 10,
<span class='line-number'> 35</span>     			RootAreaId = areaid,
<span class='line-number'> 36</span>     			IncludeFoldersAndHidden = true,
<span class='line-number'> 37</span>     			ExpandMode = Dynamicweb.Frontend.Navigation.ExpandMode.All
<span class='line-number'> 38</span>     		};
<span class='line-number'> 39</span>     
<span class='line-number'> 40</span>     		allWebsiteAndLanguageNodes.AddRange(GetNavigation(navigationSettingsMain)?.Nodes);
<span class='line-number'> 41</span>     	}
<span class='line-number'> 42</span>     }
<span class='line-number'> 43</span>     &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;
<span class='line-number'> 44</span>     &lt;urlset xmlns=&quot;http://www.sitemaps.org/schemas/sitemap/0.9&quot;&gt;
<span class='line-number'> 45</span>     
<span class='line-number'> 46</span>     	@{ @RenderNodes(allWebsiteAndLanguageNodes, hostname) }
<span class='line-number'> 47</span>     
<span class='line-number'> 48</span>     &lt;/urlset&gt;
<span class='line-number'> 49</span>     
<span class='line-number'> 50</span>     @helper RenderNodes(IEnumerable&lt;NavigationTreeNodeViewModel&gt; nodes, string hostname)
<span class='line-number'> 51</span>     {
<span class='line-number'> 52</span>     	foreach (NavigationTreeNodeViewModel node in nodes)
<span class='line-number'> 53</span>     	{
<span class='line-number'> 54</span>     		@RenderNode(node, hostname)
<span class='line-number'> 55</span>     
<span class='line-number'> 56</span>     	}
<span class='line-number'> 57</span>     }
<span class='line-number'> 58</span>     
<span class='line-number'> 59</span>     @helper RenderNode(NavigationTreeNodeViewModel node, string hostname)
<span class='line-number'> 60</span>     {
<span class='line-number'> 61</span>     	var page = Dynamicweb.Content.Services.Pages.GetPage(node.PageId);
<span class='line-number'> 62</span>     
<span class='line-number'> 63</span>     	bool isEcommerceNavigation = false;
<span class='line-number'> 64</span>     	string navsettings = string.Empty;
<span class='line-number'> 65</span>     	if (page.NavigationSettings != null &amp;&amp; page.NavigationSettings.UseEcomGroups)
<span class='line-number'> 66</span>     	{
<span class='line-number'> 67</span>     		isEcommerceNavigation = true;
<span class='line-number'> 68</span>     		navsettings = page.NavigationSettings.Groups;
<span class='line-number'> 69</span>     	}
<span class='line-number'> 70</span>     
<span class='line-number'> 71</span>     	if (isEcommerceNavigation)
<span class='line-number'> 72</span>     	{
<span class='line-number'> 73</span>     		if (page.Allowclick &amp;&amp; page.ShowInSitemap &amp;&amp; !page.Noindex)
<span class='line-number'> 74</span>     		{
<span class='line-number'> 75</span>     			var productPageid = node.PageId;
<span class='line-number'> 76</span>                 if (!string.IsNullOrEmpty(page.NavigationSettings.ProductPage)) { 
<span class='line-number'> 77</span>     				productPageid = Dynamicweb.Environment.Helpers.LinkHelper.GetInternalPageId(page.NavigationSettings.ProductPage);
<span class='line-number'> 78</span>     			}
<span class='line-number'> 79</span>     			&lt;url&gt;
<span class='line-number'> 80</span>     				@*&lt;loc pageid=&quot;@node.PageId&quot; groups=&quot;@navsettings&quot;&gt;@hostname@node.Link&lt;/loc&gt;*@
<span class='line-number'> 81</span>     				&lt;loc&gt;@hostname@node.Link&lt;/loc&gt;
<span class='line-number'> 82</span>     				&lt;lastmod&gt;@page.Audit.LastModifiedAt.ToString(&quot;s&quot;)&lt;/lastmod&gt;
<span class='line-number'> 83</span>     			&lt;/url&gt;
<span class='line-number'> 84</span>     
<span class='line-number'> 85</span>     			@RenderEcommerceGroupNodes(GetGroupsBySettings(page.NavigationSettings), node, hostname, productPageid)
<span class='line-number'> 86</span>     		}
<span class='line-number'> 87</span>     	}
<span class='line-number'> 88</span>     	else
<span class='line-number'> 89</span>     	{
<span class='line-number'> 90</span>     		if (page.Allowclick &amp;&amp; page.ShowInSitemap &amp;&amp; !page.Noindex)
<span class='line-number'> 91</span>     		{
<span class='line-number'> 92</span>     			&lt;url&gt;
<span class='line-number'> 93</span>     				&lt;loc&gt;@hostname@node.Link&lt;/loc&gt;
<span class='line-number'> 94</span>     				&lt;lastmod&gt;@page.Audit.LastModifiedAt.ToString(&quot;s&quot;)&lt;/lastmod&gt;
<span class='line-number'> 95</span>     			&lt;/url&gt;
<span class='line-number'> 96</span>     		}
<span class='line-number'> 97</span>     		if (node.Nodes.Any())
<span class='line-number'> 98</span>     		{
<span class='line-number'> 99</span>     			@RenderNodes(node.Nodes, hostname)
<span class='line-number'>100</span>     		}
<span class='line-number'>101</span>     	}
<span class='line-number'>102</span>     }
<span class='line-number'>103</span>     
<span class='line-number'>104</span>     @helper RenderEcommerceGroupNodes(IEnumerable&lt;Dynamicweb.Ecommerce.Products.Group&gt; groups, NavigationTreeNodeViewModel node, string hostname, int detailProductPageId)
<span class='line-number'>105</span>     {
<span class='line-number'>106</span>     	foreach (Group group in groups)
<span class='line-number'>107</span>     	{
<span class='line-number'>108</span>     
<span class='line-number'>109</span>     		if (group.NavigationClickable &amp;&amp; group.NavigationShowInSiteMap)
<span class='line-number'>110</span>     		{
<span class='line-number'>111</span>     			//Remember to check if this group is not having another primary page
<span class='line-number'>112</span>     			//Remember to check if this group does not have multiple parents - and if it has, decide if the group should be shown here
<span class='line-number'>113</span>     			//int primarypageid = group.Meta.PrimaryPageId; //Use this if needed - send it into the product
<span class='line-number'>114</span>     			string url = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(&quot;Default.aspx?ID=&quot; + node.PageId + &quot;&amp;GroupID=&quot; + group.IdUrlEncoded);
<span class='line-number'>115</span>     
<span class='line-number'>116</span>     			&lt;url&gt;
<span class='line-number'>117</span>     				@*&lt;loc pageid=&quot;@node.PageId&quot; groupid=&quot;@group.Id&quot; group=&quot;@Dynamicweb.Core.Encoders.HtmlEncoder.HtmlEncode(group.Name)&quot;&gt;@hostname@url&lt;/loc&gt;*@
<span class='line-number'>118</span>     				&lt;loc&gt;@hostname@url&lt;/loc&gt;
<span class='line-number'>119</span>     			&lt;/url&gt;
<span class='line-number'>120</span>     		}
<span class='line-number'>121</span>     		@RenderEcommerceProductNodes(Dynamicweb.Ecommerce.Services.Products.GetProductsByGroupId(group.Id, true, group.LanguageId, false), node, hostname, group, detailProductPageId)
<span class='line-number'>122</span>     		@RenderEcommerceGroupNodes(group.Subgroups, node, hostname, detailProductPageId)
<span class='line-number'>123</span>     
<span class='line-number'>124</span>     	}
<span class='line-number'>125</span>     }
<span class='line-number'>126</span>     
<span class='line-number'>127</span>     @helper RenderEcommerceProductNodes(IEnumerable&lt;Dynamicweb.Ecommerce.Products.Product&gt; products, NavigationTreeNodeViewModel node, string hostname, Group group, int detailProductPageId)
<span class='line-number'>128</span>     {
<span class='line-number'>129</span>     	//Locate the right pageid. This group is shown on a page that might link to another page to show product detail. So on this page, find the paragraph, lookup the setting, change pageid to the detail page.
<span class='line-number'>130</span>     	//The product might be in 2 groups - ensure this is the primary or default group of the product - if not, do not render
<span class='line-number'>131</span>     	foreach (Product product in products)
<span class='line-number'>132</span>     	{
<span class='line-number'>133</span>     		string url = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(&quot;Default.aspx?ID=&quot; + detailProductPageId + &quot;&amp;GroupID=&quot; + group.IdUrlEncoded + &quot;&amp;ProductID=&quot; + product.Id);
<span class='line-number'>134</span>     		&lt;url&gt;
<span class='line-number'>135</span>     			@*&lt;loc pageid=&quot;@node.PageId&quot; detailpageid=&quot;@detailProductPageId&quot; groupid=&quot;@group.Id&quot; group=&quot;@Dynamicweb.Core.Encoders.HtmlEncoder.HtmlEncode(group.Name)&quot; productid=&quot;@product.Id&quot; product=&quot;@Dynamicweb.Core.Encoders.HtmlEncoder.HtmlEncode(product.Name)&quot; variantid=&quot;@product.VariantId&quot;&gt;@hostname@url&lt;/loc&gt;*@
<span class='line-number'>136</span>     			&lt;loc&gt;@hostname@url&lt;/loc&gt;
<span class='line-number'>137</span>     		&lt;/url&gt;
<span class='line-number'>138</span>     	}
<span class='line-number'>139</span>     }
<span class='line-number'>140</span>     
<span class='line-number'>141</span>     @functions{
<span class='line-number'>142</span>     
<span class='line-number'>143</span>     	public IEnumerable&lt;Dynamicweb.Ecommerce.Products.Group&gt; GetGroupsBySettings(Dynamicweb.Content.PageNavigationSettings ecomSettings)
<span class='line-number'>144</span>     	{
<span class='line-number'>145</span>     		IEnumerable&lt;Dynamicweb.Ecommerce.Products.Group&gt; topLevelGroups;
<span class='line-number'>146</span>     
<span class='line-number'>147</span>     		string languageId = Dynamicweb.Ecommerce.Common.Context.LanguageID;
<span class='line-number'>148</span>     		switch (ecomSettings.ParentType)
<span class='line-number'>149</span>     		{
<span class='line-number'>150</span>     			case Dynamicweb.Content.EcommerceNavigationParentType.Groups:
<span class='line-number'>151</span>     				{
<span class='line-number'>152</span>     					Dynamicweb.Ecommerce.Extensibility.Controls.ProductsAndGroupsHandler groupHandler = new Dynamicweb.Ecommerce.Extensibility.Controls.ProductsAndGroupsHandler(ecomSettings.Groups);
<span class='line-number'>153</span>     					if (groupHandler.Type == Dynamicweb.Ecommerce.Extensibility.Controls.HandlerConfigurationType.All)
<span class='line-number'>154</span>     					{
<span class='line-number'>155</span>     						Dynamicweb.Ecommerce.Shops.Shop shop = Dynamicweb.Ecommerce.Services.Shops.GetShop(string.IsNullOrEmpty(groupHandler.ShopSelected) ? ecomSettings.ShopID : groupHandler.ShopSelected);
<span class='line-number'>156</span>     						if (shop == null)
<span class='line-number'>157</span>     							topLevelGroups = Enumerable.Empty&lt;Dynamicweb.Ecommerce.Products.Group&gt;();
<span class='line-number'>158</span>     						else
<span class='line-number'>159</span>     							topLevelGroups = shop.get_TopLevelGroups(languageId);
<span class='line-number'>160</span>     					}
<span class='line-number'>161</span>     					else
<span class='line-number'>162</span>     						topLevelGroups = groupHandler.GroupsSelected;
<span class='line-number'>163</span>     					break;
<span class='line-number'>164</span>     				}
<span class='line-number'>165</span>     
<span class='line-number'>166</span>     			case Dynamicweb.Content.EcommerceNavigationParentType.Shop:
<span class='line-number'>167</span>     				{
<span class='line-number'>168</span>     					Dynamicweb.Ecommerce.Shops.Shop shop = Dynamicweb.Ecommerce.Services.Shops.GetShop(ecomSettings.ShopID);
<span class='line-number'>169</span>     					if (shop == null)
<span class='line-number'>170</span>     						topLevelGroups = Enumerable.Empty&lt;Dynamicweb.Ecommerce.Products.Group&gt;();
<span class='line-number'>171</span>     					else
<span class='line-number'>172</span>     						topLevelGroups = shop.get_TopLevelGroups(languageId);
<span class='line-number'>173</span>     					break;
<span class='line-number'>174</span>     				}
<span class='line-number'>175</span>     
<span class='line-number'>176</span>     			default:
<span class='line-number'>177</span>     				{
<span class='line-number'>178</span>     					topLevelGroups = Enumerable.Empty&lt;Dynamicweb.Ecommerce.Products.Group&gt;();
<span class='line-number'>179</span>     					break;
<span class='line-number'>180</span>     				}
<span class='line-number'>181</span>     		}
<span class='line-number'>182</span>     
<span class='line-number'>183</span>     		return topLevelGroups;
<span class='line-number'>184</span>     	}
<span class='line-number'>185</span>     
<span class='line-number'>186</span>     }
<span class='line-number'>187</span>     
</div>
</pre>
