.NET Best Practices Part 1 Master Pages Setup. Version 2.0



Similar documents
How To Create A Website Template On Sitefinity

This tutorial assumes that you are familiar with ASP.Net and ActiveX controls.

Startup Guide. Version 2.3.9

Building A Very Simple Website

Dreamweaver CS5. Module 2: Website Modification

A set-up guide and general information to help you get the most out of your new theme.

Metadata Management CMS Extension. Version 0.90

Advanced Web Development SCOPE OF WEB DEVELOPMENT INDUSTRY

Developers Guide. Designs and Layouts HOW TO IMPLEMENT WEBSITE DESIGNS IN DYNAMICWEB. Version: English

Building A Very Simple Web Site

Chapter 1 Introduction to web development and PHP

SPHOL326: Designing a SharePoint 2013 Site. Hands-On Lab. Lab Manual

How To Use Dreamweaver With Your Computer Or Your Computer (Or Your Computer) Or Your Phone Or Tablet (Or A Computer)

USER S MANUAL JOOMLA! GOVERNMENT WEB TEMPLATE

Content Author's Reference and Cookbook

Digital Asset Management. Version 1.0

SEO Optimization A Developer s Role

CROWNPEAK C# API SYSTEM CONFIGURATION GUIDE VERSION 3.0.1

CrownPeak Platform Dashboard Playbook. Version 1.0

We automatically generate the HTML for this as seen below. Provide the above components for the teaser.txt file.

CrownPeak Playbook CrownPeak Hosting with PHP

How to work with the WordPress themes

About DropSend. Sending Files with DropSend

This guide provides additional information about topics covered in the webinar

css href title software blog domain HTML div style address img h2 tag maintainingwebpages browser technology login network multimedia font-family

Sense/Net ECM Evaluation Guide. How to build a products listing site from the scratch?

State of Nevada. Ektron Content Management System (CMS) Basic Training Guide

1. Tutorial - Developing websites with Kentico Using the Kentico interface Managing content - The basics

WEB DESIGN COURSE CONTENT

How To Change Your Site On Drupal Cloud On A Pcode On A Microsoft Powerstone On A Macbook Or Ipad (For Free) On A Freebie (For A Free Download) On An Ipad Or Ipa (For

ORACLE BUSINESS INTELLIGENCE WORKSHOP

How to Edit Your Website

CLASSROOM WEB DESIGNING COURSE

Create a Simple Website. Intel Easy Steps Intel Corporation All rights reserved.

Ingeniux 8 CMS Web Management System ICIT Technology Training and Advancement (training@uww.edu)

Interspire Website Publisher Developer Documentation. Template Customization Guide

Introducing our new Editor: Creator

Your Blueprint websites Content Management System (CMS).

ARCONICS CONTENT MANAGEMENT SYSTEM FOR UL

Content Author's Reference and Cookbook

Add page numbers and headers and footers by using the gallery, or create a custom page number, header, or footer.

Appendix A How to create a data-sharing lab

Configuring the JEvents Component

UH CMS Basics. Cascade CMS Basics Class. UH CMS Basics Updated: June,2011! Page 1

DRUPAL BASICS WEBSITE DESIGN & DEVELOPMENT. digital.uoregon.edu/drupal-basics

MadCap Software. Import Guide. Flare 11

JTouch Mobile Extension for Joomla! User Guide

Sitecore InDesign Connector 1.1

Training Manual Version 1.0

Self-Service Portal Implementation Guide

Page Editor Recommended Practices for Developers

Quick Start Guide Mobile Entrée 4

Elgg 1.8 Social Networking

CrownPeak Java Web Hosting. Version 0.20

Maximizing the Use of Slide Masters to Make Global Changes in PowerPoint

-SoftChalk LessonBuilder-

Managing your Joomla! 3 Content Management System (CMS) Website Websites For Small Business

Themes and Templates Manual FOR ADVANCED USERS

Archive Add-in Administrator Guide

Web Content Management Training Manualv3

Coding Standards for Web Development

An Oracle White Paper May Creating Custom PDF Reports with Oracle Application Express and the APEX Listener

Social Media in Signatures

Managing Contacts in Outlook

How To Create A Web Page On A Windows (For Free) With A Notepad) On A Macintosh (For A Freebie) Or Macintosh Web Browser (For Cheap) On Your Computer Or Macbook (

Unit Title: Content Management System Website Creation

Salesforce Customer Portal Implementation Guide

Using Adobe Dreamweaver CS4 (10.0)

How To Customize A Forum On Vanilla Forum On A Pcode (Forum) On A Windows (For Forum) On An Html5 (Forums) On Pcode Or Windows 7 (Forforums) On Your Pc

CREATING A NEWSLETTER IN ADOBE DREAMWEAVER CS5 (step-by-step directions)

Using the Adventist Framework with your netadventist Site

Search Engine Optimization for Silverlight Applications

Terminal 4 Site Manager User Guide. Need help? Call the ITD Lab, x7471

... Asbru Web Content Management System. Getting Started. Easily & Inexpensively Create, Publish & Manage Your Websites

How to Build a SharePoint Website

Google Sites: Creating, editing, and sharing a site

State of Indiana Content Management System. Training Manual Version 2.0. Developed by

Web Development. Owen Sacco. ICS2205/ICS2230 Web Intelligence

Quick Start Program Advanced Manual ContactWise 9.0

Dolphin Dynamics. Document Configuration: HTML Editor

Aspect WordPress Theme

UComment. UComment is a comment component for Umbraco, it makes it very easy to add comment functionality to any Umbraco content document you wish.

Dreamweaver CS5. Module 1: Website Development

css href title software blog domain HTML div style address img h2 tag maintainingwebpages browser technology login network multimedia font-family

Adobe Dreamweaver CC 14 Tutorial

Kentico CMS for.net User Groups

Use the Microsoft Office Word Add-In to Create a Source Document Template for Microsoft Dynamics AX 2012 WHITEPAPER

SharePoint Integration Framework Developers Cookbook

SPHOL213: Intro to Web Content Management in SharePoint 2013

UHR Training Services Student Manual

Basic tutorial for Dreamweaver CS5

About XML in InDesign

Tutorial JavaScript: Switching panels using a radio button

IAS Web Development using Dreamweaver CS4

Recreate your Newsletter Content and Layout within Informz (Workshop) Monica Capogna and Dan Reade. Exercise: Creating two types of Story Layouts

Content Management System User Guide

Joomla! template Blendvision v 1.0 Customization Manual

Improved Navigation Magento Extension User Guide

Xtreeme Search Engine Studio Help Xtreeme

Crystal Reports. Overview. Contents. Columnar Drill-Down Report

Transcription:

.NET Best Practices Part 1 Master Pages Setup Version 2.0

2014 CrownPeak Technology, Inc. All rights reserved. No part of this document may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopy, recording, or any information storage and retrieval system, without permission from CrownPeak Technology. Table of Contents Introduction... 3 What is a Master Page?... 3 Getting Started... 4 Scenario -A-: Create a new Template Folder via Volte... 4 Scenario B-: Create a new Template Folder via CDC... 5 Create a new C# Template for Master Page... 5 Configure the input.aspx template file... 6 Create an asset in CMS and link it to the MasterPage template you just created.... 9 Configure the Output.aspx template file... 10 Create filename.aspx template file:... 12 Create OutputHelper.MainHeaderSetup... 13 Create a C# Bridge template... 14 Build page template... 15 Configure input.aspx... 15 Create an asset in the Example Folder and link it to the ContentPage template.... 16 Configure output.aspx... 16.NET Publishing... 18 Next Steps... 18 Appendix... 19 Inputhelper.SetSelectlink... 19 Outputhelper.MetaStringBuilder... 19 TDW.MakeFilename... 23 TDW.FormatFilename... 23 CrownPeak Technology 2

Introduction This document describes the structure, process, and best practices to configure CrownPeak to publish an ASP.NET site to your web host. It will show ASP.NET Master Page s basic concepts in order to demonstrate how the pages work, but this document assumes experience in building and configuring.net web sites. This document also assumes knowledge of the CrownPeak API and template best practices. What is a Master Page? Master Page(*.master) is a feature that enables you to define common structure and interface markup elements for the Web site, including headers, footers, style definitions, or navigation bars. The master page consists of two pieces, the master page itself and one or more content pages (*.aspx). CrownPeak Technology 3

Getting Started Create a new Template Folder to store the templates for this site. Developers can use the Volte UI or CrownPeak Desktop Connection (CDC) to create templates Scenario -A-: Create a new Template Folder via Volte Browse to System >Templates, then click New > Template Folder as shown in figure -1-. Name your project and press the OK button. Example: YourName_FolderCreationDate_Templates. Figure 1: Create a Template Folder CrownPeak Technology 4

Scenario B-: Create a new Template Folder via CDC Browse to System >Templates, then right-click on Templates folder and click New>Template Folder as shown in figure -2-. Figure 2: CDC scenario to create a Template Folder Create a new C# Template for Master Page Create a C# template in Template folder you just created and name it MasterPage as shown in figure - 3-. This will be the masterpage file published to the web host and the wrapper used by CrownPeak to when pages are previewed. Figure 3: Create a new C# template CrownPeak Technology 5

You will see the following window: Figure 4: Template Folder content view When you double-click on MasterPage template, you will see figure -5-: Figure 5: Template Folder with template input and output files Configure the input.aspx template file Consider the following example: Figure 6: Web Page Example CrownPeak Technology 6

This file is able to manage header/footer menu and specify JavaScript/CSS files to be loaded on every page. In general, we enable user to create lists of header and footer links using panels. We enable the same feature for CSS and JS files. We also include text fields so code can be added directly to the page. There may be some differences in how you enable users to manage the content based on the site requirements, but here is an example of the input.aspx that represents our best practices CrownPeak Technology 7

<%@ Page Language="C#" Inherits="CrownPeak.Internal.Debug.InputInit" %> <%@ Import Namespace="CrownPeak.CMSAPI" %> <%@ Import Namespace="CrownPeak.CMSAPI.Services" %> <%@ Import Namespace="CrownPeak.CMSAPI.CustomLibrary" %> <!--DO NOT MODIFY CODE ABOVE THIS LINE--> <%//This plugin uses InputContext as its context class type%> <% // input.aspx: template file to specify content entry input form Input.StartTabbedPanel("Header", "Footer"); //Logo Input.StartControlPanel("Logo"); ShowAcquireParams sapimg = new ShowAcquireParams(); sapimg.showbrowse = true; sapimg.showupload = true; sapimg.addadditionalimage("image_thumbnail", 20, 20, 100); Input.ShowAcquireImage("Image", "logo_image"); // Input.ShowAcquireImage("Logo Upload", "logo_upload"); Input.ShowTextBox("Image Alt", "logo_image_alt"); Input.EndControlPanel(); Input.ShowHeader("Main Navigation Menu"); while (Input.NextPanel("main_nav_panel")) InputHelper.SetSelectLink( "Main Menu", "main_nav_menu", "Link Type", "main_nav_menu_link_type", "Select a link", "main_nav_menu_link_internal", "URL", "main_nav_menu_link_external"); Input.NextTabbedPanel(); Input.ShowHeader("Footer Menu"); Input.ShowMessage("List"); while (Input.NextPanel("footer_column_menu_panel")) InputHelper.SetSelectLink( "Link Text", "footer_column_menu_link_text", "Link Type", "footer_column_menu_link_type", "Select a link", "footer_column_menu_link_internal", "URL", "footer_column_menu_link_external"); CrownPeak Technology 8

%> Input.EndTabbedPanel(); Create an asset in CMS and link it to the MasterPage template you just created. This asset will be used later in output.aspx of both Master Page and Bridge template to retrieve user input and display it on the output. See figure -7- and follow the steps: 1. Browse to Sandbox, then click New > Folder, name it, and click Save. Example of Folder name: YourName_Date_Example Folder. 2. Inside the folder, create a new folder to include the asset (File) and link it to the MasterPage template. 3. Click New > Folder > must name it _Master. 4. Inside _Master, New > File: 5. Label: name it Master Page. 6. Select a Template: Click Select to browse to MasterPage template you created. 7. Select a Workflow: Choose Basic Workflow from the drop-down menu. You will see figure -8-: Figure 7: Create a Master Page asset CrownPeak Technology 9

Figure 8: Master Page asset Configure the Output.aspx template file On an ASP.NET site, the syntax used to denote a masterpage is <%@ Master Language="C#" %>. In the output.aspx template file, include this code by using the context object to determine if the page is being published or previewed. This will prevent the ASP.NET from being included in the CMS preview, where it is not used. Escape the % symbol to a $, so it looks like this <$@ Master Language="C#" $>. This will prevent the CMS running this code. The dollar sign will be converted back to a percent symbol when published to the Web host. You need to create a CSS file for the example. You can create anywhere. Here it s created as follows: 1. Navigate to your Example Folder > New > File > 2. Label: name it CSS.css. 3. Select a C# Developer Template. 4. Select a Workflow: Choose Basic Workflow from the drop down menu 5. Then paste the code displayed in Appendix. <%@ Page Language="C#" Inherits="CrownPeak.Internal.Debug.OutputInit" %> <%@ Import Namespace="CrownPeak.CMSAPI" %> <%@ Import Namespace="CrownPeak.CMSAPI.Services" %> <%@ Import Namespace="CrownPeak.CMSAPI.CustomLibrary" %> <!--DO NOT MODIFY CODE ABOVE THIS LINE--> <%//This plugin uses OutputContext as its context class type%> <% // output.aspx: template file to specify the published content in site HTML // if no preview.aspx exists, then this is used by default for preview Out.WriteLine(context.IsPublishing? "<$@ Master Language=\"C#\" AutoEventWireup=\"true\" $>" : ""); bool bmasterpage = true; Asset amasterpage = Asset.Load("/" + asset.assetpath[0] + "/Karoon_05022014_Example Folder/_Master/Master Page"); if (amasterpage.isloaded) if (!int.equals(asset.id, amasterpage.id)) bmasterpage = false; %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> CrownPeak Technology 10

<meta http-equiv="content-type" content="text/html; charset=utf-8" /> <%=OutputHelper.LoadCSS("/Sandbox/Karoon_05022014_Example Folder/CSS.css")%> <%Out.WriteLine(context.IsPublishing? "<asp:contentplaceholder id=\"cphhead\" runat=\"server\"/>" : ""); %> </head> <body> <div id="wrapper"> <div class="w1"> <div id="header"> <div class="user-panel"> <% //Out.DebugWriteLine(aMasterPage.Label);%> <%Out.Write("<h1 class=\"logo\" style=\"backgroundimage:url('0');\" />AdventGenaral</h1>",aMasterPage["logo_image"]); %> <div class="search-form" id="searchform" runat="server"><!-- action="#" --> <fieldset> <span class="text"><input type="text" id="search"/></span> <input type="submit" class="submit" value="go"/> </fieldset> </div> </div> <div id="navigation" class="navigation"> <%List<PanelEntry> menu = amasterpage.getpanels("main_nav_panel");%> ></li><!--annuities--> <ul id="nav"> <li id="homepage"><!-- No Page Loaded from Sandbox/Homepage-- <% foreach (PanelEntry pemenu in menu) if (!string.isnullorwhitespace(pemenu.raw["main_nav_menu"])) Out.Write("<li>0</li>", pemenu["main_nav_menu"]); %> </ul> <div class="menu"> <ul class="social-networks"> <li><a href="#" class="twitter">twitter</a></li> <li><a href="#" class="facebook">facebook</a></li> <li><a href="#" class="youtube">youtube</a></li> <li><a href="#" class="linkedin">linkedin</a></li> </ul> </div> </div><!--closing navigation--> </div><!--closing header--> <%Out.WriteLine(context.IsPublishing? "<asp:contentplaceholder id=\"cphmain\" runat=\"server\"/>" : (bmasterpage? "" : Out.GetWrapContentPlaceholder())); %> <div id="footer"> <%List<PanelEntry> footermenu = amasterpage.getpanels("footer_column_menu_panel");%> CrownPeak Technology 11

<ul> <% foreach (PanelEntry pemenu in footermenu) if (!string.isnullorwhitespace(pemenu.raw["footer_column_menu_link_text"])) Out.Write("<li><h5>0</h5></li>", pemenu["footer_column_menu_link_text"]); %> </ul> <div style="clear:both;"></div> <ul> <li><h5>english (US)</h5></li> <li><h5>japanese</h5></li> <li><h5>español</h5></li> </ul> <div style="clear:both;"></div> <div class="disclaimer"> <ul> <li> Copy Right All Rights Reserved.</li> <li><a href="#">disclaimer</a></li> <li><a href="#">privacy Policy</a></li> </ul> </div> </div><!--closing footer div--> </div><!--closing w1 div--> </div><!--closing wrapper div--> </body> </html> Create filename.aspx template file: As mentioned earlier, master page has extension (.master), so the published filename of master page must be (.master) instead of (.aspx). Navigate to MasterPage template folder > New > filename.aspx CrownPeak Technology 12

Insert the following line of code: Figure 9:filename.aspx <%context.publishpath = TDW.MakeFilename (context, asset);%> MakeFilename method in the library class, TDW, checks if the master page asset is in a folder called, _Master, then replaces the extension with.master. On Volte, after publishing all assets to Live, navigate to the master page asset > Properties > General, you should see all published URL s and filenames with (.master) extension. Create OutputHelper.MainHeaderSetup In /System/Library, create or edit the OutputHelper class. Create a method called MainHeaderSetup. This will manage the use of the bridge template. If the page is being published to the webhost, the bridge template will be used. If being previewed in the CMS, it will just use the Master page template to assemble the preview. public static void MainHeaderSetup(OutputContext context) if (context.ispublishing) Out.Wrap("System/Templates/YourTemplatesFolder/BridgePage"); else Out.Wrap("/System/Templates/YourTemplatesFolder/MasterPage"); CrownPeak Technology 13

Create a C# Bridge template Create a bridge template inside the folder you created in step -1- and call it BridgePage. This is a helper template to insert ASP.NET code into all the page templates. Follow the same steps and naming convention to create the template; you do not need to create an asset and link it to Bridge template. Bridge template separates the code needed for publishing from what is need to just preview the page in CrownPeak. In other words, the bridge template includes all the code necessary to make the published page work with the master page on the webhost. See figure -10. Figure 10: Bridge Template Note the use of placeholders to include meta content and page specific scripts when published. Here we are populating the cphhead placeholder with content specific to the page using the OutputHelper.MetaStringBuilder method. <%@ Page Language="C#" Inherits="CrownPeak.Internal.Debug.OutputInit" %> <%@ Import Namespace="CrownPeak.CMSAPI" %> <%@ Import Namespace="CrownPeak.CMSAPI.Services" %> <%@ Import Namespace="CrownPeak.CMSAPI.CustomLibrary" %> <!--DO NOT MODIFY CODE ABOVE THIS LINE--> <%//This plugin uses OutputContext as its context class type%> <% // output.aspx: template file to specify the published content in site HTML // if no preview.aspx exists, then this is used by default for preview Asset amasterpage = Asset.Load("/" + asset.assetpath[0] + "/Karoon_05022014_Example Folder/_Master/Master Page"); Out.WriteLine("<$@ Page Language=\"C#\" MasterPageFile=\"0\" $>", "~" +amasterpage.getlink()); Out.DebugWriteLine(aMasterPage.GetLink()); Out.WriteLine("<asp:Content Id=\"ctHead\" ContentPlaceHolderId=\"cphHead\" runat=\"server\" >"); Out.WriteLine(OutputHelper.MetaStringBuilder(asset, amasterpage)); if (!String.IsNullOrWhiteSpace(asset.Raw["custom_script"])) CrownPeak Technology 14

Out.WriteLine(asset["custom_script"]); Out.WriteLine("</asp:Content>"); Out.WriteLine("<asp:Content Id=\"ctMain\" ContentPlaceHolderId=\"cphMain\" runat=\"server\" >"); Out.Write(Out.GetWrapContentPlaceholder()); Out.WriteLine("</asp:Content>"); %> Build page template Create a page content template. Browse to your Templates folder you created on step -1-. Click New > Template C# and name it, ContentPage. See figure -11. Figure 11: Content Page Template Configure input.aspx In this template file, the user can input the desired content by editing the fields that will be added in the code as follows: See figure -6-. <%@ Page Language="C#" Inherits="CrownPeak.Internal.Debug.InputInit" %> <%@ Import Namespace="CrownPeak.CMSAPI" %> <%@ Import Namespace="CrownPeak.CMSAPI.Services" %> <%@ Import Namespace="CrownPeak.CMSAPI.CustomLibrary" %> <!--DO NOT MODIFY CODE ABOVE THIS LINE--> <%//This plugin uses InputContext as its context class type%> <% // input.aspx: template file to specify content entry input form Input.ShowTextBox("Page Title", "page_title",width:50,defaultvalue:"title"); ShowAcquireParams imgparams = new ShowAcquireParams(); CrownPeak Technology 15

imgparams.defaultfolder = "/Sanbox/Assets"; imgparams.addadditionalimage("image_thumbnail",20,20,100); imgparams.showupload = false; Input.ShowAcquireImage("Upload Image", "upload_image"); WysiwygParams wysiparams = ServicesInput.FullWYSIWYG(); wysiparams.stylesheet = "/Sandbox/KaroonContentPage040814/CSSFile.css"; Input.ShowWysiwyg("Text Area", "text_area", wysiparams); while (Input.NextPanel("counter_panel",displayName:"Contact information")) Input.ShowTextBox("Name", "name"); Input.ShowTextBox("Telephone", "telephone"); %> Create an asset in the Example Folder and link it to the ContentPage template. Name it, Content Page as explained in step -4.2- on page 10. When you double-click on this asset and click Form tab, you can edit the fields as you desire. See figure -12-. Configure output.aspx Figure 12: Content Page Asset This template file should include the wrapper as well as the content that will be retrieved from user input. As usual, the output files of your page templates will include the front end code to render the page layout and place content. In this case, they will also call the OutputHelper.MainHeaderSetup method. Add the following text to output.aspx: <%@ Page Language="C#" Inherits="CrownPeak.Internal.Debug.OutputInit" %> <%@ Import Namespace="CrownPeak.CMSAPI" %> <%@ Import Namespace="CrownPeak.CMSAPI.Services" %> <%@ Import Namespace="CrownPeak.CMSAPI.CustomLibrary" %> <!--DO NOT MODIFY CODE ABOVE THIS LINE--> <% // Asset gconfigasset = OutputHelper.GetGlobalConfig(asset); CrownPeak Technology 16

OutputHelper.MainHeaderSetupTest(context); %> <div id="main"> <div class="container" id="contentpage"> <div class="container-holder"> <div class="container-frame"> <div id="twocolumns"> <div id="content"> <h1><%=asset["page_title"]; %></h1> <% Out.WriteLine("<img height=\"113\" width=\"168\" style=\"float:left;padding:10px;\"src=\"0\" />", asset["upload_image"]);%> <%=asset["text_area"]; %> <p>this is some more content</p> </div> <div id="sidebar"> <div class="box"> <div class="box-content"> <% List<PanelEntry> sectionitems = asset.getpanels("counter_panel"); foreach (PanelEntry sectionitem in sectionitems) %> <%Out.WriteLine("<h1>0</h1>", sectionitem["name"]); Out.WriteLine("<h1>0</h1>", sectionitem["telephone"]); %> <div class="box_divider"></div> <% %> </div><!--closing box-content--> </div><!--closing box--> </div><!--closing sidebar--> </div><!--closing twocolumns--> </div><!--closing container-frame--> </div><!--closing container-holder--> </div><!--closing contentpage--> </div><!--closing main--> CrownPeak Technology 17

.NET Publishing To test your URL s, browse to Sandbox > YourExampleAssets folder, click on the asset linked to the page content; on the right panel, click on General ; on the left side, scroll down to Current URL(s), then click on the Stage Site URL. You should see the complete web page. Next Steps Now you have a master page and bridge template and you should have created at least one page template. The next step will be to start publishing to the staging webhost in order to validate the publishing configuration and the template code. The next document will outline these steps and others including.net Site structure in the CMS.NET publishing configuration Configuring different filename extension for different.net file type. Advanced topics like implementing user controls CrownPeak Technology 18

Appendix Inputhelper.SetSelectlink //This method enables the user to create list(s) of menus for the navigation bar of header and footer public static void SetSelectLink(string szlinklabel, string szlinktextfieldname, string szlinktypelabel, string szlinktypefieldname, string szinternallinklabel, string szinternallinkfieldname, string szexternallinklabel, string szexternallinkfieldname, string sztargetfieldname = "") Dictionary<string, string> dtlinktype = new Dictionary<string, string>(); dtlinktype.add("none", ""); dtlinktype.add("internal", "internal"); dtlinktype.add("external", "external"); if (!string.isnullorwhitespace(szlinklabel) &&!string.isnullorwhitespace(szlinktextfieldname)) Input.ShowTextBox(szLinkLabel, szlinktextfieldname); Input.StartDropDownContainer(szLinkTypeLabel, szlinktypefieldname, dtlinktype); //None Input.NextDropDownContainer(); Input.ShowAcquireDocument(szInternalLinkLabel, szinternallinkfieldname); Input.NextDropDownContainer(); Input.ShowTextBox(szExternalLinkLabel, szexternallinkfieldname); Input.EndDropDownContainer(); if (!string.isnullorwhitespace(sztargetfieldname)) Dictionary<string, string> dttarget = new Dictionary<string, string>(); dttarget.add("no", "_self"); dttarget.add("yes", "_blank"); Input.ShowDropDown("New Window", sztargetfieldname, dttarget); Outputhelper.MetaStringBuilder //This method enables the user to retrieve meta content from the content page asset as well as MasterPage asset public static String MetaStringBuilder(Asset asset, Asset globalconfigasset) StringBuilder metaoutput = new StringBuilder(String.Empty); Asset config = Asset.Load("/" + asset.parent.assetpath + "/_Config"); try String mypagetitle = ""; if (config.isloaded) mypagetitle = config["html_title"]; mypagetitle; mypagetitle = String.IsNullOrWhiteSpace(myPageTitle)? asset["html_title"] : CrownPeak Technology 19

mypagetitle = String.IsNullOrWhiteSpace(myPageTitle)? asset["page_title"] : mypagetitle; mypagetitle = String.IsNullOrWhiteSpace(myPageTitle)? asset.label : mypagetitle; if (!string.isnullorwhitespace(mypagetitle)) metaoutput.appendformat("<title>0</title>", mypagetitle); catch string metatag = ""; try String metatitle = ""; if (config.isloaded) metatitle = config["meta_title"]; metatitle = String.IsNullOrWhiteSpace(metaTitle)? asset["meta_title"] : metatitle; metatitle = (String.IsNullOrWhiteSpace(metaTitle))? globalconfigasset["global_meta_title"] : metatitle; if (!string.isnullorwhitespace(metatitle)) metaoutput.appendformat("<meta name=\"0\" content=\"1\" />", "title", metatitle); catch try String metadescription = (String.IsNullOrWhiteSpace(asset["meta_desc"]))? globalconfigasset["global_meta_desc"] : asset["meta_desc"]; if (!string.isnullorwhitespace(metadescription)) metaoutput.appendformat("<meta name=\"0\" content=\"1\" />", "description", StripQuotes(StripChars(metaDescription))); catch try //more concise way of writing it for keywords... String metakeywords = String.IsNullOrWhiteSpace(asset["meta_keywords"])? globalconfigasset["global_meta_keywords"] : asset["meta_keywords"]; if (!string.isnullorwhitespace(metakeywords)) metaoutput.appendformat("<meta name=\"0\" content=\"1\" />", "keywords", metakeywords); catch CrownPeak Technology 20

metatag = String.IsNullOrWhiteSpace(asset["meta-page-topic"])? globalconfigasset["meta-page-topic"] : asset["meta-page-topic"]; if (!string.isnullorwhitespace(metatag)) metaoutput.appendformat("<meta name=\"0\" content=\"1\" />", "page-topic", metatag); metatag = String.IsNullOrWhiteSpace(asset["meta-language"])? globalconfigasset["meta-language"] : asset["meta-language"]; if (!string.isnullorwhitespace(metatag)) metaoutput.appendformat("<meta name=\"0\" content=\"1\" />", "Language", metatag); metatag = String.IsNullOrWhiteSpace(asset["meta-robots"])? globalconfigasset["meta-robots"] : asset["meta-robots"]; if (!string.isnullorwhitespace(metatag)) metaoutput.appendformat("<meta name=\"0\" content=\"1\" />", "robots", metatag); metatag = String.IsNullOrWhiteSpace(asset["meta-URL"])? globalconfigasset["meta- URL"] : asset["meta-url"]; if (!string.isnullorwhitespace(metatag)) metaoutput.appendformat("<meta name=\"0\" content=\"1\" />", "URL", metatag); metatag = String.IsNullOrWhiteSpace(asset["meta-author"])? globalconfigasset["meta-author"] : asset["meta-author"]; if (!string.isnullorwhitespace(metatag)) metaoutput.appendformat("<meta name=\"0\" content=\"1\" />", "author", metatag); metatag = String.IsNullOrWhiteSpace(asset["meta-geo.region"])? globalconfigasset["meta-geo.region"] : asset["meta-geo.region"]; if (!string.isnullorwhitespace(metatag)) metaoutput.appendformat("<meta name=\"0\" content=\"1\" />", "geo.region", metatag); metatag = String.IsNullOrWhiteSpace(asset["meta-geo.position"])? globalconfigasset["meta-geo.position"] : asset["meta-geo.position"]; if (!string.isnullorwhitespace(metatag)) metaoutput.appendformat("<meta name=\"0\" content=\"1\" />", "geo.position", metatag); CrownPeak Technology 21

metatag = String.IsNullOrWhiteSpace(asset["meta-classification"])? globalconfigasset["meta-classification"] : asset["meta-classification"]; if (!string.isnullorwhitespace(metatag)) metaoutput.appendformat("<meta name=\"0\" content=\"1\" />", "classification", metatag); metatag = String.IsNullOrWhiteSpace(asset["meta-distribution"])? globalconfigasset["meta-distribution"] : asset["meta-distribution"]; if (!string.isnullorwhitespace(metatag)) metaoutput.appendformat("<meta name=\"0\" content=\"1\" />", "distribution", metatag); metatag = String.IsNullOrWhiteSpace(asset["meta-copyright"])? globalconfigasset["meta-copyright"] : asset["meta-copyright"]; if (!string.isnullorwhitespace(metatag)) metaoutput.appendformat("<meta name=\"0\" content=\"1\" />", "copyright", metatag); //standard asset information metaoutput.appendformat("<meta name=\"0\" content=\"1\" />", "asset_id", asset.id.tostring()); metaoutput.appendformat("<meta name=\"0\" content=\"1\" />", "asset_label", asset.label.tostring()); metaoutput.appendformat("<meta name=\"0\" content=\"1\" />", "template_label", asset.templatelabel.tostring()); metaoutput.appendformat("<meta name=\"0\" content=\"1\" />", "site_id", Asset.Load("/" + asset.assetpath[0] + "/").Id.ToString()); try String sectionfolder = asset.assetpath[1].tolower(); //if (String.IsNullOrWhiteSpace(sectionFolder)) sectionfolder = "foo"; if (!string.isnullorwhitespace(sectionfolder)) metaoutput.appendformat("<meta name=\"0\" content=\"1\" />", "sectionfolder", sectionfolder); catch CrownPeak Technology 22

return metaoutput.tostring(); TDW.MakeFilename public static String MakeFilename(OutputContext context, Asset asset) context.publishpath = FormatFilename(context.PublishPath, context, asset); return context.publishpath; TDW.FormatFilename public static String FormatFilename(String path, OutputContext context, Asset asset) String ext = context.remotepath.extension; //if (asset.templatelabel.startswith("xml", StringComparison.OrdinalIgnoreCase)) // // path = path.replace(ext, "xml"); // //string[] arrpath = new string[2]; string szpath1 = "", szpath2 = ""; try szpath1 = asset.assetpath[1]; catch try szpath2 = asset.assetpath[2]; catch if (asset.assetpath.count > 0 && (szpath1.equals("_master", StringComparison.OrdinalIgnoreCase) szpath2.equals("_master", StringComparison.OrdinalIgnoreCase) asset.parent.label.equals("_master"))) path = path.replace(ext, "master"); if (context.layoutname.equals("rss_output.aspx") context.layoutname.equals("rss_output.asp") context.layoutname.equals("xml_output.aspx") context.layoutname.equals("xml_output.asp") context.layoutname.equals("output_rss.aspx") context.layoutname.equals("output_xml.aspx")) path = path.replace(ext, "xml"); if (context.layoutname.equals("output_exacttarget.aspx")) path = path.replace(context.remotepath.label, context.remotepath.label + "_et"); //path = path.replace(ext, "aspx"); if (asset.label.equals("web.config", StringComparison.OrdinalIgnoreCase)) path = path.replace(ext, "config"); path = path.replace(context.remotepath.label, "web"); if (asset.label.equals("homepage", StringComparison.OrdinalIgnoreCase) CrownPeak Technology 23

asset.label.equals("index", StringComparison.OrdinalIgnoreCase)) path = path.replace(context.remotepath.label, (context.layoutname.equals("output_mobile.aspx"))? "index_mobile" : "index"); if (asset.assetpath.count > 0 && asset.assetpath[0].equals("_analytics and SEO", StringComparison.OrdinalIgnoreCase)) path = path.replace("/_analytics and SEO", ""); if (asset.assetpath.tostring().indexof("/assets/")!= -1) path = path.replace("/assets", ""); if (string.equals(asset.assetpath[1], "RSS Feeds")) path = path.replace(ext, "xml"); "_mobile"); if (context.layoutname.equals("output_mobile.aspx")) path = path.replace(context.remotepath.label, context.remotepath.label + path = path.tolower().replace("#47;", ""); return path; CrownPeak Technology 24