56
Layouts in Fusebox 4 • Sandra Clark [email protected]

Layouts in Fusebox 4 Sandra Clark [email protected]

Embed Size (px)

Citation preview

Page 1: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Layouts in Fusebox 4

• Sandra Clark

[email protected]

Page 2: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Overview (1st Half)

• Layout Concepts in Fusebox 4

• Layouts at the Application Level– Banners and Main Navigation

• Layouts at the Circuit Level– Dynamic Side Navigation

• Nested Layouts

Page 3: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Layout Concepts in Fusebox4

• Fusebox 4 gives the architect and developer the tools to make the layout decisions best for the application.

• Layouts are under the total control of the developer.

• Layouts can be as broad based or as granular as you decide.

Page 4: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Layout Concepts

• Layouts are divorced from your circuit placement.– How you design your circuit directories has NO

BEARING now on how your layouts are handled.

– This means that architectural design and layout design are totally separate items and have no bearing on each other (Good Thing)

Page 5: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Layouts at the Application Level

• Application Level Layouts are high level items that keep your entire site consistent.

• If its not going to be the same throughout your application, it is not an application level layout.

Page 6: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Banners and Main Navigation

• Top Level Banners and Main Application navigation are perfect contenders for application level layouts.

Page 7: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Is Application Layout

•Global to the entire site.

•Promotes Consistency

Page 8: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Not Application Layout

•Inconsistent between areas of the site.

Page 9: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Using Application Level Layouts

• Set up in the fusebox.xml file

• <globalfuseactions></globalfuseactions>– Call a fuseaction from a “Layout Fuse”

• Set up Headers in the <preprocess></preprocess> section

• Set up Footers in the <postprocess></postprocess> section

Page 10: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Application Layouts – Fusebox.xml

<globalfuseactions>

<preprocess>

<do action="layouts.heading" />

</preprocess>

<postprocess>

<do action="layouts.footer" />

</postprocess>

</globalfuseactions>

Page 11: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Application Layouts – Layout circuit.xml

<circuit access="internal">

<fuseaction name="heading">

<include template="layoutheader.cfm" />

</fuseaction>

<fuseaction name="footer">

<include template="layoutfooter.cfm" />

</fuseaction>

</circuit>

Page 12: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Application Layouts• Everything else displays within the header

and the footer.

Page 13: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Layouts at the Circuit Level

• Layouts at the circuit level are items which are consistent within a circuit.

• Sub Navigation would commonly be a circuit level layout.

Page 14: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Is Circuit Level Layout

•Consistent within each sub area of the site.

Page 15: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Circuit Layout Considerations

• Needs to be applied only once per call.• Can be called in one of two places.

– Fusebox.xml as a plugin in the preprocess phase.• Need to write a plugin.

– In the circuit’s circuit.xml <prefuseaction> area.• Separate out fuseactions into a public circuit (called via an <a

href>, form or url submittal.– Put the circuit layout call in this circuit.

• An internal circuit, one which handles all the internal fuseaction calls.

• Otherwise, the <prefuseaction> will be called for every fuseaction call to the circuit (which is not good for a layout).

Page 16: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Dynamic Side Navigation

• Side Navigation is a perfect example of circuit level layouts.

• The sub navigation will change for each circuit.

Page 17: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Side Nav Example - Billing

Page 18: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Side Nav Example - System

Page 19: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Circuit Level Layouts using circuit.xml

<circuit access="public">

<prefuseaction>

<include template="dspsidenav.cfm" />

</prefuseaction>

<fuseaction name="main">

<include template="dspmain.cfm" />

</fuseaction>

</circuit>

Page 20: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Nested Layouts

• Think Russian Dolls, every display fuse was encapsulated in that circuit’s layout which was encapsulated in the parent circuits’s layout ….

• Fusebox 3 introduced the concept of Nested Layouts which was part of the core files.

• Every Fusebox 3 application had to deal with Nested Layouts whether they wanted to or not.

Page 21: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Why Not to Use Nested Layouts on New Projects

• Nested Layouts are linked to nested tables which is a poor aid to accessibility.

• Nested Layouts are not flexible. Your architecture is directly tied to your layout.

Page 22: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Nested Layouts and Conversion from FB3

• Use only on apps you want to move from FB3 to FB4.

• Not recommended for new applications• Nested Layouts use a plugin, nestedlayouts.cfm

<phase name="postProcess"><plugin name="NestedLayouts" path="“template="NestedLayouts.cfm"><parameter name="file“ value="wrapper.cfm"/><parameter name="contentvariable“

value="fuseboxlayout"/></plugin>

</phase>

Page 23: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Nested Layouts and Conversion from FB3

• Since each nested layout needs to be captured in a content variable, for each fuseaction currently in FB3 a controller fuseaction must be created which wraps the call.

Page 24: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

After the Break

• How to build Web Sites which are accessible, flexible and easy to manage using the newest tool in our Fusebox 4 layout toolkit!

Page 25: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Break Time

Page 26: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Overview (2nd Half)

• Accessible Web Sites and Web Standards• Content Variables

– A more flexible way to handle layouts– Benefits of Content Variables with Layouts– A Portal Layout– Content Variables and Web Standards

• Layouts at the Fuseaction Level– Different Fuseactions call for Different Layouts

• Putting it all together– Breadcrumb Trail

Page 27: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

What are Accessible Web Sites

• Accessibility is a standard promoted by the Worldwide Web Consortium (W3C)

• It is also a legal requirement for many government web sites.

• Accessibility deals with making a web site available to users who are disabled.

• The largest hurdle to making a web site accessible to the disabled is making it available to user’s who are blind and who access your site through a speech browser

Page 28: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Why are Accessible Web Sites Important

• Accessible Web Sites are important for all types of web sites.– 15 – 30% of the general population have functional

limitations that can affect their ability to use technology products (http://isoc.org/briefings/002)

• Accessibility helps those who:– Cannot use a mouse (only have access to keyboards)– Are blind– Have other vision impairments– Are Deaf– Are Color Blind.

Page 29: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Design to the Standards

• What "Standards"?– When we speak about "standards" for the Web, we mean:

• Structural Languages– XHTML

» Extensible Hypertext Markup Language 1.0 and 1.1» http://www.w3.org/TR/xhtml1» http://www.w3.org/TR/xhtml11

– XML» Extensible Markup Language 1.0» http://www.w3.org/TR/2000/REC-xml-20001006

• Presentation Languages– CSS

» Cascading Style Sheets Levels 1 and 2» http://www.w3.org/TR/REC-CSS1» http://www.w3.org/TR/REC-CSS2

– as well as emerging standards, such as those for television and PDA based browsers.

Page 30: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Why design to the standard

• “Designing and building with these standards simplifies and lowers the cost of production, while delivering sites that are accessible to more people and more types of Internet devices. Sites developed along these lines will continue to function correctly as traditional desktop browsers evolve, and as new Internet devices come to market.”– http://www.webstandards.org

Page 31: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Using Nested Tables for Layouts

• Most of us use tables for layout.– This is not what tables in HTML were designed

for

• By using tables for layouts, we are not only limiting ourselves, but we are limiting the ways in which our work can be utilized.

• Tables are limiting, the web is designed to be limitless.

Page 32: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Separating Content from Presentation

• Content is the most important aspect of the web.– What you get is more important than how you

see it.

• Separating Content from Presentation gives you– Increased accessibility– Improved Performance– Easier initial work and easier maintenance.

Page 33: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

CSS and Positioning

• By using Cascading Style Sheets for positioning and design, we are truly separating content from presentation.

• All Major Browsers (IE 6, Netscape 7, Opera 6) support CSS-2 (which includes Positioning).

• XHTML requires CSS for all presentation in its strict format.

• CSS-2 allows different style sheets to be employed for different media.– Change the way your page looks on a printer without

changing the page.

Page 34: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Are the newer browsers truly compliant?

• Most Newer Browsers are compliant– IE6, NS7, IE5Mac, Opera 6, Konqueror (Linux), IBM Web Browser

• When writing to the standard, make sure you tell the browser to go into standards mode though.

– In order to deal with both old tag soup written to old browser quirks and new standards-compliant pages, Mozilla (and Mozilla-based browsers, such as Netscape 6, Netscape 7, Chimera, Galeon and Beonex), Mac IE 5 and Windows IE 6 have two layout modes. In one mode the layout engine attempts to comply with W3C Recommendations. In the other mode the layout engine tries to mimic old browsers. In Mozilla these modes are known as “the Standards mode” and “the Quirks mode” respectively

Page 35: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

How to force Browsers into Standards Mode

• Mozilla, Mac IE 5 and Windows IE 6 all use doctype sniffing in order to decide between the standards mode and the quirks mode. This means that the mode is picked based on the document type declaration (or the lack thereof) at the beginning of an HTML document.– Full list can be found at:

• http://www.hut.fi/~hsivonen/doctype.html

Page 36: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Standards Forcing DocType Declarations

• HTML 4.x Strict– <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"

"http://www.w3.org/TR/html4/strict.dtd">

• HTML 4.01 Transitional – <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01

Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

• XHTML 1.0 Strict (no xml Declaration)– <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">• XHTML 1.0 Transitional (no xml Declaration)

– <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

• Using an xml Declaration with XHTML will Force IE6 into Quirks Mode

Page 37: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Fusebox 4 and Accessibility

• The Fusebox philosophy encourages separation of business logic from presentation logic which is good.

• Fusebox 4 fully allows for separating presentation and content which are necessary for fully accessible and compliant web sites

Page 38: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Content Variables

• What they are:– A more flexible way of

capturing discrete bits of content.– Allows for the same content to be served in a

variety of layouts– Allows the architecture to think only about

architecture and the designer to only think about design.

Page 39: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

A More Flexible Way to Handle Layouts

• Content variables exist as an attribute to the <do /> command.

• All information that would be displayed from the fuseaction called by the <do /> command is captured into a contentvariable.

Page 40: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Content Variables

• Fuseactions called from <a href>, form submittals or url locations cannot be placed into a content variable.

• However, the fuseactions called within these locations can.

<circuit access="public">

<fuseaction name="main">

<set name="layout" value="withnav" />

<do action="vbilling.main" contentvariable= "maincontent" />

</fuseaction>

</circuit>

Page 41: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Content Variables

• Content Variables can be appended to have more than one fuseaction place their display within the same content variable.<fuseaction name="viewArticle">

<xfa name="submit" value="home.postComments" />

<do action="blog.viewArticle" contentvariable="maincontent" />

<do action="blog.listComments“ contentvariable="maincontent“append="true" />

</fuseaction>

Page 42: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Benefits of Content Variables with Layouts

• Allows for multiple layouts with the same content.

• Web Standards layouts for Web Standards and Speech Browsers

• Tabled Layout for older Browsers.

• SEPARATE AND EQUAL.

Page 43: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

A Portal Layout

• Portal Applications typically have more than one set of information being displayed at one time.– Typically this means that more than one

fuseaction is being called to supply that information.

• Portals are a great example of using Content Variables.

Page 44: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Content Variables and Web Standards

• Content Variables are a great way to implement web standards

• Since content variables contain discrete information, they are simple in layouts.

• Also makes it very simple for web designers to work with as well.

<div id="heading"><p>ACME ACCOUNTING SYSTEM</p><div id="mainmenu">#mainmenu#</div></div>

<div id="body"><div id="sidenav">#sidenav#</div><div id="maincontent">#maincontent#</div>

</div>

Page 45: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Layouts at the Fuseaction Level

• Fuseaction level layouts allow you to call a layout as a <do command at the end of the fuse queue.

• Allows for granular formatting of specific objects.

Page 46: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Fuseaction Layouts

<fuseaction name="main">

<do action="vbilling.main" contentvariable="content.maincontent" />

<do action=“layouts.withnav” />

</fuseaction>

Page 47: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Fuseaction Layouts

<fuseaction name="main">

<do action =“layouts.itemheader” />

<do action="vbilling.main" />

<do action=“layouts.itemfooter” />

</fuseaction>

Page 48: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Fuseaction Layouts

• Considerations for fuseaction layouts– Will still apply any other application or circuit

level layouts called.– When using Fuseaction level layouts, make

sure they are being applied properly. Forgetting a layout might cause your information not to be displayed if you are using content variables with it.

Page 49: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Breadcrumb Trail

• Breadcrumb navigation displays the current page's context within the site structure.

• The term "breadcrumb" is as in "Hansel and Gretel" - leaving a trail of crumbs in order to find their way back out of the forest.

• The benefit of this approach is that it makes obvious the ways in which information has been grouped and allows the user both to move between these groupings and understand the information structure.

Page 50: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Breadcrumb Trail

• The Breadcrumb trail will use a mixture of layouts to implement.

• General Header and Footer will be implemented by the Application level layouts

• Content Variables will be used to handle the rest along with.

• Dynamic Side menus will be handled at the circuit level.

• Breadcrumbs will be applied at all levels into a content variable.

Page 51: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Breadcrumb Trail

• Create a default variable “breadcrumb” in globals.cfm (called via a plugin)– <cfparam name=“breadcrumb” default=“”>

• For each circuit level, create a breadcrumb for the circuit at the <prefuseaction level>– Use Call Super to go up the parent path.<prefuseaction callsuper="true" >

<set name="thisbreadcrumb" value="Billing|billing.main" /><set name="breadcrumb" value="#listappend(breadcrumb,

thisbreadcrumb)#" /> </postfuseaction>

Page 52: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Breadcrumb Trail

• For each fuseaction to be breadtrailed.– Set the breadcrumb trail.

<fuseaction name="newActivity">

<set name="thisbreadcrumb" value="New Activity|

billing.newActivity" />

<do action="vbilling.main"

contentvariable="content.maincontent" /></fuseaction>

Page 53: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Breadcrumb Trail

• Use the <postfuseaction to append the main fuseaction to the list variable.<postfuseaction>

<set name="breadcrumb" value="#listappend(breadcrumb,

thisbreadcrumb)#" />

</postfuseaction>

Page 54: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Breadcrumb Trail

• In the fusebox.xml add a call to a breadcrumb action in the layouts circuit.

<postprocess>

<do action="layouts.breadcrumb" />

<do action="layouts.choose" />

</postprocess>• Which calls

<fuseaction name="breadcrumb">

<include template="actbreadcrumb.cfm" />

</fuseaction>

Page 55: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

Breadcrumb Trail

• This action fuse actually puts the breadcrumb together into a content variable for display.

<cfset breadcrumbtrail = ""><cfloop from="1" to="#ListLen(breadcrumb)#" index="i"> <cfset aCrumb=GetToken(breadcrumb,i,",")> <cfoutput> <cfset breadcrumbtrail = breadcrumbtrail & ' <a href="#myself##GetToken(aCrumb,2,'|')#">#GetToken(aCrumb,1,'|')#</

a>'> <cfif i NEQ ListLen(breadcrumb)>

<cfset breadcrumbtrail = breadcrumbtrail & "&nbsp;&gt;&nbsp;"></cfif>

</cfoutput></cfloop>

Page 56: Layouts in Fusebox 4 Sandra Clark sclark@constellagroup.com

QA