Skip to main content

Abstracting Out Content Into a Layout

Heres a pattern that abstracts out common code to a single file and publishes out to the live site as an include file. Think snippet of html that gets included in the big file.

1. Create a layout file in any Template, layout.asp (clone out output would work great)

2. Create a filename.asp that checks for the layout and changes publishing path accordingly. This is so this particular layout has different name from output.asp


if content.("_cmsLayout") = "layout.asp" then
content.add "_cmsPublishPath", replace(content.item("_cmsPublishPath"), "old_val", "new_val"
end if


3. In the template we wish to include this code do this


if content.isPublishing then

asset.setParam "_cmsLayout", "layout.asp"
<!--#include virtual="<% asset.getLink("path to asset that uses template with layout.asp file") %>" -->
'when the asset that asset.getLink() is referring to is published, one is published using layout.asp as the template and one using the standard output.asp

else

'include the code as if it was part of this template
system.include "/Template Path/layout.asp"

end if


To publish out the layout file you still need to set it up under the assets publishing properties. View -> Properties -> Publishing. Select the package in the first column then set the layout file to use. In this case it would be layout.asp.

Comments

Popular posts from this blog

Parsing XML in .NET

Let's say you have XML as <root>    <item>       <name1>value1</name1>       <name2>value2</name2>       <name3>value3</name3>    </item>    <item>       <name1>value1</name1>       <name2>value2</name2>    </item> </root> To parse it we use the .NET XmlDocument class: // Create the XmlDocument object XmlDocument xmlDoc = new XmlDocument(); // Load the Xml into the object xmlDoc.Load(objResponse.GetResponseStream()); // Get the element like it was a path XmlNode errorNode = xmlDoc.SelectSingleNode("root/item/name1"); if (errorNode != null) { litResult.Text = errorNode.InnerText; return; }

Passing values from Javascript to Asp.Net

The trick to passing data from Javascript and Asp.Net is to use hidden inputs in the html. The hidden inputs should have the runat="server" attribute. For example: <input type="hidden" runat="server" id="hiddenfield" value="" /> Then in the Javascript, whatever value you are trying to pull from Asp.Net, set the hidden field using: document.getElementById("hiddenfield").value = "whatever value you want to set" And in the Asp.net form, you can just access the hiddenfield by using its id. string x = hiddenfield.value.text Thats all there is to it. You might need to check the syntax of it first as this is just all from my head.

Duplicate Items in the File -> New menu.

It looks like a bug, but the CMS is trying to figure out what kind of models would apply to the folder in question. To resolve this issue. 1. Goto the problematic folder. 2. Goto View -> Properties -> Access 3. Click on the New Tab 3. Uncheck All 'New Dependency' That's it. That should resolve the problem.