Skip to main content

Creating Multiple Files From a Single Template

Sometimes you need to create multiple files from a single template. For instance, when you have a drop down list that displays certain items depending on what is selected, the CMS handles this by creating multiple files (i.e. different versions of the same page populated with different static content). Since the content is managed by the CMS it would be redundant to have the same information hosted on the clients database server and also the CMS is not capable of generating dynamic pages that pull information from the CMS database itself. I believe the CMS database is closed off to external programs / scripts.

So moving along, you create multiple Files by using the filename.asp template file. At this moment I am uncertain how many times or what events trigger the code in the filename.asp to fire. I am aware that you can create a file for every link in the template.

One of the things that seems to link the output.asp file and filename.asp is the use of asset.setParam "args", "_someArg=somevalue&_someOther=someOther"> and asset.getLink("path or id"). The function asset.setParam "args", "etc" appends a query string field and value to the end of the next asset.getLink call and it some how magically appears when you do content.item("_someArg").

So then in the output.asp file you can do

if content.item("_someArg") = xyz then
   print the page you need depending on that argument. This will become the pages when the asset is published out.
elseif content.item("_someArg") = 123 then
   this will be another page
end if

And in the filename.asp file you can do the following:

strPath = content.item("_cmsPublishPath")
if content.item("_someArg") <> "" then
   strPath = replace(strPath, "old_string", "new_string")
endif
content.add "_cmsPublishPath", strPath

essentially old_string would be content.item("_cmsRemoteLabel") and new_string would be some concatenation with content.item("_someArg")

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.

Parsing XML Documents in the CMS: 2 Methods

To start off with do this: Dim txt Dim fieldStart, fieldEnd Dim xml Dim fields Dim ltxt Dim key Dim value txt = trim(content.item("_cmsEmailBody")) ltxt = lcase(txt) fieldStart = inStr(ltxt, "<root>") fieldEnd = inStr(ltxt, "</root>") if fieldStart >= fieldEnd then content.add "_cmsError", "Invalid email format. No XML data detected." exit Sub end if ' skip the end /root fieldEnd = fieldEnd + 6 set xml = system.createXML() if not xml.loadXML(mid(txt, fieldStart, fieldEnd)) then content.add "_cmsError", "Invalid XML format." exit Sub end if Now there are two ways to parse it. Method 1: set fields = xml.selectSingleNodeAsContent("root") Method 2: set fields = xml.selectSingleNodeAsDic("root") Check to make sure we have the root node: if not isObject(fields) then content.add "_cmsError", "Invalid xml format. Missing root /root node." exit Sub end if If Method 1 ...