Why
The most common need to use an include directive is to include/reuse a common piece of component of the site, such as header, footer and advertisement.
Common Pitfalls
When using a media or image element in place of actual file name, the generated path contains ., which is invalid pathing by default unless enabled in IIS. The other issue with leading . in pathing is one cannot use that in #include virtual.
1 2 3 4 5 | ' Code in CMS template <!--#include virtual=" <%med_transformer_asp%> "--> ' Generated code in SmartEdit or Page Preview. Invalid code <!--#include virtual="../ImageCache/521E5D7461214F71889B2A99C6CAD3F4/514EAAB6BEBB4F86B85AF45DB2A09374/TR/transformer.asp"--> |
1 2 3 4 5 | ' Code in CMS template <!--#include virtual=" <%anc_transformer_asp%> "--> ' Generated code in SmartEdit or Page Preview. Invalid code <!--#include virtual="./PreviewHandler.ashx?Action=Preview&Mode=0&blahblahblahblah"--> |
When using #include file directive, the pathing uses \, CMS publish pathing as /. Though this is a minor issue since both syntax are acceptable.
1 2 3 4 5 | ' desired syntax <!-- #include file= "common\header.htm" --> ' generated syntax <!-- #include file= "common/header.htm" --> |
The biggest issue with #include file in CMS is that the path returned is incorrect
1 2 3 4 5 6 7 8 9 | ' Code in CMS template <!--#include file=" <%med_transformer_asp%> "--> ' Generated code in SmartEdit or Page Preview. <!--#include file="../ImageCache/521E5D7461214F71889B2A99C6CAD3F4/514EAAB6BEBB4F86B85AF45DB2A09374/TR/transformer.asp"--> ' This maps to ' ASP\ReddotTemp\ImageCache\521E5D7461214F71889B2A99C6CAD3F4\514EAAB6BEBB4F86B85AF45DB2A09374\TR\transformer.asp ' Instead of ' ASP\ImageCache\521E5D7461214F71889B2A99C6CAD3F4\514EAAB6BEBB4F86B85AF45DB2A09374\TR\transformer.asp |
1 2 3 4 5 6 7 8 | ' Code in CMS template <!--#include file=" <%anc_transformer_asp%> "--> ' Generated code in SmartEdit or Page Preview. <!--#include file="./PreviewHandler.ashx?Action=Preview&Mode=0&blahblahblahblah"--> ' This maps to ' ASP\ReddotTemp\BC498EE1113D41F7AC877F3D5BD0738E\PreviewHandler.ashx?Action=Preview&Mode=0&blahblahblahblah ' The path is correct, but the file gets deleted as soon as it is generated and displayed. |
One can work around the pathing issue with manual path correction
1 2 3 4 5 6 7 8 9 | <!IoRangePreExecute> ' Code in CMS template <!--#include file="../ <%med_transformer_asp%> "--> <!/IoRangePreExecute> ' Generated code during publication mode, invalid code, the file is published ' to the asp folder on the web server. The asp folder is not on the CMS ' server, so preexecution is trying to use a file that doesn't exist <!--#include file="../asp/transformer.asp"--> |
Solution
If you simply want to use include to include a static file, like header. In publishing mode, use #include, which uses a anchor placeholder to reference the header page. When not publishing, use the header container placeholder, which references the header page.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <reddot:cms> <if> <query valuea="Context:CurrentRenderMode" operator="==" valueb="Int:2"> <htmltext> <!--#include file=" <%anc_header%> "--> </htmltext> </query> <query type="else"> <htmltext> <%con_header%> </htmltext> </query> </if> </reddot:cms> |
If you want to include an asp library and use the library during SmartEdit, Page Preview, and Publishing, reference the absolute path via #include virtual directive
1 2 3 4 | <!IoRangePreExecute> ' Code in CMS template <!--#include virtual="/cms/plugins/asplib/transform.asp"--> <!/IoRangePreExecute> |
No comments:
Post a Comment