<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=71.163.185.8</id>
		<title>Whirlwind eCommerce Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.whirlwind-ecommerce.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=71.163.185.8"/>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Special:Contributions/71.163.185.8"/>
		<updated>2026-04-24T07:35:43Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.24.2</generator>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Talk:Pages_templates:forum&amp;diff=782</id>
		<title>Talk:Pages templates:forum</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Talk:Pages_templates:forum&amp;diff=782"/>
				<updated>2009-04-28T18:41:43Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: Removing all content from page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Talk:Whirlwind_eCommerce_Engine_Wiki&amp;diff=781</id>
		<title>Talk:Whirlwind eCommerce Engine Wiki</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Talk:Whirlwind_eCommerce_Engine_Wiki&amp;diff=781"/>
				<updated>2009-04-28T18:41:20Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: Removing all content from page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Page_Templates:Functions&amp;diff=780</id>
		<title>Page Templates:Functions</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Page_Templates:Functions&amp;diff=780"/>
				<updated>2009-04-28T18:40:35Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Page Template Functions Shortcuts}}&lt;br /&gt;
A series of custom functions are created to allow content management to easily access content they require to build the copy in templates:&lt;br /&gt;
&lt;br /&gt;
;Quick Output of Options Tags for common select boxes&lt;br /&gt;
*[[functions:addressStateOptions|addressStateOptions]] - returns string of option tags for states&lt;br /&gt;
*[[functions:addressCountryOptions|addressCountryOptions]] - returns string of option tags for countries&lt;br /&gt;
*[[functions:orderExpDateOptions|orderExpDateOptions]] - returns string of option tags for expiration dates of a credit card&lt;br /&gt;
*[[functions:orderPayTypeOptions|orderPayTypeOptions]] - returns string of option tags for pay types&lt;br /&gt;
&lt;br /&gt;
;Set Variables that Content Managers can use in the WYSIWYG copy editor&lt;br /&gt;
*[[functions:pageContentAttribSet|pageContentAttribSet]] - sets a single variable that can be used by content managers in the page manager form (including the WYSIWYG editor)&lt;br /&gt;
*[[functions:pageContentAttribStart/pageContentAttribEnd|pageContentAttribStart/pageContentAttribEnd]] - wrapper that the contents of which is set as a single variable that can be used by content managers in the page manager form&lt;br /&gt;
&lt;br /&gt;
;Retrieve Page Content to Build Pages&lt;br /&gt;
*[[functions:pageMenuGet|pageMenuGet]] - returns menu item data&lt;br /&gt;
*[[functions:pageChildrenGet|pageChildrenGet]] - returns page data for children of a specific page&lt;br /&gt;
*[[functions:pageSearchGet|pageSearchGet]] - returns page data for pages qualifying for a keyword search&lt;br /&gt;
*[[functions:pageZoneGet|pageZoneGet]] - returns code to display an banner ad zone&lt;br /&gt;
*[[functions:pageForumPostsGet|pageForumPostsGet]] - returns forum post data for posts submitted to a particular forum page&lt;br /&gt;
*[[functions:pageGet|pageGet]] - return specific information about a specific page&lt;br /&gt;
*[[functions:pagePollQuestionsGet|pagePollQuestionsGet]] - returns question and answer data for building a poll&lt;br /&gt;
*[[functions:pagePollResultsGet|pagePollResultsGet]] - returns poll submission data for building a report of poll results&lt;br /&gt;
*[[functions:pageBreadcrumbsFamilyGet|pageBreadcrumbsFamilyGet(]] - returns breadcrumb data by traversing parent pages&lt;br /&gt;
*[[functions:pageBreadcrumbsHistoryGet|pageBreadcrumbsHistoryGet]] - returns breadcrumb data by traversing linear browsing history&lt;br /&gt;
*[[functions:pageProductsGet|pageProductsGet]] - returns product data for products related to a specific page&lt;br /&gt;
*[[functions:catalogProductsGet|catalogProductsGet]] - returns product data by catalog number&lt;br /&gt;
*[[functions:recentlyViewedGet|recentlyViewedGet]] - returns data for recently viewed pages&lt;br /&gt;
*[[functions:continueShoppingGet|continueShoppingGet]] - returns data for recently viewed pages&lt;br /&gt;
*[[functions:pageCustomSearchGroup|pageCustomSearchGroup]] - returns Custom Search Group data used to build a custom search widget&lt;br /&gt;
*[[functions:prodArrayToJS|prodArrayToJS]] - creates a string of pricing data that can be assigned to a javascript object to calculate pricing on the fly (ajax)&lt;br /&gt;
&lt;br /&gt;
;Manage Copy&lt;br /&gt;
*[[functions:fullyQualifyAllURLs|fullyQualifyAllURLs]] - converts any relative/absolute URL in the passed copy to fully qualified URLs - useful when sending copy as an email&lt;br /&gt;
&lt;br /&gt;
;Manage Large Lists of Data&lt;br /&gt;
*[[functions:pagination|pagination]] - easy to use tool to paginate large sets of data. Use for managing page children, search results and more&lt;br /&gt;
&lt;br /&gt;
;Retrieve Order information for perpetual and full shopping carts, checkout stages, order history&lt;br /&gt;
*[[functions:orderGetSummary|orderGetSummary]] - returns summerized order information. Useful for perpetual carts.&lt;br /&gt;
*[[functions:orderGetPayTypes|orderGetPayTypes]] - returns data relating to active paytypes in the system &lt;br /&gt;
*[[functions:userGetAddresses|userGetAddresses]] - returns data for all addresses belonging to a specific user&lt;br /&gt;
*[[functions:orderGetShipArray|orderGetShipArray]] - returns array of shipping options and costs&lt;br /&gt;
*[[functions:orderGetCompleteArray|orderGetCompleteArray]] - returns  full order information including payment, item, address, etc. Use for shopping carts, order summaries and receipts of orders.&lt;br /&gt;
*[[functions:ordersGetList|ordersGetList]] - returns listing of orders for a particular user (useful for building order history pages)&lt;br /&gt;
&lt;br /&gt;
;Integrate With 3rd Party Web Tools&lt;br /&gt;
*[[functions:googleTrack|googleTrack]] - Google Analytics Integration&lt;br /&gt;
*[[functions:googleTrackTrans|googleTrackTrans]] - Google eCommerce Conversion Tracking&lt;br /&gt;
*[[functions:TEMConversionTag|TEMConversionTag]] - Trigger Email Marketing Conversion Tracking&lt;br /&gt;
*[[functions:jellyfishOutput|jellyfishOutput]] - Jellyfish Order Conversion Tracking&lt;br /&gt;
&lt;br /&gt;
;Retrieve User Content to Build Community (Web 2.0) Pages&lt;br /&gt;
*[[functions:usersGet|usersGet]] - retrieve user data from a list of user ids&lt;br /&gt;
*[[functions:userBlogEntriesGet|userBlogEntriesGet]] - retrieve blog entry data belonging to a specific user&lt;br /&gt;
*[[functions:userFriendsGet|userFriendsGet]] - retrieves data for users in a specific user's 'friend list'&lt;br /&gt;
*[[functions:userWishListGet|userWishListGet]] - retrieves product data for products in a specific user's wish list&lt;br /&gt;
*[[functions:usersAmbassadorGet|usersAmbassadorGet]] - retrieves user data for users that are classified as 'ambassadors'&lt;br /&gt;
&lt;br /&gt;
;Set Tracking Functions&lt;br /&gt;
*[[functions:recentlyViewedAdd|recentlyViewedAdd]] - registers a page to the recently viewed history when viewed&lt;br /&gt;
&lt;br /&gt;
;User Management Functions&lt;br /&gt;
*[[functions:userAccountEdit|userAccountEdit]] - manages user account information&lt;br /&gt;
*[[functions:userAccountAndAddressCreate|userAccountAndAddressCreate]] - create a user account (or both a user account and address)&lt;br /&gt;
*[[functions:userAddressAddEdit|userAddressAddEdit]] - manages user addresses&lt;br /&gt;
*[[functions:userBlogEntryAddEdit|userBlogEntryAddEdit]] - managers user blog entries&lt;br /&gt;
*[[functions:userBlogSetup|userBlogSetup]] - sets up a user with a blog&lt;br /&gt;
*[[functions:authorizeIsLoggedOut|authorizeIsLoggedOut]] - to check if a user is logged out&lt;br /&gt;
*[[functions:authorizeIsLoggedIn|authorizeIsLoggedIn]] - to check if a user is logged in&lt;br /&gt;
&lt;br /&gt;
;Retrieve additional information from address data&lt;br /&gt;
*[[functions:addressCountryNameGet|addressCountryNameGet]] - returns full country name from ISO 2 digit format&lt;br /&gt;
*[[functions:addressZipDetailsGet|addressZipDetailsGet]] - returns data about zip including: city,state,areaCode,county,timeZone,latitude,longitude,dayLightSavings&lt;br /&gt;
&lt;br /&gt;
;Security functions&lt;br /&gt;
*[[functions:captchaCheck|captchaCheck]] - validate a captcha image to ensure we don't have automated form submissions&lt;br /&gt;
*[[functions:ipBlockCheck|ipBlockCheck]] - checks if an IP is registered to the block list&lt;br /&gt;
&lt;br /&gt;
;Shortcut Functions that just plain make your job easier&lt;br /&gt;
*[[functions:redirect|redirect]] - redirects visitors to another page&lt;br /&gt;
*[[functions:valueArrayFromQuery|valueArrayFromQuery]] - returns a single dimension array of values based on the contents of a specific column in all records of a query&lt;br /&gt;
*[[functions:dollarFormat|dollarFormat]] - converts a decimal to a dollar value with preceding $ sign.&lt;br /&gt;
*[[functions:validateEmail|validateEmail]] - checks to make sure an email address is well formatted.&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Page_Templates:Functions&amp;diff=779</id>
		<title>Page Templates:Functions</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Page_Templates:Functions&amp;diff=779"/>
				<updated>2009-04-28T18:40:13Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Page Template Functions Shortcuts}}&lt;br /&gt;
A series of custom functions are created to allow content management to easily access content they require to build the copy in templates:&lt;br /&gt;
&lt;br /&gt;
;Quick Output of Options Tags for common select boxes&lt;br /&gt;
*[[functions:addressStateOptions|addressStateOptions]] - returns string of option tags for states&lt;br /&gt;
*[[functions:addressCountryOptions|addressCountryOptions]] - returns string of option tags for countries&lt;br /&gt;
*[[functions:orderExpDateOptions|orderExpDateOptions]] - returns string of option tags for expiration dates of a credit card&lt;br /&gt;
*[[functions:orderPayTypeOptions|orderPayTypeOptions]] - returns string of option tags for pay types&lt;br /&gt;
&lt;br /&gt;
;Set Variables that Content Managers can use in the WYSIWYG copy editor&lt;br /&gt;
*[[functions:pageContentAttribSet|pageContentAttribSet]] - sets a single variable that can be used by content managers in the page manager form (including the WYSIWYG editor)&lt;br /&gt;
*[[functions:pageContentAttribStart/pageContentAttribEnd|pageContentAttribStart/pageContentAttribEnd]] - wrapper that the contents of which is set as a single variable that can be used by content managers in the page manager form&lt;br /&gt;
&lt;br /&gt;
;Retrieve Page Content to Build Pages&lt;br /&gt;
*[[functions:pageMenuGet|pageMenuGet]] - returns menu item data&lt;br /&gt;
*[[functions:pageChildrenGet|pageChildrenGet]] - returns page data for children of a specific page&lt;br /&gt;
*[[functions:pageSearchGet|pageSearchGet]] - returns page data for pages qualifying for a keyword search&lt;br /&gt;
*[[functions:pageZoneGet|pageZoneGet]] - returns code to display an banner ad zone&lt;br /&gt;
*[[functions:pageForumPostsGet|pageForumPostsGet]] - returns forum post data for posts submitted to a particular forum page&lt;br /&gt;
*[[functions:pageGet|pageGet]] - return specific information about a specific page&lt;br /&gt;
*[[functions:pagePollQuestionsGet|pagePollQuestionsGet]] - returns question and answer data for building a poll&lt;br /&gt;
*[[functions:pagePollResultsGet|pagePollResultsGet]] - returns poll submission data for building a report of poll results&lt;br /&gt;
*[[functions:pageBreadcrumbsFamilyGet|pageBreadcrumbsFamilyGet(]] - returns breadcrumb data by traversing parent pages&lt;br /&gt;
*[[functions:pageBreadcrumbsHistoryGet|pageBreadcrumbsHistoryGet]] - returns breadcrumb data by traversing linear browsing history&lt;br /&gt;
*[[functions:pageProductsGet|pageProductsGet]] - returns product data for products related to a specific page&lt;br /&gt;
*[[functions:catalogProductsGet|catalogProductsGet]] - returns product data by catalog number&lt;br /&gt;
*[[functions:recentlyViewedGet|recentlyViewedGet]] - returns data for recently viewed pages&lt;br /&gt;
*[[functions:continueShoppingGet|continueShoppingGet]] - returns data for recently viewed pages&lt;br /&gt;
*[[functions:pageCustomSearchGroup|pageCustomSearchGroup]] - returns Custom Search Group data used to build a custom search widget&lt;br /&gt;
*[[functions:prodArrayToJS|prodArrayToJS]] - creates a string of pricing data that can be assigned to a javascript object to calculate pricing on the fly (ajax)&lt;br /&gt;
&lt;br /&gt;
;Manage Copy&lt;br /&gt;
*[[functions:fullyQualifyAllURLs|fullyQualifyAllURLs]] - converts any relative/absolute URL in the passed copy to fully qualified URLs - useful when sending copy as an email&lt;br /&gt;
&lt;br /&gt;
;Manage Large Lists of Data&lt;br /&gt;
*[[functions:pagination|pagination]] - easy to use tool to paginate large sets of data. Use for managing page children, search results and more&lt;br /&gt;
&lt;br /&gt;
;Retrieve Order information for perpetual and full shopping carts, checkout stages, order history&lt;br /&gt;
*[[functions:orderGetSummary|orderGetSummary]] - returns summerized order information. Useful for perpetual carts.&lt;br /&gt;
*[[functions:orderGetPayTypes|orderGetPayTypes]] - returns data relating to active paytypes in the system &lt;br /&gt;
*[[functions:userGetAddresses|userGetAddresses]] - returns data for all addresses belonging to a specific user&lt;br /&gt;
*[[functions:orderGetShipArray|orderGetShipArray]] - returns array of shipping options and costs&lt;br /&gt;
*[[functions:orderGetCompleteArray|orderGetCompleteArray]] - returns  full order information including payment, item, address, etc. Use for shopping carts, order summaries and receipts of orders.&lt;br /&gt;
*[[functions:ordersGetList|ordersGetList]] - returns listing of orders for a particular user (useful for building order history pages)&lt;br /&gt;
&lt;br /&gt;
;Integrate With 3rd Party Web Tools&lt;br /&gt;
*[[functions:googleTrack|googleTrack]] - Google Analytics Integration&lt;br /&gt;
*[[functions:googleTrackTrans|googleTrackTrans]] - Google eCommerce Conversion Tracking&lt;br /&gt;
*[[functions:TEMConversionTag]TEMConversionTag]] - Trigger Email Marketing Conversion Tracking&lt;br /&gt;
*[[functions:jellyfishOutput|jellyfishOutput]] - Jellyfish Order Conversion Tracking&lt;br /&gt;
&lt;br /&gt;
;Retrieve User Content to Build Community (Web 2.0) Pages&lt;br /&gt;
*[[functions:usersGet|usersGet]] - retrieve user data from a list of user ids&lt;br /&gt;
*[[functions:userBlogEntriesGet|userBlogEntriesGet]] - retrieve blog entry data belonging to a specific user&lt;br /&gt;
*[[functions:userFriendsGet|userFriendsGet]] - retrieves data for users in a specific user's 'friend list'&lt;br /&gt;
*[[functions:userWishListGet|userWishListGet]] - retrieves product data for products in a specific user's wish list&lt;br /&gt;
*[[functions:usersAmbassadorGet|usersAmbassadorGet]] - retrieves user data for users that are classified as 'ambassadors'&lt;br /&gt;
&lt;br /&gt;
;Set Tracking Functions&lt;br /&gt;
*[[functions:recentlyViewedAdd|recentlyViewedAdd]] - registers a page to the recently viewed history when viewed&lt;br /&gt;
&lt;br /&gt;
;User Management Functions&lt;br /&gt;
*[[functions:userAccountEdit|userAccountEdit]] - manages user account information&lt;br /&gt;
*[[functions:userAccountAndAddressCreate|userAccountAndAddressCreate]] - create a user account (or both a user account and address)&lt;br /&gt;
*[[functions:userAddressAddEdit|userAddressAddEdit]] - manages user addresses&lt;br /&gt;
*[[functions:userBlogEntryAddEdit|userBlogEntryAddEdit]] - managers user blog entries&lt;br /&gt;
*[[functions:userBlogSetup|userBlogSetup]] - sets up a user with a blog&lt;br /&gt;
*[[functions:authorizeIsLoggedOut|authorizeIsLoggedOut]] - to check if a user is logged out&lt;br /&gt;
*[[functions:authorizeIsLoggedIn|authorizeIsLoggedIn]] - to check if a user is logged in&lt;br /&gt;
&lt;br /&gt;
;Retrieve additional information from address data&lt;br /&gt;
*[[functions:addressCountryNameGet|addressCountryNameGet]] - returns full country name from ISO 2 digit format&lt;br /&gt;
*[[functions:addressZipDetailsGet|addressZipDetailsGet]] - returns data about zip including: city,state,areaCode,county,timeZone,latitude,longitude,dayLightSavings&lt;br /&gt;
&lt;br /&gt;
;Security functions&lt;br /&gt;
*[[functions:captchaCheck|captchaCheck]] - validate a captcha image to ensure we don't have automated form submissions&lt;br /&gt;
*[[functions:ipBlockCheck|ipBlockCheck]] - checks if an IP is registered to the block list&lt;br /&gt;
&lt;br /&gt;
;Shortcut Functions that just plain make your job easier&lt;br /&gt;
*[[functions:redirect|redirect]] - redirects visitors to another page&lt;br /&gt;
*[[functions:valueArrayFromQuery|valueArrayFromQuery]] - returns a single dimension array of values based on the contents of a specific column in all records of a query&lt;br /&gt;
*[[functions:dollarFormat|dollarFormat]] - converts a decimal to a dollar value with preceding $ sign.&lt;br /&gt;
*[[functions:validateEmail|validateEmail]] - checks to make sure an email address is well formatted.&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Template:Page_Template_Functions_Shortcuts&amp;diff=778</id>
		<title>Template:Page Template Functions Shortcuts</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Template:Page_Template_Functions_Shortcuts&amp;diff=778"/>
				<updated>2009-04-28T18:39:43Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table align=right style=&amp;quot;background-color: #DDDDDD;&amp;quot; cellpadding=0 cellspacing=0 border=0&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
{{Page Template Managers Shortcuts}}&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
[[Page Templates:Functions|Page Template Functions]]&lt;br /&gt;
*[[functions:addressCountryOptions|addressCountryOptions]]&lt;br /&gt;
*[[functions:addressCountryNameGet|addressCountryNameGet]]&lt;br /&gt;
*[[functions:addressStateOptions|addressStateOptions]]&lt;br /&gt;
*[[functions:addressZipDetailsGet|addressZipDetailsGet]]&lt;br /&gt;
*[[functions:authorizeIsLoggedIn|authorizeIsLoggedIn]]&lt;br /&gt;
*[[functions:authorizeIsLoggedOut|authorizeIsLoggedOut]]&lt;br /&gt;
*[[functions:captchaCheck|captchaCheck]]&lt;br /&gt;
*[[functions:catalogProductsGet|catalogProductsGet]]&lt;br /&gt;
*[[functions:continueShoppingGet|continueShoppingGet]]&lt;br /&gt;
*[[functions:continueShoppingSet|continueShopppingSet]]&lt;br /&gt;
*[[functions:dollarFormat|dollarFormat]]&lt;br /&gt;
*[[functions:fullyQualifyAllURLs|fullyQualifyAllURLs]]&lt;br /&gt;
*[[functions:googleTrack|googleTrack]]&lt;br /&gt;
*[[functions:googleTrackTrans|googleTrackTrans]]&lt;br /&gt;
*[[functions:ipBlockCheck|ipBlockCheck]]&lt;br /&gt;
*[[functions:itemLayout_dataString2Array|itemLayout_dataString2Array]]&lt;br /&gt;
*[[functions:jellyfishOutput|jellyfishOutput]]&lt;br /&gt;
*[[functions:mysqlquery2array|mysqlquery2array]]&lt;br /&gt;
*[[functions:orderExpDateOptions|orderExpDateOptions]]&lt;br /&gt;
*[[functions:orderGetCompleteArray|orderGetCompleteArray]]&lt;br /&gt;
*[[functions:orderGetEmail|orderGetEmail]]&lt;br /&gt;
*[[functions:orderGetFirstName|orderGetFirstName]]&lt;br /&gt;
*[[functions:orderGetIdFromNumber|orderGetIdFromNumber]]&lt;br /&gt;
*[[functions:orderGetPayTypes|orderGetPayTypes]]&lt;br /&gt;
*[[functions:orderGetShipArray|orderGetShipArray]]&lt;br /&gt;
*[[functions:orderGetSummary|orderGetSummary]]&lt;br /&gt;
*[[functions:ordersGetList|ordersGetList]]&lt;br /&gt;
*[[functions:orderPayTypeOptions|orderPayTypeOptions]]&lt;br /&gt;
*[[functions:orderShipFedexRate|orderShipFedexRate]]&lt;br /&gt;
*[[functions:orderShipAdjustRate|orderShipAdjustRate]]&lt;br /&gt;
*[[functions:pageBreadcrumbsFamilyGet|pageBreadcrumbsFamilyGet]]&lt;br /&gt;
*[[functions:pageBreadcrumbsHistoryGet|pageBreadcrumbsHistoryGet]]&lt;br /&gt;
*[[functions:pageChildrenGet|pageChildrenGet]]&lt;br /&gt;
*[[functions:pageContentAttribSet|pageContentAttribSet]]&lt;br /&gt;
*[[functions:pageContentAttribsSet|pageContentAttribsSet]]&lt;br /&gt;
*[[functions:pageContentAttribStart/pageContentAttribEnd|pageContentAttribStart]]&lt;br /&gt;
*[[functions:pageContentAttribStart/pageContentAttribEnd|pageContentAttribEnd]]&lt;br /&gt;
*[[functions:pageCustomSearchGroup|pageCustomSearchGroup]]&lt;br /&gt;
*[[functions:pageForumPostsGet|pageForumPostsGet]]&lt;br /&gt;
*[[functions:pageGet|pageGet]]&lt;br /&gt;
*[[functions:pageGetHomeId|pageGetHomeId]]&lt;br /&gt;
*[[functions:pageMenuGet|pageMenuGet]]&lt;br /&gt;
*[[functions:pagePollQuestionsGet|pagePollQuestionsGet]]&lt;br /&gt;
*[[functions:pagePollResultsGet|pagePollResultsGet]]&lt;br /&gt;
*[[functions:pageProductsGet|pageProductsGet]]&lt;br /&gt;
*[[functions:pageSearchGet|pageSearchGet]]&lt;br /&gt;
*[[functions:pageZoneGet|pageZoneGet]]&lt;br /&gt;
*[[functions:pagination|pagination]]&lt;br /&gt;
*[[functions:phpObjToJS|phpObjToJS]]&lt;br /&gt;
*[[functions:prodArrayToJS|prodArrayToJS]]&lt;br /&gt;
*[[functions:prodOptionString2Array|prodOptionString2Array]]&lt;br /&gt;
*[[functions:recentlyViewedAdd|recentlyViewedAdd]]&lt;br /&gt;
*[[functions:recentlyViewedGet|recentlyViewedGet]]&lt;br /&gt;
*[[functions:redirect|redirect]]&lt;br /&gt;
*[[functions:TEMConversionTag|TEMConversionTag]]&lt;br /&gt;
*[[functions:userAccountAndAddressCreate|userAccountAndAddressCreate]]&lt;br /&gt;
*[[functions:userAccountEdit|userAccountEdit]]&lt;br /&gt;
*[[functions:userAddressAddEdit|userAddressAddEdit]]&lt;br /&gt;
*[[functions:userBlogEntriesGet|userBlogEntriesGet]]&lt;br /&gt;
*[[functions:userBlogEntryAddEdit|userBlogEntryAddEdit]]&lt;br /&gt;
*[[functions:userBlogSetup|userBlogSetup]]&lt;br /&gt;
*[[functions:userFriendsGet|userFriendsGet]]&lt;br /&gt;
*[[functions:userGetAddresses|userGetAddresses]]&lt;br /&gt;
*[[functions:userWishListGet|userWishListGet]]&lt;br /&gt;
*[[functions:usersAmbassadorGet|usersAmbassadorGet]]&lt;br /&gt;
*[[functions:usersGet|usersGet]]&lt;br /&gt;
*[[functions:valueArrayFromQuery|valueArrayFromQuery]]&lt;br /&gt;
*[[functions:verifyEmail|verifyEmail]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Template:Page_Template_Functions_Shortcuts&amp;diff=777</id>
		<title>Template:Page Template Functions Shortcuts</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Template:Page_Template_Functions_Shortcuts&amp;diff=777"/>
				<updated>2009-04-28T18:39:13Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table align=right style=&amp;quot;background-color: #DDDDDD;&amp;quot; cellpadding=0 cellspacing=0 border=0&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
{{Page Template Managers Shortcuts}}&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
[[Page Templates:Functions|Page Template Functions]]&lt;br /&gt;
*[[functions:addressCountryOptions|addressCountryOptions]]&lt;br /&gt;
*[[functions:addressCountryNameGet|addressCountryNameGet]]&lt;br /&gt;
*[[functions:addressStateOptions|addressStateOptions]]&lt;br /&gt;
*[[functions:addressZipDetailsGet|addressZipDetailsGet]]&lt;br /&gt;
*[[functions:authorizeIsLoggedIn|authorizeIsLoggedIn]]&lt;br /&gt;
*[[functions:authorizeIsLoggedOut|authorizeIsLoggedOut]]&lt;br /&gt;
*[[functions:captchaCheck|captchaCheck]]&lt;br /&gt;
*[[functions:catalogProductsGet|catalogProductsGet]]&lt;br /&gt;
*[[functions:continueShoppingGet|continueShoppingGet]]&lt;br /&gt;
*[[functions:continueShoppingSet|continueShopppingSet]]&lt;br /&gt;
*[[functions:dollarFormat|dollarFormat]]&lt;br /&gt;
*[[functions:fullyQualifyAllURLs|fullyQualifyAllURLs]]&lt;br /&gt;
*[[functions:googleTrack]googleTrack]]&lt;br /&gt;
*[[functions:googleTrack]googleTrackTrans]]&lt;br /&gt;
*[[functions:ipBlockCheck|ipBlockCheck]]&lt;br /&gt;
*[[functions:itemLayout_dataString2Array|itemLayout_dataString2Array]]&lt;br /&gt;
*[[functions:jellyfishOutput|jellyfishOutput]]&lt;br /&gt;
*[[functions:mysqlquery2array|mysqlquery2array]]&lt;br /&gt;
*[[functions:orderExpDateOptions|orderExpDateOptions]]&lt;br /&gt;
*[[functions:orderGetCompleteArray|orderGetCompleteArray]]&lt;br /&gt;
*[[functions:orderGetEmail|orderGetEmail]]&lt;br /&gt;
*[[functions:orderGetFirstName|orderGetFirstName]]&lt;br /&gt;
*[[functions:orderGetIdFromNumber|orderGetIdFromNumber]]&lt;br /&gt;
*[[functions:orderGetPayTypes|orderGetPayTypes]]&lt;br /&gt;
*[[functions:orderGetShipArray|orderGetShipArray]]&lt;br /&gt;
*[[functions:orderGetSummary|orderGetSummary]]&lt;br /&gt;
*[[functions:ordersGetList|ordersGetList]]&lt;br /&gt;
*[[functions:orderPayTypeOptions|orderPayTypeOptions]]&lt;br /&gt;
*[[functions:orderShipFedexRate|orderShipFedexRate]]&lt;br /&gt;
*[[functions:orderShipAdjustRate|orderShipAdjustRate]]&lt;br /&gt;
*[[functions:pageBreadcrumbsFamilyGet|pageBreadcrumbsFamilyGet]]&lt;br /&gt;
*[[functions:pageBreadcrumbsHistoryGet|pageBreadcrumbsHistoryGet]]&lt;br /&gt;
*[[functions:pageChildrenGet|pageChildrenGet]]&lt;br /&gt;
*[[functions:pageContentAttribSet|pageContentAttribSet]]&lt;br /&gt;
*[[functions:pageContentAttribsSet|pageContentAttribsSet]]&lt;br /&gt;
*[[functions:pageContentAttribStart/pageContentAttribEnd|pageContentAttribStart]]&lt;br /&gt;
*[[functions:pageContentAttribStart/pageContentAttribEnd|pageContentAttribEnd]]&lt;br /&gt;
*[[functions:pageCustomSearchGroup|pageCustomSearchGroup]]&lt;br /&gt;
*[[functions:pageForumPostsGet|pageForumPostsGet]]&lt;br /&gt;
*[[functions:pageGet|pageGet]]&lt;br /&gt;
*[[functions:pageGetHomeId|pageGetHomeId]]&lt;br /&gt;
*[[functions:pageMenuGet|pageMenuGet]]&lt;br /&gt;
*[[functions:pagePollQuestionsGet|pagePollQuestionsGet]]&lt;br /&gt;
*[[functions:pagePollResultsGet|pagePollResultsGet]]&lt;br /&gt;
*[[functions:pageProductsGet|pageProductsGet]]&lt;br /&gt;
*[[functions:pageSearchGet|pageSearchGet]]&lt;br /&gt;
*[[functions:pageZoneGet|pageZoneGet]]&lt;br /&gt;
*[[functions:pagination|pagination]]&lt;br /&gt;
*[[functions:phpObjToJS|phpObjToJS]]&lt;br /&gt;
*[[functions:prodArrayToJS|prodArrayToJS]]&lt;br /&gt;
*[[functions:prodOptionString2Array|prodOptionString2Array]]&lt;br /&gt;
*[[functions:recentlyViewedAdd|recentlyViewedAdd]]&lt;br /&gt;
*[[functions:recentlyViewedGet|recentlyViewedGet]]&lt;br /&gt;
*[[functions:redirect|redirect]]&lt;br /&gt;
*[[functions:TEMConversionTag|TEMConversionTag]]&lt;br /&gt;
*[[functions:userAccountAndAddressCreate|userAccountAndAddressCreate]]&lt;br /&gt;
*[[functions:userAccountEdit|userAccountEdit]]&lt;br /&gt;
*[[functions:userAddressAddEdit|userAddressAddEdit]]&lt;br /&gt;
*[[functions:userBlogEntriesGet|userBlogEntriesGet]]&lt;br /&gt;
*[[functions:userBlogEntryAddEdit|userBlogEntryAddEdit]]&lt;br /&gt;
*[[functions:userBlogSetup|userBlogSetup]]&lt;br /&gt;
*[[functions:userFriendsGet|userFriendsGet]]&lt;br /&gt;
*[[functions:userGetAddresses|userGetAddresses]]&lt;br /&gt;
*[[functions:userWishListGet|userWishListGet]]&lt;br /&gt;
*[[functions:usersAmbassadorGet|usersAmbassadorGet]]&lt;br /&gt;
*[[functions:usersGet|usersGet]]&lt;br /&gt;
*[[functions:valueArrayFromQuery|valueArrayFromQuery]]&lt;br /&gt;
*[[functions:verifyEmail|verifyEmail]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Template:Page_Template_Functions_Shortcuts&amp;diff=776</id>
		<title>Template:Page Template Functions Shortcuts</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Template:Page_Template_Functions_Shortcuts&amp;diff=776"/>
				<updated>2009-04-28T18:38:51Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: added google and jellyfish tracking functions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table align=right style=&amp;quot;background-color: #DDDDDD;&amp;quot; cellpadding=0 cellspacing=0 border=0&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
{{Page Template Managers Shortcuts}}&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
[[Page Templates:Functions|Page Template Functions]]&lt;br /&gt;
*[[functions:addressCountryOptions|addressCountryOptions]]&lt;br /&gt;
*[[functions:addressCountryNameGet|addressCountryNameGet]]&lt;br /&gt;
*[[functions:addressStateOptions|addressStateOptions]]&lt;br /&gt;
*[[functions:addressZipDetailsGet|addressZipDetailsGet]]&lt;br /&gt;
*[[functions:authorizeIsLoggedIn|authorizeIsLoggedIn]]&lt;br /&gt;
*[[functions:authorizeIsLoggedOut|authorizeIsLoggedOut]]&lt;br /&gt;
*[[functions:captchaCheck|captchaCheck]]&lt;br /&gt;
*[[functions:catalogProductsGet|catalogProductsGet]]&lt;br /&gt;
*[[functions:continueShoppingGet|continueShoppingGet]]&lt;br /&gt;
*[[functions:continueShoppingSet|continueShopppingSet]]&lt;br /&gt;
*[[functions:dollarFormat|dollarFormat]]&lt;br /&gt;
*[[functions:fullyQualifyAllURLs|fullyQualifyAllURLs]]&lt;br /&gt;
*[[functions:googleTrack]googleTrack]&lt;br /&gt;
*[[functions:googleTrack]googleTrackTrans]&lt;br /&gt;
*[[functions:ipBlockCheck|ipBlockCheck]]&lt;br /&gt;
*[[functions:itemLayout_dataString2Array|itemLayout_dataString2Array]]&lt;br /&gt;
*[[functions:jellyfishOutput|jellyfishOutput]&lt;br /&gt;
*[[functions:mysqlquery2array|mysqlquery2array]]&lt;br /&gt;
*[[functions:orderExpDateOptions|orderExpDateOptions]]&lt;br /&gt;
*[[functions:orderGetCompleteArray|orderGetCompleteArray]]&lt;br /&gt;
*[[functions:orderGetEmail|orderGetEmail]]&lt;br /&gt;
*[[functions:orderGetFirstName|orderGetFirstName]]&lt;br /&gt;
*[[functions:orderGetIdFromNumber|orderGetIdFromNumber]]&lt;br /&gt;
*[[functions:orderGetPayTypes|orderGetPayTypes]]&lt;br /&gt;
*[[functions:orderGetShipArray|orderGetShipArray]]&lt;br /&gt;
*[[functions:orderGetSummary|orderGetSummary]]&lt;br /&gt;
*[[functions:ordersGetList|ordersGetList]]&lt;br /&gt;
*[[functions:orderPayTypeOptions|orderPayTypeOptions]]&lt;br /&gt;
*[[functions:orderShipFedexRate|orderShipFedexRate]]&lt;br /&gt;
*[[functions:orderShipAdjustRate|orderShipAdjustRate]]&lt;br /&gt;
*[[functions:pageBreadcrumbsFamilyGet|pageBreadcrumbsFamilyGet]]&lt;br /&gt;
*[[functions:pageBreadcrumbsHistoryGet|pageBreadcrumbsHistoryGet]]&lt;br /&gt;
*[[functions:pageChildrenGet|pageChildrenGet]]&lt;br /&gt;
*[[functions:pageContentAttribSet|pageContentAttribSet]]&lt;br /&gt;
*[[functions:pageContentAttribsSet|pageContentAttribsSet]]&lt;br /&gt;
*[[functions:pageContentAttribStart/pageContentAttribEnd|pageContentAttribStart]]&lt;br /&gt;
*[[functions:pageContentAttribStart/pageContentAttribEnd|pageContentAttribEnd]]&lt;br /&gt;
*[[functions:pageCustomSearchGroup|pageCustomSearchGroup]]&lt;br /&gt;
*[[functions:pageForumPostsGet|pageForumPostsGet]]&lt;br /&gt;
*[[functions:pageGet|pageGet]]&lt;br /&gt;
*[[functions:pageGetHomeId|pageGetHomeId]]&lt;br /&gt;
*[[functions:pageMenuGet|pageMenuGet]]&lt;br /&gt;
*[[functions:pagePollQuestionsGet|pagePollQuestionsGet]]&lt;br /&gt;
*[[functions:pagePollResultsGet|pagePollResultsGet]]&lt;br /&gt;
*[[functions:pageProductsGet|pageProductsGet]]&lt;br /&gt;
*[[functions:pageSearchGet|pageSearchGet]]&lt;br /&gt;
*[[functions:pageZoneGet|pageZoneGet]]&lt;br /&gt;
*[[functions:pagination|pagination]]&lt;br /&gt;
*[[functions:phpObjToJS|phpObjToJS]]&lt;br /&gt;
*[[functions:prodArrayToJS|prodArrayToJS]]&lt;br /&gt;
*[[functions:prodOptionString2Array|prodOptionString2Array]]&lt;br /&gt;
*[[functions:recentlyViewedAdd|recentlyViewedAdd]]&lt;br /&gt;
*[[functions:recentlyViewedGet|recentlyViewedGet]]&lt;br /&gt;
*[[functions:redirect|redirect]]&lt;br /&gt;
*[[functions:TEMConversionTag|TEMConversionTag]]&lt;br /&gt;
*[[functions:userAccountAndAddressCreate|userAccountAndAddressCreate]]&lt;br /&gt;
*[[functions:userAccountEdit|userAccountEdit]]&lt;br /&gt;
*[[functions:userAddressAddEdit|userAddressAddEdit]]&lt;br /&gt;
*[[functions:userBlogEntriesGet|userBlogEntriesGet]]&lt;br /&gt;
*[[functions:userBlogEntryAddEdit|userBlogEntryAddEdit]]&lt;br /&gt;
*[[functions:userBlogSetup|userBlogSetup]]&lt;br /&gt;
*[[functions:userFriendsGet|userFriendsGet]]&lt;br /&gt;
*[[functions:userGetAddresses|userGetAddresses]]&lt;br /&gt;
*[[functions:userWishListGet|userWishListGet]]&lt;br /&gt;
*[[functions:usersAmbassadorGet|usersAmbassadorGet]]&lt;br /&gt;
*[[functions:usersGet|usersGet]]&lt;br /&gt;
*[[functions:valueArrayFromQuery|valueArrayFromQuery]]&lt;br /&gt;
*[[functions:verifyEmail|verifyEmail]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Page_Templates:Functions&amp;diff=775</id>
		<title>Page Templates:Functions</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Page_Templates:Functions&amp;diff=775"/>
				<updated>2009-04-28T18:37:18Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: added google, tem and jellyfish tracking tags&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Page Template Functions Shortcuts}}&lt;br /&gt;
A series of custom functions are created to allow content management to easily access content they require to build the copy in templates:&lt;br /&gt;
&lt;br /&gt;
;Quick Output of Options Tags for common select boxes&lt;br /&gt;
*[[functions:addressStateOptions|addressStateOptions]] - returns string of option tags for states&lt;br /&gt;
*[[functions:addressCountryOptions|addressCountryOptions]] - returns string of option tags for countries&lt;br /&gt;
*[[functions:orderExpDateOptions|orderExpDateOptions]] - returns string of option tags for expiration dates of a credit card&lt;br /&gt;
*[[functions:orderPayTypeOptions|orderPayTypeOptions]] - returns string of option tags for pay types&lt;br /&gt;
&lt;br /&gt;
;Set Variables that Content Managers can use in the WYSIWYG copy editor&lt;br /&gt;
*[[functions:pageContentAttribSet|pageContentAttribSet]] - sets a single variable that can be used by content managers in the page manager form (including the WYSIWYG editor)&lt;br /&gt;
*[[functions:pageContentAttribStart/pageContentAttribEnd|pageContentAttribStart/pageContentAttribEnd]] - wrapper that the contents of which is set as a single variable that can be used by content managers in the page manager form&lt;br /&gt;
&lt;br /&gt;
;Retrieve Page Content to Build Pages&lt;br /&gt;
*[[functions:pageMenuGet|pageMenuGet]] - returns menu item data&lt;br /&gt;
*[[functions:pageChildrenGet|pageChildrenGet]] - returns page data for children of a specific page&lt;br /&gt;
*[[functions:pageSearchGet|pageSearchGet]] - returns page data for pages qualifying for a keyword search&lt;br /&gt;
*[[functions:pageZoneGet|pageZoneGet]] - returns code to display an banner ad zone&lt;br /&gt;
*[[functions:pageForumPostsGet|pageForumPostsGet]] - returns forum post data for posts submitted to a particular forum page&lt;br /&gt;
*[[functions:pageGet|pageGet]] - return specific information about a specific page&lt;br /&gt;
*[[functions:pagePollQuestionsGet|pagePollQuestionsGet]] - returns question and answer data for building a poll&lt;br /&gt;
*[[functions:pagePollResultsGet|pagePollResultsGet]] - returns poll submission data for building a report of poll results&lt;br /&gt;
*[[functions:pageBreadcrumbsFamilyGet|pageBreadcrumbsFamilyGet(]] - returns breadcrumb data by traversing parent pages&lt;br /&gt;
*[[functions:pageBreadcrumbsHistoryGet|pageBreadcrumbsHistoryGet]] - returns breadcrumb data by traversing linear browsing history&lt;br /&gt;
*[[functions:pageProductsGet|pageProductsGet]] - returns product data for products related to a specific page&lt;br /&gt;
*[[functions:catalogProductsGet|catalogProductsGet]] - returns product data by catalog number&lt;br /&gt;
*[[functions:recentlyViewedGet|recentlyViewedGet]] - returns data for recently viewed pages&lt;br /&gt;
*[[functions:continueShoppingGet|continueShoppingGet]] - returns data for recently viewed pages&lt;br /&gt;
*[[functions:pageCustomSearchGroup|pageCustomSearchGroup]] - returns Custom Search Group data used to build a custom search widget&lt;br /&gt;
*[[functions:prodArrayToJS|prodArrayToJS]] - creates a string of pricing data that can be assigned to a javascript object to calculate pricing on the fly (ajax)&lt;br /&gt;
&lt;br /&gt;
;Manage Copy&lt;br /&gt;
*[[functions:fullyQualifyAllURLs|fullyQualifyAllURLs]] - converts any relative/absolute URL in the passed copy to fully qualified URLs - useful when sending copy as an email&lt;br /&gt;
&lt;br /&gt;
;Manage Large Lists of Data&lt;br /&gt;
*[[functions:pagination|pagination]] - easy to use tool to paginate large sets of data. Use for managing page children, search results and more&lt;br /&gt;
&lt;br /&gt;
;Retrieve Order information for perpetual and full shopping carts, checkout stages, order history&lt;br /&gt;
*[[functions:orderGetSummary|orderGetSummary]] - returns summerized order information. Useful for perpetual carts.&lt;br /&gt;
*[[functions:orderGetPayTypes|orderGetPayTypes]] - returns data relating to active paytypes in the system &lt;br /&gt;
*[[functions:userGetAddresses|userGetAddresses]] - returns data for all addresses belonging to a specific user&lt;br /&gt;
*[[functions:orderGetShipArray|orderGetShipArray]] - returns array of shipping options and costs&lt;br /&gt;
*[[functions:orderGetCompleteArray|orderGetCompleteArray]] - returns  full order information including payment, item, address, etc. Use for shopping carts, order summaries and receipts of orders.&lt;br /&gt;
*[[functions:ordersGetList|ordersGetList]] - returns listing of orders for a particular user (useful for building order history pages)&lt;br /&gt;
&lt;br /&gt;
;Integrate With 3rd Party Web Tools&lt;br /&gt;
*[[functions:googleTrack]googleTrack] - Google Analytics Integration&lt;br /&gt;
*[[functions:googleTrack]googleTrackTrans] - Google eCommerce Conversion Tracking&lt;br /&gt;
*[[functions:TEMConversionTag]TEMConversionTag] - Trigger Email Marketing Conversion Tracking&lt;br /&gt;
*[[functions:jellyfishOutput|jellyfishOutput] - Jellyfish Order Conversion Tracking&lt;br /&gt;
&lt;br /&gt;
;Retrieve User Content to Build Community (Web 2.0) Pages&lt;br /&gt;
*[[functions:usersGet|usersGet]] - retrieve user data from a list of user ids&lt;br /&gt;
*[[functions:userBlogEntriesGet|userBlogEntriesGet]] - retrieve blog entry data belonging to a specific user&lt;br /&gt;
*[[functions:userFriendsGet|userFriendsGet]] - retrieves data for users in a specific user's 'friend list'&lt;br /&gt;
*[[functions:userWishListGet|userWishListGet]] - retrieves product data for products in a specific user's wish list&lt;br /&gt;
*[[functions:usersAmbassadorGet|usersAmbassadorGet]] - retrieves user data for users that are classified as 'ambassadors'&lt;br /&gt;
&lt;br /&gt;
;Set Tracking Functions&lt;br /&gt;
*[[functions:recentlyViewedAdd|recentlyViewedAdd]] - registers a page to the recently viewed history when viewed&lt;br /&gt;
&lt;br /&gt;
;User Management Functions&lt;br /&gt;
*[[functions:userAccountEdit|userAccountEdit]] - manages user account information&lt;br /&gt;
*[[functions:userAccountAndAddressCreate|userAccountAndAddressCreate]] - create a user account (or both a user account and address)&lt;br /&gt;
*[[functions:userAddressAddEdit|userAddressAddEdit]] - manages user addresses&lt;br /&gt;
*[[functions:userBlogEntryAddEdit|userBlogEntryAddEdit]] - managers user blog entries&lt;br /&gt;
*[[functions:userBlogSetup|userBlogSetup]] - sets up a user with a blog&lt;br /&gt;
*[[functions:authorizeIsLoggedOut|authorizeIsLoggedOut]] - to check if a user is logged out&lt;br /&gt;
*[[functions:authorizeIsLoggedIn|authorizeIsLoggedIn]] - to check if a user is logged in&lt;br /&gt;
&lt;br /&gt;
;Retrieve additional information from address data&lt;br /&gt;
*[[functions:addressCountryNameGet|addressCountryNameGet]] - returns full country name from ISO 2 digit format&lt;br /&gt;
*[[functions:addressZipDetailsGet|addressZipDetailsGet]] - returns data about zip including: city,state,areaCode,county,timeZone,latitude,longitude,dayLightSavings&lt;br /&gt;
&lt;br /&gt;
;Security functions&lt;br /&gt;
*[[functions:captchaCheck|captchaCheck]] - validate a captcha image to ensure we don't have automated form submissions&lt;br /&gt;
*[[functions:ipBlockCheck|ipBlockCheck]] - checks if an IP is registered to the block list&lt;br /&gt;
&lt;br /&gt;
;Shortcut Functions that just plain make your job easier&lt;br /&gt;
*[[functions:redirect|redirect]] - redirects visitors to another page&lt;br /&gt;
*[[functions:valueArrayFromQuery|valueArrayFromQuery]] - returns a single dimension array of values based on the contents of a specific column in all records of a query&lt;br /&gt;
*[[functions:dollarFormat|dollarFormat]] - converts a decimal to a dollar value with preceding $ sign.&lt;br /&gt;
*[[functions:validateEmail|validateEmail]] - checks to make sure an email address is well formatted.&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Pages:Custom_Forms&amp;diff=774</id>
		<title>Pages:Custom Forms</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Pages:Custom_Forms&amp;diff=774"/>
				<updated>2009-04-28T14:53:16Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Custom forms allow page content managers to create forms on the fly in the WYSIWYG editor. A knowledge of HTML form coding is required to do this. When a custom form is submitted by a website visitor, it is emailed to specified recipients (using the emailTo field below) AND it is placed into the database accessible via [[Form Submissions]] in system administration.&lt;br /&gt;
&lt;br /&gt;
Each form has required hidden fields, core fields and custom fields:&lt;br /&gt;
&lt;br /&gt;
===REQUIRED HIDDEN FIELDS===&lt;br /&gt;
Required hidden fields send data to the system that tells it how to process the form. The required hidden fields are as follows:&lt;br /&gt;
;fa: This field should ALWAYS have a value of &amp;quot;USER.formSubmit&amp;quot; - which tells the system this is a custom form that needs to be processed.&lt;br /&gt;
;formType: This field's value is used to classify and organize the form submissions made through this form. For instance, enter &amp;quot;newsletter&amp;quot; as the value if this form is being used to register for the newsletter; or enter &amp;quot;catalog request&amp;quot; as the value if this is a catalog request form. This value can later be used when looking up the form in [[Form Submissions]] so you can filter only certain forms.&lt;br /&gt;
;emailTo: A comma delimited list of email addresses that will receive this form's contents upon submission. Use to send yourself and others notifications of these forms as they are submitted. Leave empty if there are no recipients.&lt;br /&gt;
;redirect: The URL where the visitor should be directed to following submission of the form. For each custom form it is recommended you create an accompanying page that will display a thank you or confirmation message. This page should be where the visitor is directed to using the 'redirect' field following form submission.&lt;br /&gt;
;otherFields: A comma delimited list of custom field names. Leave empty if no custom fields are being used.&lt;br /&gt;
&lt;br /&gt;
===OPTIONAL HIDDEN FIELDS===&lt;br /&gt;
;fieldValidations:  Use to require certain fields. Comma delimited list of required fields, commands and messages. Example: &amp;quot;firstName/min:1:Must enter first name,zipCode/min:5:You must enter a 5 digit zip code,emailAddress/email:Must enter a valid email address&amp;quot; sets firstName to require min length 1 character, zipCode to require min length of 5 characters and emailAddress to be a valid email address.&lt;br /&gt;
&lt;br /&gt;
===CORE FIELDS===&lt;br /&gt;
Core fields are visitor-populated fields that can be used to organize and classify form submissions. The emailAddress field in particular is required if you wish to include the subscribe option (which allows visitors to subscribe to the newsletter when this form is submitted).&lt;br /&gt;
;firstName: A text field with a maxlength of 50&lt;br /&gt;
;lastName: A text field with a maxlength of 50&lt;br /&gt;
;emailAddress: A text field with a maxlength of 255&lt;br /&gt;
;subscribe: A checkbox with a value of 1 (if checked, this will pass and trigger the newsletter registration process for the entered emailAddress)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CUSTOM FIELDS===&lt;br /&gt;
Custom fields allow the content manager creating the form to add any number of additional form fields that will be stored upon submission. Note that form submissions cannot be searched or filtered by the contents of these fields, but they are present when looking up submitted forms and are listed in exports of form submissions (which are then sortable by the custom fields in Excel). Custom fields can have any name EXCEPT the reserved CORE and REQUIRED HIDDEN field names (fa,formType,emailTo,redirect,firstName,lastName,emailAddress,subscribe,otherFields). All custom field names MUST be entered into the hidden field &amp;quot;otherFields&amp;quot; (see REQUIRED HIDDEN FIELDS above)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EXAMPLES===&lt;br /&gt;
Generic Example, with detailed explainations:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;HTML4strict&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- start our form --&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;index.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!------------------------&amp;gt;&lt;br /&gt;
&amp;lt;!--- HIDDEN FIELDS ----&amp;gt;&lt;br /&gt;
&amp;lt;!------------------------&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the formType field attached a 'category' to this form when submitted. &lt;br /&gt;
If you have multiple custom forms on your website, this helps to easily search, filter and group form submissions&lt;br /&gt;
ideas for this are: newsletter, catalog request, contact us, feedback... --&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;formType&amp;quot; value=&amp;quot;this form&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the emailTo field allows you to enter recipients of this forms contents&lt;br /&gt;
When the form is submitted, the contents will be sent to the email addresses in this field --&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;emailTo&amp;quot; value=&amp;quot;email@website.com,anotheremail@website.com&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the fa field tells the websiteto process this form on submission --&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;fa&amp;quot; value=&amp;quot;USER.formSubmit&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the redirect field tells the website where to put the visitor after the form has been procesed --&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;redirect&amp;quot; value=&amp;quot;index.php?pageId=123&amp;amp;message=Thank you for filling our our form&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the following otherFields field is REQUIRED if you have ANY custom fields&lt;br /&gt;
enter a comman delim list of the field names --&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;otherFields&amp;quot; value=&amp;quot;source,color,likeItalian&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!---------------------&amp;gt;&lt;br /&gt;
&amp;lt;!-- CORE FIELDS ------&amp;gt;&lt;br /&gt;
&amp;lt;!---------------------&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- first name, last name and email fields are CORE form fields&lt;br /&gt;
but are optional - you do not have to include these fields, but if you do,&lt;br /&gt;
make sure you use the correct names --&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;First Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;firstName&amp;quot; size=25 maxlength=50&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Last Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;lastName&amp;quot; size=25 maxlength=50&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Email Address: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;emailAddress&amp;quot; size=50 maxlength=255&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the subscribe field is another CORE field that is optional.&lt;br /&gt;
If it is used and checked, than the newsletter subscription process&lt;br /&gt;
will be triggered for the passed emailAddress upon form submission --&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Check here to subscribe to our newsletter: &amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;subscribe&amp;quot; value=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!---------------------&amp;gt;&lt;br /&gt;
&amp;lt;!-- CUSTOM FIELDS ------&amp;gt;&lt;br /&gt;
&amp;lt;!---------------------&amp;gt;&lt;br /&gt;
&amp;lt;!-- any number of custom fields can be created&lt;br /&gt;
each can have any name as long is not one of the above hidden or core field names&lt;br /&gt;
make sure to populate the otherFields field with the names of your custom fields&lt;br /&gt;
or they will not work --&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;How did you find out about us? &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;source&amp;quot; size=50 maxlength=100 /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;What is your favorite color?&lt;br /&gt;
&amp;lt;select name=&amp;quot;color&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;option&amp;gt;Red&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option&amp;gt;Blue&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option&amp;gt;Green&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;/select&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;Do you like italian food? &lt;br /&gt;
YES&amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;likeItalian&amp;quot; value=&amp;quot;1&amp;quot; /&amp;gt; &lt;br /&gt;
NO&amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;likeItalian&amp;quot; value=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- be sure all your custom field names are entered into the &amp;quot;otherFields&amp;quot; field&lt;br /&gt;
see above REQUIRED HIDDEN FIELDS for details --&amp;gt;&lt;br /&gt;
&amp;lt;!--- DONE WITH CUSTOM FIELDS ----&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- just your plain run of the mill submit button - nothing special --&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;SUBMIT&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- close out the form --&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Newsletter Sign Up Form Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;HTML4strict&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;form action=&amp;quot;index.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;formType&amp;quot; value=&amp;quot;newsletter&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;emailTo&amp;quot; value=&amp;quot;newsletters@mywebsite.com&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;fa&amp;quot; value=&amp;quot;USER.formSubmit&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;redirect&amp;quot; value=&amp;quot;index.php?pageId=123&amp;amp;message=Thank you for registering for our newsletter&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- no custom fields in this example, but you are free to add if you need them! --&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;otherFields&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Register for our newsletter!&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;First Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;firstName&amp;quot; size=25 maxlength=50&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Last Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;lastName&amp;quot; size=25 maxlength=50&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Email Address: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;emailAddress&amp;quot; size=50 maxlength=255&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- notice the subscribe field is hidden here, &lt;br /&gt;
since it is assumed they want to subscribe&lt;br /&gt;
otherwise they would not be submitting this form --&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;subscribe&amp;quot; value=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;SUBSCRIBE!&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Catalog Request Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;HTML4strict&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;form action=&amp;quot;index.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;formType&amp;quot; value=&amp;quot;catalog request&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;emailTo&amp;quot; value=&amp;quot;catalogrequests@mywebsite.com&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;fa&amp;quot; value=&amp;quot;USER.formSubmit&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;redirect&amp;quot; value=&amp;quot;index.php?pageId=456&amp;amp;message=You will receive a copy of our catalog shortly&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- a shipping form will contain custom fields here --&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;otherFields&amp;quot; value=&amp;quot;street1,street2,city,state,zipCode&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Order a Catalog&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;First Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;firstName&amp;quot; size=25 maxlength=50&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Last Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;lastName&amp;quot; size=25 maxlength=50&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Email Address: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;emailAddress&amp;quot; size=50 maxlength=255&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;I would like to receive occassional emails about specials and what-not: &amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;subscribe&amp;quot; value=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the following custom fields are used to make a shipping form --&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Address: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;street1&amp;quot; size=50&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Address Line 2: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;street2&amp;quot; size=50&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;City: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;city&amp;quot; size=50&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;State: &amp;lt;select name=&amp;quot;state&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;option&amp;gt;AK&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option&amp;gt;AL&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option&amp;gt;... more states here ...&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;/select&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Zip: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;zipCode&amp;quot; size=10&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;ORDER!&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Pages:Custom_Forms&amp;diff=773</id>
		<title>Pages:Custom Forms</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Pages:Custom_Forms&amp;diff=773"/>
				<updated>2009-04-28T14:52:34Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: addded fieldValidations&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Custom forms allow page content managers to create forms on the fly in the WYSIWYG editor. A knowledge of HTML form coding is required to do this. When a custom form is submitted by a website visitor, it is emailed to specified recipients (using the emailTo field below) AND it is placed into the database accessible via [[Form Submissions]] in system administration.&lt;br /&gt;
&lt;br /&gt;
Each form has required hidden fields, core fields and custom fields:&lt;br /&gt;
&lt;br /&gt;
===REQUIRED HIDDEN FIELDS===&lt;br /&gt;
Required hidden fields send data to the system that tells it how to process the form. The required hidden fields are as follows:&lt;br /&gt;
;fa: This field should ALWAYS have a value of &amp;quot;USER.formSubmit&amp;quot; - which tells the system this is a custom form that needs to be processed.&lt;br /&gt;
;formType: This field's value is used to classify and organize the form submissions made through this form. For instance, enter &amp;quot;newsletter&amp;quot; as the value if this form is being used to register for the newsletter; or enter &amp;quot;catalog request&amp;quot; as the value if this is a catalog request form. This value can later be used when looking up the form in [[Form Submissions]] so you can filter only certain forms.&lt;br /&gt;
;emailTo: A comma delimited list of email addresses that will receive this form's contents upon submission. Use to send yourself and others notifications of these forms as they are submitted. Leave empty if there are no recipients.&lt;br /&gt;
;redirect: The URL where the visitor should be directed to following submission of the form. For each custom form it is recommended you create an accompanying page that will display a thank you or confirmation message. This page should be where the visitor is directed to using the 'redirect' field following form submission.&lt;br /&gt;
;otherFields: A comma delimited list of custom field names. Leave empty if no custom fields are being used.&lt;br /&gt;
;fieldValidations:  Use to require certain fields. Comma delimited list of required fields, commands and messages. Example: &amp;quot;firstName/min:1:Must enter first name,zipCode/min:5:You must enter a 5 digit zip code,emailAddress/email:Must enter a valid email address&amp;quot; sets firstName to require min length 1 character, zipCode to require min length of 5 characters and emailAddress to be a valid email address.&lt;br /&gt;
&lt;br /&gt;
===CORE FIELDS===&lt;br /&gt;
Core fields are visitor-populated fields that can be used to organize and classify form submissions. The emailAddress field in particular is required if you wish to include the subscribe option (which allows visitors to subscribe to the newsletter when this form is submitted).&lt;br /&gt;
;firstName: A text field with a maxlength of 50&lt;br /&gt;
;lastName: A text field with a maxlength of 50&lt;br /&gt;
;emailAddress: A text field with a maxlength of 255&lt;br /&gt;
;subscribe: A checkbox with a value of 1 (if checked, this will pass and trigger the newsletter registration process for the entered emailAddress)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CUSTOM FIELDS===&lt;br /&gt;
Custom fields allow the content manager creating the form to add any number of additional form fields that will be stored upon submission. Note that form submissions cannot be searched or filtered by the contents of these fields, but they are present when looking up submitted forms and are listed in exports of form submissions (which are then sortable by the custom fields in Excel). Custom fields can have any name EXCEPT the reserved CORE and REQUIRED HIDDEN field names (fa,formType,emailTo,redirect,firstName,lastName,emailAddress,subscribe,otherFields). All custom field names MUST be entered into the hidden field &amp;quot;otherFields&amp;quot; (see REQUIRED HIDDEN FIELDS above)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EXAMPLES===&lt;br /&gt;
Generic Example, with detailed explainations:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;HTML4strict&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- start our form --&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;index.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!------------------------&amp;gt;&lt;br /&gt;
&amp;lt;!--- HIDDEN FIELDS ----&amp;gt;&lt;br /&gt;
&amp;lt;!------------------------&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the formType field attached a 'category' to this form when submitted. &lt;br /&gt;
If you have multiple custom forms on your website, this helps to easily search, filter and group form submissions&lt;br /&gt;
ideas for this are: newsletter, catalog request, contact us, feedback... --&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;formType&amp;quot; value=&amp;quot;this form&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the emailTo field allows you to enter recipients of this forms contents&lt;br /&gt;
When the form is submitted, the contents will be sent to the email addresses in this field --&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;emailTo&amp;quot; value=&amp;quot;email@website.com,anotheremail@website.com&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the fa field tells the websiteto process this form on submission --&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;fa&amp;quot; value=&amp;quot;USER.formSubmit&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the redirect field tells the website where to put the visitor after the form has been procesed --&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;redirect&amp;quot; value=&amp;quot;index.php?pageId=123&amp;amp;message=Thank you for filling our our form&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the following otherFields field is REQUIRED if you have ANY custom fields&lt;br /&gt;
enter a comman delim list of the field names --&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;otherFields&amp;quot; value=&amp;quot;source,color,likeItalian&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!---------------------&amp;gt;&lt;br /&gt;
&amp;lt;!-- CORE FIELDS ------&amp;gt;&lt;br /&gt;
&amp;lt;!---------------------&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- first name, last name and email fields are CORE form fields&lt;br /&gt;
but are optional - you do not have to include these fields, but if you do,&lt;br /&gt;
make sure you use the correct names --&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;First Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;firstName&amp;quot; size=25 maxlength=50&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Last Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;lastName&amp;quot; size=25 maxlength=50&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Email Address: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;emailAddress&amp;quot; size=50 maxlength=255&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the subscribe field is another CORE field that is optional.&lt;br /&gt;
If it is used and checked, than the newsletter subscription process&lt;br /&gt;
will be triggered for the passed emailAddress upon form submission --&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Check here to subscribe to our newsletter: &amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;subscribe&amp;quot; value=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!---------------------&amp;gt;&lt;br /&gt;
&amp;lt;!-- CUSTOM FIELDS ------&amp;gt;&lt;br /&gt;
&amp;lt;!---------------------&amp;gt;&lt;br /&gt;
&amp;lt;!-- any number of custom fields can be created&lt;br /&gt;
each can have any name as long is not one of the above hidden or core field names&lt;br /&gt;
make sure to populate the otherFields field with the names of your custom fields&lt;br /&gt;
or they will not work --&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;How did you find out about us? &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;source&amp;quot; size=50 maxlength=100 /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;What is your favorite color?&lt;br /&gt;
&amp;lt;select name=&amp;quot;color&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;option&amp;gt;Red&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option&amp;gt;Blue&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option&amp;gt;Green&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;/select&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;Do you like italian food? &lt;br /&gt;
YES&amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;likeItalian&amp;quot; value=&amp;quot;1&amp;quot; /&amp;gt; &lt;br /&gt;
NO&amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;likeItalian&amp;quot; value=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- be sure all your custom field names are entered into the &amp;quot;otherFields&amp;quot; field&lt;br /&gt;
see above REQUIRED HIDDEN FIELDS for details --&amp;gt;&lt;br /&gt;
&amp;lt;!--- DONE WITH CUSTOM FIELDS ----&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- just your plain run of the mill submit button - nothing special --&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;SUBMIT&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- close out the form --&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Newsletter Sign Up Form Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;HTML4strict&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;form action=&amp;quot;index.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;formType&amp;quot; value=&amp;quot;newsletter&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;emailTo&amp;quot; value=&amp;quot;newsletters@mywebsite.com&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;fa&amp;quot; value=&amp;quot;USER.formSubmit&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;redirect&amp;quot; value=&amp;quot;index.php?pageId=123&amp;amp;message=Thank you for registering for our newsletter&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- no custom fields in this example, but you are free to add if you need them! --&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;otherFields&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Register for our newsletter!&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;First Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;firstName&amp;quot; size=25 maxlength=50&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Last Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;lastName&amp;quot; size=25 maxlength=50&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Email Address: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;emailAddress&amp;quot; size=50 maxlength=255&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- notice the subscribe field is hidden here, &lt;br /&gt;
since it is assumed they want to subscribe&lt;br /&gt;
otherwise they would not be submitting this form --&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;subscribe&amp;quot; value=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;SUBSCRIBE!&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Catalog Request Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;HTML4strict&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;form action=&amp;quot;index.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;formType&amp;quot; value=&amp;quot;catalog request&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;emailTo&amp;quot; value=&amp;quot;catalogrequests@mywebsite.com&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;fa&amp;quot; value=&amp;quot;USER.formSubmit&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;redirect&amp;quot; value=&amp;quot;index.php?pageId=456&amp;amp;message=You will receive a copy of our catalog shortly&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- a shipping form will contain custom fields here --&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;otherFields&amp;quot; value=&amp;quot;street1,street2,city,state,zipCode&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Order a Catalog&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;First Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;firstName&amp;quot; size=25 maxlength=50&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Last Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;lastName&amp;quot; size=25 maxlength=50&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Email Address: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;emailAddress&amp;quot; size=50 maxlength=255&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;I would like to receive occassional emails about specials and what-not: &amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;subscribe&amp;quot; value=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the following custom fields are used to make a shipping form --&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Address: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;street1&amp;quot; size=50&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Address Line 2: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;street2&amp;quot; size=50&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;City: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;city&amp;quot; size=50&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;State: &amp;lt;select name=&amp;quot;state&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;option&amp;gt;AK&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option&amp;gt;AL&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option&amp;gt;... more states here ...&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;/select&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Zip: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;zipCode&amp;quot; size=10&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;ORDER!&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Upgrade_Requests_/_Bugs&amp;diff=752</id>
		<title>Upgrade Requests / Bugs</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Upgrade_Requests_/_Bugs&amp;diff=752"/>
				<updated>2009-04-22T16:54:33Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Additional field to shared option groups - so it can have a name that is not the same as it's displayed title.&lt;br /&gt;
*Increments for products (visitor must buy in allotted increment)&lt;br /&gt;
*Coupon Memory - have the system remember coupon codes entered that where not qualified for, automatically apply coupon as soon as cart qualifies.&lt;br /&gt;
*Checkbox to discounts that allow an item to ignore the ‘only 1 discount per cart’ command.&lt;br /&gt;
*Text field in discounts for non-qualifying codes that will go into queue, when application is attempted.&lt;br /&gt;
*Banner Zones controlled by url data passed (tell a zone to display a specific banner), command expires after order is complete&lt;br /&gt;
*Banner repository queue to hold attempted, but unqualified, discount codes, attempt to re-apply with each cart modification.&lt;br /&gt;
*Tiered discounts for BOTH % and $ off.&lt;br /&gt;
*Checkout modifications to support non-pay accounts, po numbers.&lt;br /&gt;
*Cart check function, checks all items, shipping, discounts in cart to make sure they all still qualify, if any do not, remove and display message to visitor.&lt;br /&gt;
*Order management to allow product option changes.&lt;br /&gt;
*Auto deletion of expired data including: incomplete carts, searches, send2friend, banner tracking, campaign tracking, page views, user sessions.&lt;br /&gt;
*Export/Import templates (to duplicate BETWEEN sites)&lt;br /&gt;
*Audit all queries to confirm 'best practices' used with strings - see referencePHP&lt;br /&gt;
*Add items to cart right on product page (AJAX solution)&lt;br /&gt;
*Persistent right column cart throughout checkout&lt;br /&gt;
*Confirmation &amp;quot;Thank You&amp;quot; page should have cross-sell that can be &amp;quot;added to your order automatically&amp;quot;  and possibly allow the items to be added without any additional shipping charges.&lt;br /&gt;
*Banner management should be reworked.  Chris Ziter writing up details.&lt;br /&gt;
*Print all option for groups of invoices in order management&lt;br /&gt;
*Duplicate function in discounts&lt;br /&gt;
*Search ability in discounts&lt;br /&gt;
*Category application to discounts&lt;br /&gt;
*Delete campaigns in banner management&lt;br /&gt;
*dBug wrapper to ALL functions.&lt;br /&gt;
*All site email to use scheduled queue mechanism. Set up email to be send via smtp server designated in Settings.&lt;br /&gt;
*Zero return keyword searches&lt;br /&gt;
*Keyword search funnel report&lt;br /&gt;
*Page view (product ,category, product line) funnel report by template&lt;br /&gt;
&lt;br /&gt;
;Completed:&lt;br /&gt;
*2/5/2009: Free item alterations, store items as $0, pass controls that allow design changes for these items when presented in cart, etc.&lt;br /&gt;
*2/9/2009: When a visitor enters an email/name to register for the newsletter, and the billing/shipping addresses are blank, attach the email/name to the billing/shipping addresses in the order.&lt;br /&gt;
*2/13/2008: Reliable exit pop up&lt;br /&gt;
*2/16/2008: TEM channelId control for the order process (abandoned cart) manageable through admin console.&lt;br /&gt;
*2/18/2008: TEM custom image generation field set up&lt;br /&gt;
&lt;br /&gt;
;In Progress:&lt;br /&gt;
*Catalog quick order&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Attn:_Template_Integrators&amp;diff=744</id>
		<title>Attn: Template Integrators</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Attn:_Template_Integrators&amp;diff=744"/>
				<updated>2009-04-21T12:55:31Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: added lost password process check&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Before Site Development=&lt;br /&gt;
&lt;br /&gt;
==Site Configuration==&lt;br /&gt;
Set up for proper shipping method. Adjust cart accordingly (don't need zip code entry if using level shipping, don't need shipping selection if only one shipping method is available).&lt;br /&gt;
&lt;br /&gt;
==Testing Criteria==&lt;br /&gt;
Generate testing criteria with the client, these will be your measurements of success. Testing criteria will start with the new site checklist below - augment this list with custom functions and templates built for the client. Create at least one testing scenario for each custom function / template possible conditions. If the function / template is to effect other site areas (cart, checkout, orders, importing / exporting) be sure to include a process flow test to ensure those other functions are impacted correctly.&lt;br /&gt;
&lt;br /&gt;
==During Site Development==&lt;br /&gt;
===For ANY deviations made from the designs===&lt;br /&gt;
*Email the client, verify response&lt;br /&gt;
*Note in the code when / how the client was notified of the change.&lt;br /&gt;
&lt;br /&gt;
=After Site Completion=&lt;br /&gt;
&lt;br /&gt;
==New Site Checklist==&lt;br /&gt;
&lt;br /&gt;
===Templates Adjusted to Match Config Settings===&lt;br /&gt;
*Shopping cart shipping only shows zip code if using Fedex shipping&lt;br /&gt;
*Shopping cart shipping only has option box if more than one shipping method is available&lt;br /&gt;
&lt;br /&gt;
===Address Collection Form Homogeneity===&lt;br /&gt;
''Address forms should all have same fields AND validation rules, also that all pages that display addresses include all these fields''&lt;br /&gt;
*Create account (if address is included)&lt;br /&gt;
*Address book&lt;br /&gt;
*Checkout Billing&lt;br /&gt;
*Checkout Shipping&lt;br /&gt;
*Order Confirmation&lt;br /&gt;
*Viewable / Printable Invoice&lt;br /&gt;
*Emailed Invoice&lt;br /&gt;
&lt;br /&gt;
===Page Accessibility Conditions are Enforced===&lt;br /&gt;
;cannot view while logged OUT:&lt;br /&gt;
:*Your Account&lt;br /&gt;
:*Edit Account&lt;br /&gt;
:*Address Book&lt;br /&gt;
:*Order History&lt;br /&gt;
;cannot view while logged IN:&lt;br /&gt;
:*Welcome (checkout registration)&lt;br /&gt;
:*Create Account&lt;br /&gt;
:*Lost Password&lt;br /&gt;
&lt;br /&gt;
===Settings Completed===&lt;br /&gt;
;All Email Content Entered:&lt;br /&gt;
:*Page Management &amp;gt; Send 2 Friend Email Subject and Body&lt;br /&gt;
:*Campaign &amp;gt; Registration Email, Subject and Body (OR a page is built in page management and the &amp;quot;Registration Email Page ID&amp;quot; is pointing to that page)&lt;br /&gt;
:*Ecommerce &amp;gt; Invoice Header, Footer, Subject and Emails (OR a page is built in page management and the &amp;quot;Checkout (Confirmation) Email Page ID&amp;quot; is pointing to that page)&lt;br /&gt;
:*Users &amp;gt; Lost password header, footer, email, subject&lt;br /&gt;
;All Forwards Are Completed (and Pages for which are created):&lt;br /&gt;
:*Page Management &amp;gt; Search Page Id; 404 (not found) Page Id&lt;br /&gt;
:*Campaigns &amp;gt; Opt In / Out Success / Failure Urls&lt;br /&gt;
:*Ecommerce &amp;gt; Cart and Checkout Process Page Ids (all a required except &amp;quot;Checkout (Confirmation) Email Page ID&amp;quot;)&lt;br /&gt;
:*Users &amp;gt; Fail Access Authorization URL; Login Successfully URL; Fail Attempted Login URL; Logout URL; Password Expired Link; Create Account Link; Edit Account Link&lt;br /&gt;
&lt;br /&gt;
===Template Links Tested===&lt;br /&gt;
''Click ALL links for a page for every template and verify they link to their target. If links appear / disappear or change based on different conditions (logged in, logged out, appear in a loop such as children, appear when cart has items or meets certain conditions, etc) be sure to test under each condition to ensure link operates correctly''&lt;br /&gt;
&lt;br /&gt;
===Process Flow Tested===&lt;br /&gt;
;Navigation Flow:&lt;br /&gt;
:*Start at a CNAV category &amp;gt; Category page &amp;gt; Product line page &amp;gt; product page&lt;br /&gt;
:*Enter Search Keywords &amp;gt; Search &amp;gt; Select a product&lt;br /&gt;
;Email Registration Flow:&lt;br /&gt;
:*Enter email into newsletter field &amp;gt; Newsletter registration page &amp;gt; registration complete page &amp;gt; check the email received&lt;br /&gt;
;Purchase Flow (after completing all orders, log into administration to check if order is displayed correct and complete):&lt;br /&gt;
:*WHILE LOGGED OUT: Add one product utilizing each product template built to the shopping cart &amp;gt; checkout registration (continue as guest) &amp;gt; billing address &amp;gt; shipping address &amp;gt; payment &amp;gt; confirmation / review &amp;gt; order complete &amp;gt; view the order &amp;gt; check the email received&lt;br /&gt;
:*WHILE LOGGED OUT: Add one product to the shopping cart &amp;gt; checkout registration (create account) &amp;gt; create account page &amp;gt; billing address &amp;gt; shipping address &amp;gt; payment &amp;gt; confirmation / review &amp;gt; order complete &amp;gt; view the order &amp;gt; check the email received&lt;br /&gt;
:*WHILE LOGGED OUT: Add one product to the shopping cart &amp;gt; checkout registration (log in) &amp;gt; billing address &amp;gt; shipping address &amp;gt; payment &amp;gt; confirmation / review &amp;gt; order complete &amp;gt; view the order &amp;gt; check the email received&lt;br /&gt;
:*WHILE LOGGED IN: Add one product to the shopping cart &amp;gt; (should skip checkout registration) &amp;gt; billing address &amp;gt; shipping address &amp;gt; payment &amp;gt; confirmation / review &amp;gt; order complete &amp;gt; view the order &amp;gt; check the email received&lt;br /&gt;
;Account Management: &lt;br /&gt;
:*WHILE LOGGED OUT: Select ALL &amp;quot;Your Account&amp;quot; links/buttons, verify they go to login form.&lt;br /&gt;
:*WHILE LOGGED OUT: Your Account &amp;gt; Create Account &amp;gt; Your Account Page&lt;br /&gt;
:*WHILE LOGGED OUT: Your Account &amp;gt; Log in &amp;gt; Your Account Page&lt;br /&gt;
:*WHILE LOGGED OUT: Your Account &amp;gt; Forgotten Password &amp;gt; Submit Incorrect Email &amp;gt; Verify Error Message&lt;br /&gt;
:*WHILE LOGGED OUT: Your Account &amp;gt; Forgotten Password &amp;gt; Submit Correct Email &amp;gt; Verify Following Page and Receipt of email with correct content&lt;br /&gt;
:*WHILE LOGGED IN: Select ALL &amp;quot;Your Account&amp;quot; links/buttons. Verify they all go to &amp;quot;Your Account Page&amp;quot;&lt;br /&gt;
:*Add one address, edit one address and delete one address from the address book&lt;br /&gt;
:*View an order through order history&lt;br /&gt;
:*Change your name and password in the edit account form&lt;br /&gt;
===Custom Forms Tested===&lt;br /&gt;
:*Enter samples into ALL custom forms built for the web site.&lt;br /&gt;
:*Verify each form has the 'form type' set to a unique value that will be easy for the client to use when looking up forms in the 'form submissions' area of administration.&lt;br /&gt;
:*Look up the submissions in the 'form submissions' area of administration, verify all the fields entered passed correctly.&lt;br /&gt;
:*Verify all email recipients specified in the custom form received the emails with the fields correctly filled out.&lt;br /&gt;
:*For each form, if newsletter subscription is used, submit the form TWICE (once subscribing, once not) and verify the subscription took by looking them up in the 'subscriptions' area of administration. Follow the newsletter registration process to completion, verify the process works as intended and all content during the course of :*the process is as the client wishes.&lt;br /&gt;
===Custom Development Tested===&lt;br /&gt;
Test all CUSTOM processes / templates / functions created for client as per the contract. Use testing criteria for evaluation.&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Attn:_Template_Integrators&amp;diff=743</id>
		<title>Attn: Template Integrators</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Attn:_Template_Integrators&amp;diff=743"/>
				<updated>2009-04-21T12:49:33Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: added all your account links/buttons procs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Before Site Development=&lt;br /&gt;
&lt;br /&gt;
==Site Configuration==&lt;br /&gt;
Set up for proper shipping method. Adjust cart accordingly (don't need zip code entry if using level shipping, don't need shipping selection if only one shipping method is available).&lt;br /&gt;
&lt;br /&gt;
==Testing Criteria==&lt;br /&gt;
Generate testing criteria with the client, these will be your measurements of success. Testing criteria will start with the new site checklist below - augment this list with custom functions and templates built for the client. Create at least one testing scenario for each custom function / template possible conditions. If the function / template is to effect other site areas (cart, checkout, orders, importing / exporting) be sure to include a process flow test to ensure those other functions are impacted correctly.&lt;br /&gt;
&lt;br /&gt;
==During Site Development==&lt;br /&gt;
===For ANY deviations made from the designs===&lt;br /&gt;
*Email the client, verify response&lt;br /&gt;
*Note in the code when / how the client was notified of the change.&lt;br /&gt;
&lt;br /&gt;
=After Site Completion=&lt;br /&gt;
&lt;br /&gt;
==New Site Checklist==&lt;br /&gt;
&lt;br /&gt;
===Templates Adjusted to Match Config Settings===&lt;br /&gt;
*Shopping cart shipping only shows zip code if using Fedex shipping&lt;br /&gt;
*Shopping cart shipping only has option box if more than one shipping method is available&lt;br /&gt;
&lt;br /&gt;
===Address Collection Form Homogeneity===&lt;br /&gt;
''Address forms should all have same fields AND validation rules, also that all pages that display addresses include all these fields''&lt;br /&gt;
*Create account (if address is included)&lt;br /&gt;
*Address book&lt;br /&gt;
*Checkout Billing&lt;br /&gt;
*Checkout Shipping&lt;br /&gt;
*Order Confirmation&lt;br /&gt;
*Viewable / Printable Invoice&lt;br /&gt;
*Emailed Invoice&lt;br /&gt;
&lt;br /&gt;
===Page Accessibility Conditions are Enforced===&lt;br /&gt;
;cannot view while logged OUT:&lt;br /&gt;
:*Your Account&lt;br /&gt;
:*Edit Account&lt;br /&gt;
:*Address Book&lt;br /&gt;
:*Order History&lt;br /&gt;
;cannot view while logged IN:&lt;br /&gt;
:*Welcome (checkout registration)&lt;br /&gt;
:*Create Account&lt;br /&gt;
:*Lost Password&lt;br /&gt;
&lt;br /&gt;
===Settings Completed===&lt;br /&gt;
;All Email Content Entered:&lt;br /&gt;
:*Page Management &amp;gt; Send 2 Friend Email Subject and Body&lt;br /&gt;
:*Campaign &amp;gt; Registration Email, Subject and Body (OR a page is built in page management and the &amp;quot;Registration Email Page ID&amp;quot; is pointing to that page)&lt;br /&gt;
:*Ecommerce &amp;gt; Invoice Header, Footer, Subject and Emails (OR a page is built in page management and the &amp;quot;Checkout (Confirmation) Email Page ID&amp;quot; is pointing to that page)&lt;br /&gt;
:*Users &amp;gt; Lost password header, footer, email, subject&lt;br /&gt;
;All Forwards Are Completed (and Pages for which are created):&lt;br /&gt;
:*Page Management &amp;gt; Search Page Id; 404 (not found) Page Id&lt;br /&gt;
:*Campaigns &amp;gt; Opt In / Out Success / Failure Urls&lt;br /&gt;
:*Ecommerce &amp;gt; Cart and Checkout Process Page Ids (all a required except &amp;quot;Checkout (Confirmation) Email Page ID&amp;quot;)&lt;br /&gt;
:*Users &amp;gt; Fail Access Authorization URL; Login Successfully URL; Fail Attempted Login URL; Logout URL; Password Expired Link; Create Account Link; Edit Account Link&lt;br /&gt;
&lt;br /&gt;
===Template Links Tested===&lt;br /&gt;
''Click ALL links for a page for every template and verify they link to their target. If links appear / disappear or change based on different conditions (logged in, logged out, appear in a loop such as children, appear when cart has items or meets certain conditions, etc) be sure to test under each condition to ensure link operates correctly''&lt;br /&gt;
&lt;br /&gt;
===Process Flow Tested===&lt;br /&gt;
;Navigation Flow:&lt;br /&gt;
:*Start at a CNAV category &amp;gt; Category page &amp;gt; Product line page &amp;gt; product page&lt;br /&gt;
:*Enter Search Keywords &amp;gt; Search &amp;gt; Select a product&lt;br /&gt;
;Email Registration Flow:&lt;br /&gt;
:*Enter email into newsletter field &amp;gt; Newsletter registration page &amp;gt; registration complete page &amp;gt; check the email received&lt;br /&gt;
;Purchase Flow (after completing all orders, log into administration to check if order is displayed correct and complete):&lt;br /&gt;
:*WHILE LOGGED OUT: Add one product utilizing each product template built to the shopping cart &amp;gt; checkout registration (continue as guest) &amp;gt; billing address &amp;gt; shipping address &amp;gt; payment &amp;gt; confirmation / review &amp;gt; order complete &amp;gt; view the order &amp;gt; check the email received&lt;br /&gt;
:*WHILE LOGGED OUT: Add one product to the shopping cart &amp;gt; checkout registration (create account) &amp;gt; create account page &amp;gt; billing address &amp;gt; shipping address &amp;gt; payment &amp;gt; confirmation / review &amp;gt; order complete &amp;gt; view the order &amp;gt; check the email received&lt;br /&gt;
:*WHILE LOGGED OUT: Add one product to the shopping cart &amp;gt; checkout registration (log in) &amp;gt; billing address &amp;gt; shipping address &amp;gt; payment &amp;gt; confirmation / review &amp;gt; order complete &amp;gt; view the order &amp;gt; check the email received&lt;br /&gt;
:*WHILE LOGGED IN: Add one product to the shopping cart &amp;gt; (should skip checkout registration) &amp;gt; billing address &amp;gt; shipping address &amp;gt; payment &amp;gt; confirmation / review &amp;gt; order complete &amp;gt; view the order &amp;gt; check the email received&lt;br /&gt;
;Account Management: &lt;br /&gt;
:*WHILE LOGGED OUT: Select ALL &amp;quot;Your Account&amp;quot; links/buttons, verify they go to login form.&lt;br /&gt;
:*WHILE LOGGED OUT: Your Account &amp;gt; Create Account &amp;gt; Your Account Page&lt;br /&gt;
:*WHILE LOGGED OUT: Your Account &amp;gt; Log in &amp;gt; Your Account Page&lt;br /&gt;
:*WHILE LOGGED IN: Select ALL &amp;quot;Your Account&amp;quot; links/buttons. Verify they all go to &amp;quot;Your Account Page&amp;quot;&lt;br /&gt;
:*Add one address, edit one address and delete one address from the address book&lt;br /&gt;
:*View an order through order history&lt;br /&gt;
:*Change your name and password in the edit account form&lt;br /&gt;
===Custom Forms Tested===&lt;br /&gt;
:*Enter samples into ALL custom forms built for the web site.&lt;br /&gt;
:*Verify each form has the 'form type' set to a unique value that will be easy for the client to use when looking up forms in the 'form submissions' area of administration.&lt;br /&gt;
:*Look up the submissions in the 'form submissions' area of administration, verify all the fields entered passed correctly.&lt;br /&gt;
:*Verify all email recipients specified in the custom form received the emails with the fields correctly filled out.&lt;br /&gt;
:*For each form, if newsletter subscription is used, submit the form TWICE (once subscribing, once not) and verify the subscription took by looking them up in the 'subscriptions' area of administration. Follow the newsletter registration process to completion, verify the process works as intended and all content during the course of :*the process is as the client wishes.&lt;br /&gt;
===Custom Development Tested===&lt;br /&gt;
Test all CUSTOM processes / templates / functions created for client as per the contract. Use testing criteria for evaluation.&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Page_Templates:Examples&amp;diff=735</id>
		<title>Page Templates:Examples</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Page_Templates:Examples&amp;diff=735"/>
				<updated>2009-04-15T17:37:49Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: added conversion tracking, analytics extras&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Some Template Examples==&lt;br /&gt;
{{Page Template Managers Shortcuts}}&lt;br /&gt;
:*[[Page Templates:Creating Your First Template]]&lt;br /&gt;
&lt;br /&gt;
*Content&lt;br /&gt;
:*[[Page Templates:Creating a Basic Template]]&lt;br /&gt;
:*[[Page Templates:Creating a Category Template]]&lt;br /&gt;
:*[[Page Templates:Creating a Product Template]]&lt;br /&gt;
&lt;br /&gt;
*Checkout Process:&lt;br /&gt;
:*[[Page Templates:Creating Shopping Cart Template]]&lt;br /&gt;
:*[[Page Templates:Creating a Registration Template]]&lt;br /&gt;
:*[[Page Templates:Creating a Billing Address Template]]&lt;br /&gt;
:*[[Page Templates:Creating a Shipping Address Template]]&lt;br /&gt;
:*[[Page Templates:Creating a Payment Template]]&lt;br /&gt;
:*[[Page Templates:Creating a Confirmation Template]]&lt;br /&gt;
:*[[Page Templates:Creating an Order Complete Template]]&lt;br /&gt;
&lt;br /&gt;
*Account Management:&lt;br /&gt;
:*[[Functions:userAccountAndAddressCreate|Page Templates:Creating a &amp;quot;Create Account&amp;quot; Template]]&lt;br /&gt;
:*[[Page Templates:Login Form|Page Templates:Log In Form]]&lt;br /&gt;
:*[[Page Templates: Your Account]]&lt;br /&gt;
:*[[Functions:userAccountEdit|Page Templates:Creating a &amp;quot;Edit Account&amp;quot; Template]]&lt;br /&gt;
:*[[Page Templates:Creating a Address Book Management Template]]&lt;br /&gt;
:*[[Page Templates:Creating a Order History Template]]&lt;br /&gt;
:*[[Page Templates:Creating a Wishlist Template]]&lt;br /&gt;
:*[[Pages:Lost Password Page]]&lt;br /&gt;
&lt;br /&gt;
*Web 2.0&lt;br /&gt;
:*[[Pages:Custom Forms|Creating a Custom Form]]&lt;br /&gt;
:*[[Pages Templates:Forum|Creating a Forum / Comments Template]]&lt;br /&gt;
&lt;br /&gt;
*Extra Features&lt;br /&gt;
:*[[Page Templates:Exit Pop-ups]]&lt;br /&gt;
:*[[Page Templates:Bookmarking]]&lt;br /&gt;
:*[[Page Templates:Ajax (layer) Pop-ups]]&lt;br /&gt;
:*[[Page Templates:Ajax (live) Product Pricing]]&lt;br /&gt;
:*[[Page Templates:TEM Conversion Tracking]]&lt;br /&gt;
:*[[Page Templates:Google Analytics]]&lt;br /&gt;
:*[[Page Templates:Google eCommerce Conversion Tracking]]&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Page_Templates:Examples&amp;diff=734</id>
		<title>Page Templates:Examples</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Page_Templates:Examples&amp;diff=734"/>
				<updated>2009-04-15T17:36:27Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: added order complete template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Some Template Examples==&lt;br /&gt;
{{Page Template Managers Shortcuts}}&lt;br /&gt;
:*[[Page Templates:Creating Your First Template]]&lt;br /&gt;
&lt;br /&gt;
*Content&lt;br /&gt;
:*[[Page Templates:Creating a Basic Template]]&lt;br /&gt;
:*[[Page Templates:Creating a Category Template]]&lt;br /&gt;
:*[[Page Templates:Creating a Product Template]]&lt;br /&gt;
&lt;br /&gt;
*Checkout Process:&lt;br /&gt;
:*[[Page Templates:Creating Shopping Cart Template]]&lt;br /&gt;
:*[[Page Templates:Creating a Registration Template]]&lt;br /&gt;
:*[[Page Templates:Creating a Billing Address Template]]&lt;br /&gt;
:*[[Page Templates:Creating a Shipping Address Template]]&lt;br /&gt;
:*[[Page Templates:Creating a Payment Template]]&lt;br /&gt;
:*[[Page Templates:Creating a Confirmation Template]]&lt;br /&gt;
:*[[Page Templates:Creating an Order Complete Template]]&lt;br /&gt;
&lt;br /&gt;
*Account Management:&lt;br /&gt;
:*[[Functions:userAccountAndAddressCreate|Page Templates:Creating a &amp;quot;Create Account&amp;quot; Template]]&lt;br /&gt;
:*[[Page Templates:Login Form|Page Templates:Log In Form]]&lt;br /&gt;
:*[[Page Templates: Your Account]]&lt;br /&gt;
:*[[Functions:userAccountEdit|Page Templates:Creating a &amp;quot;Edit Account&amp;quot; Template]]&lt;br /&gt;
:*[[Page Templates:Creating a Address Book Management Template]]&lt;br /&gt;
:*[[Page Templates:Creating a Order History Template]]&lt;br /&gt;
:*[[Page Templates:Creating a Wishlist Template]]&lt;br /&gt;
:*[[Pages:Lost Password Page]]&lt;br /&gt;
&lt;br /&gt;
*Web 2.0&lt;br /&gt;
:*[[Pages:Custom Forms|Creating a Custom Form]]&lt;br /&gt;
:*[[Pages Templates:Forum|Creating a Forum / Comments Template]]&lt;br /&gt;
&lt;br /&gt;
*Extra Features&lt;br /&gt;
:*[[Page Templates:Exit Pop-ups]]&lt;br /&gt;
:*[[Page Templates:Bookmarking]]&lt;br /&gt;
:*[[Page Templates:Ajax (layer) Pop-ups]]&lt;br /&gt;
:*[[Page Templates:Ajax (live) Product Pricing]]&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Upgrade_Requests_/_Bugs&amp;diff=733</id>
		<title>Upgrade Requests / Bugs</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Upgrade_Requests_/_Bugs&amp;diff=733"/>
				<updated>2009-04-15T17:34:16Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: added dBugwrapper to all functions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Additional field to shared option groups - so it can have a name that is not the same as it's displayed title.&lt;br /&gt;
*Increments for products (visitor must buy in allotted increment)&lt;br /&gt;
*Coupon Memory - have the system remember coupon codes entered that where not qualified for, automatically apply coupon as soon as cart qualifies.&lt;br /&gt;
*Checkbox to discounts that allow an item to ignore the ‘only 1 discount per cart’ command.&lt;br /&gt;
*Text field in discounts for non-qualifying codes that will go into queue, when application is attempted.&lt;br /&gt;
*Banner Zones controlled by url data passed (tell a zone to display a specific banner), command expires after order is complete&lt;br /&gt;
*Banner repository queue to hold attempted, but unqualified, discount codes, attempt to re-apply with each cart modification.&lt;br /&gt;
*Tiered discounts for BOTH % and $ off.&lt;br /&gt;
*Checkout modifications to support non-pay accounts, po numbers.&lt;br /&gt;
*Cart check function, checks all items, shipping, discounts in cart to make sure they all still qualify, if any do not, remove and display message to visitor.&lt;br /&gt;
*Order management to allow product option changes.&lt;br /&gt;
*Auto deletion of expired data including: incomplete carts, searches, send2friend, banner tracking, campaign tracking, page views, user sessions.&lt;br /&gt;
*Export/Import templates (to duplicate BETWEEN sites)&lt;br /&gt;
*Audit all queries to confirm 'best practices' used with strings - see referencePHP&lt;br /&gt;
*Add items to cart right on product page (AJAX solution)&lt;br /&gt;
*Persistent right column cart throughout checkout&lt;br /&gt;
*Confirmation &amp;quot;Thank You&amp;quot; page should have cross-sell that can be &amp;quot;added to your order automatically&amp;quot;  and possibly allow the items to be added without any additional shipping charges.&lt;br /&gt;
*Banner management should be reworked.  Chris Ziter writing up details.&lt;br /&gt;
*Print all option for groups of invoices in order management&lt;br /&gt;
*Duplicate function in discounts&lt;br /&gt;
*Search ability in discounts&lt;br /&gt;
*Category application to discounts&lt;br /&gt;
*Delete campaigns in banner management&lt;br /&gt;
*dBug wrapper to ALL functions.&lt;br /&gt;
&lt;br /&gt;
;Completed:&lt;br /&gt;
*2/5/2009: Free item alterations, store items as $0, pass controls that allow design changes for these items when presented in cart, etc.&lt;br /&gt;
*2/9/2009: When a visitor enters an email/name to register for the newsletter, and the billing/shipping addresses are blank, attach the email/name to the billing/shipping addresses in the order.&lt;br /&gt;
*2/13/2008: Reliable exit pop up&lt;br /&gt;
*2/16/2008: TEM channelId control for the order process (abandoned cart) manageable through admin console.&lt;br /&gt;
*2/18/2008: TEM custom image generation field set up&lt;br /&gt;
&lt;br /&gt;
;In Progress:&lt;br /&gt;
*Catalog quick order&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Page_Templates:Creating_a_Confirmation_Template&amp;diff=732</id>
		<title>Page Templates:Creating a Confirmation Template</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Page_Templates:Creating_a_Confirmation_Template&amp;diff=732"/>
				<updated>2009-04-15T17:17:44Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: added some missing $securedSiteUrl links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Page Template Managers Shortcuts}}&lt;br /&gt;
The confirmation / review template shows the visitor all the order information and provided a link to process the order / payment.&lt;br /&gt;
&lt;br /&gt;
After creating the template, setup a page for it. Place the pageId of this new page in Settings &amp;gt; eCommerce tab: &amp;quot;Confirmation Page Id&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Sample content is below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// get order data&lt;br /&gt;
$orderArray = eV::orderGetCompleteArray();&lt;br /&gt;
&lt;br /&gt;
// shortcut order info&lt;br /&gt;
$orderArr = $orderArray['order'];&lt;br /&gt;
// short cut payment info&lt;br /&gt;
$payArr = $orderArray['payments'][0];&lt;br /&gt;
// short cut the item info&lt;br /&gt;
$itemArr = $orderArray['items'];&lt;br /&gt;
// short cut shipping address info&lt;br /&gt;
$shipArr = $itemArr[0];&lt;br /&gt;
// shortcut discount data&lt;br /&gt;
$discArr = $orderArray['discounts'];&lt;br /&gt;
&lt;br /&gt;
// output shipping address&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Shipping to: &amp;quot;;&lt;br /&gt;
// link to change shipping address&lt;br /&gt;
// prepend URLs with $securedSiteUrl to ensure the link uses the SSL site link&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;$securedSiteUrl/index.php?fa=ORDER.checkoutShipping\&amp;quot;&amp;gt;EDIT&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
// shipping address data&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot; . $shipArr['firstName'] . &amp;quot; &amp;quot; . $shipArr['lastName'] . &amp;quot;&lt;br /&gt;
		&amp;lt;br&amp;gt;&amp;quot; . $shipArr['street1'] . &amp;quot;&lt;br /&gt;
		&amp;lt;br&amp;gt;&amp;quot; . $shipArr['street2'] . &amp;quot;&lt;br /&gt;
		&amp;lt;br&amp;gt;&amp;quot; . $shipArr['city'] . &amp;quot;, &amp;quot; . $shipArr['state'] . &amp;quot; &amp;quot; . $shipArr['zipCode'] . &amp;quot;&lt;br /&gt;
		&amp;lt;br&amp;gt;&amp;quot; . $shipArr['country'];&lt;br /&gt;
		&lt;br /&gt;
// shipping instructions&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Instructions: &amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot; . $shipArr['instructions'];&lt;br /&gt;
&lt;br /&gt;
// output billing address&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Billing Method: &amp;quot;;&lt;br /&gt;
// link to change billing address&lt;br /&gt;
// prepend URLs with $securedSiteUrl to ensure the link uses the SSL site link&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;$securedSiteUrl/index.php?fa=ORDER.checkoutBilling\&amp;quot;&amp;gt;EDIT&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
// billing adddress data&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot; . $payArr['firstName'] . &amp;quot; &amp;quot; . $payArr['lastName'] . &amp;quot;&lt;br /&gt;
		&amp;lt;br&amp;gt;&amp;quot; . $payArr['street1'] . &amp;quot;&lt;br /&gt;
		&amp;lt;br&amp;gt;&amp;quot; . $payArr['street2'] . &amp;quot;&lt;br /&gt;
		&amp;lt;br&amp;gt;&amp;quot; . $payArr['city'] . &amp;quot;, &amp;quot; . $payArr['state'] . &amp;quot; &amp;quot; . $payArr['zipCode'] . &amp;quot;&lt;br /&gt;
		&amp;lt;br&amp;gt;&amp;quot; . $payArr['country'];&lt;br /&gt;
&lt;br /&gt;
// output items in shopping cart&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Items: &amp;quot;;&lt;br /&gt;
// link to go back to cart&lt;br /&gt;
// prepend URLs with $securedSiteUrl to ensure the link uses the SSL site link&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;$securedSiteUrl/index.php?ORDER.cartView\&amp;quot;&amp;gt;EDIT&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
// loop thru items&lt;br /&gt;
foreach($itemArr as $item){&lt;br /&gt;
	// link back to product page&lt;br /&gt;
	// note we can pass the productId in the URL and it will find the first page with that product in it&lt;br /&gt;
// prepend link with $siteUrl to direct back to product page, but out of SSL&lt;br /&gt;
	echo &amp;quot;&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;$siteUrl/index.php?productId=&amp;quot; . $item['productId'] . &amp;quot;\&amp;quot;&amp;gt;&amp;quot; . $item['productName'] . &amp;quot;&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
	echo &amp;quot; Item #: &amp;quot; . $item['sku'];&lt;br /&gt;
	if($item['isDiscontinued']) echo &amp;quot; Discontinued &amp;quot;;&lt;br /&gt;
	echo $item['quantity'] . &amp;quot; x &amp;quot; . eV::dollarFormat($item['pricePer']) . &amp;quot; = &amp;quot; . eV::dollarFormat($item['quantity'] * $item['pricePer']);&lt;br /&gt;
	echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot; . $item['cartDescription'];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// output item total&lt;br /&gt;
// this is the merchandise total for all the items in the cart added up		&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Merchandise Total: &amp;quot; .  eV::dollarFormat($orderArr['itemTotal']);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// output shipping method&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Shipping Method: &amp;quot; .  $shipArr['shipTypeCode'] . &amp;quot;: &amp;quot; . $shipArr['shipType'];&lt;br /&gt;
// shipping cost&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Shipping Cost: &amp;quot; .  eV::dollarFormat($orderArr['shippingTotal']);&lt;br /&gt;
&lt;br /&gt;
// discount form to submit discount&lt;br /&gt;
// start discount form&lt;br /&gt;
// prepend URLs with $securedSiteUrl to ensure the link uses the SSL site link&lt;br /&gt;
echo &amp;quot; &amp;lt;form action=\&amp;quot;$securedSiteUrl/index.php\&amp;quot; method=\&amp;quot;post\&amp;quot; name=\&amp;quot;discountForm\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Enter Promo Code: &amp;lt;input name=\&amp;quot;discountCode\&amp;quot; type=\&amp;quot;text\&amp;quot; size=\&amp;quot;7\&amp;quot; /&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;input type=\&amp;quot;submit\&amp;quot; value=\&amp;quot;Apply Code\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// output codes already applied&lt;br /&gt;
foreach($discArr as $disc) echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot; . $disc['discountCode'] . &amp;quot;: &amp;quot; . $disc['description'] . &amp;quot; :&amp;quot; . eV::dollarFormat($disc['amount']);&lt;br /&gt;
&lt;br /&gt;
// tax and total&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Tax: &amp;quot; . eV::dollarFormat($orderArr['taxTotal']);&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Order Total: &amp;quot; . eV::dollarFormat($orderArr['grandTotal']); // use 'totalDue' if accepting partial payments, this will show how much it oustanding instead of total amount&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// payment method info&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Payment Method: &amp;quot;;&lt;br /&gt;
// payment edit link&lt;br /&gt;
// prepend URLs with $securedSiteUrl to ensure the link uses the SSL site link&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;$securedSiteUrl/index.php?fa=ORDER.checkoutPayment\&amp;quot;&amp;gt;EDIT&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
// payment data&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;**** **** **** &amp;quot; . substr($payArr['accountNumber'],(strlen($payArr['accountNumber'])-4),4);&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Expires: &amp;quot; . date('m/Y',strtotime($payArr['expDate']));&lt;br /&gt;
     &lt;br /&gt;
// process order link&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;$securedSiteUrl/index.php?fa=ORDER.process\&amp;quot;&amp;gt;PROCESS ORDER&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Template:Page_Template_Functions_Shortcuts&amp;diff=731</id>
		<title>Template:Page Template Functions Shortcuts</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Template:Page_Template_Functions_Shortcuts&amp;diff=731"/>
				<updated>2009-04-15T16:56:56Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: added orderGetIdFromNumber&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table align=right style=&amp;quot;background-color: #DDDDDD;&amp;quot; cellpadding=0 cellspacing=0 border=0&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
{{Page Template Managers Shortcuts}}&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
[[Page Templates:Functions|Page Template Functions]]&lt;br /&gt;
*[[functions:addressCountryOptions|addressCountryOptions]]&lt;br /&gt;
*[[functions:addressCountryNameGet|addressCountryNameGet]]&lt;br /&gt;
*[[functions:addressStateOptions|addressStateOptions]]&lt;br /&gt;
*[[functions:addressZipDetailsGet|addressZipDetailsGet]]&lt;br /&gt;
*[[functions:authorizeIsLoggedIn|authorizeIsLoggedIn]]&lt;br /&gt;
*[[functions:authorizeIsLoggedOut|authorizeIsLoggedOut]]&lt;br /&gt;
*[[functions:captchaCheck|captchaCheck]]&lt;br /&gt;
*[[functions:catalogProductsGet|catalogProductsGet]]&lt;br /&gt;
*[[functions:continueShoppingGet|continueShoppingGet]]&lt;br /&gt;
*[[functions:continueShoppingSet|continueShopppingSet]]&lt;br /&gt;
*[[functions:dollarFormat|dollarFormat]]&lt;br /&gt;
*[[functions:fullyQualifyAllURLs|fullyQualifyAllURLs]]&lt;br /&gt;
*[[functions:ipBlockCheck|ipBlockCheck]]&lt;br /&gt;
*[[functions:itemLayout_dataString2Array|itemLayout_dataString2Array]]&lt;br /&gt;
*[[functions:mysqlquery2array|mysqlquery2array]]&lt;br /&gt;
*[[functions:orderExpDateOptions|orderExpDateOptions]]&lt;br /&gt;
*[[functions:orderGetCompleteArray|orderGetCompleteArray]]&lt;br /&gt;
*[[functions:orderGetEmail|orderGetEmail]]&lt;br /&gt;
*[[functions:orderGetFirstName|orderGetFirstName]]&lt;br /&gt;
*[[functions:orderGetIdFromNumber|orderGetIdFromNumber]]&lt;br /&gt;
*[[functions:orderGetPayTypes|orderGetPayTypes]]&lt;br /&gt;
*[[functions:orderGetShipArray|orderGetShipArray]]&lt;br /&gt;
*[[functions:orderGetSummary|orderGetSummary]]&lt;br /&gt;
*[[functions:ordersGetList|ordersGetList]]&lt;br /&gt;
*[[functions:orderPayTypeOptions|orderPayTypeOptions]]&lt;br /&gt;
*[[functions:orderShipFedexRate|orderShipFedexRate]]&lt;br /&gt;
*[[functions:orderShipAdjustRate|orderShipAdjustRate]]&lt;br /&gt;
*[[functions:pageBreadcrumbsFamilyGet|pageBreadcrumbsFamilyGet]]&lt;br /&gt;
*[[functions:pageBreadcrumbsHistoryGet|pageBreadcrumbsHistoryGet]]&lt;br /&gt;
*[[functions:pageChildrenGet|pageChildrenGet]]&lt;br /&gt;
*[[functions:pageContentAttribSet|pageContentAttribSet]]&lt;br /&gt;
*[[functions:pageContentAttribsSet|pageContentAttribsSet]]&lt;br /&gt;
*[[functions:pageContentAttribStart/pageContentAttribEnd|pageContentAttribStart]]&lt;br /&gt;
*[[functions:pageContentAttribStart/pageContentAttribEnd|pageContentAttribEnd]]&lt;br /&gt;
*[[functions:pageCustomSearchGroup|pageCustomSearchGroup]]&lt;br /&gt;
*[[functions:pageForumPostsGet|pageForumPostsGet]]&lt;br /&gt;
*[[functions:pageGet|pageGet]]&lt;br /&gt;
*[[functions:pageGetHomeId|pageGetHomeId]]&lt;br /&gt;
*[[functions:pageMenuGet|pageMenuGet]]&lt;br /&gt;
*[[functions:pagePollQuestionsGet|pagePollQuestionsGet]]&lt;br /&gt;
*[[functions:pagePollResultsGet|pagePollResultsGet]]&lt;br /&gt;
*[[functions:pageProductsGet|pageProductsGet]]&lt;br /&gt;
*[[functions:pageSearchGet|pageSearchGet]]&lt;br /&gt;
*[[functions:pageZoneGet|pageZoneGet]]&lt;br /&gt;
*[[functions:pagination|pagination]]&lt;br /&gt;
*[[functions:phpObjToJS|phpObjToJS]]&lt;br /&gt;
*[[functions:prodArrayToJS|prodArrayToJS]]&lt;br /&gt;
*[[functions:prodOptionString2Array|prodOptionString2Array]]&lt;br /&gt;
*[[functions:recentlyViewedAdd|recentlyViewedAdd]]&lt;br /&gt;
*[[functions:recentlyViewedGet|recentlyViewedGet]]&lt;br /&gt;
*[[functions:redirect|redirect]]&lt;br /&gt;
*[[functions:TEMConversionTag|TEMConversionTag]]&lt;br /&gt;
*[[functions:userAccountAndAddressCreate|userAccountAndAddressCreate]]&lt;br /&gt;
*[[functions:userAccountEdit|userAccountEdit]]&lt;br /&gt;
*[[functions:userAddressAddEdit|userAddressAddEdit]]&lt;br /&gt;
*[[functions:userBlogEntriesGet|userBlogEntriesGet]]&lt;br /&gt;
*[[functions:userBlogEntryAddEdit|userBlogEntryAddEdit]]&lt;br /&gt;
*[[functions:userBlogSetup|userBlogSetup]]&lt;br /&gt;
*[[functions:userFriendsGet|userFriendsGet]]&lt;br /&gt;
*[[functions:userGetAddresses|userGetAddresses]]&lt;br /&gt;
*[[functions:userWishListGet|userWishListGet]]&lt;br /&gt;
*[[functions:usersAmbassadorGet|usersAmbassadorGet]]&lt;br /&gt;
*[[functions:usersGet|usersGet]]&lt;br /&gt;
*[[functions:valueArrayFromQuery|valueArrayFromQuery]]&lt;br /&gt;
*[[functions:verifyEmail|verifyEmail]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Upgrade_Requests_/_Bugs&amp;diff=730</id>
		<title>Upgrade Requests / Bugs</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Upgrade_Requests_/_Bugs&amp;diff=730"/>
				<updated>2009-04-14T12:53:00Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Additional field to shared option groups - so it can have a name that is not the same as it's displayed title.&lt;br /&gt;
*Increments for products (visitor must buy in allotted increment)&lt;br /&gt;
*Coupon Memory - have the system remember coupon codes entered that where not qualified for, automatically apply coupon as soon as cart qualifies.&lt;br /&gt;
*Checkbox to discounts that allow an item to ignore the ‘only 1 discount per cart’ command.&lt;br /&gt;
*Text field in discounts for non-qualifying codes that will go into queue, when application is attempted.&lt;br /&gt;
*Banner Zones controlled by url data passed (tell a zone to display a specific banner), command expires after order is complete&lt;br /&gt;
*Banner repository queue to hold attempted, but unqualified, discount codes, attempt to re-apply with each cart modification.&lt;br /&gt;
*Tiered discounts for BOTH % and $ off.&lt;br /&gt;
*Checkout modifications to support non-pay accounts, po numbers.&lt;br /&gt;
*Cart check function, checks all items, shipping, discounts in cart to make sure they all still qualify, if any do not, remove and display message to visitor.&lt;br /&gt;
*Order management to allow product option changes.&lt;br /&gt;
*Auto deletion of expired data including: incomplete carts, searches, send2friend, banner tracking, campaign tracking, page views, user sessions.&lt;br /&gt;
*Export/Import templates (to duplicate BETWEEN sites)&lt;br /&gt;
*Audit all queries to confirm 'best practices' used with strings - see referencePHP&lt;br /&gt;
*Add items to cart right on product page (AJAX solution)&lt;br /&gt;
*Persistent right column cart throughout checkout&lt;br /&gt;
*Confirmation &amp;quot;Thank You&amp;quot; page should have cross-sell that can be &amp;quot;added to your order automatically&amp;quot;  and possibly allow the items to be added without any additional shipping charges.&lt;br /&gt;
*Banner management should be reworked.  Chris Ziter writing up details.&lt;br /&gt;
*Print all option for groups of invoices in order management&lt;br /&gt;
*Duplicate function in discounts&lt;br /&gt;
*Search ability in discounts&lt;br /&gt;
*Category application to discounts&lt;br /&gt;
*Delete campaigns in banner management&lt;br /&gt;
&lt;br /&gt;
;Completed:&lt;br /&gt;
*2/5/2009: Free item alterations, store items as $0, pass controls that allow design changes for these items when presented in cart, etc.&lt;br /&gt;
*2/9/2009: When a visitor enters an email/name to register for the newsletter, and the billing/shipping addresses are blank, attach the email/name to the billing/shipping addresses in the order.&lt;br /&gt;
*2/13/2008: Reliable exit pop up&lt;br /&gt;
*2/16/2008: TEM channelId control for the order process (abandoned cart) manageable through admin console.&lt;br /&gt;
*2/18/2008: TEM custom image generation field set up&lt;br /&gt;
&lt;br /&gt;
;In Progress:&lt;br /&gt;
*Catalog quick order&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Upgrade_Requests_/_Bugs&amp;diff=729</id>
		<title>Upgrade Requests / Bugs</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Upgrade_Requests_/_Bugs&amp;diff=729"/>
				<updated>2009-04-14T12:48:19Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Additional field to shared option groups - so it can have a name that is not the same as it's displayed title.&lt;br /&gt;
*Increments for products (visitor must buy in allotted increment)&lt;br /&gt;
*Coupon Memory - have the system remember coupon codes entered that where not qualified for, automatically apply coupon as soon as cart qualifies.&lt;br /&gt;
*Checkbox to discounts that allow an item to ignore the ‘only 1 discount per cart’ command.&lt;br /&gt;
*Text field in discounts for non-qualifying codes that will go into queue, when application is attempted.&lt;br /&gt;
*Banner Zones controlled by url data passed (tell a zone to display a specific banner), command expires after order is complete&lt;br /&gt;
*Banner repository queue to hold attempted, but unqualified, discount codes, attempt to re-apply with each cart modification.&lt;br /&gt;
*Tiered discounts for BOTH % and $ off.&lt;br /&gt;
*Checkout modifications to support non-pay accounts, po numbers.&lt;br /&gt;
*Cart check function, checks all items, shipping, discounts in cart to make sure they all still qualify, if any do not, remove and display message to visitor.&lt;br /&gt;
*Order management to allow product option changes.&lt;br /&gt;
*Auto deletion of expired data including: incomplete carts, searches, send2friend, banner tracking, campaign tracking, page views, user sessions.&lt;br /&gt;
*Export/Import templates (to duplicate BETWEEN sites)&lt;br /&gt;
*Audit all queries to confirm 'best practices' used with strings - see referencePHP&lt;br /&gt;
*Add items to cart right on product page (AJAX solution)&lt;br /&gt;
*Persistent right column cart throughout checkout&lt;br /&gt;
*Confirmation &amp;quot;Thank You&amp;quot; page should have cross-sell that can be &amp;quot;added to your order automatically&amp;quot;  and possibly allow the items to be added without any additional shipping charges.&lt;br /&gt;
*Banner management should be reworked.  Chris Ziter writing up details.&lt;br /&gt;
*Print all option for groups of invoices in order management&lt;br /&gt;
&lt;br /&gt;
;Completed:&lt;br /&gt;
*2/5/2009: Free item alterations, store items as $0, pass controls that allow design changes for these items when presented in cart, etc.&lt;br /&gt;
*2/9/2009: When a visitor enters an email/name to register for the newsletter, and the billing/shipping addresses are blank, attach the email/name to the billing/shipping addresses in the order.&lt;br /&gt;
*2/13/2008: Reliable exit pop up&lt;br /&gt;
*2/16/2008: TEM channelId control for the order process (abandoned cart) manageable through admin console.&lt;br /&gt;
*2/18/2008: TEM custom image generation field set up&lt;br /&gt;
&lt;br /&gt;
;In Progress:&lt;br /&gt;
*Catalog quick order&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Page_Templates:Creating_a_Registration_Template&amp;diff=728</id>
		<title>Page Templates:Creating a Registration Template</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Page_Templates:Creating_a_Registration_Template&amp;diff=728"/>
				<updated>2009-04-13T12:58:02Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Page Template Managers Shortcuts}}&lt;br /&gt;
The registration template is very basic. It requires a login form and links to the forgotten password and create account pages. It is recommended a check is done to see if the user is logged in and forward them to the next step in the checkout if they are.&lt;br /&gt;
&lt;br /&gt;
After creating the template, setup a page for it. Place the pageId of this new page in Settings &amp;gt; eCommerce tab: &amp;quot;Registration Page Id&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Sample content is below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// check if user is logged in&lt;br /&gt;
// using the core variable isLoggedIn&lt;br /&gt;
// and the redirect function&lt;br /&gt;
// sending to the shipping checkout page&lt;br /&gt;
// sometiems clients want billing address before shipping, simply change to ORDER.checkoutBilling if that is the case&lt;br /&gt;
if($isLoggedIn) eV::redirect($iProducts['securedSiteUrl'] . 'index.php?fa=ORDER.checkoutShipping');&lt;br /&gt;
&lt;br /&gt;
// display message (this will contain login errors, etc, if the forms point failures back to this page)&lt;br /&gt;
if(!empty($message)) echo &amp;quot;&amp;lt;p&amp;gt;&amp;lt;font color=\&amp;quot;red\&amp;quot;&amp;gt;$message&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// output form and links&lt;br /&gt;
// sometiems clients want billing address before shipping, simply change to ORDER.checkoutBilling if that is the case&lt;br /&gt;
// note the $securedSiteURL attribute in the anchor tag - this will retrieve the value in settings for the Secure Site URL&lt;br /&gt;
echo &amp;quot;&lt;br /&gt;
&amp;lt;a href=\&amp;quot;&amp;quot; . $iProducts['securedSiteUrl']. &amp;quot;/index.php?fa=ORDER.checkoutShipping\&amp;quot;&amp;gt;Checkout Without Logging In&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Log In:&lt;br /&gt;
// note the $securedSiteURL attribute in the form action - this will retrieve the value in settings for the Secure Site URL&lt;br /&gt;
&amp;lt;form action=\&amp;quot;&amp;quot; . $iProducts['securedSiteUrl']. &amp;quot;/index.php\&amp;quot; method=\&amp;quot;post\&amp;quot; name=\&amp;quot;registeredLoginForm\&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Email Address:&lt;br /&gt;
&amp;lt;input name=\&amp;quot;emailAddress\&amp;quot; size=\&amp;quot;20\&amp;quot; type=\&amp;quot;text\&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Password:&lt;br /&gt;
&amp;lt;input name=\&amp;quot;password\&amp;quot; size=\&amp;quot;20\&amp;quot; type=\&amp;quot;password\&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- enter page id for forget your password page --&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;index.php?pageId=1223\&amp;quot;&amp;gt;Forgot your password&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;input type=\&amp;quot;submit\&amp;quot; value=\&amp;quot;Log In\&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- required hidden fields for login to work --&amp;gt;&lt;br /&gt;
&amp;lt;input name=\&amp;quot;fa\&amp;quot; type=\&amp;quot;hidden\&amp;quot; value=\&amp;quot;USER.login\&amp;quot; /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- redirect tells it where to go after a successful login --&amp;gt;&lt;br /&gt;
&amp;lt;!-- sometiems clients want billing address before shipping, simply change to ORDER.checkoutBilling if that is the case --&amp;gt;&lt;br /&gt;
&amp;lt;input name=\&amp;quot;redirect\&amp;quot; type=\&amp;quot;hidden\&amp;quot; value=\&amp;quot;&amp;quot; . $iProducts['securedSiteUrl']. &amp;quot;/index.php?fa=ORDER.checkoutShipping&amp;amp;message=You have successfully logged in\&amp;quot; /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- redirectOnFailure tells the system where to go if login fails --&amp;gt;&lt;br /&gt;
&amp;lt;input name=\&amp;quot;redirectOnFailure\&amp;quot; type=\&amp;quot;hidden\&amp;quot; value=\&amp;quot;&amp;quot; . $iProducts['securedSiteUrl']. &amp;quot;/index.php?fa=ORDER.register&amp;amp;message=Login Failure\&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
Don't have an account?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- link to the pageId that contains the create account form content --&amp;gt;&lt;br /&gt;
&amp;lt;!-- pass the successForward variable to tell it where to go to if the account is successfully setup --&amp;gt;&lt;br /&gt;
&amp;lt;!-- sometiems clients want billing address before shipping, simply change to ORDER.checkoutBilling if that is the case --&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot; . $iProducts['securedSiteUrl']. &amp;quot;/index.php?pageId=2&amp;amp;redirect=index.php%3Ffa%3DORDER.checkoutShipping\&amp;quot;&amp;gt;CLICK HERE&amp;lt;/a&amp;gt; to create one&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- some sites may want to let the visiter enter thier email address here and have it pass to the create account form --&amp;gt;&lt;br /&gt;
&amp;lt;!-- do the following INSTEAD of the above a href in this case --&amp;gt;&lt;br /&gt;
&amp;lt;form action=\&amp;quot;&amp;quot; . $iProducts['securedSiteUrl']. &amp;quot;/index.php\&amp;quot; method=\&amp;quot;POST\&amp;quot; name=\&amp;quot;createAccountForm\&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Create an Account&lt;br /&gt;
&amp;lt;br&amp;gt;Email Address: &lt;br /&gt;
&amp;lt;input name=\&amp;quot;emailAddress\&amp;quot; type=\&amp;quot;text\&amp;quot; size=\&amp;quot;50\&amp;quot; maxlength=\&amp;quot;255\&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- enter the pageId of the create account page into the value field below --&amp;gt;&lt;br /&gt;
&amp;lt;input type=\&amp;quot;hidden\&amp;quot; name=\&amp;quot;pageId\&amp;quot; value=\&amp;quot;123\&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- the following redirect field tells the target create account form where to go after the account has been created --&amp;gt;&lt;br /&gt;
&amp;lt;input type=\&amp;quot;hidden\&amp;quot; name=\&amp;quot;redirect\&amp;quot; value=\&amp;quot;&amp;quot; . $iProducts['securedSiteUrl']. &amp;quot;/index.php?fa=ORDER.checkoutShipping&amp;amp;message=Your account has been created\&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=\&amp;quot;submit\&amp;quot; value=\&amp;quot;Create an account\&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Page_Templates:Creating_a_Shopping_Cart_Template&amp;diff=727</id>
		<title>Page Templates:Creating a Shopping Cart Template</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Page_Templates:Creating_a_Shopping_Cart_Template&amp;diff=727"/>
				<updated>2009-04-13T12:56:51Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Page Template Managers Shortcuts}}&lt;br /&gt;
== Create shopping cart template ==&lt;br /&gt;
&lt;br /&gt;
Below is an example shopping cart template:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// shopping cart &lt;br /&gt;
&lt;br /&gt;
// get our order info&lt;br /&gt;
$completeOrderArray = eV::orderGetCompleteArray($_SESSION['order']['orderId']);&lt;br /&gt;
&lt;br /&gt;
// shortcut the assoc arrays returned, easier to reference later&lt;br /&gt;
$orderArr = $completeOrderArray['order'];&lt;br /&gt;
$itemArr = $completeOrderArray['items'];&lt;br /&gt;
$discountArr = $completeOrderArray['discounts'];&lt;br /&gt;
// payment info not usually shown in cart, but for the sake of this example ill shortcut it also&lt;br /&gt;
$paymentArr = $completeOrderArray['payments'];&lt;br /&gt;
&lt;br /&gt;
// get shipping information to be used in shipping selection&lt;br /&gt;
// first set a blank array&lt;br /&gt;
$shipArr = array();&lt;br /&gt;
// than populate the array onlyy if items are in the cart&lt;br /&gt;
// this will error out with no items in cart as the attempt...&lt;br /&gt;
// ... to get the zip code from an invalid item index will error&lt;br /&gt;
// note we pass the zip code from the first item  - ship addresses are tied to items&lt;br /&gt;
// note we get the weightTotal from the orderArr&lt;br /&gt;
&lt;br /&gt;
// below is a sample call if we are using zip, weight based shipping:&lt;br /&gt;
if(!empty($itemArr)) $shipArr = eV::orderGetShipArray(NULL,$itemArr[0]['zipCode'],$orderArr['weightTotal']);&lt;br /&gt;
&lt;br /&gt;
// below is a smple call if we are using shipping levels&lt;br /&gt;
// which are $ based, not ship / weight based&lt;br /&gt;
if(!empty($itemArr)) $shipArr = eV::orderGetShipArray($orderArr['itemTotal']);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// link to continue checkout process&lt;br /&gt;
// note we only show it if items are in the cart. No reason to checkout on empty cart&lt;br /&gt;
// note we are using the redirectIfRegistered attribute to have user skip this page if they are registered (logged in) and go directly to the checkoutBilling page&lt;br /&gt;
// if your checkout order is shipping BEFORE billing be sure to change the redirect to ORDER.checkoutShipping&lt;br /&gt;
// note the $securedSiteURL attribute in the anchor tag - this will retrieve the value in settings for the Secure Site URL&lt;br /&gt;
if(count($itemArr) &amp;gt; 0) echo &amp;quot;&amp;lt;a href=\&amp;quot;&amp;quot; . $iProducts['securedSiteUrl']. &amp;quot;/index.php?fa=ORDER.register&amp;amp;redirectIfRegistered=&amp;quot; . rawurlencode('index.php?fa=ORDER.checkoutBilling') . &amp;quot;\&amp;quot;&amp;gt;CONTINUE CHECKOUT&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// start the cart form&lt;br /&gt;
echo &amp;quot;&amp;lt;form action=\&amp;quot;index.php\&amp;quot; method=\&amp;quot;post\&amp;quot; name=\&amp;quot;cartForm\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
// hidden attrib - rrquired for cart form, tells it what to do when submitted&lt;br /&gt;
echo &amp;quot;&amp;lt;input type=\&amp;quot;hidden\&amp;quot; name=\&amp;quot;fa\&amp;quot; value=\&amp;quot;ORDER.cartUpdate\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// display any messages passed into the cart&lt;br /&gt;
// this will show notification messages to the shopper, such as when they add discounts to the cart, or a discount gets dropped because they no longer qualify, etc...&lt;br /&gt;
if(!empty($message)) echo &amp;quot;&amp;lt;hr&amp;gt;$message&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// drop a message that the cart is empty if nothing is in it&lt;br /&gt;
if(count($itemArr) == 0) {&lt;br /&gt;
	echo &amp;quot;&amp;lt;hr&amp;gt;Your cart is empty&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
	// something in it? well lets let visitor know what we are about to display&lt;br /&gt;
	echo &amp;quot;&amp;lt;hr&amp;gt;Cart Items:&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// alrighty lets loop thru items in cart and display them&lt;br /&gt;
foreach($itemArr as $item){&lt;br /&gt;
	// link back to product&lt;br /&gt;
	// note we can pass the productId in the URL and the system will find the first page that contains that product&lt;br /&gt;
    echo &amp;quot;&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;index.php?productId=&amp;quot; . $item['productId'] .  &amp;quot;\&amp;quot;&amp;gt;&amp;quot; . $item['productName'] . &amp;quot;&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
	// display the cart description, only if it has value&lt;br /&gt;
 	if(!empty($item['cartDescription'])) echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot; . $item['cartDescription'];&lt;br /&gt;
&lt;br /&gt;
	// does this item have options? lets spit em out then....&lt;br /&gt;
	if(count($item['options']) &amp;gt; 0){&lt;br /&gt;
		echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
		// loop through the options&lt;br /&gt;
		foreach($item['options'] as $option){&lt;br /&gt;
			// display the option&lt;br /&gt;
			echo $option['groupName'] . &amp;quot;: &amp;quot; .$option['title'] . &amp;quot; &amp;quot;;&lt;br /&gt;
			// if item has a dollar value associated with it, lets show that also...&lt;br /&gt;
			// the dollarFormat function is a quick shortcut to turn an int/float into a dollar formatted output&lt;br /&gt;
			if(floatval($option['price']) &amp;gt; 0) echo &amp;quot;(+&amp;quot; . eV::dollarFormat($option['price']) . &amp;quot;) &amp;quot;;&lt;br /&gt;
		// end looping through options&lt;br /&gt;
		};&lt;br /&gt;
	// end if we have options&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	// display the item sku&lt;br /&gt;
	// the item sku is the full appended sku including the productNumber + all option skus&lt;br /&gt;
	echo &amp;quot;&amp;lt;br&amp;gt;Item #: &amp;quot; . $item['sku'];&lt;br /&gt;
&lt;br /&gt;
// ONLY SHOW the quantity field and remove link IF THIS IS NOT a free item due to a discount code&lt;br /&gt;
// also show &amp;quot;FREE&amp;quot; instead of $0 for line total, if it is a free item due to a discount code&lt;br /&gt;
	if(empty($item['freeItem_discountId'])){&lt;br /&gt;
		// quantity field&lt;br /&gt;
		// note the name is quantity# where # is the itemId&lt;br /&gt;
		// This tells the recieving script what quantity to change&lt;br /&gt;
		echo &amp;quot;&amp;lt;input name=\&amp;quot;quantity&amp;quot; . $item['itemId'] . &amp;quot;\&amp;quot; value=\&amp;quot;&amp;quot; . $item['quantity'] . &amp;quot;\&amp;quot; type=\&amp;quot;text\&amp;quot; size=\&amp;quot;5\&amp;quot; /&amp;gt;&amp;quot;;&lt;br /&gt;
		// update link&lt;br /&gt;
		// this link just submits the form&lt;br /&gt;
		// all quantities will be updates upon form submittion&lt;br /&gt;
 		// the single update function tries to update quantities, discounts and shipping selection&lt;br /&gt;
		echo &amp;quot;&amp;lt;a href=\&amp;quot;javascript:window.document.cartForm.submit();\&amp;quot;&amp;gt;UPDATE&amp;lt;/a&amp;gt; &amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
		// remove link&lt;br /&gt;
		// this does the same thing as submitting the quantity form...&lt;br /&gt;
		// except it instructs one item quantity to be set to 0...&lt;br /&gt;
		// which the system will use as a queue to drop the item all together&lt;br /&gt;
		// note that other item's quantities are not passed here...&lt;br /&gt;
		// if not passed, the system will leave thier quantity as is&lt;br /&gt;
		echo &amp;quot;&amp;lt;a href=\&amp;quot;index.php?fa=ORDER.cartUpdate&amp;amp;quantity&amp;quot; . $item['itemId'] . &amp;quot;=0\&amp;quot;&amp;gt;REMOVE&amp;lt;/a&amp;gt; &amp;quot;;&lt;br /&gt;
		// output the price per item and the total price (quantity x pricePer)&lt;br /&gt;
		echo &amp;quot;x &amp;quot; . eV::dollarFormat($item['pricePer']) . &amp;quot; = &amp;quot; . eV::dollarFormat(($item['pricePer'] * $item['quantity']));&lt;br /&gt;
	} else {&lt;br /&gt;
		// if this is a free item, lets display FREE instead of $0&lt;br /&gt;
		echo &amp;quot; FREE &amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
// end looping through items&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// merchandise total&lt;br /&gt;
echo &amp;quot;&amp;lt;hr&amp;gt;TOTAL:&amp;quot; .  eV::dollarFormat($orderArr['itemTotal']);&lt;br /&gt;
&lt;br /&gt;
// add a discount/coupon form field&lt;br /&gt;
echo &amp;quot;&amp;lt;hr&amp;gt;Enter Coupon Here: &amp;lt;input name=\&amp;quot;discountCode\&amp;quot; type=\&amp;quot;text\&amp;quot; size=\&amp;quot;15\&amp;quot; /&amp;gt; &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// link to post discount&lt;br /&gt;
// note this link submits the cart form...&lt;br /&gt;
// this means that all quantities will be updated as well based on entries above&lt;br /&gt;
// and vice-verse if a discount is entered and the update is clicked for a quantity...&lt;br /&gt;
// the system will attempt to apply the discount&lt;br /&gt;
// the single update function tries to update quantities, discounts and shipping selection&lt;br /&gt;
echo &amp;quot;&amp;lt;a href=\&amp;quot;javascript:window.document.cartForm.submit();\&amp;quot;&amp;gt;APPLY&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// display the discounts&lt;br /&gt;
// loop thru discount array&lt;br /&gt;
foreach ($discountArr as $disc){&lt;br /&gt;
	&lt;br /&gt;
	// discount the discount code&lt;br /&gt;
	// this is the same code entered by the user to apply the discount&lt;br /&gt;
	echo &amp;quot;&amp;lt;br&amp;gt;Discount: &amp;quot; . $disc['discountCode'];&lt;br /&gt;
	&lt;br /&gt;
	// display a link to remove the discount&lt;br /&gt;
	// this is necessary as some discounts will not work with other discounts in the cart&lt;br /&gt;
	// also admins can set the carts to only allow one discount per order in Settings&lt;br /&gt;
	echo &amp;quot; &amp;lt;a href=\&amp;quot;index.php?fa=ORDER.discountRemove&amp;amp;discountId=&amp;quot; . $disc['discountId'] . &amp;quot;\&amp;quot;&amp;gt;remove&amp;lt;/a&amp;gt; &amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
	// discount description&lt;br /&gt;
	echo $disc['description'];&lt;br /&gt;
	&lt;br /&gt;
	// discount value&lt;br /&gt;
	// note we add the negative &amp;quot;-&amp;quot; sign&lt;br /&gt;
	// as all discount values are in the array as positive numbers&lt;br /&gt;
	// only show this discount amount if it isn't $0 (free product discounts will show as $0)&lt;br /&gt;
	if($disc['amount'] &amp;gt; 0) echo &amp;quot; -&amp;quot; . eV::dollarFormat($disc['amount']);&lt;br /&gt;
&lt;br /&gt;
// end loop through discounts&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// shipping options&lt;br /&gt;
// lets only display if there are items in the cart&lt;br /&gt;
if(count($itemArr) &amp;gt; 0){&lt;br /&gt;
&lt;br /&gt;
	echo &amp;quot;&amp;lt;hr&amp;gt;Select Shipping Option: &amp;quot;;&lt;br /&gt;
	// shipping option select field&lt;br /&gt;
	// note the name of the field &amp;quot;shipping4addressId#...&lt;br /&gt;
	// .. this is to support multiple shipping addresses with different ship methods...&lt;br /&gt;
	// .. a future function&lt;br /&gt;
	// also note that the address and shipping data are attached to the item(s)&lt;br /&gt;
	// we call on the sale_addressId from the first item since we are not using multi-shipto-addresses&lt;br /&gt;
	// only need this field if multiple shipping options for visitor, otherwise don't include&lt;br /&gt;
	echo &amp;quot;&amp;lt;select name=\&amp;quot;shipping4addressId&amp;quot; . $itemArr[0]['sale_addressId'] . &amp;quot;\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
	// loop thru each shipping option and display as an option&lt;br /&gt;
		for($i=0;$i&amp;lt;count($shipArr);$i++){&lt;br /&gt;
		// start the option box, set the typeCode as the value&lt;br /&gt;
		echo &amp;quot;&amp;lt;option value=\&amp;quot;&amp;quot; . $shipArr[$i]['typeCode'] . &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
		// if this matches the current ship method selected by user, than select this option&lt;br /&gt;
		if($shipArr[$i]['typeCode'] == $itemArr[0]['shipTypeCode']) echo &amp;quot; selected &amp;quot;;&lt;br /&gt;
		// complete the option box, display the full ship type and it's cost&lt;br /&gt;
		echo &amp;quot;&amp;gt;&amp;quot; . $shipArr[$i]['type'] . &amp;quot; : &amp;quot; . eV::dollarFormat($shipArr[$i]['shipAmount']) . &amp;quot;&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
	// end loop through shipping options&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// close out the shipping select field&lt;br /&gt;
	echo &amp;quot;\n&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	// zip code entry field for shipping&lt;br /&gt;
	echo &amp;quot; Enter Zip Code: &amp;quot;;&lt;br /&gt;
	// note we popoulate it with the zipCode from the first item in the cart&lt;br /&gt;
	// only need zipCode here if using zip based shipping, like fedex&lt;br /&gt;
	// level shipping is not zip code based, therefore dont need this field&lt;br /&gt;
	echo &amp;quot;&amp;lt;input type=\&amp;quot;text\&amp;quot; name=\&amp;quot;zipCode\&amp;quot; value=\&amp;quot;&amp;quot; . $itemArr[0]['zipCode'] . &amp;quot;\&amp;quot; size=\&amp;quot;12\&amp;quot; maxlength=\&amp;quot;10\&amp;quot;&amp;gt; &amp;quot;;&lt;br /&gt;
	// update link&lt;br /&gt;
	// as before, updating the form will post changes to shipping, add discount and post changes to quantities&lt;br /&gt;
	echo &amp;quot;&amp;lt;a href=\&amp;quot;javascript:window.document.cartForm.submit();\&amp;quot;&amp;gt;update&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
	// current shipping charge&lt;br /&gt;
	echo &amp;quot; Shipping: &amp;quot; . eV::dollarFormat($orderArr['shippingTotal']);&lt;br /&gt;
	&lt;br /&gt;
	// lets show the total due&lt;br /&gt;
	echo &amp;quot;&amp;lt;hr&amp;gt;Total: &amp;quot; . eV::dollarFormat($orderArr['totalDue']);&lt;br /&gt;
        &lt;br /&gt;
// end if items in cart&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// repeat link to continue checkout process&lt;br /&gt;
// note we only show it if items are in the cart. No reason to checkout on empty cart&lt;br /&gt;
// note we are using the redirectIfRegistered attribute to have user skip this page if they are registered (logged in) and go directly to the checkoutBilling page&lt;br /&gt;
// if your checkout order is shipping BEFORE billing be sure to change the redirect to ORDER.checkoutShipping&lt;br /&gt;
// note the $securedSiteURL attribute in the anchor tag - this will retrieve the value in settings for the Secure Site URL&lt;br /&gt;
if(count($itemArr) &amp;gt; 0) echo &amp;quot;&amp;lt;hr&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot; . $iProducts['securedSiteUrl']. &amp;quot;/index.php?fa=ORDER.register&amp;amp;redirectIfRegistered=&amp;quot; . rawurlencode('index.php?fa=ORDER.checkoutBilling') . &amp;quot;\&amp;quot;&amp;gt;CONTINUE CHECKOUT&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// close out the form&lt;br /&gt;
echo &amp;quot;&amp;lt;/form&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create shopping cart page ==&lt;br /&gt;
; assign the new cart template to this page&lt;br /&gt;
; check the 'hide this page from in-site searches'&lt;br /&gt;
; post this page and take note of the page Id&lt;br /&gt;
&lt;br /&gt;
== Set new page as shopping cart ==&lt;br /&gt;
; In settings &amp;gt; eCommerce tab: enter the pageId for the page just created into the &amp;quot;cart page id&amp;quot; field.&lt;br /&gt;
; post changes to settings&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Page_Templates:Creating_a_Confirmation_Template&amp;diff=726</id>
		<title>Page Templates:Creating a Confirmation Template</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Page_Templates:Creating_a_Confirmation_Template&amp;diff=726"/>
				<updated>2009-04-13T12:56:18Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: added $securedSiteURL&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Page Template Managers Shortcuts}}&lt;br /&gt;
The confirmation / review template shows the visitor all the order information and provided a link to process the order / payment.&lt;br /&gt;
&lt;br /&gt;
After creating the template, setup a page for it. Place the pageId of this new page in Settings &amp;gt; eCommerce tab: &amp;quot;Confirmation Page Id&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Sample content is below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// get order data&lt;br /&gt;
$orderArray = eV::orderGetCompleteArray();&lt;br /&gt;
&lt;br /&gt;
// shortcut order info&lt;br /&gt;
$orderArr = $orderArray['order'];&lt;br /&gt;
// short cut payment info&lt;br /&gt;
$payArr = $orderArray['payments'][0];&lt;br /&gt;
// short cut the item info&lt;br /&gt;
$itemArr = $orderArray['items'];&lt;br /&gt;
// short cut shipping address info&lt;br /&gt;
$shipArr = $itemArr[0];&lt;br /&gt;
// shortcut discount data&lt;br /&gt;
$discArr = $orderArray['discounts'];&lt;br /&gt;
&lt;br /&gt;
// output shipping address&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Shipping to: &amp;quot;;&lt;br /&gt;
// link to change shipping address&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;index.php?fa=ORDER.checkoutShipping\&amp;quot;&amp;gt;EDIT&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
// shipping address data&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot; . $shipArr['firstName'] . &amp;quot; &amp;quot; . $shipArr['lastName'] . &amp;quot;&lt;br /&gt;
		&amp;lt;br&amp;gt;&amp;quot; . $shipArr['street1'] . &amp;quot;&lt;br /&gt;
		&amp;lt;br&amp;gt;&amp;quot; . $shipArr['street2'] . &amp;quot;&lt;br /&gt;
		&amp;lt;br&amp;gt;&amp;quot; . $shipArr['city'] . &amp;quot;, &amp;quot; . $shipArr['state'] . &amp;quot; &amp;quot; . $shipArr['zipCode'] . &amp;quot;&lt;br /&gt;
		&amp;lt;br&amp;gt;&amp;quot; . $shipArr['country'];&lt;br /&gt;
		&lt;br /&gt;
// shipping instructions&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Instructions: &amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot; . $shipArr['instructions'];&lt;br /&gt;
&lt;br /&gt;
// output billing address&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Billing Method: &amp;quot;;&lt;br /&gt;
// link to change billing address&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot; . $iProducts['securedSiteUrl']. &amp;quot;/index.php?fa=ORDER.checkoutBilling\&amp;quot;&amp;gt;EDIT&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
// billing adddress data&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot; . $payArr['firstName'] . &amp;quot; &amp;quot; . $payArr['lastName'] . &amp;quot;&lt;br /&gt;
		&amp;lt;br&amp;gt;&amp;quot; . $payArr['street1'] . &amp;quot;&lt;br /&gt;
		&amp;lt;br&amp;gt;&amp;quot; . $payArr['street2'] . &amp;quot;&lt;br /&gt;
		&amp;lt;br&amp;gt;&amp;quot; . $payArr['city'] . &amp;quot;, &amp;quot; . $payArr['state'] . &amp;quot; &amp;quot; . $payArr['zipCode'] . &amp;quot;&lt;br /&gt;
		&amp;lt;br&amp;gt;&amp;quot; . $payArr['country'];&lt;br /&gt;
&lt;br /&gt;
// output items in shopping cart&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Items: &amp;quot;;&lt;br /&gt;
// link to go back to cart&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot; . $iProducts['securedSiteUrl']. &amp;quot;/index.php?ORDER.cartView\&amp;quot;&amp;gt;EDIT&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
// loop thru items&lt;br /&gt;
foreach($itemArr as $item){&lt;br /&gt;
	// link back to product page&lt;br /&gt;
	// note we can pass the productId in the URL and it will find the first page with that product in it&lt;br /&gt;
	echo &amp;quot;&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot; . $iProducts['siteUrl']. &amp;quot;index.php?productId=&amp;quot; . $item['productId'] . &amp;quot;\&amp;quot;&amp;gt;&amp;quot; . $item['productName'] . &amp;quot;&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
	echo &amp;quot; Item #: &amp;quot; . $item['sku'];&lt;br /&gt;
	if($item['isDiscontinued']) echo &amp;quot; Discontinued &amp;quot;;&lt;br /&gt;
	echo $item['quantity'] . &amp;quot; x &amp;quot; . eV::dollarFormat($item['pricePer']) . &amp;quot; = &amp;quot; . eV::dollarFormat($item['quantity'] * $item['pricePer']);&lt;br /&gt;
	echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot; . $item['cartDescription'];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// output item total&lt;br /&gt;
// this is the merchandise total for all the items in the cart added up		&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Merchandise Total: &amp;quot; .  eV::dollarFormat($orderArr['itemTotal']);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// output shipping method&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Shipping Method: &amp;quot; .  $shipArr['shipTypeCode'] . &amp;quot;: &amp;quot; . $shipArr['shipType'];&lt;br /&gt;
// shipping cost&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Shipping Cost: &amp;quot; .  eV::dollarFormat($orderArr['shippingTotal']);&lt;br /&gt;
&lt;br /&gt;
// discount form to submit discount&lt;br /&gt;
// start discount form&lt;br /&gt;
echo &amp;quot; &amp;lt;form action=\&amp;quot;index.php\&amp;quot; method=\&amp;quot;post\&amp;quot; name=\&amp;quot;discountForm\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Enter Promo Code: &amp;lt;input name=\&amp;quot;discountCode\&amp;quot; type=\&amp;quot;text\&amp;quot; size=\&amp;quot;7\&amp;quot; /&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;input type=\&amp;quot;submit\&amp;quot; value=\&amp;quot;Apply Code\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// output codes already applied&lt;br /&gt;
foreach($discArr as $disc) echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot; . $disc['discountCode'] . &amp;quot;: &amp;quot; . $disc['description'] . &amp;quot; :&amp;quot; . eV::dollarFormat($disc['amount']);&lt;br /&gt;
&lt;br /&gt;
// tax and total&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Tax: &amp;quot; . eV::dollarFormat($orderArr['taxTotal']);&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Order Total: &amp;quot; . eV::dollarFormat($orderArr['grandTotal']); // use 'totalDue' if accepting partial payments, this will show how much it oustanding instead of total amount&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// payment method info&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Payment Method: &amp;quot;;&lt;br /&gt;
// payment edit link&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;index.php?fa=ORDER.checkoutPayment\&amp;quot;&amp;gt;EDIT&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
// payment data&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;**** **** **** &amp;quot; . substr($payArr['accountNumber'],(strlen($payArr['accountNumber'])-4),4);&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;Expires: &amp;quot; . date('m/Y',strtotime($payArr['expDate']));&lt;br /&gt;
     &lt;br /&gt;
// process order link&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot; . $iProducts['securedSiteUrl']. &amp;quot;/index.php?fa=ORDER.process\&amp;quot;&amp;gt;PROCESS ORDER&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Page_Templates:Creating_a_Registration_Template&amp;diff=725</id>
		<title>Page Templates:Creating a Registration Template</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Page_Templates:Creating_a_Registration_Template&amp;diff=725"/>
				<updated>2009-04-13T12:53:38Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: added $securedSiteURL&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Page Template Managers Shortcuts}}&lt;br /&gt;
The registration template is very basic. It requires a login form and links to the forgotten password and create account pages. It is recommended a check is done to see if the user is logged in and forward them to the next step in the checkout if they are.&lt;br /&gt;
&lt;br /&gt;
After creating the template, setup a page for it. Place the pageId of this new page in Settings &amp;gt; eCommerce tab: &amp;quot;Registration Page Id&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Sample content is below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// check if user is logged in&lt;br /&gt;
// using the core variable isLoggedIn&lt;br /&gt;
// and the redirect function&lt;br /&gt;
// sending to the shipping checkout page&lt;br /&gt;
// sometiems clients want billing address before shipping, simply change to ORDER.checkoutBilling if that is the case&lt;br /&gt;
if($isLoggedIn) eV::redirect('index.php?fa=ORDER.checkoutShipping');&lt;br /&gt;
&lt;br /&gt;
// display message (this will contain login errors, etc, if the forms point failures back to this page)&lt;br /&gt;
if(!empty($message)) echo &amp;quot;&amp;lt;p&amp;gt;&amp;lt;font color=\&amp;quot;red\&amp;quot;&amp;gt;$message&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// output form and links&lt;br /&gt;
// sometiems clients want billing address before shipping, simply change to ORDER.checkoutBilling if that is the case&lt;br /&gt;
// note the $securedSiteURL attribute in the anchor tag - this will retrieve the value in settings for the Secure Site URL&lt;br /&gt;
echo &amp;quot;&lt;br /&gt;
&amp;lt;a href=\&amp;quot;$securedSiteURL/index.php?fa=ORDER.checkoutShipping\&amp;quot;&amp;gt;Checkout Without Logging In&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Log In:&lt;br /&gt;
// note the $securedSiteURL attribute in the form action - this will retrieve the value in settings for the Secure Site URL&lt;br /&gt;
&amp;lt;form action=\&amp;quot;$securedSiteURL/index.php\&amp;quot; method=\&amp;quot;post\&amp;quot; name=\&amp;quot;registeredLoginForm\&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Email Address:&lt;br /&gt;
&amp;lt;input name=\&amp;quot;emailAddress\&amp;quot; size=\&amp;quot;20\&amp;quot; type=\&amp;quot;text\&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Password:&lt;br /&gt;
&amp;lt;input name=\&amp;quot;password\&amp;quot; size=\&amp;quot;20\&amp;quot; type=\&amp;quot;password\&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- enter page id for forget your password page --&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;index.php?pageId=1223\&amp;quot;&amp;gt;Forgot your password&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;input type=\&amp;quot;submit\&amp;quot; value=\&amp;quot;Log In\&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- required hidden fields for login to work --&amp;gt;&lt;br /&gt;
&amp;lt;input name=\&amp;quot;fa\&amp;quot; type=\&amp;quot;hidden\&amp;quot; value=\&amp;quot;USER.login\&amp;quot; /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- redirect tells it where to go after a successful login --&amp;gt;&lt;br /&gt;
&amp;lt;!-- sometiems clients want billing address before shipping, simply change to ORDER.checkoutBilling if that is the case --&amp;gt;&lt;br /&gt;
&amp;lt;input name=\&amp;quot;redirect\&amp;quot; type=\&amp;quot;hidden\&amp;quot; value=\&amp;quot;$securedSiteURL/index.php?fa=ORDER.checkoutShipping&amp;amp;message=You have successfully logged in\&amp;quot; /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- redirectOnFailure tells the system where to go if login fails --&amp;gt;&lt;br /&gt;
&amp;lt;input name=\&amp;quot;redirectOnFailure\&amp;quot; type=\&amp;quot;hidden\&amp;quot; value=\&amp;quot;$securedSiteURL/index.php?fa=ORDER.register&amp;amp;message=Login Failure\&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
Don't have an account?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- link to the pageId that contains the create account form content --&amp;gt;&lt;br /&gt;
&amp;lt;!-- pass the successForward variable to tell it where to go to if the account is successfully setup --&amp;gt;&lt;br /&gt;
&amp;lt;!-- sometiems clients want billing address before shipping, simply change to ORDER.checkoutBilling if that is the case --&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;$securedSiteURL/index.php?pageId=2&amp;amp;redirect=index.php%3Ffa%3DORDER.checkoutShipping\&amp;quot;&amp;gt;CLICK HERE&amp;lt;/a&amp;gt; to create one&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- some sites may want to let the visiter enter thier email address here and have it pass to the create account form --&amp;gt;&lt;br /&gt;
&amp;lt;!-- do the following INSTEAD of the above a href in this case --&amp;gt;&lt;br /&gt;
&amp;lt;form action=\&amp;quot;index.php\&amp;quot; method=\&amp;quot;POST\&amp;quot; name=\&amp;quot;createAccountForm\&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Create an Account&lt;br /&gt;
&amp;lt;br&amp;gt;Email Address: &lt;br /&gt;
&amp;lt;input name=\&amp;quot;emailAddress\&amp;quot; type=\&amp;quot;text\&amp;quot; size=\&amp;quot;50\&amp;quot; maxlength=\&amp;quot;255\&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- enter the pageId of the create account page into the value field below --&amp;gt;&lt;br /&gt;
&amp;lt;input type=\&amp;quot;hidden\&amp;quot; name=\&amp;quot;pageId\&amp;quot; value=\&amp;quot;123\&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- the following redirect field tells the target create account form where to go after the account has been created --&amp;gt;&lt;br /&gt;
&amp;lt;input type=\&amp;quot;hidden\&amp;quot; name=\&amp;quot;redirect\&amp;quot; value=\&amp;quot;$securedSiteURL/index.php?fa=ORDER.checkoutShipping&amp;amp;message=Your account has been created\&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=\&amp;quot;submit\&amp;quot; value=\&amp;quot;Create an account\&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Page_Templates:Creating_a_Shopping_Cart_Template&amp;diff=724</id>
		<title>Page Templates:Creating a Shopping Cart Template</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Page_Templates:Creating_a_Shopping_Cart_Template&amp;diff=724"/>
				<updated>2009-04-13T12:51:08Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: added $securedSiteURL&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Page Template Managers Shortcuts}}&lt;br /&gt;
== Create shopping cart template ==&lt;br /&gt;
&lt;br /&gt;
Below is an example shopping cart template:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// shopping cart &lt;br /&gt;
&lt;br /&gt;
// get our order info&lt;br /&gt;
$completeOrderArray = eV::orderGetCompleteArray($_SESSION['order']['orderId']);&lt;br /&gt;
&lt;br /&gt;
// shortcut the assoc arrays returned, easier to reference later&lt;br /&gt;
$orderArr = $completeOrderArray['order'];&lt;br /&gt;
$itemArr = $completeOrderArray['items'];&lt;br /&gt;
$discountArr = $completeOrderArray['discounts'];&lt;br /&gt;
// payment info not usually shown in cart, but for the sake of this example ill shortcut it also&lt;br /&gt;
$paymentArr = $completeOrderArray['payments'];&lt;br /&gt;
&lt;br /&gt;
// get shipping information to be used in shipping selection&lt;br /&gt;
// first set a blank array&lt;br /&gt;
$shipArr = array();&lt;br /&gt;
// than populate the array onlyy if items are in the cart&lt;br /&gt;
// this will error out with no items in cart as the attempt...&lt;br /&gt;
// ... to get the zip code from an invalid item index will error&lt;br /&gt;
// note we pass the zip code from the first item  - ship addresses are tied to items&lt;br /&gt;
// note we get the weightTotal from the orderArr&lt;br /&gt;
&lt;br /&gt;
// below is a sample call if we are using zip, weight based shipping:&lt;br /&gt;
if(!empty($itemArr)) $shipArr = eV::orderGetShipArray(NULL,$itemArr[0]['zipCode'],$orderArr['weightTotal']);&lt;br /&gt;
&lt;br /&gt;
// below is a smple call if we are using shipping levels&lt;br /&gt;
// which are $ based, not ship / weight based&lt;br /&gt;
if(!empty($itemArr)) $shipArr = eV::orderGetShipArray($orderArr['itemTotal']);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// link to continue checkout process&lt;br /&gt;
// note we only show it if items are in the cart. No reason to checkout on empty cart&lt;br /&gt;
// note we are using the redirectIfRegistered attribute to have user skip this page if they are registered (logged in) and go directly to the checkoutBilling page&lt;br /&gt;
// if your checkout order is shipping BEFORE billing be sure to change the redirect to ORDER.checkoutShipping&lt;br /&gt;
// note the $securedSiteURL attribute in the anchor tag - this will retrieve the value in settings for the Secure Site URL&lt;br /&gt;
if(count($itemArr) &amp;gt; 0) echo &amp;quot;&amp;lt;a href=\&amp;quot;$securedSiteURL/index.php?fa=ORDER.register&amp;amp;redirectIfRegistered=&amp;quot; . rawurlencode('index.php?fa=ORDER.checkoutBilling') . &amp;quot;\&amp;quot;&amp;gt;CONTINUE CHECKOUT&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// start the cart form&lt;br /&gt;
echo &amp;quot;&amp;lt;form action=\&amp;quot;index.php\&amp;quot; method=\&amp;quot;post\&amp;quot; name=\&amp;quot;cartForm\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
// hidden attrib - rrquired for cart form, tells it what to do when submitted&lt;br /&gt;
echo &amp;quot;&amp;lt;input type=\&amp;quot;hidden\&amp;quot; name=\&amp;quot;fa\&amp;quot; value=\&amp;quot;ORDER.cartUpdate\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// display any messages passed into the cart&lt;br /&gt;
// this will show notification messages to the shopper, such as when they add discounts to the cart, or a discount gets dropped because they no longer qualify, etc...&lt;br /&gt;
if(!empty($message)) echo &amp;quot;&amp;lt;hr&amp;gt;$message&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// drop a message that the cart is empty if nothing is in it&lt;br /&gt;
if(count($itemArr) == 0) {&lt;br /&gt;
	echo &amp;quot;&amp;lt;hr&amp;gt;Your cart is empty&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
	// something in it? well lets let visitor know what we are about to display&lt;br /&gt;
	echo &amp;quot;&amp;lt;hr&amp;gt;Cart Items:&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// alrighty lets loop thru items in cart and display them&lt;br /&gt;
foreach($itemArr as $item){&lt;br /&gt;
	// link back to product&lt;br /&gt;
	// note we can pass the productId in the URL and the system will find the first page that contains that product&lt;br /&gt;
    echo &amp;quot;&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;index.php?productId=&amp;quot; . $item['productId'] .  &amp;quot;\&amp;quot;&amp;gt;&amp;quot; . $item['productName'] . &amp;quot;&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
	// display the cart description, only if it has value&lt;br /&gt;
 	if(!empty($item['cartDescription'])) echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot; . $item['cartDescription'];&lt;br /&gt;
&lt;br /&gt;
	// does this item have options? lets spit em out then....&lt;br /&gt;
	if(count($item['options']) &amp;gt; 0){&lt;br /&gt;
		echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
		// loop through the options&lt;br /&gt;
		foreach($item['options'] as $option){&lt;br /&gt;
			// display the option&lt;br /&gt;
			echo $option['groupName'] . &amp;quot;: &amp;quot; .$option['title'] . &amp;quot; &amp;quot;;&lt;br /&gt;
			// if item has a dollar value associated with it, lets show that also...&lt;br /&gt;
			// the dollarFormat function is a quick shortcut to turn an int/float into a dollar formatted output&lt;br /&gt;
			if(floatval($option['price']) &amp;gt; 0) echo &amp;quot;(+&amp;quot; . eV::dollarFormat($option['price']) . &amp;quot;) &amp;quot;;&lt;br /&gt;
		// end looping through options&lt;br /&gt;
		};&lt;br /&gt;
	// end if we have options&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	// display the item sku&lt;br /&gt;
	// the item sku is the full appended sku including the productNumber + all option skus&lt;br /&gt;
	echo &amp;quot;&amp;lt;br&amp;gt;Item #: &amp;quot; . $item['sku'];&lt;br /&gt;
&lt;br /&gt;
// ONLY SHOW the quantity field and remove link IF THIS IS NOT a free item due to a discount code&lt;br /&gt;
// also show &amp;quot;FREE&amp;quot; instead of $0 for line total, if it is a free item due to a discount code&lt;br /&gt;
	if(empty($item['freeItem_discountId'])){&lt;br /&gt;
		// quantity field&lt;br /&gt;
		// note the name is quantity# where # is the itemId&lt;br /&gt;
		// This tells the recieving script what quantity to change&lt;br /&gt;
		echo &amp;quot;&amp;lt;input name=\&amp;quot;quantity&amp;quot; . $item['itemId'] . &amp;quot;\&amp;quot; value=\&amp;quot;&amp;quot; . $item['quantity'] . &amp;quot;\&amp;quot; type=\&amp;quot;text\&amp;quot; size=\&amp;quot;5\&amp;quot; /&amp;gt;&amp;quot;;&lt;br /&gt;
		// update link&lt;br /&gt;
		// this link just submits the form&lt;br /&gt;
		// all quantities will be updates upon form submittion&lt;br /&gt;
 		// the single update function tries to update quantities, discounts and shipping selection&lt;br /&gt;
		echo &amp;quot;&amp;lt;a href=\&amp;quot;javascript:window.document.cartForm.submit();\&amp;quot;&amp;gt;UPDATE&amp;lt;/a&amp;gt; &amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
		// remove link&lt;br /&gt;
		// this does the same thing as submitting the quantity form...&lt;br /&gt;
		// except it instructs one item quantity to be set to 0...&lt;br /&gt;
		// which the system will use as a queue to drop the item all together&lt;br /&gt;
		// note that other item's quantities are not passed here...&lt;br /&gt;
		// if not passed, the system will leave thier quantity as is&lt;br /&gt;
		echo &amp;quot;&amp;lt;a href=\&amp;quot;index.php?fa=ORDER.cartUpdate&amp;amp;quantity&amp;quot; . $item['itemId'] . &amp;quot;=0\&amp;quot;&amp;gt;REMOVE&amp;lt;/a&amp;gt; &amp;quot;;&lt;br /&gt;
		// output the price per item and the total price (quantity x pricePer)&lt;br /&gt;
		echo &amp;quot;x &amp;quot; . eV::dollarFormat($item['pricePer']) . &amp;quot; = &amp;quot; . eV::dollarFormat(($item['pricePer'] * $item['quantity']));&lt;br /&gt;
	} else {&lt;br /&gt;
		// if this is a free item, lets display FREE instead of $0&lt;br /&gt;
		echo &amp;quot; FREE &amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
// end looping through items&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// merchandise total&lt;br /&gt;
echo &amp;quot;&amp;lt;hr&amp;gt;TOTAL:&amp;quot; .  eV::dollarFormat($orderArr['itemTotal']);&lt;br /&gt;
&lt;br /&gt;
// add a discount/coupon form field&lt;br /&gt;
echo &amp;quot;&amp;lt;hr&amp;gt;Enter Coupon Here: &amp;lt;input name=\&amp;quot;discountCode\&amp;quot; type=\&amp;quot;text\&amp;quot; size=\&amp;quot;15\&amp;quot; /&amp;gt; &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// link to post discount&lt;br /&gt;
// note this link submits the cart form...&lt;br /&gt;
// this means that all quantities will be updated as well based on entries above&lt;br /&gt;
// and vice-verse if a discount is entered and the update is clicked for a quantity...&lt;br /&gt;
// the system will attempt to apply the discount&lt;br /&gt;
// the single update function tries to update quantities, discounts and shipping selection&lt;br /&gt;
echo &amp;quot;&amp;lt;a href=\&amp;quot;javascript:window.document.cartForm.submit();\&amp;quot;&amp;gt;APPLY&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// display the discounts&lt;br /&gt;
// loop thru discount array&lt;br /&gt;
foreach ($discountArr as $disc){&lt;br /&gt;
	&lt;br /&gt;
	// discount the discount code&lt;br /&gt;
	// this is the same code entered by the user to apply the discount&lt;br /&gt;
	echo &amp;quot;&amp;lt;br&amp;gt;Discount: &amp;quot; . $disc['discountCode'];&lt;br /&gt;
	&lt;br /&gt;
	// display a link to remove the discount&lt;br /&gt;
	// this is necessary as some discounts will not work with other discounts in the cart&lt;br /&gt;
	// also admins can set the carts to only allow one discount per order in Settings&lt;br /&gt;
	echo &amp;quot; &amp;lt;a href=\&amp;quot;index.php?fa=ORDER.discountRemove&amp;amp;discountId=&amp;quot; . $disc['discountId'] . &amp;quot;\&amp;quot;&amp;gt;remove&amp;lt;/a&amp;gt; &amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
	// discount description&lt;br /&gt;
	echo $disc['description'];&lt;br /&gt;
	&lt;br /&gt;
	// discount value&lt;br /&gt;
	// note we add the negative &amp;quot;-&amp;quot; sign&lt;br /&gt;
	// as all discount values are in the array as positive numbers&lt;br /&gt;
	// only show this discount amount if it isn't $0 (free product discounts will show as $0)&lt;br /&gt;
	if($disc['amount'] &amp;gt; 0) echo &amp;quot; -&amp;quot; . eV::dollarFormat($disc['amount']);&lt;br /&gt;
&lt;br /&gt;
// end loop through discounts&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// shipping options&lt;br /&gt;
// lets only display if there are items in the cart&lt;br /&gt;
if(count($itemArr) &amp;gt; 0){&lt;br /&gt;
&lt;br /&gt;
	echo &amp;quot;&amp;lt;hr&amp;gt;Select Shipping Option: &amp;quot;;&lt;br /&gt;
	// shipping option select field&lt;br /&gt;
	// note the name of the field &amp;quot;shipping4addressId#...&lt;br /&gt;
	// .. this is to support multiple shipping addresses with different ship methods...&lt;br /&gt;
	// .. a future function&lt;br /&gt;
	// also note that the address and shipping data are attached to the item(s)&lt;br /&gt;
	// we call on the sale_addressId from the first item since we are not using multi-shipto-addresses&lt;br /&gt;
	// only need this field if multiple shipping options for visitor, otherwise don't include&lt;br /&gt;
	echo &amp;quot;&amp;lt;select name=\&amp;quot;shipping4addressId&amp;quot; . $itemArr[0]['sale_addressId'] . &amp;quot;\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
	// loop thru each shipping option and display as an option&lt;br /&gt;
		for($i=0;$i&amp;lt;count($shipArr);$i++){&lt;br /&gt;
		// start the option box, set the typeCode as the value&lt;br /&gt;
		echo &amp;quot;&amp;lt;option value=\&amp;quot;&amp;quot; . $shipArr[$i]['typeCode'] . &amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
		// if this matches the current ship method selected by user, than select this option&lt;br /&gt;
		if($shipArr[$i]['typeCode'] == $itemArr[0]['shipTypeCode']) echo &amp;quot; selected &amp;quot;;&lt;br /&gt;
		// complete the option box, display the full ship type and it's cost&lt;br /&gt;
		echo &amp;quot;&amp;gt;&amp;quot; . $shipArr[$i]['type'] . &amp;quot; : &amp;quot; . eV::dollarFormat($shipArr[$i]['shipAmount']) . &amp;quot;&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
	// end loop through shipping options&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// close out the shipping select field&lt;br /&gt;
	echo &amp;quot;\n&amp;lt;/select&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	// zip code entry field for shipping&lt;br /&gt;
	echo &amp;quot; Enter Zip Code: &amp;quot;;&lt;br /&gt;
	// note we popoulate it with the zipCode from the first item in the cart&lt;br /&gt;
	// only need zipCode here if using zip based shipping, like fedex&lt;br /&gt;
	// level shipping is not zip code based, therefore dont need this field&lt;br /&gt;
	echo &amp;quot;&amp;lt;input type=\&amp;quot;text\&amp;quot; name=\&amp;quot;zipCode\&amp;quot; value=\&amp;quot;&amp;quot; . $itemArr[0]['zipCode'] . &amp;quot;\&amp;quot; size=\&amp;quot;12\&amp;quot; maxlength=\&amp;quot;10\&amp;quot;&amp;gt; &amp;quot;;&lt;br /&gt;
	// update link&lt;br /&gt;
	// as before, updating the form will post changes to shipping, add discount and post changes to quantities&lt;br /&gt;
	echo &amp;quot;&amp;lt;a href=\&amp;quot;javascript:window.document.cartForm.submit();\&amp;quot;&amp;gt;update&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
	// current shipping charge&lt;br /&gt;
	echo &amp;quot; Shipping: &amp;quot; . eV::dollarFormat($orderArr['shippingTotal']);&lt;br /&gt;
	&lt;br /&gt;
	// lets show the total due&lt;br /&gt;
	echo &amp;quot;&amp;lt;hr&amp;gt;Total: &amp;quot; . eV::dollarFormat($orderArr['totalDue']);&lt;br /&gt;
        &lt;br /&gt;
// end if items in cart&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// repeat link to continue checkout process&lt;br /&gt;
// note we only show it if items are in the cart. No reason to checkout on empty cart&lt;br /&gt;
// note we are using the redirectIfRegistered attribute to have user skip this page if they are registered (logged in) and go directly to the checkoutBilling page&lt;br /&gt;
// if your checkout order is shipping BEFORE billing be sure to change the redirect to ORDER.checkoutShipping&lt;br /&gt;
// note the $securedSiteURL attribute in the anchor tag - this will retrieve the value in settings for the Secure Site URL&lt;br /&gt;
if(count($itemArr) &amp;gt; 0) echo &amp;quot;&amp;lt;hr&amp;gt;&amp;lt;a href=\&amp;quot;$securedSiteURL/index.php?fa=ORDER.register&amp;amp;redirectIfRegistered=&amp;quot; . rawurlencode('index.php?fa=ORDER.checkoutBilling') . &amp;quot;\&amp;quot;&amp;gt;CONTINUE CHECKOUT&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// close out the form&lt;br /&gt;
echo &amp;quot;&amp;lt;/form&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create shopping cart page ==&lt;br /&gt;
; assign the new cart template to this page&lt;br /&gt;
; check the 'hide this page from in-site searches'&lt;br /&gt;
; post this page and take note of the page Id&lt;br /&gt;
&lt;br /&gt;
== Set new page as shopping cart ==&lt;br /&gt;
; In settings &amp;gt; eCommerce tab: enter the pageId for the page just created into the &amp;quot;cart page id&amp;quot; field.&lt;br /&gt;
; post changes to settings&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Template:Page_Template_Functions_Shortcuts&amp;diff=723</id>
		<title>Template:Page Template Functions Shortcuts</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Template:Page_Template_Functions_Shortcuts&amp;diff=723"/>
				<updated>2009-04-13T01:02:32Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: added orderGetFirstName&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table align=right style=&amp;quot;background-color: #DDDDDD;&amp;quot; cellpadding=0 cellspacing=0 border=0&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
{{Page Template Managers Shortcuts}}&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
[[Page Templates:Functions|Page Template Functions]]&lt;br /&gt;
*[[functions:addressCountryOptions|addressCountryOptions]]&lt;br /&gt;
*[[functions:addressCountryNameGet|addressCountryNameGet]]&lt;br /&gt;
*[[functions:addressStateOptions|addressStateOptions]]&lt;br /&gt;
*[[functions:addressZipDetailsGet|addressZipDetailsGet]]&lt;br /&gt;
*[[functions:authorizeIsLoggedIn|authorizeIsLoggedIn]]&lt;br /&gt;
*[[functions:authorizeIsLoggedOut|authorizeIsLoggedOut]]&lt;br /&gt;
*[[functions:captchaCheck|captchaCheck]]&lt;br /&gt;
*[[functions:catalogProductsGet|catalogProductsGet]]&lt;br /&gt;
*[[functions:continueShoppingGet|continueShoppingGet]]&lt;br /&gt;
*[[functions:continueShoppingSet|continueShopppingSet]]&lt;br /&gt;
*[[functions:dollarFormat|dollarFormat]]&lt;br /&gt;
*[[functions:fullyQualifyAllURLs|fullyQualifyAllURLs]]&lt;br /&gt;
*[[functions:ipBlockCheck|ipBlockCheck]]&lt;br /&gt;
*[[functions:itemLayout_dataString2Array|itemLayout_dataString2Array]]&lt;br /&gt;
*[[functions:mysqlquery2array|mysqlquery2array]]&lt;br /&gt;
*[[functions:orderExpDateOptions|orderExpDateOptions]]&lt;br /&gt;
*[[functions:orderGetCompleteArray|orderGetCompleteArray]]&lt;br /&gt;
*[[functions:orderGetEmail|orderGetEmail]]&lt;br /&gt;
*[[functions:orderGetFirstName|orderGetFirstName]]&lt;br /&gt;
*[[functions:orderGetPayTypes|orderGetPayTypes]]&lt;br /&gt;
*[[functions:orderGetShipArray|orderGetShipArray]]&lt;br /&gt;
*[[functions:orderGetSummary|orderGetSummary]]&lt;br /&gt;
*[[functions:ordersGetList|ordersGetList]]&lt;br /&gt;
*[[functions:orderPayTypeOptions|orderPayTypeOptions]]&lt;br /&gt;
*[[functions:orderShipFedexRate|orderShipFedexRate]]&lt;br /&gt;
*[[functions:orderShipAdjustRate|orderShipAdjustRate]]&lt;br /&gt;
*[[functions:pageBreadcrumbsFamilyGet|pageBreadcrumbsFamilyGet]]&lt;br /&gt;
*[[functions:pageBreadcrumbsHistoryGet|pageBreadcrumbsHistoryGet]]&lt;br /&gt;
*[[functions:pageChildrenGet|pageChildrenGet]]&lt;br /&gt;
*[[functions:pageContentAttribSet|pageContentAttribSet]]&lt;br /&gt;
*[[functions:pageContentAttribsSet|pageContentAttribsSet]]&lt;br /&gt;
*[[functions:pageContentAttribStart/pageContentAttribEnd|pageContentAttribStart]]&lt;br /&gt;
*[[functions:pageContentAttribStart/pageContentAttribEnd|pageContentAttribEnd]]&lt;br /&gt;
*[[functions:pageCustomSearchGroup|pageCustomSearchGroup]]&lt;br /&gt;
*[[functions:pageForumPostsGet|pageForumPostsGet]]&lt;br /&gt;
*[[functions:pageGet|pageGet]]&lt;br /&gt;
*[[functions:pageGetHomeId|pageGetHomeId]]&lt;br /&gt;
*[[functions:pageMenuGet|pageMenuGet]]&lt;br /&gt;
*[[functions:pagePollQuestionsGet|pagePollQuestionsGet]]&lt;br /&gt;
*[[functions:pagePollResultsGet|pagePollResultsGet]]&lt;br /&gt;
*[[functions:pageProductsGet|pageProductsGet]]&lt;br /&gt;
*[[functions:pageSearchGet|pageSearchGet]]&lt;br /&gt;
*[[functions:pageZoneGet|pageZoneGet]]&lt;br /&gt;
*[[functions:pagination|pagination]]&lt;br /&gt;
*[[functions:phpObjToJS|phpObjToJS]]&lt;br /&gt;
*[[functions:prodArrayToJS|prodArrayToJS]]&lt;br /&gt;
*[[functions:prodOptionString2Array|prodOptionString2Array]]&lt;br /&gt;
*[[functions:recentlyViewedAdd|recentlyViewedAdd]]&lt;br /&gt;
*[[functions:recentlyViewedGet|recentlyViewedGet]]&lt;br /&gt;
*[[functions:redirect|redirect]]&lt;br /&gt;
*[[functions:TEMConversionTag|TEMConversionTag]]&lt;br /&gt;
*[[functions:userAccountAndAddressCreate|userAccountAndAddressCreate]]&lt;br /&gt;
*[[functions:userAccountEdit|userAccountEdit]]&lt;br /&gt;
*[[functions:userAddressAddEdit|userAddressAddEdit]]&lt;br /&gt;
*[[functions:userBlogEntriesGet|userBlogEntriesGet]]&lt;br /&gt;
*[[functions:userBlogEntryAddEdit|userBlogEntryAddEdit]]&lt;br /&gt;
*[[functions:userBlogSetup|userBlogSetup]]&lt;br /&gt;
*[[functions:userFriendsGet|userFriendsGet]]&lt;br /&gt;
*[[functions:userGetAddresses|userGetAddresses]]&lt;br /&gt;
*[[functions:userWishListGet|userWishListGet]]&lt;br /&gt;
*[[functions:usersAmbassadorGet|usersAmbassadorGet]]&lt;br /&gt;
*[[functions:usersGet|usersGet]]&lt;br /&gt;
*[[functions:valueArrayFromQuery|valueArrayFromQuery]]&lt;br /&gt;
*[[functions:verifyEmail|verifyEmail]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Discounts&amp;diff=720</id>
		<title>Discounts</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Discounts&amp;diff=720"/>
				<updated>2009-04-11T02:36:01Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: added tiered discount&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Discounts provides a way for site managers to add, edit and delete coupons and automatic discounts. Discounts can be accessed via the 'discounts' link in the administration link list. Note that only administrators and product managers can access the discounts area. &lt;br /&gt;
&lt;br /&gt;
Each discount has benefits and conditions. Any order that fits the discount conditons can qualify to receive the discount, and it's benefits.&lt;br /&gt;
&lt;br /&gt;
==Discount Listing==&lt;br /&gt;
The discount listing will show all discounts currently in the system. The listing also provided edit and add links to manage the discounts.&lt;br /&gt;
&lt;br /&gt;
==The Discount Management Form==&lt;br /&gt;
The discount form contains fields to set the discount meta information (info about the discount); Discount benefits and; discount conditions.&lt;br /&gt;
*Discount Meta Fields&lt;br /&gt;
:*Discount Code: each discount must have a unique code, if code entry is required (see discount conditions), this is the 'coupon code' that the buyer must enter to receive the discount. This is also the code that will show in the shopping cart / checkout process along with the discount benefit price.&lt;br /&gt;
:*Description: The discount description should completely and concisely describe the discount benefit. This information will appear in the shopping cart and checkout process along with the discount code.&lt;br /&gt;
:*Notes: Internal information about the discount - visible to other site managers, but not visible to web site visitors.&lt;br /&gt;
*Discount Benefit Fields&lt;br /&gt;
:*Percentage Off: The order will benefit from this percentage off the subtotal, or specific products, depending on the percentage application selection.&lt;br /&gt;
:*Percentage Application: selects if the percentage off applies to the entire order subtitle or to the applicable products based on the 'accept or deny products' option and the products in the relationship window.&lt;br /&gt;
:*Dollar Off: sets a fixed dollar discount to be applied to the order.&lt;br /&gt;
:*Free Shipping Option: selects a shipping option that will be free, if this shipping option is selected by the buyer and the order qualifies for the discount.&lt;br /&gt;
:*Free Product: selects a free product that will be automatically added to the shopping cart if the order qualifies for the discount. The free product will appear in the cart at it's price, and the discount will be presented as a separate line item with a value countering the product price.&lt;br /&gt;
*Discount Condition Fields&lt;br /&gt;
:*Code Entry Required: if selected, the buyer must enter the discount code in order to receive the discount. If not selected, the discount will automatically appear in the shopping cart once the order qualifies for the discount.&lt;br /&gt;
:*Start Date: The beginning date that the discount will be available. Leave blank and the discount will be available always (until the end date is reached).&lt;br /&gt;
:*End Date: The ending date that the discount will be available. Leave blank and the discount will always be available (so long as the start date has been passed). Leave both the start and end date blank to make the discount available always.&lt;br /&gt;
:*Minimum Order Amount: The minimum subtotal the order must meet in order to qualify for the discount. The discount cannot be applied until this minimum amount is met (or if the discount is automatic - a.k.a not requiring code entry - the discount will not automatically appear in the shopping cart until the minimum amount is met).&lt;br /&gt;
:*Exclusive: select if the discount is one time use. Once the discount is applied to an order, it will automatically be deactivated and made unavailable for anyone else. Use this to provide private discounts to individual customers.&lt;br /&gt;
:*Mutually Exclusive: select to make the discount not valid with any other discounts. If selected, and any other discounts are in the cart, this discount cannot be added - also if this discount is in the cart, no other discounts can be added.&lt;br /&gt;
:*Accept or Deny Products: If checked all products will qualify except for the products in the product relationship window. If unchecked then only the products in the product relationship window will qualify. A qualifying product must be in the shopping cart in order for the discount to be applied.&lt;br /&gt;
:*Products Relationship Window: A list of products that either qualify or disqualify an order from the discount (depending on the selection made in the accept or deny products checkbox). See [[Relationships Management]] on how to add and remove items from this window.&lt;br /&gt;
&lt;br /&gt;
==Add Discount==&lt;br /&gt;
To add a discount, select the 'add new discount' link above the Discount Listing. The discount management form will be provided, empty and ready for entry of a new discount. See the discount management form information above for details on how to use this form.&lt;br /&gt;
&lt;br /&gt;
==Edit Discount==&lt;br /&gt;
To modify a discount, select the 'edit' link next to the discount in the discount listing. The discount management form will be provided, populated with data for the selected discount. See the discount management form information above for details on how to use this form.&lt;br /&gt;
&lt;br /&gt;
==Delete Discount==&lt;br /&gt;
To delete a discount, select the 'edit' link next to the discount in the discount listing. The discount management form will be provided, populated with data for the selected discount. Select the 'delete' button at the bottom of the discount management form to delete the discount.&lt;br /&gt;
&lt;br /&gt;
==Tiered Discounts==&lt;br /&gt;
Tiered discounts are single discount codes that change benefit as conditions change. An example of a tiered discount would be offering $10 off an order for purchasing $100 or more; $25 off for $200 or more and $40 off for $300 or more. The goal of tiered discounting is to push buyers to buy specific items, more items and larger quantities. The visitor enters the discount once and the discount automatically changes benefit as the new condition is met. A tiered discount is created by adding multiple discounts that use the same discount code - setting each discount with the condition and benefit for it's 'tier'. The web site visitor will automatically get the discount tier with the greatest benefit, that they qualify for, applied to their order. As the order changes state, and the qualify for a new discount or disqualify for the current discount, the discount will automatically change to the appropriate tier.&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Functions:pageSearchGet&amp;diff=718</id>
		<title>Functions:pageSearchGet</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Functions:pageSearchGet&amp;diff=718"/>
				<updated>2009-04-08T15:29:57Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: /* Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Page Template Functions Shortcuts}}&lt;br /&gt;
== Description ==&lt;br /&gt;
Retrieves page and product data on pages that qualify for a keyword search.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
$arrPages= eV::pageSearchGet($keywords[,$fieldList=NULL][,$orderBy=NULL][,$orderDir=&amp;quot;DESC&amp;quot;][,$orderType=&amp;quot;str&amp;quot;]);&lt;br /&gt;
&lt;br /&gt;
== Paramaters ==&lt;br /&gt;
*$keywords STRING&lt;br /&gt;
::Keywords to be used to qualify the page search&lt;br /&gt;
*$fieldList STRING (optional)&lt;br /&gt;
::comma delimited list of field names you would like returned. leaving this value empty will return all fields, though this is not recommended as it could significantly reduce system performance. Page custom fields can be requested by prepending the custom field name with &amp;quot;custom_field_&amp;quot; (example: to include the &amp;quot;myVar&amp;quot; custom field, add &amp;quot;custom_field_myVar&amp;quot; to the $fieldList).&lt;br /&gt;
*$orderBy STRING (optional)&lt;br /&gt;
::field to order by. This field must be present in the $fieldList. defaults to 'orderId' which corresponds to the order the children are listed in relationships management for the parent $pageId&lt;br /&gt;
*$orderDir STRING (optional)&lt;br /&gt;
::Either &amp;quot;ASC&amp;quot; or &amp;quot;DESC&amp;quot; signifying the direction of the sorted results. Defaults to &amp;quot;DESC&amp;quot;.&lt;br /&gt;
*$orderType STRING (optional)&lt;br /&gt;
::Either &amp;quot;str&amp;quot; or &amp;quot;num&amp;quot; signifying how the values will be compared when sorting the results. Defaults to &amp;quot;str&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Return Values ==&lt;br /&gt;
Returns a multidimensional array of page data that qualifies for the search. The first dimension is a numerically indexed array of each child (starting from 0). The second dimension is an associative array of keys corresponding to the fields requested in the $fieldList attribute (if $fieldList is empty, all fields are returned. This is not recommended as it creates unnecessary overhead).&lt;br /&gt;
&lt;br /&gt;
The returned array is as follows (all possible fields are listed, note that only fields requested will be returned):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [0] =&amp;gt; Array&lt;br /&gt;
        (&lt;br /&gt;
            // fields automatically included&lt;br /&gt;
            [relevance] =&amp;gt; FLOAT&lt;br /&gt;
            [pageId] =&amp;gt; INT&lt;br /&gt;
            [blog_userId] =&amp;gt; INT // user id for blogger&lt;br /&gt;
            [authorId] =&amp;gt; INT // user id for author&lt;br /&gt;
            [isLinkDirect] =&amp;gt; BIT // signal that this is an outside link circumvents page forwarding&lt;br /&gt;
            [isForum] =&amp;gt; BIT&lt;br /&gt;
            [link] =&amp;gt; STR&lt;br /&gt;
&lt;br /&gt;
            //page data&lt;br /&gt;
            [templateId] =&amp;gt; INT&lt;br /&gt;
            [notice] =&amp;gt; STR&lt;br /&gt;
            [title] =&amp;gt; STR&lt;br /&gt;
            [subTitle] =&amp;gt; STR&lt;br /&gt;
            [copy] =&amp;gt; STR&lt;br /&gt;
            [summary] =&amp;gt; STR&lt;br /&gt;
            [summaryImage] =&amp;gt; STR&lt;br /&gt;
            [summaryImageAlt] =&amp;gt; STR&lt;br /&gt;
            [summaryImageCaption] =&amp;gt; STR&lt;br /&gt;
            [linkText] =&amp;gt; STR&lt;br /&gt;
            [publisher] =&amp;gt; STR&lt;br /&gt;
            [publishDate] =&amp;gt; DATETIME&lt;br /&gt;
            [startDate] =&amp;gt; DATETIME&lt;br /&gt;
            [endDate] =&amp;gt; DATETIME&lt;br /&gt;
            [isBlog] =&amp;gt; BIT&lt;br /&gt;
            [isPoll] =&amp;gt; BIT&lt;br /&gt;
            [createDate] =&amp;gt; DATETIME&lt;br /&gt;
            [modDate] =&amp;gt; DATETIME&lt;br /&gt;
&lt;br /&gt;
            // author fields&lt;br /&gt;
            [author_firstName] =&amp;gt; STRING&lt;br /&gt;
            [author_lastName] =&amp;gt; STRING&lt;br /&gt;
            [author_userImage] =&amp;gt; STRING&lt;br /&gt;
            [author_handle] =&amp;gt; STRING&lt;br /&gt;
&lt;br /&gt;
            // blogger fields&lt;br /&gt;
            [blog_firstName] =&amp;gt; STRING&lt;br /&gt;
            [blog_lastName] =&amp;gt; STRING&lt;br /&gt;
            [blog_userImage] =&amp;gt; STRING&lt;br /&gt;
            [blog_handle] =&amp;gt; STRING&lt;br /&gt;
&lt;br /&gt;
            // forum / comments fields&lt;br /&gt;
            [forumCount] =&amp;gt; INT&lt;br /&gt;
            [ratingTotal] =&amp;gt; INT&lt;br /&gt;
            [ratingCount] =&amp;gt; INT&lt;br /&gt;
            [ratingAverage] =&amp;gt; DECIMAL&lt;br /&gt;
&lt;br /&gt;
            // product fields&lt;br /&gt;
            [productName] =&amp;gt; STRING (for first product in page)&lt;br /&gt;
            [productNumber] =&amp;gt; STRING (for first product in page)&lt;br /&gt;
            [catalogNumber] =&amp;gt; STRING (for first product in page)&lt;br /&gt;
            [productTitle] =&amp;gt; STRING (for first product in page)&lt;br /&gt;
            [productDescription] =&amp;gt; STRING (for first product in page)&lt;br /&gt;
            [productId] =&amp;gt; INT (for first product in page)&lt;br /&gt;
            [lowestPrice] =&amp;gt; DECIMAL&lt;br /&gt;
            [lowestListPrice] =&amp;gt; DECIMAL&lt;br /&gt;
            [lowestSalePrice] =&amp;gt; DECIMAL&lt;br /&gt;
            [productCount] =&amp;gt; INT&lt;br /&gt;
            [productIdList] =&amp;gt; STRING (comma delimited list of INT)&lt;br /&gt;
            [saleFromDate] =&amp;gt; DATETIME (for first product in page)&lt;br /&gt;
            [saleToDate] =&amp;gt; DATETIME (for first product in page)&lt;br /&gt;
            [lowestLevelPrice] =&amp;gt; DECIMAL&lt;br /&gt;
            [lowestAllPrice] =&amp;gt; DECIMAL&lt;br /&gt;
            [isConfigurable] =&amp;gt; BIT&lt;br /&gt;
            [isDiscontinued] =&amp;gt; BIT&lt;br /&gt;
            [addToCartLink] =&amp;gt; STRING&lt;br /&gt;
&lt;br /&gt;
            //children's children and children's grandchildren (great grandchildren to parent pageId)&lt;br /&gt;
            [childPageCount] =&amp;gt; INT&lt;br /&gt;
            [grandChildPageCount] =&amp;gt; INT&lt;br /&gt;
&lt;br /&gt;
            //poll data&lt;br /&gt;
            [pollCount] =&amp;gt; INT&lt;br /&gt;
&lt;br /&gt;
            //custom fields&lt;br /&gt;
            [custom_field_?] =&amp;gt; ?&lt;br /&gt;
                        &lt;br /&gt;
        )&lt;br /&gt;
    [1] =&amp;gt; Array ...&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Elements from the page associative array are as follows: &lt;br /&gt;
{|border=2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;Element&amp;lt;/b&amp;gt;&lt;br /&gt;
|&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
|&amp;lt;b&amp;gt;Example&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;fields automatically included&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|relevance&lt;br /&gt;
|FLOAT - a numerical representation of how relevant the page is to the keywords entered. Higher number = more relevant.&lt;br /&gt;
|1.12&lt;br /&gt;
|-&lt;br /&gt;
|pageId&lt;br /&gt;
|INT - system assigned unique pageId of the returned page&lt;br /&gt;
|6&lt;br /&gt;
|-&lt;br /&gt;
|blog_userId&lt;br /&gt;
|INT - system assigned unique userId of the blogger designed in page management to this page. If the page is not a blog, value will be empty.&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|authorId&lt;br /&gt;
|INT - system assigned unique userId of the author designated in page management to this page. If no author is assigned, this value will be empty&lt;br /&gt;
|14&lt;br /&gt;
|-&lt;br /&gt;
|isLinkDirect&lt;br /&gt;
|BIT - either 1 or 0 designating if the link is direct. If it is a direct link, the value of the 'link' field will be the ultimate target of the link, regardless if it is internal or external. If the link is not direct, the  value of the 'link' field will always be internal - external links will be redirected from the internal page. The latter is for tracking purposes.&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|isForum&lt;br /&gt;
|BIT - either 1 or 0 designating if the page is selected in page management to be a forum. Note this option will only be available if Forums Available is set on in Settings. Use this flag to hide/show forum related page content and logic, so this data is not displayed / processed if the page manager has forums turned off for the page.&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|link&lt;br /&gt;
|STRING - the link to this page. This should be placed in the HREF attribute of the A link tag. The system will automatically generate the correct link to the internal / external target and take into consideration if the link is direct (isLinkDirect) or not.&lt;br /&gt;
|index.php?pageId=192&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;page data&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|templateId&lt;br /&gt;
|INT - system assigned unique template id for the template selected in page management for this page&lt;br /&gt;
|12&lt;br /&gt;
|-&lt;br /&gt;
|notice&lt;br /&gt;
|STRING - notice field entry for this page in page management. Note that notice has to be turned on in Settings to be available in page management. Also notice can be renamed in Settings, therefore might not be titled 'notice' in page management. Often notice is used as the Page Name (unique description of the page for internal use / page identification)&lt;br /&gt;
|This is my page&lt;br /&gt;
|-&lt;br /&gt;
|title&lt;br /&gt;
|STRING - title field entry for this page in page management. Note that title can be renamed in Settings, therefore might not be titled 'title' in page management. This is used as the text descriptor of the page in all areas of administration that list pages (page children, parents, page search, etc). Other fields may be designated to appear as descriptors in administration by changing the Summary Listing Details under the Page Management tab.&lt;br /&gt;
|The page title&lt;br /&gt;
|-&lt;br /&gt;
|subTitle&lt;br /&gt;
|STRING - subtitle field entry for this page in page management. Note that subtitle has to be turned on in Settings to be available in page management. Also subtitle can be renamed in Settings, therefore might not be titled 'subtitle' in page management. &lt;br /&gt;
|This is the subtitle for this page&lt;br /&gt;
|-&lt;br /&gt;
|copy&lt;br /&gt;
|STRING - HTML formatted page copy, as set in the copy field WYSIWYG editor in page management. This serves as the bulk of the page's content. Copy is typically not displayed in page searches / page children as it is to much information when listing multiple page results, though sometimes it is truncates in the results. Note that copy is HTML content, as it is managed by the WYSIWYG editor.&lt;br /&gt;
|&amp;amp;lt;img src=&amp;quot;image.jpg&amp;quot; align=&amp;quot;right&amp;quot;&amp;amp;gt;&amp;amp;lt;p&amp;amp;gt;This is the &amp;amp;lt;b&amp;amp;gt;copy&amp;amp;gt;/b&amp;amp;gt; for this &amp;amp;lt;i&amp;amp;gt;page&amp;amp;lt;/i&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|summary&lt;br /&gt;
|STRING - summary information about the page. Typically used to describe the page in brief, such as in children, search results and cross sells.&lt;br /&gt;
|This is some additional details about this page. To see more information click this page.&lt;br /&gt;
|-&lt;br /&gt;
|summaryImage&lt;br /&gt;
|STRING - absolute path to an image used in summaries about the page. Typically used to accompany the summary when describing the page in brief, such as in children, search results and cross sells.&lt;br /&gt;
|/files/images/thumbnails/imageName.jpg&lt;br /&gt;
|-&lt;br /&gt;
|summaryImageAlt&lt;br /&gt;
|STRING - alt tag contents for the summaryImage.&lt;br /&gt;
|This describes the image&lt;br /&gt;
|-&lt;br /&gt;
|summaryImageCaption&lt;br /&gt;
|STRING - caption to accompany the summaryImage.&lt;br /&gt;
|The above is an image!&lt;br /&gt;
|-&lt;br /&gt;
|linkText&lt;br /&gt;
|STRING - text to represent the link to go to the page.&lt;br /&gt;
|Click here for more information&lt;br /&gt;
|-&lt;br /&gt;
|publisher&lt;br /&gt;
|STRING - name of the publisher of the page. Typically used when the page is an article, press release or content that is owned by another party. Only available in Page Management if publishing information is set to available in Settings.&lt;br /&gt;
|New York Times&lt;br /&gt;
|-&lt;br /&gt;
|publishDate&lt;br /&gt;
|DATETIME - date to present as the publishing date of the page. Typically used when the page is an article or press release. Only available in Page Management if publishing information is set to available in Settings.&lt;br /&gt;
|2008-10-16 08:00:00&lt;br /&gt;
|-&lt;br /&gt;
|startDate&lt;br /&gt;
|DATETIME - designates the first day the page should be made available to visitors. If empty, than there is no cut off start date.&lt;br /&gt;
|2008-10-01 00:00:00&lt;br /&gt;
|-&lt;br /&gt;
|endDate&lt;br /&gt;
|DATETIME - designates the last day the page should be available to visitors. If empty, than there is no cut off end date.&lt;br /&gt;
|2008-10-31 00:00:00&lt;br /&gt;
|-&lt;br /&gt;
|isBlog&lt;br /&gt;
|BIT - 0 or 1 if page is selected to be a blog (controlled in page management, but set on automatically when a blog is created by a site visitor). Use to create logic that shows / processes blog related content and logic. Note that this option will only be available in page management if Blogging Available is selected in Settings.&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|isPoll&lt;br /&gt;
|BIT - 0 or 1 if page is selected to be a poll via page management. Use to create logic that shows / processes poll related content and logic. Note that this option will only be available in page management if Polling Available is selected in Settings.&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|createDate&lt;br /&gt;
|DATETIME - system generated datetime when the page record was first inserted into the database.&lt;br /&gt;
|2008-10-15 14:15:56&lt;br /&gt;
|-&lt;br /&gt;
|modDate&lt;br /&gt;
|DATETIME - system generated datetime when the page was last modified.&lt;br /&gt;
|2008-10-15 16:12:44&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;author fields&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|author_firstName&lt;br /&gt;
|STRING - first name of the user designated as the author of the page. This is the first name assigned to the user record for the user with the userId matching the authorId selected in page management for this page. Authors may only be selected if User Publisher Information is selected in Settings.&lt;br /&gt;
|Mark&lt;br /&gt;
|-&lt;br /&gt;
|author_lastName&lt;br /&gt;
|STRING - last name of the user designated as the author of the page. This is the last name assigned to the user record for the user with the userId matching the authorId selected in page management for this page. Authors may only be selected if User Publisher Information is selected in Settings.&lt;br /&gt;
|Wexler&lt;br /&gt;
|-&lt;br /&gt;
|author_userImage&lt;br /&gt;
|STRING - path to image selected for as the user image for the user designated as the author for the page. Authors may only be selected if User Publisher Information is selected in Settings.&lt;br /&gt;
|/files/images/imagename.jpg&lt;br /&gt;
|-&lt;br /&gt;
|author_handle&lt;br /&gt;
|STRING - Handle of the user designated as the author of the page. This is the handle assigned to the user record for the user with the userId matching the authorId selected in page management for this page. Authors may only be selected if User Publisher Information is selected in Settings.&lt;br /&gt;
|mwex501&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;blogger fields&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|blog_firstName&lt;br /&gt;
|STRING - First name of the user designated as the blog owner of the page. This is the first name assigned to the user record for the user with the userId matching the blog_userId selected in page management for this page. Bloggers may only be selected if Blogging Available is selected in Settings.&lt;br /&gt;
|Mark&lt;br /&gt;
|-&lt;br /&gt;
|blog_lastName&lt;br /&gt;
|STRING - Last name of the user designated as the blog owner of the page. This is the last name assigned to the user record for the user with the userId matching the blog_userId selected in page management for this page. Bloggers may only be selected if Blogging Available is selected in Settings.&lt;br /&gt;
|Wexler&lt;br /&gt;
|-&lt;br /&gt;
|blog_userImage&lt;br /&gt;
|STRING - Path of the user image of the user designated as the blog owner of the page. This is the user image path assigned to the user record for the user with the userId matching the blog_userId selected in page management for this page. Bloggers may only be selected if Blogging Available is selected in Settings.&lt;br /&gt;
|/files/images/image.jpg&lt;br /&gt;
|-&lt;br /&gt;
|blog_handle&lt;br /&gt;
|STRING -Handle of the user designated as the blog owner of the page. This is the handle assigned to the user record for the user with the userId matching the blog_userId selected in page management for this page. Bloggers may only be selected if Blogging Available is selected in Settings.&lt;br /&gt;
|mwex501&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;forum / comments fields&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|forumCount&lt;br /&gt;
|INT - number of forum posts to the page.&lt;br /&gt;
|23&lt;br /&gt;
|-&lt;br /&gt;
|ratingTotal&lt;br /&gt;
|INT - Sum of all ratings posted to this page (each rating is on a scale of 0 to 5).&lt;br /&gt;
|120&lt;br /&gt;
|-&lt;br /&gt;
|ratingCount&lt;br /&gt;
|INT - total number of ratings submitted for the page.&lt;br /&gt;
|50&lt;br /&gt;
|-&lt;br /&gt;
|ratingAverage&lt;br /&gt;
|FLOAT - average rating for the page on a scale of 0 to 5.&lt;br /&gt;
|2.4&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;product fields&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|productName&lt;br /&gt;
|STRING - The name of the first product directly assigned to the page in relationships.&lt;br /&gt;
|Product X&lt;br /&gt;
|-&lt;br /&gt;
|productNumber&lt;br /&gt;
|STRING - The product number of the first product directly assigned to the page in relationships.&lt;br /&gt;
|1234XYZ&lt;br /&gt;
|-&lt;br /&gt;
|catalogNumber&lt;br /&gt;
|STRING - The catalog number of the first product directly assigned to the page in relationships.&lt;br /&gt;
|234ABC&lt;br /&gt;
|-&lt;br /&gt;
|productTitle&lt;br /&gt;
|STRING - The title of the first product directly assigned to the page in relationships.&lt;br /&gt;
|This is the title of this product&lt;br /&gt;
|-&lt;br /&gt;
|productDescription&lt;br /&gt;
|STRING - the description of the first product directly assigned to the page in relationships.&lt;br /&gt;
|This is a description of the product&lt;br /&gt;
|-&lt;br /&gt;
|productId&lt;br /&gt;
|INT - unique id assigned by the system to the product upon creation, for the first product assigned to the page in relationships&lt;br /&gt;
|12&lt;br /&gt;
|-&lt;br /&gt;
|lowestPrice&lt;br /&gt;
|FLOAT - lowest price for All products assigned to the page in relationships. This price only takes into consideration the 'price' field for the products, not the sale, level prices.&lt;br /&gt;
|12.59&lt;br /&gt;
|-&lt;br /&gt;
|lowestListPrice&lt;br /&gt;
|FLOAT - lowest of all the list prices for ALl products assigned to the page in relationships.&lt;br /&gt;
|15.46&lt;br /&gt;
|-&lt;br /&gt;
|lowestSalePrice&lt;br /&gt;
|FLOAT - lowest of all the available sale prices for all products assigned to the page in relationships. Sale prices that are not within the sale from / to price range do not qualify.&lt;br /&gt;
|14.26&lt;br /&gt;
|-&lt;br /&gt;
|productCount&lt;br /&gt;
|INT - number of products assigned to the page in relationships.&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|productIdList&lt;br /&gt;
|STRING - comma delimited list of unique productIds for products assigned to the page in relationships.&lt;br /&gt;
|14,26,3&lt;br /&gt;
|-&lt;br /&gt;
|saleFromDate&lt;br /&gt;
|DATETIME - date when the sale price is first available for the first product assigned to the page in relationships. If no sale from date is assigned the value will be empty, meaning there is no beginning cut off date for the sale.&lt;br /&gt;
|2008-10-12 00:00:00&lt;br /&gt;
|-&lt;br /&gt;
|saleToDate&lt;br /&gt;
|DATETIME - date when the sale price is last available for the first product assigned to the page in relationships. If no sale to date is assigned the value will be empty, meaning there is no ending cut off date for the sale.&lt;br /&gt;
|2008-10-20 00:00:00&lt;br /&gt;
|-&lt;br /&gt;
|lowestLevelPrice&lt;br /&gt;
|FLOAT - lowest of all the level prices for all products assigned to the page in relationships.&lt;br /&gt;
|10.26&lt;br /&gt;
|-&lt;br /&gt;
|lowestAllPrice&lt;br /&gt;
|FLOAT - lowest price for All products assigned to the page in relationships. This price takes into consideration sale, regular, list and level (tiered) pricing. Sale prices that are not within the sale from / to price range do not qualify.&lt;br /&gt;
|14.22&lt;br /&gt;
|-&lt;br /&gt;
|isConfigurable&lt;br /&gt;
|BIT - 1 if product is configurable (has options or can be personalized), 0 if not&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|isDiscontinued&lt;br /&gt;
|BIT - 1 of product is discontinued. 0 if not&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|addToCartLink&lt;br /&gt;
|STRING - use this link for an 'add to cart' button for this child. The string will add the item to the cart IF the child has only one product AND the product has no options AND the product is not discontinued AND the product is not personalizable. Otherwise this string will link to the child page.&lt;br /&gt;
|index.php?fa=ORDER.cartAdd&amp;amp;productId=123&amp;amp;quantity=1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;qualifying pages' children and grandchildren&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|childPageCount&lt;br /&gt;
|INT - total count of pages set as children to this page via relationships.&lt;br /&gt;
|6&lt;br /&gt;
|-&lt;br /&gt;
|grandChildPageCount&lt;br /&gt;
|INT - total count of all pages set as grandchildren (children to children) to this page via relationships. Warning, with sites containing many pages / relationships, using this field could cause undue strain on the system.&lt;br /&gt;
|143&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;poll data&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|pollCount&lt;br /&gt;
|INT - total number of poll postings to this page&lt;br /&gt;
|123&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;custom fields&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|custom_field_?&lt;br /&gt;
|Each custom field will be accessible by using custom_field_? where the ? is the field name as set in page template administration for the template used by the page.&lt;br /&gt;
|-anything-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
;Simple Example&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// call&lt;br /&gt;
$searchArr = eV::pageSearchGet('several keywords here','title,summary,summaryImage,link','relevance','DESC','num');&lt;br /&gt;
// output&lt;br /&gt;
foreach($searchArr as $search) {&lt;br /&gt;
echo &amp;quot;&amp;lt;hr&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;a href=\&amp;quot;&amp;quot; . $search['link'] . &amp;quot;\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;img align=\&amp;quot;left\&amp;quot; src=\&amp;quot;&amp;quot; . $search['summaryImage'] . &amp;quot;\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;a href=\&amp;quot;&amp;quot; . $search['link'] . &amp;quot;\&amp;quot;&amp;gt;&amp;quot; . $search['title'] . &amp;quot;&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot; . $search['summary'];&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;lt;i&amp;gt;Relevance:&amp;quot; . $search['relevance'] . &amp;quot;&amp;lt;/i&amp;gt;&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
;Complex Example using pagination, sorting controls&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// make sure our keywords attribute is passed&lt;br /&gt;
if(!isset($attributes['keywords'])) $attributes['keywords'] = '';&lt;br /&gt;
&lt;br /&gt;
// default sorting commands&lt;br /&gt;
if(!isset($attributes['orderBy'])) $attributes['orderBy'] = 'relevance';&lt;br /&gt;
if(!isset($attributes['orderType'])) $attributes['orderType'] = 'num';&lt;br /&gt;
if(!isset($attributes['orderDir'])) $attributes['orderDir'] = 'DESC';&lt;br /&gt;
&lt;br /&gt;
// get the sorting results&lt;br /&gt;
$arrChildren = eV::pageSearchGet($attributes['keywords'],&amp;quot;pageId,link,templateId,summaryImage,title,summary,lowestAllPrice,productId,productCount,addToCartLink,relevance&amp;quot;,$attributes['orderBy'],$attributes['orderDir'],$attributes['orderType']); &lt;br /&gt;
&lt;br /&gt;
// go to no items found page if empty&lt;br /&gt;
// substitute '#' with the pageId to go to&lt;br /&gt;
if(count($arrChildren) == 0) eV::redirect(&amp;quot;index.php?pageId=#&amp;amp;keywords=&amp;quot; . urlencode($attributes['keywords']));&lt;br /&gt;
&lt;br /&gt;
// if only 1 result found, lets just forward to that page&lt;br /&gt;
if(count($arrChildren) == 1) eV::redirect('/index.php?pageId=' . $arrChildren[0]['pageId']);&lt;br /&gt;
&lt;br /&gt;
// preset control attributes&lt;br /&gt;
// view all attribute specifies if we are to page or show everything that qualifies&lt;br /&gt;
if(!isset($attributes['viewAll'])) $attributes['viewAll'] = 0;&lt;br /&gt;
// pageNo states the current page number in pagination that we are on&lt;br /&gt;
if(!isset($attributes['pageNo'])) $attributes['pageNo'] = 0;&lt;br /&gt;
// perPage sets the number of items to show in a page&lt;br /&gt;
if(!isset($attributes['perPage'])) $attributes['perPage'] = 6;&lt;br /&gt;
// if view all is on, lets show all items on this page&lt;br /&gt;
if($attributes['viewAll']) $attributes['perPage'] = count($arrChildren);&lt;br /&gt;
&lt;br /&gt;
// call pagination&lt;br /&gt;
// functions returns an array that contains the pagination links, start and end child index&lt;br /&gt;
// be sure to include your order (sort) attributes and keyword attribute&lt;br /&gt;
$pagination = eV::pagination(count($arrChildren),$attributes['perPage'],$attributes['pageNo'],&amp;quot;index.php?pageId=$pageId&amp;amp;keywords=&amp;quot; . urlencode($attributes['keywords']). &amp;quot;&amp;amp;orderBy=&amp;quot; . $attributes['orderBy'] . &amp;quot;&amp;amp;orderType=&amp;quot; . $attributes['orderType'] . &amp;quot;&amp;amp;orderDir=&amp;quot; . $attributes['orderDir']); &lt;br /&gt;
&lt;br /&gt;
// spit out some page content&lt;br /&gt;
echo &amp;quot;&amp;lt;h2&amp;gt;Your search for \&amp;quot;&amp;quot; . $attributes['keywords'] . &amp;quot;\&amp;quot; was successful!&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;quot; . $copy . &amp;quot;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// form to run another search&lt;br /&gt;
// use get method so keyword searches are cachable, trackable by 3rd party tools&lt;br /&gt;
echo &amp;quot;&lt;br /&gt;
    &amp;lt;form action=\&amp;quot;index.php\&amp;quot; method=\&amp;quot;get\&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;hr&amp;gt;&lt;br /&gt;
    Would you like to search again?&lt;br /&gt;
    &amp;lt;br&amp;gt;Enter Keyword or Item Number: &lt;br /&gt;
    &amp;lt;input name=\&amp;quot;keywords\&amp;quot; type=\&amp;quot;text\&amp;quot; value=\&amp;quot;\&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=\&amp;quot;hidden\&amp;quot; name=\&amp;quot;pageId\&amp;quot; value=\&amp;quot;&amp;quot; . $pageId . &amp;quot;\&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=\&amp;quot;submit\&amp;quot; value\&amp;quot;GO!\&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// output pagination header&lt;br /&gt;
echo &amp;quot;&lt;br /&gt;
    &amp;lt;hr&amp;gt;&lt;br /&gt;
    (Showing &amp;quot; . ($pagination['startIndex']+1) . &amp;quot;-&amp;quot; . ($pagination['endIndex']+1) . &amp;quot; of &amp;quot; . count($arrChildren) . &amp;quot;)&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// form to sort results&lt;br /&gt;
// you can sort by any field you request in the eV::pageSearchGet function&lt;br /&gt;
// be sure to include your keyword attributes, pageId, view all status&lt;br /&gt;
echo &amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;Sort: &lt;br /&gt;
&amp;lt;form name=\&amp;quot;sortForm\&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;select name=\&amp;quot;sortSelect\&amp;quot; size=\&amp;quot;1\&amp;quot; onchange=\&amp;quot;window.location.href=document.sortForm.sortSelect.options[document.sortForm.sortSelect.selectedIndex].value;\&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=\&amp;quot;#\&amp;quot; selected=\&amp;quot;selected\&amp;quot;&amp;gt;Sort by&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=\&amp;quot;index.php?pageId=$pageId&amp;amp;viewAll=&amp;quot; .$attributes['viewAll'] . &amp;quot;&amp;amp;orderBy=relevance&amp;amp;orderType=num&amp;amp;orderDir=DESC&amp;amp;keywords=&amp;quot; . urlencode($attributes['keywords']) . &amp;quot;\&amp;quot;&amp;gt;Relevance&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=\&amp;quot;index.php?pageId=$pageId&amp;amp;viewAll=&amp;quot; .$attributes['viewAll'] . &amp;quot;&amp;amp;orderBy=lowestAllPrice&amp;amp;orderDir=ASC&amp;amp;orderType=num&amp;amp;orderDir=ASC&amp;amp;keywords=&amp;quot; . urlencode($attributes['keywords']) . &amp;quot;\&amp;quot;&amp;gt;Price&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=\&amp;quot;index.php?pageId=$pageId&amp;amp;viewAll=&amp;quot; .$attributes['viewAll'] . &amp;quot;&amp;amp;orderBy=createDate&amp;amp;orderDir=DESC&amp;amp;orderType=num&amp;amp;keywords=&amp;quot; . urlencode($attributes['keywords']) . &amp;quot;\&amp;quot;&amp;gt;Newest&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=\&amp;quot;index.php?pageId=$pageId&amp;amp;viewAll=&amp;quot; .$attributes['viewAll'] . &amp;quot;&amp;amp;orderBy=title&amp;amp;orderDir=ASC&amp;amp;orderType=str&amp;amp;orderDir=ASC&amp;amp;keywords=&amp;quot; . urlencode($attributes['keywords']) . &amp;quot;\&amp;quot;&amp;gt;Alphabetical&amp;lt;/option&amp;gt;&lt;br /&gt;
      &amp;lt;/select&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// pagination page links&lt;br /&gt;
echo &amp;quot;&amp;lt;hr&amp;gt;Pages: &amp;quot; .  $pagination['links'];&lt;br /&gt;
&lt;br /&gt;
// view all link&lt;br /&gt;
// only show if we are not viewing all&lt;br /&gt;
if (!$attributes['viewAll']) echo &amp;quot;&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;index.php?pageId=$pageId&amp;amp;keywords=&amp;quot; . urlencode($attributes['keywords']) . &amp;quot;&amp;amp;orderBy=&amp;quot; . $attributes['orderBy'] . &amp;quot;&amp;amp;orderDir=&amp;quot; . $attributes['orderDir']. &amp;quot;&amp;amp;orderType=&amp;quot; . $attributes['orderType'] . &amp;quot;&amp;amp;viewAll=1\&amp;quot;&amp;gt;(VIEW ALL)&amp;lt;/a&amp;gt; &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// now lets show the items returned&lt;br /&gt;
// set tracker to note which child we are on&lt;br /&gt;
$childIndex = 0;&lt;br /&gt;
&lt;br /&gt;
// loop thru children&lt;br /&gt;
foreach($arrChildren as $child){&lt;br /&gt;
	// only show children that are within the start and end index as returned by eV::pagination function&lt;br /&gt;
  	if($pagination['startIndex'] &amp;lt;= $childIndex &amp;amp;&amp;amp; $pagination['endIndex'] &amp;gt;= $childIndex){&lt;br /&gt;
		// display the child&lt;br /&gt;
 		echo &amp;quot;&amp;lt;hr&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot; . $child['link'] . &amp;quot;\&amp;quot;&amp;gt;&amp;lt;img src=\&amp;quot;&amp;quot; . $child['summaryImage'] . &amp;quot;\&amp;quot;/&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        	&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot; . $child['link'] . &amp;quot;\&amp;quot;&amp;gt;&amp;quot; . $child['title'] . &amp;quot;&amp;lt;/a&amp;gt;&lt;br /&gt;
  			&amp;lt;br&amp;gt;&amp;quot; . $child['summary'] . &amp;quot;&lt;br /&gt;
     		&amp;lt;br&amp;gt;As low as &amp;quot; . eV::dollarFormat($child['lowestAllPrice']) . &amp;quot; each!&lt;br /&gt;
			&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot; . $child['link'] . &amp;quot;\&amp;quot;&amp;gt;More Info&amp;lt;/a&amp;gt;&lt;br /&gt;
    		&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot; . $child['addToCartLink']. &amp;quot;\&amp;quot;&amp;gt;Add To Cart&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
  // increment tracking index&lt;br /&gt;
  $childIndex++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Functions:pageSearchGet&amp;diff=717</id>
		<title>Functions:pageSearchGet</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Functions:pageSearchGet&amp;diff=717"/>
				<updated>2009-04-08T14:48:33Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Page Template Functions Shortcuts}}&lt;br /&gt;
== Description ==&lt;br /&gt;
Retrieves page and product data on pages that qualify for a keyword search.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
$arrPages= eV::pageSearchGet($keywords[,$fieldList=NULL][,$orderBy=NULL][,$orderDir=&amp;quot;DESC&amp;quot;][,$orderType=&amp;quot;str&amp;quot;]);&lt;br /&gt;
&lt;br /&gt;
== Paramaters ==&lt;br /&gt;
*$keywords STRING&lt;br /&gt;
::Keywords to be used to qualify the page search&lt;br /&gt;
*$fieldList STRING (optional)&lt;br /&gt;
::comma delimited list of field names you would like returned. leaving this value empty will return all fields, though this is not recommended as it could significantly reduce system performance. Page custom fields can be requested by prepending the custom field name with &amp;quot;custom_field_&amp;quot; (example: to include the &amp;quot;myVar&amp;quot; custom field, add &amp;quot;custom_field_myVar&amp;quot; to the $fieldList).&lt;br /&gt;
*$orderBy STRING (optional)&lt;br /&gt;
::field to order by. This field must be present in the $fieldList. defaults to 'orderId' which corresponds to the order the children are listed in relationships management for the parent $pageId&lt;br /&gt;
*$orderDir STRING (optional)&lt;br /&gt;
::Either &amp;quot;ASC&amp;quot; or &amp;quot;DESC&amp;quot; signifying the direction of the sorted results. Defaults to &amp;quot;DESC&amp;quot;.&lt;br /&gt;
*$orderType STRING (optional)&lt;br /&gt;
::Either &amp;quot;str&amp;quot; or &amp;quot;num&amp;quot; signifying how the values will be compared when sorting the results. Defaults to &amp;quot;str&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Return Values ==&lt;br /&gt;
Returns a multidimensional array of page data that qualifies for the search. The first dimension is a numerically indexed array of each child (starting from 0). The second dimension is an associative array of keys corresponding to the fields requested in the $fieldList attribute (if $fieldList is empty, all fields are returned. This is not recommended as it creates unnecessary overhead).&lt;br /&gt;
&lt;br /&gt;
The returned array is as follows (all possible fields are listed, note that only fields requested will be returned):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [0] =&amp;gt; Array&lt;br /&gt;
        (&lt;br /&gt;
            // fields automatically included&lt;br /&gt;
            [relevance] =&amp;gt; FLOAT&lt;br /&gt;
            [pageId] =&amp;gt; INT&lt;br /&gt;
            [blog_userId] =&amp;gt; INT // user id for blogger&lt;br /&gt;
            [authorId] =&amp;gt; INT // user id for author&lt;br /&gt;
            [isLinkDirect] =&amp;gt; BIT // signal that this is an outside link circumvents page forwarding&lt;br /&gt;
            [isForum] =&amp;gt; BIT&lt;br /&gt;
            [link] =&amp;gt; STR&lt;br /&gt;
&lt;br /&gt;
            //page data&lt;br /&gt;
            [templateId] =&amp;gt; INT&lt;br /&gt;
            [notice] =&amp;gt; STR&lt;br /&gt;
            [title] =&amp;gt; STR&lt;br /&gt;
            [subTitle] =&amp;gt; STR&lt;br /&gt;
            [copy] =&amp;gt; STR&lt;br /&gt;
            [summary] =&amp;gt; STR&lt;br /&gt;
            [summaryImage] =&amp;gt; STR&lt;br /&gt;
            [summaryImageAlt] =&amp;gt; STR&lt;br /&gt;
            [summaryImageCaption] =&amp;gt; STR&lt;br /&gt;
            [linkText] =&amp;gt; STR&lt;br /&gt;
            [publisher] =&amp;gt; STR&lt;br /&gt;
            [publishDate] =&amp;gt; DATETIME&lt;br /&gt;
            [startDate] =&amp;gt; DATETIME&lt;br /&gt;
            [endDate] =&amp;gt; DATETIME&lt;br /&gt;
            [isBlog] =&amp;gt; BIT&lt;br /&gt;
            [isPoll] =&amp;gt; BIT&lt;br /&gt;
            [createDate] =&amp;gt; DATETIME&lt;br /&gt;
            [modDate] =&amp;gt; DATETIME&lt;br /&gt;
&lt;br /&gt;
            // author fields&lt;br /&gt;
            [author_firstName] =&amp;gt; STRING&lt;br /&gt;
            [author_lastName] =&amp;gt; STRING&lt;br /&gt;
            [author_userImage] =&amp;gt; STRING&lt;br /&gt;
            [author_handle] =&amp;gt; STRING&lt;br /&gt;
&lt;br /&gt;
            // blogger fields&lt;br /&gt;
            [blog_firstName] =&amp;gt; STRING&lt;br /&gt;
            [blog_lastName] =&amp;gt; STRING&lt;br /&gt;
            [blog_userImage] =&amp;gt; STRING&lt;br /&gt;
            [blog_handle] =&amp;gt; STRING&lt;br /&gt;
&lt;br /&gt;
            // forum / comments fields&lt;br /&gt;
            [forumCount] =&amp;gt; INT&lt;br /&gt;
            [ratingTotal] =&amp;gt; INT&lt;br /&gt;
            [ratingCount] =&amp;gt; INT&lt;br /&gt;
            [ratingAverage] =&amp;gt; DECIMAL&lt;br /&gt;
&lt;br /&gt;
            // product fields&lt;br /&gt;
            [productName] =&amp;gt; STRING (for first product in page)&lt;br /&gt;
            [productNumber] =&amp;gt; STRING (for first product in page)&lt;br /&gt;
            [catalogNumber] =&amp;gt; STRING (for first product in page)&lt;br /&gt;
            [productTitle] =&amp;gt; STRING (for first product in page)&lt;br /&gt;
            [productDescription] =&amp;gt; STRING (for first product in page)&lt;br /&gt;
            [productId] =&amp;gt; INT (for first product in page)&lt;br /&gt;
            [lowestPrice] =&amp;gt; DECIMAL&lt;br /&gt;
            [lowestListPrice] =&amp;gt; DECIMAL&lt;br /&gt;
            [lowestSalePrice] =&amp;gt; DECIMAL&lt;br /&gt;
            [productCount] =&amp;gt; INT&lt;br /&gt;
            [productIdList] =&amp;gt; STRING (comma delimited list of INT)&lt;br /&gt;
            [saleFromDate] =&amp;gt; DATETIME (for first product in page)&lt;br /&gt;
            [saleToDate] =&amp;gt; DATETIME (for first product in page)&lt;br /&gt;
            [lowestLevelPrice] =&amp;gt; DECIMAL&lt;br /&gt;
            [lowestAllPrice] =&amp;gt; DECIMAL&lt;br /&gt;
            [isConfigurable] =&amp;gt; BIT&lt;br /&gt;
            [isDiscontinued] =&amp;gt; BIT&lt;br /&gt;
            [addToCartLink] =&amp;gt; STRING&lt;br /&gt;
&lt;br /&gt;
            //children's children and children's grandchildren (great grandchildren to parent pageId)&lt;br /&gt;
            [childPageCount] =&amp;gt; INT&lt;br /&gt;
            [grandChildPageCount] =&amp;gt; INT&lt;br /&gt;
&lt;br /&gt;
            //poll data&lt;br /&gt;
            [pollCount] =&amp;gt; INT&lt;br /&gt;
&lt;br /&gt;
            //custom fields&lt;br /&gt;
            [custom_field_?] =&amp;gt; ?&lt;br /&gt;
                        &lt;br /&gt;
        )&lt;br /&gt;
    [1] =&amp;gt; Array ...&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Elements from the page associative array are as follows: &lt;br /&gt;
{|border=2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;Element&amp;lt;/b&amp;gt;&lt;br /&gt;
|&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
|&amp;lt;b&amp;gt;Example&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;fields automatically included&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|relevance&lt;br /&gt;
|FLOAT - a numerical representation of how relevant the page is to the keywords entered. Higher number = more relevant.&lt;br /&gt;
|1.12&lt;br /&gt;
|-&lt;br /&gt;
|pageId&lt;br /&gt;
|INT - system assigned unique pageId of the returned page&lt;br /&gt;
|6&lt;br /&gt;
|-&lt;br /&gt;
|blog_userId&lt;br /&gt;
|INT - system assigned unique userId of the blogger designed in page management to this page. If the page is not a blog, value will be empty.&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|authorId&lt;br /&gt;
|INT - system assigned unique userId of the author designated in page management to this page. If no author is assigned, this value will be empty&lt;br /&gt;
|14&lt;br /&gt;
|-&lt;br /&gt;
|isLinkDirect&lt;br /&gt;
|BIT - either 1 or 0 designating if the link is direct. If it is a direct link, the value of the 'link' field will be the ultimate target of the link, regardless if it is internal or external. If the link is not direct, the  value of the 'link' field will always be internal - external links will be redirected from the internal page. The latter is for tracking purposes.&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|isForum&lt;br /&gt;
|BIT - either 1 or 0 designating if the page is selected in page management to be a forum. Note this option will only be available if Forums Available is set on in Settings. Use this flag to hide/show forum related page content and logic, so this data is not displayed / processed if the page manager has forums turned off for the page.&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|link&lt;br /&gt;
|STRING - the link to this page. This should be placed in the HREF attribute of the A link tag. The system will automatically generate the correct link to the internal / external target and take into consideration if the link is direct (isLinkDirect) or not.&lt;br /&gt;
|index.php?pageId=192&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;page data&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|templateId&lt;br /&gt;
|INT - system assigned unique template id for the template selected in page management for this page&lt;br /&gt;
|12&lt;br /&gt;
|-&lt;br /&gt;
|notice&lt;br /&gt;
|STRING - notice field entry for this page in page management. Note that notice has to be turned on in Settings to be available in page management. Also notice can be renamed in Settings, therefore might not be titled 'notice' in page management. Often notice is used as the Page Name (unique description of the page for internal use / page identification)&lt;br /&gt;
|This is my page&lt;br /&gt;
|-&lt;br /&gt;
|title&lt;br /&gt;
|STRING - title field entry for this page in page management. Note that title can be renamed in Settings, therefore might not be titled 'title' in page management. This is used as the text descriptor of the page in all areas of administration that list pages (page children, parents, page search, etc). Other fields may be designated to appear as descriptors in administration by changing the Summary Listing Details under the Page Management tab.&lt;br /&gt;
|The page title&lt;br /&gt;
|-&lt;br /&gt;
|subTitle&lt;br /&gt;
|STRING - subtitle field entry for this page in page management. Note that subtitle has to be turned on in Settings to be available in page management. Also subtitle can be renamed in Settings, therefore might not be titled 'subtitle' in page management. &lt;br /&gt;
|This is the subtitle for this page&lt;br /&gt;
|-&lt;br /&gt;
|copy&lt;br /&gt;
|STRING - HTML formatted page copy, as set in the copy field WYSIWYG editor in page management. This serves as the bulk of the page's content. Copy is typically not displayed in page searches / page children as it is to much information when listing multiple page results, though sometimes it is truncates in the results. Note that copy is HTML content, as it is managed by the WYSIWYG editor.&lt;br /&gt;
|&amp;amp;lt;img src=&amp;quot;image.jpg&amp;quot; align=&amp;quot;right&amp;quot;&amp;amp;gt;&amp;amp;lt;p&amp;amp;gt;This is the &amp;amp;lt;b&amp;amp;gt;copy&amp;amp;gt;/b&amp;amp;gt; for this &amp;amp;lt;i&amp;amp;gt;page&amp;amp;lt;/i&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|summary&lt;br /&gt;
|STRING - summary information about the page. Typically used to describe the page in brief, such as in children, search results and cross sells.&lt;br /&gt;
|This is some additional details about this page. To see more information click this page.&lt;br /&gt;
|-&lt;br /&gt;
|summaryImage&lt;br /&gt;
|STRING - absolute path to an image used in summaries about the page. Typically used to accompany the summary when describing the page in brief, such as in children, search results and cross sells.&lt;br /&gt;
|/files/images/thumbnails/imageName.jpg&lt;br /&gt;
|-&lt;br /&gt;
|summaryImageAlt&lt;br /&gt;
|STRING - alt tag contents for the summaryImage.&lt;br /&gt;
|This describes the image&lt;br /&gt;
|-&lt;br /&gt;
|summaryImageCaption&lt;br /&gt;
|STRING - caption to accompany the summaryImage.&lt;br /&gt;
|The above is an image!&lt;br /&gt;
|-&lt;br /&gt;
|linkText&lt;br /&gt;
|STRING - text to represent the link to go to the page.&lt;br /&gt;
|Click here for more information&lt;br /&gt;
|-&lt;br /&gt;
|publisher&lt;br /&gt;
|STRING - name of the publisher of the page. Typically used when the page is an article, press release or content that is owned by another party. Only available in Page Management if publishing information is set to available in Settings.&lt;br /&gt;
|New York Times&lt;br /&gt;
|-&lt;br /&gt;
|publishDate&lt;br /&gt;
|DATETIME - date to present as the publishing date of the page. Typically used when the page is an article or press release. Only available in Page Management if publishing information is set to available in Settings.&lt;br /&gt;
|2008-10-16 08:00:00&lt;br /&gt;
|-&lt;br /&gt;
|startDate&lt;br /&gt;
|DATETIME - designates the first day the page should be made available to visitors. If empty, than there is no cut off start date.&lt;br /&gt;
|2008-10-01 00:00:00&lt;br /&gt;
|-&lt;br /&gt;
|endDate&lt;br /&gt;
|DATETIME - designates the last day the page should be available to visitors. If empty, than there is no cut off end date.&lt;br /&gt;
|2008-10-31 00:00:00&lt;br /&gt;
|-&lt;br /&gt;
|isBlog&lt;br /&gt;
|BIT - 0 or 1 if page is selected to be a blog (controlled in page management, but set on automatically when a blog is created by a site visitor). Use to create logic that shows / processes blog related content and logic. Note that this option will only be available in page management if Blogging Available is selected in Settings.&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|isPoll&lt;br /&gt;
|BIT - 0 or 1 if page is selected to be a poll via page management. Use to create logic that shows / processes poll related content and logic. Note that this option will only be available in page management if Polling Available is selected in Settings.&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|createDate&lt;br /&gt;
|DATETIME - system generated datetime when the page record was first inserted into the database.&lt;br /&gt;
|2008-10-15 14:15:56&lt;br /&gt;
|-&lt;br /&gt;
|modDate&lt;br /&gt;
|DATETIME - system generated datetime when the page was last modified.&lt;br /&gt;
|2008-10-15 16:12:44&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;author fields&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|author_firstName&lt;br /&gt;
|STRING - first name of the user designated as the author of the page. This is the first name assigned to the user record for the user with the userId matching the authorId selected in page management for this page. Authors may only be selected if User Publisher Information is selected in Settings.&lt;br /&gt;
|Mark&lt;br /&gt;
|-&lt;br /&gt;
|author_lastName&lt;br /&gt;
|STRING - last name of the user designated as the author of the page. This is the last name assigned to the user record for the user with the userId matching the authorId selected in page management for this page. Authors may only be selected if User Publisher Information is selected in Settings.&lt;br /&gt;
|Wexler&lt;br /&gt;
|-&lt;br /&gt;
|author_userImage&lt;br /&gt;
|STRING - path to image selected for as the user image for the user designated as the author for the page. Authors may only be selected if User Publisher Information is selected in Settings.&lt;br /&gt;
|/files/images/imagename.jpg&lt;br /&gt;
|-&lt;br /&gt;
|author_handle&lt;br /&gt;
|STRING - Handle of the user designated as the author of the page. This is the handle assigned to the user record for the user with the userId matching the authorId selected in page management for this page. Authors may only be selected if User Publisher Information is selected in Settings.&lt;br /&gt;
|mwex501&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;blogger fields&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|blog_firstName&lt;br /&gt;
|STRING - First name of the user designated as the blog owner of the page. This is the first name assigned to the user record for the user with the userId matching the blog_userId selected in page management for this page. Bloggers may only be selected if Blogging Available is selected in Settings.&lt;br /&gt;
|Mark&lt;br /&gt;
|-&lt;br /&gt;
|blog_lastName&lt;br /&gt;
|STRING - Last name of the user designated as the blog owner of the page. This is the last name assigned to the user record for the user with the userId matching the blog_userId selected in page management for this page. Bloggers may only be selected if Blogging Available is selected in Settings.&lt;br /&gt;
|Wexler&lt;br /&gt;
|-&lt;br /&gt;
|blog_userImage&lt;br /&gt;
|STRING - Path of the user image of the user designated as the blog owner of the page. This is the user image path assigned to the user record for the user with the userId matching the blog_userId selected in page management for this page. Bloggers may only be selected if Blogging Available is selected in Settings.&lt;br /&gt;
|/files/images/image.jpg&lt;br /&gt;
|-&lt;br /&gt;
|blog_handle&lt;br /&gt;
|STRING -Handle of the user designated as the blog owner of the page. This is the handle assigned to the user record for the user with the userId matching the blog_userId selected in page management for this page. Bloggers may only be selected if Blogging Available is selected in Settings.&lt;br /&gt;
|mwex501&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;forum / comments fields&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|forumCount&lt;br /&gt;
|INT - number of forum posts to the page.&lt;br /&gt;
|23&lt;br /&gt;
|-&lt;br /&gt;
|ratingTotal&lt;br /&gt;
|INT - Sum of all ratings posted to this page (each rating is on a scale of 0 to 5).&lt;br /&gt;
|120&lt;br /&gt;
|-&lt;br /&gt;
|ratingCount&lt;br /&gt;
|INT - total number of ratings submitted for the page.&lt;br /&gt;
|50&lt;br /&gt;
|-&lt;br /&gt;
|ratingAverage&lt;br /&gt;
|FLOAT - average rating for the page on a scale of 0 to 5.&lt;br /&gt;
|2.4&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;product fields&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|productName&lt;br /&gt;
|STRING - The name of the first product directly assigned to the page in relationships.&lt;br /&gt;
|Product X&lt;br /&gt;
|-&lt;br /&gt;
|productNumber&lt;br /&gt;
|STRING - The product number of the first product directly assigned to the page in relationships.&lt;br /&gt;
|1234XYZ&lt;br /&gt;
|-&lt;br /&gt;
|catalogNumber&lt;br /&gt;
|STRING - The catalog number of the first product directly assigned to the page in relationships.&lt;br /&gt;
|234ABC&lt;br /&gt;
|-&lt;br /&gt;
|productTitle&lt;br /&gt;
|STRING - The title of the first product directly assigned to the page in relationships.&lt;br /&gt;
|This is the title of this product&lt;br /&gt;
|-&lt;br /&gt;
|productDescription&lt;br /&gt;
|STRING - the description of the first product directly assigned to the page in relationships.&lt;br /&gt;
|This is a description of the product&lt;br /&gt;
|-&lt;br /&gt;
|productId&lt;br /&gt;
|INT - unique id assigned by the system to the product upon creation, for the first product assigned to the page in relationships&lt;br /&gt;
|12&lt;br /&gt;
|-&lt;br /&gt;
|lowestPrice&lt;br /&gt;
|FLOAT - lowest price for All products assigned to the page in relationships. This price only takes into consideration the 'price' field for the products, not the sale, level prices.&lt;br /&gt;
|12.59&lt;br /&gt;
|-&lt;br /&gt;
|lowestListPrice&lt;br /&gt;
|FLOAT - lowest of all the list prices for ALl products assigned to the page in relationships.&lt;br /&gt;
|15.46&lt;br /&gt;
|-&lt;br /&gt;
|lowestSalePrice&lt;br /&gt;
|FLOAT - lowest of all the available sale prices for all products assigned to the page in relationships. Sale prices that are not within the sale from / to price range do not qualify.&lt;br /&gt;
|14.26&lt;br /&gt;
|-&lt;br /&gt;
|productCount&lt;br /&gt;
|INT - number of products assigned to the page in relationships.&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|productIdList&lt;br /&gt;
|STRING - comma delimited list of unique productIds for products assigned to the page in relationships.&lt;br /&gt;
|14,26,3&lt;br /&gt;
|-&lt;br /&gt;
|saleFromDate&lt;br /&gt;
|DATETIME - date when the sale price is first available for the first product assigned to the page in relationships. If no sale from date is assigned the value will be empty, meaning there is no beginning cut off date for the sale.&lt;br /&gt;
|2008-10-12 00:00:00&lt;br /&gt;
|-&lt;br /&gt;
|saleToDate&lt;br /&gt;
|DATETIME - date when the sale price is last available for the first product assigned to the page in relationships. If no sale to date is assigned the value will be empty, meaning there is no ending cut off date for the sale.&lt;br /&gt;
|2008-10-20 00:00:00&lt;br /&gt;
|-&lt;br /&gt;
|lowestLevelPrice&lt;br /&gt;
|FLOAT - lowest of all the level prices for all products assigned to the page in relationships.&lt;br /&gt;
|10.26&lt;br /&gt;
|-&lt;br /&gt;
|lowestAllPrice&lt;br /&gt;
|FLOAT - lowest price for All products assigned to the page in relationships. This price takes into consideration sale, regular, list and level (tiered) pricing. Sale prices that are not within the sale from / to price range do not qualify.&lt;br /&gt;
|14.22&lt;br /&gt;
|-&lt;br /&gt;
|isConfigurable&lt;br /&gt;
|BIT - 1 if product is configurable (has options or can be personalized), 0 if not&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|isDiscontinued&lt;br /&gt;
|BIT - 1 of product is discontinued. 0 if not&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|addToCartLink&lt;br /&gt;
|STRING - use this link for an 'add to cart' button for this child. The string will add the item to the cart IF the child has only one product AND the product has no options AND the product is not discontinued AND the product is not personalizable. Otherwise this string will link to the child page.&lt;br /&gt;
|index.php?fa=ORDER.cartAdd&amp;amp;productId=123&amp;amp;quantity=1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;qualifying pages' children and grandchildren&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|childPageCount&lt;br /&gt;
|INT - total count of pages set as children to this page via relationships.&lt;br /&gt;
|6&lt;br /&gt;
|-&lt;br /&gt;
|grandChildPageCount&lt;br /&gt;
|INT - total count of all pages set as grandchildren (children to children) to this page via relationships. Warning, with sites containing many pages / relationships, using this field could cause undue strain on the system.&lt;br /&gt;
|143&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;poll data&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|pollCount&lt;br /&gt;
|INT - total number of poll postings to this page&lt;br /&gt;
|123&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;custom fields&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|custom_field_?&lt;br /&gt;
|Each custom field will be accessible by using custom_field_? where the ? is the field name as set in page template administration for the template used by the page.&lt;br /&gt;
|-anything-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
;Simple Example&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// call&lt;br /&gt;
$searchArr = eV::pageSearchGet('several keywords here','title,summary,summaryImage,link','relevance','DESC','num');&lt;br /&gt;
// output&lt;br /&gt;
foreach($searchArr as $search) {&lt;br /&gt;
echo &amp;quot;&amp;lt;hr&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;a href=\&amp;quot;&amp;quot; . $search['link'] . &amp;quot;\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;img align=\&amp;quot;left\&amp;quot; src=\&amp;quot;&amp;quot; . $search['summaryImage'] . &amp;quot;\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;a href=\&amp;quot;&amp;quot; . $search['link'] . &amp;quot;\&amp;quot;&amp;gt;&amp;quot; . $search['title'] . &amp;quot;&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot; . $search['summary'];&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;lt;i&amp;gt;Relevance:&amp;quot; . $search['relevance'] . &amp;quot;&amp;lt;/i&amp;gt;&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
;Complex Example using pagination, sorting controls&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// make sure our keywords attribute is passed&lt;br /&gt;
if(!isset($attributes['keywords'])) $attributes['keywords'] = '';&lt;br /&gt;
&lt;br /&gt;
// default sorting commands&lt;br /&gt;
if(!isset($attributes['orderBy'])) $attributes['orderBy'] = 'relevance';&lt;br /&gt;
if(!isset($attributes['orderType'])) $attributes['orderType'] = 'num';&lt;br /&gt;
if(!isset($attributes['orderDir'])) $attributes['orderDir'] = 'DESC';&lt;br /&gt;
&lt;br /&gt;
// get the sorting results&lt;br /&gt;
$arrChildren = eV::pageSearchGet($attributes['keywords'],&amp;quot;pageId,link,templateId,summaryImage,title,summary,lowestAllPrice,productId,productCount,addToCartLink,relevance&amp;quot;,$attributes['orderBy'],$attributes['orderDir'],$attributes['orderType']); &lt;br /&gt;
&lt;br /&gt;
// go to no items found page if empty&lt;br /&gt;
// substitute '#' with the pageId to go to&lt;br /&gt;
if(count($arrChildren) == 0) eV::redirect(&amp;quot;index.php?pageId=#&amp;amp;keywords=&amp;quot; . urlencode($attributes['keywords']));&lt;br /&gt;
&lt;br /&gt;
// if only 1 result found, lets just forward to that page&lt;br /&gt;
if(count($arrChildren) == 1) eV::redirect('/index.php?pageId=' . $arrChildren[0]['pageId']);&lt;br /&gt;
&lt;br /&gt;
// preset control attributes&lt;br /&gt;
// view all attribute specifies if we are to page or show everything that qualifies&lt;br /&gt;
if(!isset($attributes['viewAll'])) $attributes['viewAll'] = 0;&lt;br /&gt;
// pageNo states the current page number in pagination that we are on&lt;br /&gt;
if(!isset($attributes['pageNo'])) $attributes['pageNo'] = 0;&lt;br /&gt;
// perPage sets the number of items to show in a page&lt;br /&gt;
if(!isset($attributes['perPage'])) $attributes['perPage'] = 6;&lt;br /&gt;
// if view all is on, lets show all items on this page&lt;br /&gt;
if($attributes['viewAll']) $attributes['perPage'] = count($arrChildren);&lt;br /&gt;
&lt;br /&gt;
// call pagination&lt;br /&gt;
// functions returns an array that contains the pagination links, start and end child index&lt;br /&gt;
// be sure to include your order (sort) attributes and keyword attribute&lt;br /&gt;
$pagination = eV::pagination(count($arrChildren),$attributes['perPage'],$attributes['pageNo'],&amp;quot;index.php?pageId=$pageId&amp;amp;keywords=&amp;quot; . urlencode($attributes['keywords']). &amp;quot;&amp;amp;orderBy=&amp;quot; . $attributes['orderBy'] . &amp;quot;&amp;amp;orderType=&amp;quot; . $attributes['orderType'] . &amp;quot;&amp;amp;orderDir=&amp;quot; . $attributes['orderDir']); &lt;br /&gt;
&lt;br /&gt;
// spit out some page content&lt;br /&gt;
echo &amp;quot;&amp;lt;h2&amp;gt;Your search for \&amp;quot;&amp;quot; . $attributes['keywords'] . &amp;quot;\&amp;quot; was successful!&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;quot; . $copy . &amp;quot;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// form to run another search&lt;br /&gt;
// use get method so keyword searches are cachable, trackable by 3rd party tools&lt;br /&gt;
echo &amp;quot;&lt;br /&gt;
    &amp;lt;form action=\&amp;quot;index.php\&amp;quot; method=\&amp;quot;get\&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;hr&amp;gt;&lt;br /&gt;
    Would you like to search again?&lt;br /&gt;
    &amp;lt;br&amp;gt;Enter Keyword or Item Number: &lt;br /&gt;
    &amp;lt;input name=\&amp;quot;keywords\&amp;quot; type=\&amp;quot;text\&amp;quot; value=\&amp;quot;\&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=\&amp;quot;hidden\&amp;quot; name=\&amp;quot;pageId\&amp;quot; value=\&amp;quot;&amp;quot; . $pageId . &amp;quot;\&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=\&amp;quot;submit\&amp;quot; value\&amp;quot;GO!\&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// output pagination header&lt;br /&gt;
echo &amp;quot;&lt;br /&gt;
    &amp;lt;hr&amp;gt;&lt;br /&gt;
    (Showing &amp;quot; . ($pagination['startIndex']+1) . &amp;quot;-&amp;quot; . ($pagination['endIndex']+1) . &amp;quot; of &amp;quot; . count($arrChildren) . &amp;quot;)&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// form to sort results&lt;br /&gt;
// you can sort by any field you request in the eV::pageSearchGet function&lt;br /&gt;
// be sure to include your keyword attributes, pageId, view all status&lt;br /&gt;
echo &amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;Sort: &lt;br /&gt;
&amp;lt;form name=\&amp;quot;sortForm\&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;select name=\&amp;quot;sortSelect\&amp;quot; size=\&amp;quot;1\&amp;quot; onchange=\&amp;quot;window.location.href=document.sortForm.sortSelect.options[document.sortForm.sortSelect.selectedIndex].value;\&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=\&amp;quot;#\&amp;quot; selected=\&amp;quot;selected\&amp;quot;&amp;gt;Sort by&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=\&amp;quot;index.php?pageId=$pageId&amp;amp;viewAll=&amp;quot; .$attributes['viewAll'] . &amp;quot;&amp;amp;orderBy=relevance&amp;amp;orderType=num&amp;amp;orderDir=DESC&amp;amp;keywords=&amp;quot; . urlencode($attributes['keywords']) . &amp;quot;\&amp;quot;&amp;gt;Relevance&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=\&amp;quot;index.php?pageId=$pageId&amp;amp;viewAll=&amp;quot; .$attributes['viewAll'] . &amp;quot;&amp;amp;orderBy=lowestAllPrice&amp;amp;orderDir=ASC&amp;amp;orderType=num&amp;amp;orderDir=ASC&amp;amp;keywords=&amp;quot; . urlencode($attributes['keywords']) . &amp;quot;\&amp;quot;&amp;gt;Price&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=\&amp;quot;index.php?pageId=$pageId&amp;amp;viewAll=&amp;quot; .$attributes['viewAll'] . &amp;quot;&amp;amp;orderBy=createDate&amp;amp;orderDir=DESC&amp;amp;orderType=num&amp;amp;keywords=&amp;quot; . urlencode($attributes['keywords']) . &amp;quot;\&amp;quot;&amp;gt;Newest&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=\&amp;quot;index.php?pageId=$pageId&amp;amp;viewAll=&amp;quot; .$attributes['viewAll'] . &amp;quot;&amp;amp;orderBy=title&amp;amp;orderDir=ASC&amp;amp;orderType=str&amp;amp;orderDir=ASC&amp;amp;keywords=&amp;quot; . urlencode($attributes['keywords']) . &amp;quot;\&amp;quot;&amp;gt;Alphabetical&amp;lt;/option&amp;gt;&lt;br /&gt;
      &amp;lt;/select&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// pagination page links&lt;br /&gt;
echo &amp;quot;&amp;lt;hr&amp;gt;Pages: &amp;quot; .  $pagination['links'];&lt;br /&gt;
&lt;br /&gt;
// view all link&lt;br /&gt;
// only show if we are not viewing all&lt;br /&gt;
if (!$attributes['viewAll']) echo &amp;quot;&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;index.php?pageId=$pageId&amp;amp;keywords=&amp;quot; . urlencode($attributes['keywords']) . &amp;quot;&amp;amp;orderBy=&amp;quot; . $attributes['orderBy'] . &amp;quot;&amp;amp;orderDir=&amp;quot; . $attributes['orderDir']. &amp;quot;&amp;amp;orderType=&amp;quot; . $attributes['orderType'] . &amp;quot;&amp;amp;viewAll=1\&amp;quot;&amp;gt;(VIEW ALL)&amp;lt;/a&amp;gt; &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// now lets show the items returned&lt;br /&gt;
// set tracker to note which child we are on&lt;br /&gt;
$childIndex = 0;&lt;br /&gt;
&lt;br /&gt;
// loop thru children&lt;br /&gt;
foreach($arrChildren as $child){&lt;br /&gt;
	// only show children that are within the start and end index as returned by eV::pagination function&lt;br /&gt;
  	if($pagination['startIndex'] &amp;lt;= $childIndex &amp;amp;&amp;amp; $pagination['endIndex'] &amp;gt;= $childIndex){&lt;br /&gt;
		// display the child&lt;br /&gt;
 		 echo &amp;quot;&amp;lt;hr&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot; . $child['link'] . &amp;quot;\&amp;quot;&amp;gt;&amp;lt;img src=\&amp;quot;&amp;quot; . $child['summaryImage'] . &amp;quot;\&amp;quot;/&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        	&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot; . $child['link'] . &amp;quot;\&amp;quot;&amp;gt;&amp;quot; . $child['title'] . &amp;quot;&amp;lt;/a&amp;gt;&lt;br /&gt;
  			&amp;lt;br&amp;gt;&amp;quot; . $child['summary'] . &amp;quot;&lt;br /&gt;
     		&amp;lt;br&amp;gt;As low as &amp;quot; . eV::dollarFormat($child['lowestAllPrice']) . &amp;quot; each!&lt;br /&gt;
			&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot; . $child['link'] . &amp;quot;\&amp;quot;&amp;gt;More Info&amp;lt;/a&amp;gt;&lt;br /&gt;
    		&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot; . $child['addToCartLink']. &amp;quot;\&amp;quot;&amp;gt;Add To Cart&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  // increment tracking index&lt;br /&gt;
  $childIndex++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Functions:pageSearchGet&amp;diff=716</id>
		<title>Functions:pageSearchGet</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Functions:pageSearchGet&amp;diff=716"/>
				<updated>2009-04-08T14:48:05Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: added complex example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Page Template Functions Shortcuts}}&lt;br /&gt;
== Description ==&lt;br /&gt;
Retrieves page and product data on pages that qualify for a keyword search.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
$arrPages= eV::pageSearchGet($keywords[,$fieldList=NULL][,$orderBy=NULL][,$orderDir=&amp;quot;DESC&amp;quot;][,$orderType=&amp;quot;str&amp;quot;]);&lt;br /&gt;
&lt;br /&gt;
== Paramaters ==&lt;br /&gt;
*$keywords STRING&lt;br /&gt;
::Keywords to be used to qualify the page search&lt;br /&gt;
*$fieldList STRING (optional)&lt;br /&gt;
::comma delimited list of field names you would like returned. leaving this value empty will return all fields, though this is not recommended as it could significantly reduce system performance. Page custom fields can be requested by prepending the custom field name with &amp;quot;custom_field_&amp;quot; (example: to include the &amp;quot;myVar&amp;quot; custom field, add &amp;quot;custom_field_myVar&amp;quot; to the $fieldList).&lt;br /&gt;
*$orderBy STRING (optional)&lt;br /&gt;
::field to order by. This field must be present in the $fieldList. defaults to 'orderId' which corresponds to the order the children are listed in relationships management for the parent $pageId&lt;br /&gt;
*$orderDir STRING (optional)&lt;br /&gt;
::Either &amp;quot;ASC&amp;quot; or &amp;quot;DESC&amp;quot; signifying the direction of the sorted results. Defaults to &amp;quot;DESC&amp;quot;.&lt;br /&gt;
*$orderType STRING (optional)&lt;br /&gt;
::Either &amp;quot;str&amp;quot; or &amp;quot;num&amp;quot; signifying how the values will be compared when sorting the results. Defaults to &amp;quot;str&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Return Values ==&lt;br /&gt;
Returns a multidimensional array of page data that qualifies for the search. The first dimension is a numerically indexed array of each child (starting from 0). The second dimension is an associative array of keys corresponding to the fields requested in the $fieldList attribute (if $fieldList is empty, all fields are returned. This is not recommended as it creates unnecessary overhead).&lt;br /&gt;
&lt;br /&gt;
The returned array is as follows (all possible fields are listed, note that only fields requested will be returned):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [0] =&amp;gt; Array&lt;br /&gt;
        (&lt;br /&gt;
            // fields automatically included&lt;br /&gt;
            [relevance] =&amp;gt; FLOAT&lt;br /&gt;
            [pageId] =&amp;gt; INT&lt;br /&gt;
            [blog_userId] =&amp;gt; INT // user id for blogger&lt;br /&gt;
            [authorId] =&amp;gt; INT // user id for author&lt;br /&gt;
            [isLinkDirect] =&amp;gt; BIT // signal that this is an outside link circumvents page forwarding&lt;br /&gt;
            [isForum] =&amp;gt; BIT&lt;br /&gt;
            [link] =&amp;gt; STR&lt;br /&gt;
&lt;br /&gt;
            //page data&lt;br /&gt;
            [templateId] =&amp;gt; INT&lt;br /&gt;
            [notice] =&amp;gt; STR&lt;br /&gt;
            [title] =&amp;gt; STR&lt;br /&gt;
            [subTitle] =&amp;gt; STR&lt;br /&gt;
            [copy] =&amp;gt; STR&lt;br /&gt;
            [summary] =&amp;gt; STR&lt;br /&gt;
            [summaryImage] =&amp;gt; STR&lt;br /&gt;
            [summaryImageAlt] =&amp;gt; STR&lt;br /&gt;
            [summaryImageCaption] =&amp;gt; STR&lt;br /&gt;
            [linkText] =&amp;gt; STR&lt;br /&gt;
            [publisher] =&amp;gt; STR&lt;br /&gt;
            [publishDate] =&amp;gt; DATETIME&lt;br /&gt;
            [startDate] =&amp;gt; DATETIME&lt;br /&gt;
            [endDate] =&amp;gt; DATETIME&lt;br /&gt;
            [isBlog] =&amp;gt; BIT&lt;br /&gt;
            [isPoll] =&amp;gt; BIT&lt;br /&gt;
            [createDate] =&amp;gt; DATETIME&lt;br /&gt;
            [modDate] =&amp;gt; DATETIME&lt;br /&gt;
&lt;br /&gt;
            // author fields&lt;br /&gt;
            [author_firstName] =&amp;gt; STRING&lt;br /&gt;
            [author_lastName] =&amp;gt; STRING&lt;br /&gt;
            [author_userImage] =&amp;gt; STRING&lt;br /&gt;
            [author_handle] =&amp;gt; STRING&lt;br /&gt;
&lt;br /&gt;
            // blogger fields&lt;br /&gt;
            [blog_firstName] =&amp;gt; STRING&lt;br /&gt;
            [blog_lastName] =&amp;gt; STRING&lt;br /&gt;
            [blog_userImage] =&amp;gt; STRING&lt;br /&gt;
            [blog_handle] =&amp;gt; STRING&lt;br /&gt;
&lt;br /&gt;
            // forum / comments fields&lt;br /&gt;
            [forumCount] =&amp;gt; INT&lt;br /&gt;
            [ratingTotal] =&amp;gt; INT&lt;br /&gt;
            [ratingCount] =&amp;gt; INT&lt;br /&gt;
            [ratingAverage] =&amp;gt; DECIMAL&lt;br /&gt;
&lt;br /&gt;
            // product fields&lt;br /&gt;
            [productName] =&amp;gt; STRING (for first product in page)&lt;br /&gt;
            [productNumber] =&amp;gt; STRING (for first product in page)&lt;br /&gt;
            [catalogNumber] =&amp;gt; STRING (for first product in page)&lt;br /&gt;
            [productTitle] =&amp;gt; STRING (for first product in page)&lt;br /&gt;
            [productDescription] =&amp;gt; STRING (for first product in page)&lt;br /&gt;
            [productId] =&amp;gt; INT (for first product in page)&lt;br /&gt;
            [lowestPrice] =&amp;gt; DECIMAL&lt;br /&gt;
            [lowestListPrice] =&amp;gt; DECIMAL&lt;br /&gt;
            [lowestSalePrice] =&amp;gt; DECIMAL&lt;br /&gt;
            [productCount] =&amp;gt; INT&lt;br /&gt;
            [productIdList] =&amp;gt; STRING (comma delimited list of INT)&lt;br /&gt;
            [saleFromDate] =&amp;gt; DATETIME (for first product in page)&lt;br /&gt;
            [saleToDate] =&amp;gt; DATETIME (for first product in page)&lt;br /&gt;
            [lowestLevelPrice] =&amp;gt; DECIMAL&lt;br /&gt;
            [lowestAllPrice] =&amp;gt; DECIMAL&lt;br /&gt;
            [isConfigurable] =&amp;gt; BIT&lt;br /&gt;
            [isDiscontinued] =&amp;gt; BIT&lt;br /&gt;
            [addToCartLink] =&amp;gt; STRING&lt;br /&gt;
&lt;br /&gt;
            //children's children and children's grandchildren (great grandchildren to parent pageId)&lt;br /&gt;
            [childPageCount] =&amp;gt; INT&lt;br /&gt;
            [grandChildPageCount] =&amp;gt; INT&lt;br /&gt;
&lt;br /&gt;
            //poll data&lt;br /&gt;
            [pollCount] =&amp;gt; INT&lt;br /&gt;
&lt;br /&gt;
            //custom fields&lt;br /&gt;
            [custom_field_?] =&amp;gt; ?&lt;br /&gt;
                        &lt;br /&gt;
        )&lt;br /&gt;
    [1] =&amp;gt; Array ...&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Elements from the page associative array are as follows: &lt;br /&gt;
{|border=2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;Element&amp;lt;/b&amp;gt;&lt;br /&gt;
|&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
|&amp;lt;b&amp;gt;Example&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;fields automatically included&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|relevance&lt;br /&gt;
|FLOAT - a numerical representation of how relevant the page is to the keywords entered. Higher number = more relevant.&lt;br /&gt;
|1.12&lt;br /&gt;
|-&lt;br /&gt;
|pageId&lt;br /&gt;
|INT - system assigned unique pageId of the returned page&lt;br /&gt;
|6&lt;br /&gt;
|-&lt;br /&gt;
|blog_userId&lt;br /&gt;
|INT - system assigned unique userId of the blogger designed in page management to this page. If the page is not a blog, value will be empty.&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|authorId&lt;br /&gt;
|INT - system assigned unique userId of the author designated in page management to this page. If no author is assigned, this value will be empty&lt;br /&gt;
|14&lt;br /&gt;
|-&lt;br /&gt;
|isLinkDirect&lt;br /&gt;
|BIT - either 1 or 0 designating if the link is direct. If it is a direct link, the value of the 'link' field will be the ultimate target of the link, regardless if it is internal or external. If the link is not direct, the  value of the 'link' field will always be internal - external links will be redirected from the internal page. The latter is for tracking purposes.&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|isForum&lt;br /&gt;
|BIT - either 1 or 0 designating if the page is selected in page management to be a forum. Note this option will only be available if Forums Available is set on in Settings. Use this flag to hide/show forum related page content and logic, so this data is not displayed / processed if the page manager has forums turned off for the page.&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|link&lt;br /&gt;
|STRING - the link to this page. This should be placed in the HREF attribute of the A link tag. The system will automatically generate the correct link to the internal / external target and take into consideration if the link is direct (isLinkDirect) or not.&lt;br /&gt;
|index.php?pageId=192&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;page data&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|templateId&lt;br /&gt;
|INT - system assigned unique template id for the template selected in page management for this page&lt;br /&gt;
|12&lt;br /&gt;
|-&lt;br /&gt;
|notice&lt;br /&gt;
|STRING - notice field entry for this page in page management. Note that notice has to be turned on in Settings to be available in page management. Also notice can be renamed in Settings, therefore might not be titled 'notice' in page management. Often notice is used as the Page Name (unique description of the page for internal use / page identification)&lt;br /&gt;
|This is my page&lt;br /&gt;
|-&lt;br /&gt;
|title&lt;br /&gt;
|STRING - title field entry for this page in page management. Note that title can be renamed in Settings, therefore might not be titled 'title' in page management. This is used as the text descriptor of the page in all areas of administration that list pages (page children, parents, page search, etc). Other fields may be designated to appear as descriptors in administration by changing the Summary Listing Details under the Page Management tab.&lt;br /&gt;
|The page title&lt;br /&gt;
|-&lt;br /&gt;
|subTitle&lt;br /&gt;
|STRING - subtitle field entry for this page in page management. Note that subtitle has to be turned on in Settings to be available in page management. Also subtitle can be renamed in Settings, therefore might not be titled 'subtitle' in page management. &lt;br /&gt;
|This is the subtitle for this page&lt;br /&gt;
|-&lt;br /&gt;
|copy&lt;br /&gt;
|STRING - HTML formatted page copy, as set in the copy field WYSIWYG editor in page management. This serves as the bulk of the page's content. Copy is typically not displayed in page searches / page children as it is to much information when listing multiple page results, though sometimes it is truncates in the results. Note that copy is HTML content, as it is managed by the WYSIWYG editor.&lt;br /&gt;
|&amp;amp;lt;img src=&amp;quot;image.jpg&amp;quot; align=&amp;quot;right&amp;quot;&amp;amp;gt;&amp;amp;lt;p&amp;amp;gt;This is the &amp;amp;lt;b&amp;amp;gt;copy&amp;amp;gt;/b&amp;amp;gt; for this &amp;amp;lt;i&amp;amp;gt;page&amp;amp;lt;/i&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|summary&lt;br /&gt;
|STRING - summary information about the page. Typically used to describe the page in brief, such as in children, search results and cross sells.&lt;br /&gt;
|This is some additional details about this page. To see more information click this page.&lt;br /&gt;
|-&lt;br /&gt;
|summaryImage&lt;br /&gt;
|STRING - absolute path to an image used in summaries about the page. Typically used to accompany the summary when describing the page in brief, such as in children, search results and cross sells.&lt;br /&gt;
|/files/images/thumbnails/imageName.jpg&lt;br /&gt;
|-&lt;br /&gt;
|summaryImageAlt&lt;br /&gt;
|STRING - alt tag contents for the summaryImage.&lt;br /&gt;
|This describes the image&lt;br /&gt;
|-&lt;br /&gt;
|summaryImageCaption&lt;br /&gt;
|STRING - caption to accompany the summaryImage.&lt;br /&gt;
|The above is an image!&lt;br /&gt;
|-&lt;br /&gt;
|linkText&lt;br /&gt;
|STRING - text to represent the link to go to the page.&lt;br /&gt;
|Click here for more information&lt;br /&gt;
|-&lt;br /&gt;
|publisher&lt;br /&gt;
|STRING - name of the publisher of the page. Typically used when the page is an article, press release or content that is owned by another party. Only available in Page Management if publishing information is set to available in Settings.&lt;br /&gt;
|New York Times&lt;br /&gt;
|-&lt;br /&gt;
|publishDate&lt;br /&gt;
|DATETIME - date to present as the publishing date of the page. Typically used when the page is an article or press release. Only available in Page Management if publishing information is set to available in Settings.&lt;br /&gt;
|2008-10-16 08:00:00&lt;br /&gt;
|-&lt;br /&gt;
|startDate&lt;br /&gt;
|DATETIME - designates the first day the page should be made available to visitors. If empty, than there is no cut off start date.&lt;br /&gt;
|2008-10-01 00:00:00&lt;br /&gt;
|-&lt;br /&gt;
|endDate&lt;br /&gt;
|DATETIME - designates the last day the page should be available to visitors. If empty, than there is no cut off end date.&lt;br /&gt;
|2008-10-31 00:00:00&lt;br /&gt;
|-&lt;br /&gt;
|isBlog&lt;br /&gt;
|BIT - 0 or 1 if page is selected to be a blog (controlled in page management, but set on automatically when a blog is created by a site visitor). Use to create logic that shows / processes blog related content and logic. Note that this option will only be available in page management if Blogging Available is selected in Settings.&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|isPoll&lt;br /&gt;
|BIT - 0 or 1 if page is selected to be a poll via page management. Use to create logic that shows / processes poll related content and logic. Note that this option will only be available in page management if Polling Available is selected in Settings.&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|createDate&lt;br /&gt;
|DATETIME - system generated datetime when the page record was first inserted into the database.&lt;br /&gt;
|2008-10-15 14:15:56&lt;br /&gt;
|-&lt;br /&gt;
|modDate&lt;br /&gt;
|DATETIME - system generated datetime when the page was last modified.&lt;br /&gt;
|2008-10-15 16:12:44&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;author fields&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|author_firstName&lt;br /&gt;
|STRING - first name of the user designated as the author of the page. This is the first name assigned to the user record for the user with the userId matching the authorId selected in page management for this page. Authors may only be selected if User Publisher Information is selected in Settings.&lt;br /&gt;
|Mark&lt;br /&gt;
|-&lt;br /&gt;
|author_lastName&lt;br /&gt;
|STRING - last name of the user designated as the author of the page. This is the last name assigned to the user record for the user with the userId matching the authorId selected in page management for this page. Authors may only be selected if User Publisher Information is selected in Settings.&lt;br /&gt;
|Wexler&lt;br /&gt;
|-&lt;br /&gt;
|author_userImage&lt;br /&gt;
|STRING - path to image selected for as the user image for the user designated as the author for the page. Authors may only be selected if User Publisher Information is selected in Settings.&lt;br /&gt;
|/files/images/imagename.jpg&lt;br /&gt;
|-&lt;br /&gt;
|author_handle&lt;br /&gt;
|STRING - Handle of the user designated as the author of the page. This is the handle assigned to the user record for the user with the userId matching the authorId selected in page management for this page. Authors may only be selected if User Publisher Information is selected in Settings.&lt;br /&gt;
|mwex501&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;blogger fields&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|blog_firstName&lt;br /&gt;
|STRING - First name of the user designated as the blog owner of the page. This is the first name assigned to the user record for the user with the userId matching the blog_userId selected in page management for this page. Bloggers may only be selected if Blogging Available is selected in Settings.&lt;br /&gt;
|Mark&lt;br /&gt;
|-&lt;br /&gt;
|blog_lastName&lt;br /&gt;
|STRING - Last name of the user designated as the blog owner of the page. This is the last name assigned to the user record for the user with the userId matching the blog_userId selected in page management for this page. Bloggers may only be selected if Blogging Available is selected in Settings.&lt;br /&gt;
|Wexler&lt;br /&gt;
|-&lt;br /&gt;
|blog_userImage&lt;br /&gt;
|STRING - Path of the user image of the user designated as the blog owner of the page. This is the user image path assigned to the user record for the user with the userId matching the blog_userId selected in page management for this page. Bloggers may only be selected if Blogging Available is selected in Settings.&lt;br /&gt;
|/files/images/image.jpg&lt;br /&gt;
|-&lt;br /&gt;
|blog_handle&lt;br /&gt;
|STRING -Handle of the user designated as the blog owner of the page. This is the handle assigned to the user record for the user with the userId matching the blog_userId selected in page management for this page. Bloggers may only be selected if Blogging Available is selected in Settings.&lt;br /&gt;
|mwex501&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;forum / comments fields&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|forumCount&lt;br /&gt;
|INT - number of forum posts to the page.&lt;br /&gt;
|23&lt;br /&gt;
|-&lt;br /&gt;
|ratingTotal&lt;br /&gt;
|INT - Sum of all ratings posted to this page (each rating is on a scale of 0 to 5).&lt;br /&gt;
|120&lt;br /&gt;
|-&lt;br /&gt;
|ratingCount&lt;br /&gt;
|INT - total number of ratings submitted for the page.&lt;br /&gt;
|50&lt;br /&gt;
|-&lt;br /&gt;
|ratingAverage&lt;br /&gt;
|FLOAT - average rating for the page on a scale of 0 to 5.&lt;br /&gt;
|2.4&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;product fields&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|productName&lt;br /&gt;
|STRING - The name of the first product directly assigned to the page in relationships.&lt;br /&gt;
|Product X&lt;br /&gt;
|-&lt;br /&gt;
|productNumber&lt;br /&gt;
|STRING - The product number of the first product directly assigned to the page in relationships.&lt;br /&gt;
|1234XYZ&lt;br /&gt;
|-&lt;br /&gt;
|catalogNumber&lt;br /&gt;
|STRING - The catalog number of the first product directly assigned to the page in relationships.&lt;br /&gt;
|234ABC&lt;br /&gt;
|-&lt;br /&gt;
|productTitle&lt;br /&gt;
|STRING - The title of the first product directly assigned to the page in relationships.&lt;br /&gt;
|This is the title of this product&lt;br /&gt;
|-&lt;br /&gt;
|productDescription&lt;br /&gt;
|STRING - the description of the first product directly assigned to the page in relationships.&lt;br /&gt;
|This is a description of the product&lt;br /&gt;
|-&lt;br /&gt;
|productId&lt;br /&gt;
|INT - unique id assigned by the system to the product upon creation, for the first product assigned to the page in relationships&lt;br /&gt;
|12&lt;br /&gt;
|-&lt;br /&gt;
|lowestPrice&lt;br /&gt;
|FLOAT - lowest price for All products assigned to the page in relationships. This price only takes into consideration the 'price' field for the products, not the sale, level prices.&lt;br /&gt;
|12.59&lt;br /&gt;
|-&lt;br /&gt;
|lowestListPrice&lt;br /&gt;
|FLOAT - lowest of all the list prices for ALl products assigned to the page in relationships.&lt;br /&gt;
|15.46&lt;br /&gt;
|-&lt;br /&gt;
|lowestSalePrice&lt;br /&gt;
|FLOAT - lowest of all the available sale prices for all products assigned to the page in relationships. Sale prices that are not within the sale from / to price range do not qualify.&lt;br /&gt;
|14.26&lt;br /&gt;
|-&lt;br /&gt;
|productCount&lt;br /&gt;
|INT - number of products assigned to the page in relationships.&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|productIdList&lt;br /&gt;
|STRING - comma delimited list of unique productIds for products assigned to the page in relationships.&lt;br /&gt;
|14,26,3&lt;br /&gt;
|-&lt;br /&gt;
|saleFromDate&lt;br /&gt;
|DATETIME - date when the sale price is first available for the first product assigned to the page in relationships. If no sale from date is assigned the value will be empty, meaning there is no beginning cut off date for the sale.&lt;br /&gt;
|2008-10-12 00:00:00&lt;br /&gt;
|-&lt;br /&gt;
|saleToDate&lt;br /&gt;
|DATETIME - date when the sale price is last available for the first product assigned to the page in relationships. If no sale to date is assigned the value will be empty, meaning there is no ending cut off date for the sale.&lt;br /&gt;
|2008-10-20 00:00:00&lt;br /&gt;
|-&lt;br /&gt;
|lowestLevelPrice&lt;br /&gt;
|FLOAT - lowest of all the level prices for all products assigned to the page in relationships.&lt;br /&gt;
|10.26&lt;br /&gt;
|-&lt;br /&gt;
|lowestAllPrice&lt;br /&gt;
|FLOAT - lowest price for All products assigned to the page in relationships. This price takes into consideration sale, regular, list and level (tiered) pricing. Sale prices that are not within the sale from / to price range do not qualify.&lt;br /&gt;
|14.22&lt;br /&gt;
|-&lt;br /&gt;
|isConfigurable&lt;br /&gt;
|BIT - 1 if product is configurable (has options or can be personalized), 0 if not&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|isDiscontinued&lt;br /&gt;
|BIT - 1 of product is discontinued. 0 if not&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|addToCartLink&lt;br /&gt;
|STRING - use this link for an 'add to cart' button for this child. The string will add the item to the cart IF the child has only one product AND the product has no options AND the product is not discontinued AND the product is not personalizable. Otherwise this string will link to the child page.&lt;br /&gt;
|index.php?fa=ORDER.cartAdd&amp;amp;productId=123&amp;amp;quantity=1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;qualifying pages' children and grandchildren&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|childPageCount&lt;br /&gt;
|INT - total count of pages set as children to this page via relationships.&lt;br /&gt;
|6&lt;br /&gt;
|-&lt;br /&gt;
|grandChildPageCount&lt;br /&gt;
|INT - total count of all pages set as grandchildren (children to children) to this page via relationships. Warning, with sites containing many pages / relationships, using this field could cause undue strain on the system.&lt;br /&gt;
|143&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;poll data&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|pollCount&lt;br /&gt;
|INT - total number of poll postings to this page&lt;br /&gt;
|123&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;custom fields&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|custom_field_?&lt;br /&gt;
|Each custom field will be accessible by using custom_field_? where the ? is the field name as set in page template administration for the template used by the page.&lt;br /&gt;
|-anything-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
;Simple Example&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// call&lt;br /&gt;
$searchArr = eV::pageSearchGet('several keywords here','title,summary,summaryImage,link','relevance','DESC','num');&lt;br /&gt;
// output&lt;br /&gt;
foreach($searchArr as $search) {&lt;br /&gt;
echo &amp;quot;&amp;lt;hr&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;a href=\&amp;quot;&amp;quot; . $search['link'] . &amp;quot;\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;img align=\&amp;quot;left\&amp;quot; src=\&amp;quot;&amp;quot; . $search['summaryImage'] . &amp;quot;\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;a href=\&amp;quot;&amp;quot; . $search['link'] . &amp;quot;\&amp;quot;&amp;gt;&amp;quot; . $search['title'] . &amp;quot;&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot; . $search['summary'];&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;lt;i&amp;gt;Relevance:&amp;quot; . $search['relevance'] . &amp;quot;&amp;lt;/i&amp;gt;&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
;Complex Example using pagination, sorting controls&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// make sure our keywords attribute is passed&lt;br /&gt;
if(!isset($attributes['keywords'])) $attributes['keywords'] = '';&lt;br /&gt;
&lt;br /&gt;
// default sorting commands&lt;br /&gt;
if(!isset($attributes['orderBy'])) $attributes['orderBy'] = 'relevance';&lt;br /&gt;
if(!isset($attributes['orderType'])) $attributes['orderType'] = 'num';&lt;br /&gt;
if(!isset($attributes['orderDir'])) $attributes['orderDir'] = 'DESC';&lt;br /&gt;
&lt;br /&gt;
// get the sorting results&lt;br /&gt;
$arrChildren = eV::pageSearchGet($attributes['keywords'],&amp;quot;pageId,link,templateId,summaryImage,title,summary,lowestAllPrice,productId,productCount,addToCartLink,relevance&amp;quot;,$attributes['orderBy'],$attributes['orderDir'],$attributes['orderType']); &lt;br /&gt;
&lt;br /&gt;
// go to no items found page if empty&lt;br /&gt;
// substitute '#' with the pageId to go to&lt;br /&gt;
if(count($arrChildren) == 0) eV::redirect(&amp;quot;index.php?pageId=#&amp;amp;keywords=&amp;quot; . urlencode($attributes['keywords']));&lt;br /&gt;
&lt;br /&gt;
// if only 1 result found, lets just forward to that page&lt;br /&gt;
if(count($arrChildren) == 1) eV::redirect('/index.php?pageId=' . $arrChildren[0]['pageId']);&lt;br /&gt;
&lt;br /&gt;
// preset control attributes&lt;br /&gt;
// view all attribute specifies if we are to page or show everything that qualifies&lt;br /&gt;
if(!isset($attributes['viewAll'])) $attributes['viewAll'] = 0;&lt;br /&gt;
// pageNo states the current page number in pagination that we are on&lt;br /&gt;
if(!isset($attributes['pageNo'])) $attributes['pageNo'] = 0;&lt;br /&gt;
// perPage sets the number of items to show in a page&lt;br /&gt;
if(!isset($attributes['perPage'])) $attributes['perPage'] = 6;&lt;br /&gt;
// if view all is on, lets show all items on this page&lt;br /&gt;
if($attributes['viewAll']) $attributes['perPage'] = count($arrChildren);&lt;br /&gt;
&lt;br /&gt;
// call pagination&lt;br /&gt;
// functions returns an array that contains the pagination links, start and end child index&lt;br /&gt;
// be sure to include your order (sort) attributes and keyword attribute&lt;br /&gt;
$pagination = eV::pagination(count($arrChildren),$attributes['perPage'],$attributes['pageNo'],&amp;quot;index.php?pageId=$pageId&amp;amp;keywords=&amp;quot; . urlencode($attributes['keywords']). &amp;quot;&amp;amp;orderBy=&amp;quot; . $attributes['orderBy'] . &amp;quot;&amp;amp;orderType=&amp;quot; . $attributes['orderType'] . &amp;quot;&amp;amp;orderDir=&amp;quot; . $attributes['orderDir']); &lt;br /&gt;
&lt;br /&gt;
// spit out some page content&lt;br /&gt;
echo &amp;quot;&amp;lt;h2&amp;gt;Your search for \&amp;quot;&amp;quot; . $attributes['keywords'] . &amp;quot;\&amp;quot; was successful!&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;quot; . $copy . &amp;quot;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// form to run another search&lt;br /&gt;
// use get method so keyword searches are cachable, trackable by 3rd party tools&lt;br /&gt;
echo &amp;quot;&lt;br /&gt;
    &amp;lt;form action=\&amp;quot;index.php\&amp;quot; method=\&amp;quot;get\&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;hr&amp;gt;&lt;br /&gt;
    Would you like to search again?&lt;br /&gt;
    &amp;lt;br&amp;gt;Enter Keyword or Item Number: &lt;br /&gt;
    &amp;lt;input name=\&amp;quot;keywords\&amp;quot; type=\&amp;quot;text\&amp;quot; value=\&amp;quot;\&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=\&amp;quot;hidden\&amp;quot; name=\&amp;quot;pageId\&amp;quot; value=\&amp;quot;&amp;quot; . $pageId . &amp;quot;\&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=\&amp;quot;submit\&amp;quot; value\&amp;quot;GO!\&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// output pagination header&lt;br /&gt;
echo &amp;quot;&lt;br /&gt;
    &amp;lt;hr&amp;gt;&lt;br /&gt;
    (Showing &amp;quot; . ($pagination['startIndex']+1) . &amp;quot;-&amp;quot; . ($pagination['endIndex']+1) . &amp;quot; of &amp;quot; . count($arrChildren) . &amp;quot;)&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// form to sort results&lt;br /&gt;
// you can sort by any field you request in the eV::pageSearchGet function&lt;br /&gt;
// be sure to include your keyword attributes, pageId, view all status&lt;br /&gt;
echo &amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;Sort: &lt;br /&gt;
&amp;lt;form name=\&amp;quot;sortForm\&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;select name=\&amp;quot;sortSelect\&amp;quot; size=\&amp;quot;1\&amp;quot; onchange=\&amp;quot;window.location.href=document.sortForm.sortSelect.options[document.sortForm.sortSelect.selectedIndex].value;\&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=\&amp;quot;#\&amp;quot; selected=\&amp;quot;selected\&amp;quot;&amp;gt;Sort by&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=\&amp;quot;index.php?pageId=$pageId&amp;amp;viewAll=&amp;quot; .$attributes['viewAll'] . &amp;quot;&amp;amp;orderBy=relevance&amp;amp;orderType=num&amp;amp;orderDir=DESC&amp;amp;keywords=&amp;quot; . urlencode($attributes['keywords']) . &amp;quot;\&amp;quot;&amp;gt;Relevance&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=\&amp;quot;index.php?pageId=$pageId&amp;amp;viewAll=&amp;quot; .$attributes['viewAll'] . &amp;quot;&amp;amp;orderBy=lowestAllPrice&amp;amp;orderDir=ASC&amp;amp;orderType=num&amp;amp;orderDir=ASC&amp;amp;keywords=&amp;quot; . urlencode($attributes['keywords']) . &amp;quot;\&amp;quot;&amp;gt;Price&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=\&amp;quot;index.php?pageId=$pageId&amp;amp;viewAll=&amp;quot; .$attributes['viewAll'] . &amp;quot;&amp;amp;orderBy=createDate&amp;amp;orderDir=DESC&amp;amp;orderType=num&amp;amp;keywords=&amp;quot; . urlencode($attributes['keywords']) . &amp;quot;\&amp;quot;&amp;gt;Newest&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=\&amp;quot;index.php?pageId=$pageId&amp;amp;viewAll=&amp;quot; .$attributes['viewAll'] . &amp;quot;&amp;amp;orderBy=title&amp;amp;orderDir=ASC&amp;amp;orderType=str&amp;amp;orderDir=ASC&amp;amp;keywords=&amp;quot; . urlencode($attributes['keywords']) . &amp;quot;\&amp;quot;&amp;gt;Alphabetical&amp;lt;/option&amp;gt;&lt;br /&gt;
      &amp;lt;/select&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// pagination page links&lt;br /&gt;
echo &amp;quot;&amp;lt;hr&amp;gt;Pages: &amp;quot; .  $pagination['links'];&lt;br /&gt;
&lt;br /&gt;
// view all link&lt;br /&gt;
// only show if we are not viewing all&lt;br /&gt;
if (!$attributes['viewAll']) echo &amp;quot;&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;index.php?pageId=$pageId&amp;amp;keywords=&amp;quot; . urlencode($attributes['keywords']) . &amp;quot;&amp;amp;orderBy=&amp;quot; . $attributes['orderBy'] . &amp;quot;&amp;amp;orderDir=&amp;quot; . $attributes['orderDir']. &amp;quot;&amp;amp;orderType=&amp;quot; . $attributes['orderType'] . &amp;quot;&amp;amp;viewAll=1\&amp;quot;&amp;gt;(VIEW ALL)&amp;lt;/a&amp;gt; &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// now lets show the items returned&lt;br /&gt;
// set tracker to note which child we are on&lt;br /&gt;
$childIndex = 0;&lt;br /&gt;
&lt;br /&gt;
// loop thru children&lt;br /&gt;
foreach($arrChildren as $child){&lt;br /&gt;
	// only show children that are within the start and end index as returned by eV::pagination function&lt;br /&gt;
  	if($pagination['startIndex'] &amp;lt;= $childIndex &amp;amp;&amp;amp; $pagination['endIndex'] &amp;gt;= $childIndex){&lt;br /&gt;
		// display the child&lt;br /&gt;
 		 echo &amp;quot;&amp;lt;hr&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot; . $child['link'] . &amp;quot;\&amp;quot;&amp;gt;&amp;lt;img src=\&amp;quot;&amp;quot; . $child['summaryImage'] . &amp;quot;\&amp;quot;/&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
        	&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot; . $child['link'] . &amp;quot;\&amp;quot;&amp;gt;&amp;quot; . $child['title'] . &amp;quot;&amp;lt;/a&amp;gt;&lt;br /&gt;
  			&amp;lt;br&amp;gt;&amp;quot; . $child['summary'] . &amp;quot;&lt;br /&gt;
     		&amp;lt;br&amp;gt;As low as &amp;quot; . eV::dollarFormat($child['lowestAllPrice']) . &amp;quot; each!&lt;br /&gt;
			&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot; . $child['link'] . &amp;quot;\&amp;quot;&amp;gt;More Info&amp;lt;/a&amp;gt;&lt;br /&gt;
    		&amp;lt;br&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot; . $child['addToCartLink']. &amp;quot;\&amp;quot;&amp;gt;Add To Cart&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  // increment tracking index&lt;br /&gt;
  $childIndex++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Template:Page_Template_Functions_Shortcuts&amp;diff=715</id>
		<title>Template:Page Template Functions Shortcuts</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Template:Page_Template_Functions_Shortcuts&amp;diff=715"/>
				<updated>2009-04-07T11:59:29Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: added TEMConversionTag, orderGetEmail&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table align=right style=&amp;quot;background-color: #DDDDDD;&amp;quot; cellpadding=0 cellspacing=0 border=0&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
{{Page Template Managers Shortcuts}}&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
[[Page Templates:Functions|Page Template Functions]]&lt;br /&gt;
*[[functions:addressCountryOptions|addressCountryOptions]]&lt;br /&gt;
*[[functions:addressCountryNameGet|addressCountryNameGet]]&lt;br /&gt;
*[[functions:addressStateOptions|addressStateOptions]]&lt;br /&gt;
*[[functions:addressZipDetailsGet|addressZipDetailsGet]]&lt;br /&gt;
*[[functions:authorizeIsLoggedIn|authorizeIsLoggedIn]]&lt;br /&gt;
*[[functions:authorizeIsLoggedOut|authorizeIsLoggedOut]]&lt;br /&gt;
*[[functions:captchaCheck|captchaCheck]]&lt;br /&gt;
*[[functions:catalogProductsGet|catalogProductsGet]]&lt;br /&gt;
*[[functions:continueShoppingGet|continueShoppingGet]]&lt;br /&gt;
*[[functions:continueShoppingSet|continueShopppingSet]]&lt;br /&gt;
*[[functions:dollarFormat|dollarFormat]]&lt;br /&gt;
*[[functions:fullyQualifyAllURLs|fullyQualifyAllURLs]]&lt;br /&gt;
*[[functions:ipBlockCheck|ipBlockCheck]]&lt;br /&gt;
*[[functions:itemLayout_dataString2Array|itemLayout_dataString2Array]]&lt;br /&gt;
*[[functions:mysqlquery2array|mysqlquery2array]]&lt;br /&gt;
*[[functions:orderExpDateOptions|orderExpDateOptions]]&lt;br /&gt;
*[[functions:orderGetCompleteArray|orderGetCompleteArray]]&lt;br /&gt;
*[[functions:orderGetEmail|orderGetEmail]]&lt;br /&gt;
*[[functions:orderGetPayTypes|orderGetPayTypes]]&lt;br /&gt;
*[[functions:orderGetShipArray|orderGetShipArray]]&lt;br /&gt;
*[[functions:orderGetSummary|orderGetSummary]]&lt;br /&gt;
*[[functions:ordersGetList|ordersGetList]]&lt;br /&gt;
*[[functions:orderPayTypeOptions|orderPayTypeOptions]]&lt;br /&gt;
*[[functions:orderShipFedexRate|orderShipFedexRate]]&lt;br /&gt;
*[[functions:orderShipAdjustRate|orderShipAdjustRate]]&lt;br /&gt;
*[[functions:pageBreadcrumbsFamilyGet|pageBreadcrumbsFamilyGet]]&lt;br /&gt;
*[[functions:pageBreadcrumbsHistoryGet|pageBreadcrumbsHistoryGet]]&lt;br /&gt;
*[[functions:pageChildrenGet|pageChildrenGet]]&lt;br /&gt;
*[[functions:pageContentAttribSet|pageContentAttribSet]]&lt;br /&gt;
*[[functions:pageContentAttribsSet|pageContentAttribsSet]]&lt;br /&gt;
*[[functions:pageContentAttribStart/pageContentAttribEnd|pageContentAttribStart]]&lt;br /&gt;
*[[functions:pageContentAttribStart/pageContentAttribEnd|pageContentAttribEnd]]&lt;br /&gt;
*[[functions:pageCustomSearchGroup|pageCustomSearchGroup]]&lt;br /&gt;
*[[functions:pageForumPostsGet|pageForumPostsGet]]&lt;br /&gt;
*[[functions:pageGet|pageGet]]&lt;br /&gt;
*[[functions:pageGetHomeId|pageGetHomeId]]&lt;br /&gt;
*[[functions:pageMenuGet|pageMenuGet]]&lt;br /&gt;
*[[functions:pagePollQuestionsGet|pagePollQuestionsGet]]&lt;br /&gt;
*[[functions:pagePollResultsGet|pagePollResultsGet]]&lt;br /&gt;
*[[functions:pageProductsGet|pageProductsGet]]&lt;br /&gt;
*[[functions:pageSearchGet|pageSearchGet]]&lt;br /&gt;
*[[functions:pageZoneGet|pageZoneGet]]&lt;br /&gt;
*[[functions:pagination|pagination]]&lt;br /&gt;
*[[functions:phpObjToJS|phpObjToJS]]&lt;br /&gt;
*[[functions:prodArrayToJS|prodArrayToJS]]&lt;br /&gt;
*[[functions:prodOptionString2Array|prodOptionString2Array]]&lt;br /&gt;
*[[functions:recentlyViewedAdd|recentlyViewedAdd]]&lt;br /&gt;
*[[functions:recentlyViewedGet|recentlyViewedGet]]&lt;br /&gt;
*[[functions:redirect|redirect]]&lt;br /&gt;
*[[functions:TEMConversionTag|TEMConversionTag]]&lt;br /&gt;
*[[functions:userAccountAndAddressCreate|userAccountAndAddressCreate]]&lt;br /&gt;
*[[functions:userAccountEdit|userAccountEdit]]&lt;br /&gt;
*[[functions:userAddressAddEdit|userAddressAddEdit]]&lt;br /&gt;
*[[functions:userBlogEntriesGet|userBlogEntriesGet]]&lt;br /&gt;
*[[functions:userBlogEntryAddEdit|userBlogEntryAddEdit]]&lt;br /&gt;
*[[functions:userBlogSetup|userBlogSetup]]&lt;br /&gt;
*[[functions:userFriendsGet|userFriendsGet]]&lt;br /&gt;
*[[functions:userGetAddresses|userGetAddresses]]&lt;br /&gt;
*[[functions:userWishListGet|userWishListGet]]&lt;br /&gt;
*[[functions:usersAmbassadorGet|usersAmbassadorGet]]&lt;br /&gt;
*[[functions:usersGet|usersGet]]&lt;br /&gt;
*[[functions:valueArrayFromQuery|valueArrayFromQuery]]&lt;br /&gt;
*[[functions:verifyEmail|verifyEmail]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Installation&amp;diff=714</id>
		<title>Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Installation&amp;diff=714"/>
				<updated>2009-04-05T23:22:04Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: /* MySQL Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Currently building automated installation package'''. &lt;br /&gt;
&lt;br /&gt;
Below is the manual process until the package is operational.&lt;br /&gt;
&lt;br /&gt;
==File Upload==&lt;br /&gt;
FTP The entire site file content to the target root of the web site&lt;br /&gt;
&lt;br /&gt;
==Web Server Setup==&lt;br /&gt;
;Windows IIS&lt;br /&gt;
*Open 'computer management' (right click 'my computer' and select manage)&lt;br /&gt;
*Expand Computer Management &amp;gt; Services and Applications &amp;gt; Internet Information Services &amp;gt; Web Sites&lt;br /&gt;
*Right click 'Web Sites' and select 'New Web Site'. When the 'Web Site Creation Wizard' opens, click 'Next'.&lt;br /&gt;
*Enter the site name (use a test subdomain if you do not want to interrupt a site currently using the domain i.e.: test.yourdomain.com instead of www.yourdomain.com). Next.&lt;br /&gt;
*Set the IP address to that given by your Hosting ISP (ask you ISP if you do not know what that is), leave TCP port to 80 and set Host Header to the domain/subdomain you selected in the previous step. Next.&lt;br /&gt;
*In the Path field browse to the folder you FTPd all the site files too, than hit OK. Leave allow anonymous access to this website on. Next.&lt;br /&gt;
*Select Read and Run scripts. Next. Finish.&lt;br /&gt;
;Linux Apache 2+&lt;br /&gt;
*Open /etc/httpd/conf/httpd.conf&lt;br /&gt;
*Add the following 404 error document line (remove the existing one first, if present) - this sets the index.php as the default 404 error document which will kick in url_map/title page access when appropriate.&lt;br /&gt;
;;;ErrorDocument 404 /index.php&lt;br /&gt;
*Add the following documentRoot line (remove the existing one first, if present)&lt;br /&gt;
;;;DocumentRoot /path/to/your/website&lt;br /&gt;
:::where &amp;quot;/path/to/your/website&amp;quot; is the absolute path from the root of the server drive to the folder containing the website. Usually &amp;quot;/var/www/html/www.yoursitedomain.com&amp;quot; where yoursitedomain is the domain name of your site.&lt;br /&gt;
*Modify the &amp;amp;lt;Directory&amp;amp;gt; tag value to:&lt;br /&gt;
;;;&amp;amp;lt;Directory &amp;quot;/path/to/your/website&amp;quot;&amp;amp;gt;&lt;br /&gt;
:::where &amp;quot;/path/to/your/website&amp;quot; is the absolute path from the root of the server drive to the folder containing the website. Usually &amp;quot;/var/www/html/www.yoursitedomain.com&amp;quot; where yoursitedomain is the domain name of your site.&lt;br /&gt;
*Add the following directoryIndex line (remove the existing one first, if present)&lt;br /&gt;
;;;DirectoryIndex index.php&lt;br /&gt;
&lt;br /&gt;
==Setup DNS==&lt;br /&gt;
Call your Hosting ISP for specific instructions on how to set up DNS for your web site.&lt;br /&gt;
You can setup your local HOSTS file (located in c:\windows\system32\drivers\etc on a windows client) so that your web browser will resolve the domain to the web server until DNS is set and propigated. Follow instructions in the HOSTS file to add a line for your domain / web server IP address.&lt;br /&gt;
&lt;br /&gt;
==Database Setup==&lt;br /&gt;
*NOTE: If on linux you find you cannot create databases (err 103), it's most likely a permissions issue, run the following shell command in linux:&lt;br /&gt;
;;;chown mysql\:mysql /var/lib/mysql&lt;br /&gt;
*Backup the latest database version at the commend prompt in windows / shell in linux: (substitute m.d.y with current month.day.year; substitute &amp;quot;username&amp;quot; with the root user name):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dos&amp;quot;&amp;gt;mysqldump -u username -p iproductsbase &amp;gt; iproductsbase.m.d.y.sql&amp;lt;/source&amp;gt;&lt;br /&gt;
*FTP the backup to the new server&lt;br /&gt;
*Create the database on the new server in mysql (substitute &amp;quot;databasename&amp;quot; with the name you wish to call the database):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
Create database databasename;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*move the files into the database at the command prompt in windows / shell in linux (substitute &amp;quot;databasename&amp;quot; for the newly create database name; substitute 'username' for the root user; substitute &amp;quot;m.d.y&amp;quot; for the month.day.year in the iproductsbase backup file name):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;dos&amp;quot;&amp;gt;mysql -u username -p databasename &amp;lt; iproductsbase.m.d.y.sql&amp;lt;/source&amp;gt;&lt;br /&gt;
*Create a database user account with the appropriate access in mysql (substitute &amp;quot;newusername&amp;quot; with your website database username you wish; substitute &amp;quot;databasename&amp;quot; with the name of the database you created for the site; substitute &amp;quot;password&amp;quot; with your password of choice):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;GRANT CREATE TEMPORARY TABLES, DELETE, INSERT, LOCK TABLES, SELECT, UPDATE ON databasename.* TO 'newusername'@'localhost' identified by 'password';&amp;lt;/source&amp;gt;&lt;br /&gt;
*Point to the appropriate database in the appGlobals.php file (located in the root of the website). Change the following code (located at the beginning of the file) by filling in your &amp;quot;databasename&amp;quot;, &amp;quot;username&amp;quot; and &amp;quot;password&amp;quot; for database access:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$iProducts['dbUser'] = &amp;quot;username&amp;quot;;&lt;br /&gt;
$iProducts['dbPassword'] = &amp;quot;password&amp;quot;;&lt;br /&gt;
$iProducts['dbDatabase'] = &amp;quot;databasename&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Scheduled Task Setup==&lt;br /&gt;
&lt;br /&gt;
All core scheduled tasks are executed by the following file located in the root of the website:&lt;br /&gt;
/taskScheduler.php&lt;br /&gt;
&lt;br /&gt;
;For linux servers&lt;br /&gt;
Setup the below cron jobs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* * * * * /usr/bin/lynx -source http://www.websitedomainname.com/taskScheduler.php&lt;br /&gt;
* 1 * * * root ntpdate 0.pool.ntp.org&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*The first cron job calls the task scheduler every minute. Change &amp;quot;www.websitedomainname&amp;quot; to match the domain name of your website.&lt;br /&gt;
*The second cron job ensures the system clock is accurate.&lt;br /&gt;
*Add the following 3rd cron job line if using EBO (TEM by Fiddlehead):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*/10 * * * * . /path/to/website/root/folder/ebo/xmlExporter.sh &amp;gt;&amp;gt; /dev/null 2&amp;gt;&amp;amp;1 # TEM XML Exporter&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Replace &amp;quot;/path/to/website/root/folder/&amp;quot; with the path to the website root folder on your server&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Directory Setup==&lt;br /&gt;
&lt;br /&gt;
;Images and Files&lt;br /&gt;
Create a root folder for the images and files to be used by the image and file management libraries. They can be in root of the website (/images, /files), in a common directory (/library/images, /library/files) or even within each other (/files, /files/images). These folders will need to be entered into the site settings when later configuring the website via the administration console.&lt;br /&gt;
&lt;br /&gt;
;Clear and Set Parsed&lt;br /&gt;
*Delete contents of /parsed (located in the root of the web site)&lt;br /&gt;
*Set parsed for full access (linux &amp;gt; chmod 777 parsed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==MySQL Configuration==&lt;br /&gt;
&lt;br /&gt;
;Open the config file&lt;br /&gt;
*Look for my.ini in Windows (usually located in the C:\Program Files\MYSQL folder)&lt;br /&gt;
*Look for my.conf in Linux (usually located in the /etc folder)&lt;br /&gt;
&lt;br /&gt;
;Perform the following to the config file&lt;br /&gt;
*Set Sort Buffer&lt;br /&gt;
::sort_buffer_size=1M&lt;br /&gt;
*Turn on Query Caching:&lt;br /&gt;
::query_cache_type=1&lt;br /&gt;
::query_cache_limit=1M&lt;br /&gt;
::query_cache_size=32M&lt;br /&gt;
*Set Max Connections:&lt;br /&gt;
::max_connections=1000&lt;br /&gt;
*Reduced wait_timeout to prevent idle clients holding connections.&lt;br /&gt;
::wait_timeout=15&lt;br /&gt;
::connect_timeout=10&lt;br /&gt;
*Reduced key buffer it by checking current size of *.MYI files, see notes below. Recommended to set between 1/4 - 1/2 total server memory&lt;br /&gt;
::key_buffer=1024M&lt;br /&gt;
*thread_concurrency = 2 * (no. of CPU)&lt;br /&gt;
::thread_concurrency=4&lt;br /&gt;
*The default is 64. Each time MySQL accesses a table, it places it in the cache. If the system accesses many tables, it is faster to have these in the cache. Check opened tables and adjusted accordingly after running for a while.&lt;br /&gt;
::table_cache=1024&lt;br /&gt;
*MyISAMCHK sort_buffer: The sort_buffer is very useful for speeding up myisamchk operations (which is why it is set much higher for that purpose in the default configuration files), but it can also be useful everyday when performing large numbers of sorts.&lt;br /&gt;
::sort_buffer=64M&lt;br /&gt;
*If you have a busy server that's getting a lot of quick connections, set your thread cache high enough that the Threads_created value in SHOW STATUS stops increasing. This should take some of the load off of the CPU.&lt;br /&gt;
::thread_cache=128&lt;br /&gt;
*tmp_table_size:: &amp;quot;Created_tmp_disk_tables&amp;quot; are the number of implicit temporary tables on disk created while executing statements and &amp;quot;created_tmp_tables&amp;quot; are memory-based. Obviously it is bad if you have to go to disk instead of memory all the time. 32M by default.&lt;br /&gt;
::tmp_table_size=128M&lt;br /&gt;
*log slow queries is a must. Many queries that take more than 2 seconds. If so, then your tables need enhancement. Be sure to create log file and set rights so mysql can manage the file.&lt;br /&gt;
::log_slow_queries=/var/log/mysql/mysqld.slow.log&lt;br /&gt;
::long_query_time=2&lt;br /&gt;
*read_buffer_size=128K by default.&lt;br /&gt;
::read_buffer_size=1M&lt;br /&gt;
*ft_min_word_len: defaults to 4 but most clients will want 3 characters min search word length. NOTE THIS MUST APPEAR BELOW [MySQLd] in the my.ini/cnf file OR IT WILL NOT WORK&lt;br /&gt;
::ft_min_word_len=3&lt;br /&gt;
&lt;br /&gt;
*NOTE: memory=key_buffer+(sort_buffer_size+read_buffer_size)*max_connections&lt;br /&gt;
&lt;br /&gt;
*If commented, uncomment all innodb my.conf vars&lt;br /&gt;
*set up mysql logging, test&lt;br /&gt;
&lt;br /&gt;
==PHP Configuration==&lt;br /&gt;
&lt;br /&gt;
;Open the php.ini config file&lt;br /&gt;
*Default location in Windows is C:\PHP&lt;br /&gt;
*Default location in Linux is /etc&lt;br /&gt;
&lt;br /&gt;
;Perform the following to the config file&lt;br /&gt;
*Set the session lifetime by adding or uncommenting the &amp;quot;session.cookie_lifetime&amp;quot; variable and setting to &amp;quot;2592000&amp;quot; (30 days). For 8x8 eComm sites set to 3 months 7776000:&lt;br /&gt;
::session.cookie_lifetime=2592000 &lt;br /&gt;
*Add or uncomment GPC_magic_quotes and set to &amp;quot;off&amp;quot;:&lt;br /&gt;
::GPC_magic_quotes = OFF&lt;br /&gt;
*Set default time zone (we recommend client headquarters time zone)&lt;br /&gt;
::[Date]&lt;br /&gt;
::date.timezone = America/New_York&lt;br /&gt;
&lt;br /&gt;
==FUSEBOX Configuration==&lt;br /&gt;
&lt;br /&gt;
;Open the fusebox.xml.php config file located in the root of the web site&lt;br /&gt;
;Perform the following the the config file&lt;br /&gt;
*Set fusebox mode to &amp;quot;production&amp;quot; (scripts are stored in memory for optimal performance, set back to &amp;quot;development&amp;quot; when modifying web site scripts):&lt;br /&gt;
::&amp;amp;lt;parameter name=&amp;quot;mode&amp;quot; value=&amp;quot;production&amp;quot; /&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mail Order Manager Integration==&lt;br /&gt;
&lt;br /&gt;
If integrating with MOM (Mail Order Manager), a scheduled task needs to be setup on the windows server that is hosting MOM. Change the &amp;quot;URL&amp;quot; attribute to use the domain name of your web site:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;asp&amp;quot;&amp;gt;&lt;br /&gt;
Dim fileName&lt;br /&gt;
Dim URL&lt;br /&gt;
URL = &amp;quot;http://www.yourwebsitedomain.com/index.php?fa=ORDER.orderExportMOM_5_4&amp;amp;dBug=0&amp;quot;&lt;br /&gt;
fileName = &amp;quot;c:\MOMIMPORT.&amp;quot; &amp;amp; DatePart(&amp;quot;yyyy&amp;quot;,Now) &amp;amp; &amp;quot;_&amp;quot; &amp;amp; DatePart(&amp;quot;m&amp;quot;,Now) &amp;amp; &amp;quot;_&amp;quot; &amp;amp; DatePart(&amp;quot;d&amp;quot;,Now) &amp;amp; &amp;quot;_&amp;quot; &amp;amp; DatePart(&amp;quot;h&amp;quot;,Now) &amp;amp; &amp;quot;_&amp;quot; &amp;amp; DatePart(&amp;quot;n&amp;quot;,Now) &amp;amp; &amp;quot;_&amp;quot; &amp;amp; DatePart(&amp;quot;s&amp;quot;,Now) &amp;amp; &amp;quot;.txt&amp;quot;&lt;br /&gt;
' get web page data&lt;br /&gt;
Set WinHttpReq = CreateObject(&amp;quot;WinHttp.WinHttpRequest.5.1&amp;quot;)&lt;br /&gt;
WinHttpReq.Open &amp;quot;GET&amp;quot;,URL,False&lt;br /&gt;
WinHttpReq.Send&lt;br /&gt;
' save to file&lt;br /&gt;
Set fso = CreateObject(&amp;quot;Scripting.FileSystemObject&amp;quot;)&lt;br /&gt;
set f = fso.OpenTextFile(fileName,2,True)&lt;br /&gt;
f.Write WinHttpReq.ResponseText&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Table Fixes for Linux==&lt;br /&gt;
&lt;br /&gt;
On linux run the following to fix the case of the table names. &lt;br /&gt;
&lt;br /&gt;
This is necessary because Windows makes the table names lower case, regardless of specifying upper case letters in the table names. Since the starting database is being transferred from a windows box, the table names will be set to lower case by windows. The linux file system is case sensitive, meaning that if a script calls for the table using any upper case letters where the table name is stored as lower case, it will not find the table. To correct this, the below commands need to be run in order to change the table names to their correct case. &lt;br /&gt;
&lt;br /&gt;
The following commands need to be run in mysql. This can be done by logging on to SSH for the server housing the database than logging into mysql on that server. The below commands can all be run by copying the entire command list and pasting it into your ssh session while in the mysql prompt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
alter table customfields rename customFields;&lt;br /&gt;
alter table customfieldvalues rename customFieldValues;&lt;br /&gt;
alter table customlibraries rename customLibraries;&lt;br /&gt;
alter table customlibraryitems rename customLibraryItems;&lt;br /&gt;
alter table page_forumpostagree rename page_forumPostAgree;&lt;br /&gt;
alter table page_forumposts rename page_forumPosts;&lt;br /&gt;
alter table page_pollanswers rename page_pollAnswers;&lt;br /&gt;
alter table page_pollquestions rename page_pollQuestions;&lt;br /&gt;
alter table page_searchgroup_languages rename page_searchGroup_languages;&lt;br /&gt;
alter table page_searchgroups rename page_searchGroups;&lt;br /&gt;
alter table page_searchoption_languages rename page_searchOption_languages;&lt;br /&gt;
alter table page_searchoptions rename page_searchOptions;&lt;br /&gt;
alter table page_send2friend rename page_send2Friend;&lt;br /&gt;
alter table pendingapproval rename pendingApproval;&lt;br /&gt;
alter table prod_optiongroups rename prod_optionGroups;&lt;br /&gt;
alter table prod_optiongroup_link rename prod_optionGroup_link;&lt;br /&gt;
alter table stat_pageviews rename stat_pageViews;&lt;br /&gt;
alter table user_groupaccess rename user_groupAccess;&lt;br /&gt;
alter table user_loginsessions rename user_loginSessions;&lt;br /&gt;
alter table user_usersingroups rename user_usersINgroups;&lt;br /&gt;
alter table user_wishlist rename user_wishList;&lt;br /&gt;
alter table lk_zipcodes rename lk_zipCodes;&lt;br /&gt;
alter table lk_fedexzipstozones rename lk_fedexZipsToZones;&lt;br /&gt;
alter table lk_paytypes rename lk_payTypes;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=CSR:_Support&amp;diff=713</id>
		<title>CSR: Support</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=CSR:_Support&amp;diff=713"/>
				<updated>2009-04-05T02:06:24Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: New page: Weekly: *Conference Call: comments, complaints, ideas *Error Log Review: MySQL, Http, Https *Marketing: email campaigns, web advertising *Wish list: what the client would like to see chang...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Weekly:&lt;br /&gt;
*Conference Call: comments, complaints, ideas&lt;br /&gt;
*Error Log Review: MySQL, Http, Https&lt;br /&gt;
*Marketing: email campaigns, web advertising&lt;br /&gt;
*Wish list: what the client would like to see changed&lt;br /&gt;
&lt;br /&gt;
Monthly:&lt;br /&gt;
*Cart Report Review: Evaluate solutions that focus on gaps&lt;br /&gt;
*Keyword search analysis: zero return searches, most popular searches&lt;br /&gt;
*Category activity: Visitation, Visitation vs products viewed, Visitation vs products to cart, Visitation vs purchases&lt;br /&gt;
*Product activity: Visitation, Visitation vs products to cart, Visitation vs purchases&lt;br /&gt;
&lt;br /&gt;
Quarterly:&lt;br /&gt;
*Evaluate competitor websites, note new functions, changes&lt;br /&gt;
*Usability: discuss admin areas for improvement&lt;br /&gt;
*Discuss new features available&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Whirlwind_eCommerce_Engine_Wiki&amp;diff=712</id>
		<title>Whirlwind eCommerce Engine Wiki</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Whirlwind_eCommerce_Engine_Wiki&amp;diff=712"/>
				<updated>2009-04-05T01:54:58Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome ==&lt;br /&gt;
&lt;br /&gt;
* [[The Administration Console:First Look]] - Get an overview of what you can do with your Whirlwind Web Site&lt;br /&gt;
* Give us feedback via [[Wiki Suggestions]] and [[Upgrade Requests / Bugs]]&lt;br /&gt;
&lt;br /&gt;
==Content Managers==&lt;br /&gt;
* [[Pages]]: Create pages for products, categories, information or anything. Manage the content of ALL pages including the checkout process, account management and more. Have pages double as RSS feeds so you can manage content in one place that is displayed as a web page to web site visitors and as an RSS feed to feed subscribers.&lt;br /&gt;
* [[Image Library]]: Manage all your site images via a simple, photo album style interface. Easily place images into content, upload new images or even crop/resize images through the interface.&lt;br /&gt;
* [[File Library]]: Manage all your downloadable files via a simple, file manager style interface. Easily link pdfs, spreadsheets, documents, zip files to you page content.&lt;br /&gt;
* [[Menus]]: Control all the menu bar links in your site's C-nav (top tabs, left categories, bottom links, etc) via one centralized location.&lt;br /&gt;
* [[Custom Search Groups]]: Manage Keyword drop downs that jump to specific page(s)&lt;br /&gt;
* [[Banners]]: Create and manage banner ads, campaigns and zones for campaign/banner placement.&lt;br /&gt;
&lt;br /&gt;
==Marketing==&lt;br /&gt;
* [[URL Map]]: Create custom, easy-to-remember alias URLs (links) for promotional materials.&lt;br /&gt;
* [[Landing Pages]]: Provide users with targeted content.&lt;br /&gt;
* [[Pages:Custom Forms]]: Create custom forms that collect any information you wish. Use custom forms to provide a means for newsletter registration, catalog ordering, contact, help requests, or anything else you can think of. View and manage all submissions made through these forms in one centralized location.&lt;br /&gt;
* [[Campaigns]]: Create, manage and track email campaigns.&lt;br /&gt;
* [[Banners]]: Create and manage banner ads, campaigns and zones for campaign/banner placement.&lt;br /&gt;
* [[Discounts]]: Manage coupons and automatic promotional discounts.&lt;br /&gt;
&lt;br /&gt;
==Moderators==&lt;br /&gt;
* [[Users]] : Control user rights, permissions and access&lt;br /&gt;
* [[Form Submissions]]: Lookup and edit any, all form submitted information.&lt;br /&gt;
* [[Sessions]]: View who is logging into the website and when&lt;br /&gt;
* [[Forums]]: Approve pending forum/comment posts. Lookup, edit, delete all forum/comment posts.&lt;br /&gt;
* [[Campaign Subscribers]]: Lookup, edit campaign subscribers.&lt;br /&gt;
* [[IP Blocks]]: Restrict visitors from accessing and using site tools (forms, comments, ordering, etc). View list of those blocked and  add/remove blocks.&lt;br /&gt;
&lt;br /&gt;
==Web Masters / Site Administrators==&lt;br /&gt;
* [[Settings]] : Turn on, off and configure the features and functions that will be available on your web site.&lt;br /&gt;
* [[Groups]]: Create user groups that can be used to manage administration or content access&lt;br /&gt;
* [[Users]]: Manage system user information - control user access, privileges and rights.&lt;br /&gt;
* [[Pages]]: Look up and manage content for any page on the web site.&lt;br /&gt;
* [[URL Map]]: Transitioning from an existing website? Keeping old links intact so you don't lose search engine rankings. Create custom, SEO-friendly URLs to ANY page on your web site that appeal to search engines and are easy to remember for site visitors.&lt;br /&gt;
* [[Client New Site Testing Protocol]]: A checklist to help new site owners pinpoint changes they want on their web site before launch.&lt;br /&gt;
&lt;br /&gt;
==Store Managers==&lt;br /&gt;
* [[Pages]]: Manage categories, product lines, product pages, checkout process pages - or any other page content on the site.&lt;br /&gt;
* [[Products]]: Add, edit delete products. Control product behavior and pricing. Link products to pages.&lt;br /&gt;
* [[Product Price Matrices]]: Manage product price matrices (volume discounting).&lt;br /&gt;
* [[Product Option Groups]]: Manage product groups of selectable options. Color, size, or any other option you want to make available on certain products.&lt;br /&gt;
* [[Shipping]]: Control shipping methods and pricing&lt;br /&gt;
* [[Tax Management]]: Set tax rules for purchases&lt;br /&gt;
* [[Discounts]]: Manage coupons and automatic promotional discounts&lt;br /&gt;
* [[Orders]]: Lookup and edit orders (both completed, and shopping carts in progress)&lt;br /&gt;
* [[Cart Report]]: See return on investment for advertisements, campaigns. Find bottlenecks in the purchase process.&lt;br /&gt;
&lt;br /&gt;
==Integrators==&lt;br /&gt;
* [[Attn: Template Integrators]]: New to template integration? Here is some protocol to follow to make your job easier and keep your clients satisfied.&lt;br /&gt;
* [[Installation]]: Software setup and configuration to prepare a server to use the Whirlwind eCommerce Engine.&lt;br /&gt;
* [[Initial Setup]]: What to do when the new site is turned on for the first time&lt;br /&gt;
* [[The Administration Console:First Look]]: Tour of the administration console for managing the site&lt;br /&gt;
* [[Settings]]: Your first task on your new site is to specify the initial settings, select which features and functions will be available and configure how those features and functions will operate.&lt;br /&gt;
* [[Menus]]: Use Menus to control content in the web site's Cnav. Understand how menus work before building your first templates.&lt;br /&gt;
* [[Pages]]: Build content pages for your web site. Understand how pages work before building your first templates.&lt;br /&gt;
* [[Page Templates]]: Learn how to qualify and build templates that will govern how content managers control page content and how that content will be presented.&lt;br /&gt;
* [[Pages:Custom Forms]]: Setup custom forms for web sites for newsletter registration, information collection, contact and more.&lt;br /&gt;
* [[Data Integration]]: Import data from legacy systems. Set up regular data transfers between Point-Of-Sale systems and the web site.&lt;br /&gt;
* [[Page_Templates:Functions]]: A reference guide to all functions and calls at your disposal when creating a template&lt;br /&gt;
* [[CSR: Support]]: Continuing client support&lt;br /&gt;
&lt;br /&gt;
==Programmers==&lt;br /&gt;
* [[Attn: Engine Programmers]]: Custom programming your version of our engine? Here's some tips that will help make your work easier and prepare your modifications for others who will be programming your version of the engine.&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Attn:_Template_Integrators&amp;diff=690</id>
		<title>Attn: Template Integrators</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Attn:_Template_Integrators&amp;diff=690"/>
				<updated>2009-03-31T13:32:37Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: added shipping checks for shopping cart&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Before Site Development=&lt;br /&gt;
&lt;br /&gt;
==Site Configuration==&lt;br /&gt;
Set up for proper shipping method. Adjust cart accordingly (don't need zip code entry if using level shipping, don't need shipping selection if only one shipping method is available).&lt;br /&gt;
&lt;br /&gt;
==Testing Criteria==&lt;br /&gt;
Generate testing criteria with the client, these will be your measurements of success. Testing criteria will start with the new site checklist below - augment this list with custom functions and templates built for the client. Create at least one testing scenario for each custom function / template possible conditions. If the function / template is to effect other site areas (cart, checkout, orders, importing / exporting) be sure to include a process flow test to ensure those other functions are impacted correctly.&lt;br /&gt;
&lt;br /&gt;
==During Site Development==&lt;br /&gt;
===For ANY deviations made from the designs===&lt;br /&gt;
*Email the client, verify response&lt;br /&gt;
*Note in the code when / how the client was notified of the change.&lt;br /&gt;
&lt;br /&gt;
=After Site Completion=&lt;br /&gt;
&lt;br /&gt;
==New Site Checklist==&lt;br /&gt;
&lt;br /&gt;
===Templates Adjusted to Match Config Settings===&lt;br /&gt;
*Shopping cart shipping only shows zip code if using Fedex shipping&lt;br /&gt;
*Shopping cart shipping only has option box if more than one shipping method is available&lt;br /&gt;
&lt;br /&gt;
===Address Collection Form Homogeneity===&lt;br /&gt;
''Address forms should all have same fields AND validation rules, also that all pages that display addresses include all these fields''&lt;br /&gt;
*Create account (if address is included)&lt;br /&gt;
*Address book&lt;br /&gt;
*Checkout Billing&lt;br /&gt;
*Checkout Shipping&lt;br /&gt;
*Order Confirmation&lt;br /&gt;
*Viewable / Printable Invoice&lt;br /&gt;
*Emailed Invoice&lt;br /&gt;
&lt;br /&gt;
===Page Accessibility Conditions are Enforced===&lt;br /&gt;
;cannot view while logged OUT:&lt;br /&gt;
:*Your Account&lt;br /&gt;
:*Edit Account&lt;br /&gt;
:*Address Book&lt;br /&gt;
:*Order History&lt;br /&gt;
;cannot view while logged IN:&lt;br /&gt;
:*Welcome (checkout registration)&lt;br /&gt;
:*Create Account&lt;br /&gt;
:*Lost Password&lt;br /&gt;
&lt;br /&gt;
===Settings Completed===&lt;br /&gt;
;All Email Content Entered:&lt;br /&gt;
:*Page Management &amp;gt; Send 2 Friend Email Subject and Body&lt;br /&gt;
:*Campaign &amp;gt; Registration Email, Subject and Body (OR a page is built in page management and the &amp;quot;Registration Email Page ID&amp;quot; is pointing to that page)&lt;br /&gt;
:*Ecommerce &amp;gt; Invoice Header, Footer, Subject and Emails (OR a page is built in page management and the &amp;quot;Checkout (Confirmation) Email Page ID&amp;quot; is pointing to that page)&lt;br /&gt;
:*Users &amp;gt; Lost password header, footer, email, subject&lt;br /&gt;
;All Forwards Are Completed (and Pages for which are created):&lt;br /&gt;
:*Page Management &amp;gt; Search Page Id; 404 (not found) Page Id&lt;br /&gt;
:*Campaigns &amp;gt; Opt In / Out Success / Failure Urls&lt;br /&gt;
:*Ecommerce &amp;gt; Cart and Checkout Process Page Ids (all a required except &amp;quot;Checkout (Confirmation) Email Page ID&amp;quot;)&lt;br /&gt;
:*Users &amp;gt; Fail Access Authorization URL; Login Successfully URL; Fail Attempted Login URL; Logout URL; Password Expired Link; Create Account Link; Edit Account Link&lt;br /&gt;
&lt;br /&gt;
===Template Links Tested===&lt;br /&gt;
''Click ALL links for a page for every template and verify they link to their target. If links appear / disappear or change based on different conditions (logged in, logged out, appear in a loop such as children, appear when cart has items or meets certain conditions, etc) be sure to test under each condition to ensure link operates correctly''&lt;br /&gt;
&lt;br /&gt;
===Process Flow Tested===&lt;br /&gt;
;Navigation Flow:&lt;br /&gt;
:*Start at a CNAV category &amp;gt; Category page &amp;gt; Product line page &amp;gt; product page&lt;br /&gt;
:*Enter Search Keywords &amp;gt; Search &amp;gt; Select a product&lt;br /&gt;
;Email Registration Flow:&lt;br /&gt;
:*Enter email into newsletter field &amp;gt; Newsletter registration page &amp;gt; registration complete page &amp;gt; check the email received&lt;br /&gt;
;Purchase Flow (after completing all orders, log into administration to check if order is displayed correct and complete):&lt;br /&gt;
:*WHILE LOGGED OUT: Add one product utilizing each product template built to the shopping cart &amp;gt; checkout registration (continue as guest) &amp;gt; billing address &amp;gt; shipping address &amp;gt; payment &amp;gt; confirmation / review &amp;gt; order complete &amp;gt; view the order &amp;gt; check the email received&lt;br /&gt;
:*WHILE LOGGED OUT: Add one product to the shopping cart &amp;gt; checkout registration (create account) &amp;gt; create account page &amp;gt; billing address &amp;gt; shipping address &amp;gt; payment &amp;gt; confirmation / review &amp;gt; order complete &amp;gt; view the order &amp;gt; check the email received&lt;br /&gt;
:*WHILE LOGGED OUT: Add one product to the shopping cart &amp;gt; checkout registration (log in) &amp;gt; billing address &amp;gt; shipping address &amp;gt; payment &amp;gt; confirmation / review &amp;gt; order complete &amp;gt; view the order &amp;gt; check the email received&lt;br /&gt;
:*WHILE LOGGED IN: Add one product to the shopping cart &amp;gt; (should skip checkout registration) &amp;gt; billing address &amp;gt; shipping address &amp;gt; payment &amp;gt; confirmation / review &amp;gt; order complete &amp;gt; view the order &amp;gt; check the email received&lt;br /&gt;
;Account Management: &lt;br /&gt;
:*WHILE LOGGED OUT: Your Account &amp;gt; Create Account &amp;gt; Your Account Page&lt;br /&gt;
:*WHILE LOGGED OUT: Your Account &amp;gt; Log in &amp;gt; Your Account Page&lt;br /&gt;
:*WHILE LOGGED IN: Your Account &amp;gt; Your Account Page&lt;br /&gt;
:*Add one address, edit one address and delete one address from the address book&lt;br /&gt;
:*View an order through order history&lt;br /&gt;
:*Change your name and password in the edit account form&lt;br /&gt;
===Custom Forms Tested===&lt;br /&gt;
:*Enter samples into ALL custom forms built for the web site.&lt;br /&gt;
:*Verify each form has the 'form type' set to a unique value that will be easy for the client to use when looking up forms in the 'form submissions' area of administration.&lt;br /&gt;
:*Look up the submissions in the 'form submissions' area of administration, verify all the fields entered passed correctly.&lt;br /&gt;
:*Verify all email recipients specified in the custom form received the emails with the fields correctly filled out.&lt;br /&gt;
:*For each form, if newsletter subscription is used, submit the form TWICE (once subscribing, once not) and verify the subscription took by looking them up in the 'subscriptions' area of administration. Follow the newsletter registration process to completion, verify the process works as intended and all content during the course of :*the process is as the client wishes.&lt;br /&gt;
===Custom Development Tested===&lt;br /&gt;
Test all CUSTOM processes / templates / functions created for client as per the contract. Use testing criteria for evaluation.&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Whirlwind_eCommerce_Engine_Wiki&amp;diff=669</id>
		<title>Whirlwind eCommerce Engine Wiki</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Whirlwind_eCommerce_Engine_Wiki&amp;diff=669"/>
				<updated>2009-03-20T19:34:17Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Welcome =&lt;br /&gt;
&lt;br /&gt;
* [[The Administration Console:First Look]] - Get an overview of what you can do with your Whirlwind Web Site&lt;br /&gt;
* Give us feedback via [[Wiki Suggestions]] and [[Upgrade Requests / Bugs]]&lt;br /&gt;
&lt;br /&gt;
{|border=2&lt;br /&gt;
|-bgcolor=silver&lt;br /&gt;
|&lt;br /&gt;
==Content Managers==&lt;br /&gt;
* [[Pages]]&lt;br /&gt;
* [[Image Library]]: Image Management Library&lt;br /&gt;
* [[File Library]]: File Management Library&lt;br /&gt;
* [[Content Libraries]]: Reusable, Selectable Content and Image Lists&lt;br /&gt;
* [[Menus]]: Persistent menu bar links&lt;br /&gt;
* RSS Feeds&lt;br /&gt;
* [[Custom Search Groups]]: Manage Keyword drop downs that jump to specific page(s)&lt;br /&gt;
* [[Banners]]: Create and manage banner ads, campaigns and zones for campaign/banner placement.&lt;br /&gt;
|&lt;br /&gt;
==Marketing==&lt;br /&gt;
* [[URL Map]]: Keeping old links intact and Alias URLs - Easy Links&lt;br /&gt;
* [[Landing Pages]]: Specialized home pages targeted to specific users&lt;br /&gt;
* [[Custom Forms]]&lt;br /&gt;
* [[Campaigns]]: Create, manage and track email campaigns.&lt;br /&gt;
* [[Banners]]: Create and manage banner ads, campaigns and zones for campaign/banner placement.&lt;br /&gt;
* [[Discounts]]: Manage coupons and automatic promotional discounts&lt;br /&gt;
|&lt;br /&gt;
==Moderators==&lt;br /&gt;
* [[User Management]]&lt;br /&gt;
* [[Form Submissions]]: Lookup any, all custom forms submissions&lt;br /&gt;
* [[Sessions]]: View who is logging into the website and when&lt;br /&gt;
* [[Forums]]: Approve pending forum/comment posts. Lookup, edit, delete all forum/comment posts.&lt;br /&gt;
* [[Campaign Subscribers]]: Lookup, edit campaign subscribers.&lt;br /&gt;
* [[IP Blocks]]: View list of computers blocked from form submissions. Add/remove blocks.&lt;br /&gt;
|&lt;br /&gt;
==Web Masters / Site Administrators==&lt;br /&gt;
* [[Settings]]&lt;br /&gt;
* [[Groups]]: Create user groups that can be used to manage administration or content access&lt;br /&gt;
* [[User Management]]&lt;br /&gt;
* [[Pages]]&lt;br /&gt;
* [[URL Map]]: Keeping old links intact and Alias URLs - SEO&lt;br /&gt;
* [[Client New Site Testing Protocol]]&lt;br /&gt;
|&lt;br /&gt;
==Store Managers==&lt;br /&gt;
* [[Pages]&lt;br /&gt;
* [[Content Libraries]]: Reusable, Selectable Content and Image Lists&lt;br /&gt;
* [[Products]]: Add, edit delete products. Link products to pages.&lt;br /&gt;
* [[Product Price Matrices]]: Manage price matrices (volume discounting) that are available to all products.&lt;br /&gt;
* [[Product Option Groups]]: Manage groups of selectable options that are available to all products.&lt;br /&gt;
* [[Shipping]]: Control shipping options available and pricing&lt;br /&gt;
* [[Tax Management]]: Set tax rules for purchases&lt;br /&gt;
* [[Discounts]]: Manage coupons and automatic promotional discounts&lt;br /&gt;
* [[Orders]]: Lookup and edit orders (both completed, and shopping carts in progress)&lt;br /&gt;
* [[Cart Report]]: See return on investment for advertisements, campaigns. Find bottlenecks in the purchase process.&lt;br /&gt;
|&lt;br /&gt;
==Integrators==&lt;br /&gt;
* [[Attn: Template Integrators]]&lt;br /&gt;
* [[Installation]]&lt;br /&gt;
* [[Initial Setup]]&lt;br /&gt;
* [[The Administration Console:First Look]]&lt;br /&gt;
* [[Settings]]&lt;br /&gt;
* [[Menus]]: Persistent menu bar links&lt;br /&gt;
* [[Page Templates]]&lt;br /&gt;
* [[User Management]]&lt;br /&gt;
* [[Pages]]&lt;br /&gt;
* [[Content Libraries]]: Reusable, Selectable Content and Image Lists&lt;br /&gt;
* [[Custom Forms]]&lt;br /&gt;
* [[Custom Search Groups]]: Manage Keyword drop downs that jump to specific page(s)&lt;br /&gt;
|&lt;br /&gt;
==Programmers==&lt;br /&gt;
* [[Attn: Engine Programmers]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Whirlwind_eCommerce_Engine_Wiki&amp;diff=668</id>
		<title>Whirlwind eCommerce Engine Wiki</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Whirlwind_eCommerce_Engine_Wiki&amp;diff=668"/>
				<updated>2009-03-20T18:44:20Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Welcome =&lt;br /&gt;
&lt;br /&gt;
* [[The Administration Console:First Look]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--* [[Tour]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
** [[URL Map]]: Keeping old links intact and Alias URLs&lt;br /&gt;
** [[Menus]]: Persistent menu bar links&lt;br /&gt;
** [[Landing Pages]]: Specialized home pages targeted to specific users&lt;br /&gt;
** [[Form Submissions]]: Lookup any, all custom forms submissions&lt;br /&gt;
** [[Documents]]: Secure files for specific user access&lt;br /&gt;
** [[Pending Approval]]: View, edit and post page content changes pending approval&lt;br /&gt;
** [[Custom Search Groups]]: Manage Keyword drop downs that jump to specific page(s)&lt;br /&gt;
** [[Users]]: Lookup, add and edit users and user group membership.&lt;br /&gt;
** [[Sessions]]: View who is logging into the website and when&lt;br /&gt;
** [[Groups]]: Create user groups that can be used to manage administration or content access&lt;br /&gt;
** [[Forums]]: Approve pending forum/comment posts. Lookup, edit, delete all forum/comment posts.&lt;br /&gt;
** [[Campaigns]]: Create, manage and track email campaigns.&lt;br /&gt;
** [[Campaign Subscribers]]: Lookup, edit campaign subscribers.&lt;br /&gt;
** [[Banners]]: Create and manage banner ads, campaigns and zones for campaign/banner placement.&lt;br /&gt;
** [[Products]]: Add, edit delete products. Link products to pages.&lt;br /&gt;
** [[Product Price Matrices]]: Manage price matrices (volume discounting) that are available to all products.&lt;br /&gt;
** [[Product Option Groups]]: Manage groups of selectable options that are available to all products.&lt;br /&gt;
** [[Shipping]]: Control shipping options available and pricing&lt;br /&gt;
** [[Tax Management]]: Set tax rules for purchases&lt;br /&gt;
** [[Discounts]]: Manage coupons and automatic promotional discounts&lt;br /&gt;
** [[Orders]]: Lookup and edit orders (both completed, and shopping carts in progress)&lt;br /&gt;
** [[Cart Report]]: See return on investment for advertisements, campaigns. Find bottlenecks in the purchase process.&lt;br /&gt;
** [[Page Templates]]: Create page templates that govern how pages are managed and viewed&lt;br /&gt;
** [[Settings]]: Setup the site, activate site functions, manage site wide attributes&lt;br /&gt;
** [[IP Blocks]]: View list of computers blocked from form submissions. Add/remove blocks.&lt;br /&gt;
*[[Wiki Suggestions]]&lt;br /&gt;
*[[Upgrade Requests / Bugs]]&lt;br /&gt;
*[[Attn: Engine Programmers]]&lt;br /&gt;
*[[Attn: Template Integrators]]&lt;br /&gt;
*[[Client New Site Testing Protocol]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=2&lt;br /&gt;
|-bgcolor=silver&lt;br /&gt;
|&lt;br /&gt;
==Content Managers==&lt;br /&gt;
* [[Pages]]&lt;br /&gt;
* [[Image Library]]: Image Management Library&lt;br /&gt;
* [[File Library]]: File Management Library&lt;br /&gt;
* [[Content Libraries]]: Reusable, Selectable Content and Image Lists&lt;br /&gt;
|&lt;br /&gt;
==Marketing==&lt;br /&gt;
|&lt;br /&gt;
==Moderators==&lt;br /&gt;
* [[User Management]]&lt;br /&gt;
|&lt;br /&gt;
==Web Masters==&lt;br /&gt;
* [[Settings]]&lt;br /&gt;
* [[User Management]]&lt;br /&gt;
* [[Pages]]&lt;br /&gt;
|&lt;br /&gt;
==Store Managers==&lt;br /&gt;
* [[Pages]&lt;br /&gt;
* [[Content Libraries]]: Reusable, Selectable Content and Image Lists&lt;br /&gt;
|&lt;br /&gt;
==Integrators==&lt;br /&gt;
* [[Installation]]&lt;br /&gt;
* [[Initial Setup]]&lt;br /&gt;
* [[The Administration Console:First Look]]&lt;br /&gt;
* [[Settings]]&lt;br /&gt;
* [[Page Templates]]&lt;br /&gt;
* [[User Management]]&lt;br /&gt;
* [[Pages]]&lt;br /&gt;
** [[Content Libraries]]: Reusable, Selectable Content and Image Lists&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Function_Template&amp;diff=667</id>
		<title>Function Template</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Function_Template&amp;diff=667"/>
				<updated>2009-03-20T18:24:23Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
Function() performs a function that does stuff&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
$returnValue = Function(type $attrib1, type $attrib2 [,type $optionalAttrib3]);&lt;br /&gt;
&lt;br /&gt;
== Paramaters ==&lt;br /&gt;
*attrib1&lt;br /&gt;
:: description of attribute 1&lt;br /&gt;
*attrib 2&lt;br /&gt;
:: description of attribute 2&lt;br /&gt;
*attrib 3&lt;br /&gt;
:: description of attribute 3&lt;br /&gt;
&lt;br /&gt;
== Return Values ==&lt;br /&gt;
Return var type or false under conditions. Example returned object structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [0] =&amp;gt; Array&lt;br /&gt;
        (&lt;br /&gt;
            // elements group 1&lt;br /&gt;
            [element1] =&amp;gt; INT&lt;br /&gt;
            [element2] =&amp;gt; STRING // this is element 2 notes&lt;br /&gt;
            // elements group 2&lt;br /&gt;
            [element3] =&amp;gt; STRING // this is element 3 notes&lt;br /&gt;
        )&lt;br /&gt;
    [1] =&amp;gt; Array ...&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defining the returned object:&lt;br /&gt;
&lt;br /&gt;
Elements from the child page associative array are as follows: &lt;br /&gt;
{|border=2&lt;br /&gt;
|-&lt;br /&gt;
|Element&lt;br /&gt;
|Description&lt;br /&gt;
|Example&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;Title for this section of elements&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|element1&lt;br /&gt;
|INT - description of element 1&lt;br /&gt;
|6&lt;br /&gt;
|-&lt;br /&gt;
|element2&lt;br /&gt;
|STRING - description of element 2&lt;br /&gt;
|XYZ&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;b&amp;gt;Title for another section of elements&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|element3&lt;br /&gt;
|INT - description of element 3&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
;example 1&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// example code 1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
;example 2&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// example code 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
:*[[tag:1|tag 1]]&lt;br /&gt;
:*[[tag:2|tag 2]]&lt;br /&gt;
:*[[tag:3|tag 3]]&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Upgrade_Requests_/_Bugs&amp;diff=643</id>
		<title>Upgrade Requests / Bugs</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Upgrade_Requests_/_Bugs&amp;diff=643"/>
				<updated>2009-03-19T12:56:04Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: Audit all queries to confirm 'best practices' used with strings - see referencePHP&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Additional field to shared option groups - so it can have a name that is not the same as it's displayed title.&lt;br /&gt;
*Increments for products (visitor must buy in allotted increment)&lt;br /&gt;
*Coupon Memory - have the system remember coupon codes entered that where not qualified for, automatically apply coupon as soon as cart qualifies.&lt;br /&gt;
*Checkbox to discounts that allow an item to ignore the ‘only 1 discount per cart’ command.&lt;br /&gt;
*Text field in discounts for non-qualifying codes that will go into queue, when application is attempted.&lt;br /&gt;
*Banner Zones controlled by url data passed (tell a zone to display a specific banner), command expires after order is complete&lt;br /&gt;
*Banner repository queue to hold attempted, but unqualified, discount codes, attempt to re-apply with each cart modification.&lt;br /&gt;
*Tiered discounts for BOTH % and $ off.&lt;br /&gt;
*Checkout modifications to support non-pay accounts, po numbers.&lt;br /&gt;
*Cart check function, checks all items, shipping, discounts in cart to make sure they all still qualify, if any do not, remove and display message to visitor.&lt;br /&gt;
*Order management to allow product option changes.&lt;br /&gt;
*Auto deletion of expired data including: incomplete carts, searches, send2friend, banner tracking, campaign tracking, page views, user sessions.&lt;br /&gt;
*Export/Import templates (to duplicate BETWEEN sites)&lt;br /&gt;
*Audit all queries to confirm 'best practices' used with strings - see referencePHP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Completed:&lt;br /&gt;
*2/5/2009: Free item alterations, store items as $0, pass controls that allow design changes for these items when presented in cart, etc.&lt;br /&gt;
*2/9/2009: When a visitor enters an email/name to register for the newsletter, and the billing/shipping addresses are blank, attach the email/name to the billing/shipping addresses in the order.&lt;br /&gt;
*2/13/2008: Reliable exit pop up&lt;br /&gt;
*2/16/2008: TEM channelId control for the order process (abandoned cart) manageable through admin console.&lt;br /&gt;
*2/18/2008: TEM custom image generation field set up&lt;br /&gt;
&lt;br /&gt;
;In Progress:&lt;br /&gt;
*Catalog quick order&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Functions:orderGetCompleteArray&amp;diff=642</id>
		<title>Functions:orderGetCompleteArray</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Functions:orderGetCompleteArray&amp;diff=642"/>
				<updated>2009-03-17T04:00:37Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: added company to billing and shipping addresses&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Page Template Functions Shortcuts}}&lt;br /&gt;
== Description ==&lt;br /&gt;
Retrieves data for entire order including items, payments, addresses, etc. Use for building shopping cart page, order review/summary page and order receipts.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
$orderArray = eV::orderGetCompleteArray($orderId=NULL)&lt;br /&gt;
&lt;br /&gt;
== Paramaters ==&lt;br /&gt;
*$orderId INT OPTIONAL&lt;br /&gt;
:: unique orderId as assigned by the system upon creation of the order. If empty, the system will default to the current shopping cart (session.order.orderId)&lt;br /&gt;
&lt;br /&gt;
== Return Values ==&lt;br /&gt;
Associative array of complete order information.&lt;br /&gt;
The array is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [items] =&amp;gt; Array&lt;br /&gt;
        (&lt;br /&gt;
            [0] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                    [itemId] =&amp;gt; INT&lt;br /&gt;
                    [createDate] =&amp;gt; DATETIME&lt;br /&gt;
                    [modDate] =&amp;gt; DATETIME&lt;br /&gt;
                    [createUserId] =&amp;gt; INT&lt;br /&gt;
                    [modUserId] =&amp;gt; INT&lt;br /&gt;
                    [quantity] =&amp;gt; INT&lt;br /&gt;
                    [pricePer] =&amp;gt; FLOAT&lt;br /&gt;
                    [listPricePer] =&amp;gt; FLOAT&lt;br /&gt;
                    [sale_addressId] =&amp;gt; INT&lt;br /&gt;
                    [shipType] =&amp;gt; STRING&lt;br /&gt;
                    [shipTypeCode] =&amp;gt; STRING&lt;br /&gt;
                    [shipAmount] =&amp;gt; FLOAT&lt;br /&gt;
                    [addressName] =&amp;gt; STRING&lt;br /&gt;
                    [taxAmount] =&amp;gt; FLOAT&lt;br /&gt;
                    [firstName] =&amp;gt; STRING&lt;br /&gt;
                    [lastName] =&amp;gt; STRING&lt;br /&gt;
                    [company] =&amp;gt; STRING&lt;br /&gt;
                    [user_addressId] =&amp;gt; INT&lt;br /&gt;
                    [street1] =&amp;gt; STRING&lt;br /&gt;
                    [street2] =&amp;gt; STRING&lt;br /&gt;
                    [city] =&amp;gt; STRING&lt;br /&gt;
                    [state] =&amp;gt; STRING&lt;br /&gt;
                    [zipCode] =&amp;gt; INT&lt;br /&gt;
                    [country] =&amp;gt; STRING&lt;br /&gt;
                    [phone1] =&amp;gt; STRING&lt;br /&gt;
                    [phone2] =&amp;gt; STRING&lt;br /&gt;
                    [phone3] =&amp;gt; STRING&lt;br /&gt;
                    [fax] =&amp;gt; STRING&lt;br /&gt;
                    [emailAddress] =&amp;gt; STING&lt;br /&gt;
                    [instructions] =&amp;gt; STRING&lt;br /&gt;
                    [deliveryDate] =&amp;gt; DATETIME&lt;br /&gt;
                    [imagePath] =&amp;gt; STRING&lt;br /&gt;
                    [isDiscontinued] =&amp;gt; BIT&lt;br /&gt;
                    [productId] =&amp;gt; INT&lt;br /&gt;
                    [productName] =&amp;gt; STRING&lt;br /&gt;
                    [productNumber] =&amp;gt; STRING&lt;br /&gt;
                    [sku] =&amp;gt; STRING&lt;br /&gt;
                    [cartDescription] =&amp;gt; STRING&lt;br /&gt;
                    [isTaxable] =&amp;gt; BIT&lt;br /&gt;
                    [shippingSurcharge] =&amp;gt; FLOAT&lt;br /&gt;
                    [affiliatePoints] =&amp;gt; INT&lt;br /&gt;
                    [weight] =&amp;gt; FLOAT&lt;br /&gt;
                    [itemLayout_complete] =&amp;gt; BIT&lt;br /&gt;
                    [itemLayout_configurable] =&amp;gt; BIT&lt;br /&gt;
                    [minQuantity] =&amp;gt; INT&lt;br /&gt;
                    [matrixId] =&amp;gt; INT&lt;br /&gt;
                    [aggregateBenefit] =&amp;gt; BIT&lt;br /&gt;
                    [aggregateMinQuantity] =&amp;gt; INT&lt;br /&gt;
                    [aggregateMinQuantityFailurePageId] =&amp;gt; INT&lt;br /&gt;
                    [freeItem_discountId] =&amp;gt; INT&lt;br /&gt;
                    [options] =&amp;gt; Array&lt;br /&gt;
                        (&lt;br /&gt;
                            [0] =&amp;gt; Array&lt;br /&gt;
                                (&lt;br /&gt;
                                    [groupId] =&amp;gt; INT&lt;br /&gt;
                                    [groupName] =&amp;gt; STRING&lt;br /&gt;
                                    [title] =&amp;gt; STRING&lt;br /&gt;
                                    [price] =&amp;gt; FLOAT&lt;br /&gt;
                                    [priceOption] =&amp;gt; INT                           )&lt;br /&gt;
                            [1] =&amp;gt; Array ...&lt;br /&gt;
&lt;br /&gt;
                        )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                )&lt;br /&gt;
            [1] =&amp;gt; Array ...&lt;br /&gt;
&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
    [payments] =&amp;gt; Array&lt;br /&gt;
        (&lt;br /&gt;
            [0] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                    [paymentId] =&amp;gt; INT&lt;br /&gt;
                    [createDate] =&amp;gt; DATETIME&lt;br /&gt;
                    [modDate] =&amp;gt; DATETIME&lt;br /&gt;
                    [createUserId] =&amp;gt; INT&lt;br /&gt;
                    [modUserId] =&amp;gt; INT&lt;br /&gt;
                    [sale_addressId] =&amp;gt; INT&lt;br /&gt;
                    [accountNumber] =&amp;gt; STRING&lt;br /&gt;
                    [expDate] =&amp;gt; DATETIME&lt;br /&gt;
                    [authNumber] =&amp;gt; STRING&lt;br /&gt;
                    [cancelDate] =&amp;gt; DATETIME&lt;br /&gt;
                    [manualPayment] =&amp;gt; BIT&lt;br /&gt;
                    [processDate] =&amp;gt; DATETIME&lt;br /&gt;
                    [amount] =&amp;gt; FLOAT&lt;br /&gt;
                    [payType] =&amp;gt; STRING&lt;br /&gt;
                    [poNumber] =&amp;gt; STRING&lt;br /&gt;
                    [payMethod] =&amp;gt; STRING&lt;br /&gt;
                    [instantCreditAccountNumber] =&amp;gt; STRING&lt;br /&gt;
                    [taxAmount] =&amp;gt; FLOAT&lt;br /&gt;
                    [firstName] =&amp;gt; STRING&lt;br /&gt;
                    [lastName] =&amp;gt; STRING&lt;br /&gt;
                    [company] =&amp;gt; STRING&lt;br /&gt;
                    [user_addressId] =&amp;gt; INT&lt;br /&gt;
                    [street1] =&amp;gt; STRING&lt;br /&gt;
                    [street2] =&amp;gt; STRING&lt;br /&gt;
                    [city] =&amp;gt; STRING&lt;br /&gt;
                    [state] =&amp;gt; STRING&lt;br /&gt;
                    [zipCode] =&amp;gt; INT&lt;br /&gt;
                    [country] =&amp;gt; STRING&lt;br /&gt;
                    [phone1] =&amp;gt; STRING&lt;br /&gt;
                    [phone2] =&amp;gt; STRING&lt;br /&gt;
                    [phone3] =&amp;gt; STRING&lt;br /&gt;
                    [fax] =&amp;gt; STRING&lt;br /&gt;
                    [emailAddress] =&amp;gt; STRING&lt;br /&gt;
                    [instructions] =&amp;gt; STRING&lt;br /&gt;
                )&lt;br /&gt;
            [1] =&amp;gt; Array ...&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
    [discounts] =&amp;gt; Array&lt;br /&gt;
        (&lt;br /&gt;
            [0] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                    [discountId] =&amp;gt; INT&lt;br /&gt;
                    [prod_discountId] =&amp;gt; INT&lt;br /&gt;
                    [discountCode] =&amp;gt; STRING&lt;br /&gt;
                    [description] =&amp;gt; STRING&lt;br /&gt;
                    [amount] =&amp;gt; FLOAT&lt;br /&gt;
                    [createDate] =&amp;gt; DATETIME&lt;br /&gt;
                    [modDate] =&amp;gt; DATETIME&lt;br /&gt;
                    [createUserId] =&amp;gt; INT&lt;br /&gt;
                    [modUserId] =&amp;gt; INT&lt;br /&gt;
                    [mutuallyExclusive] =&amp;gt; BIT&lt;br /&gt;
                    [itemId] =&amp;gt; INT&lt;br /&gt;
                    [isStatic] =&amp;gt; BIT&lt;br /&gt;
                )&lt;br /&gt;
            [1] =&amp;gt; Array ...&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
    [order] =&amp;gt; Array&lt;br /&gt;
        (&lt;br /&gt;
            [orderId] =&amp;gt; INT&lt;br /&gt;
            [orderNumber] =&amp;gt; INT&lt;br /&gt;
            [completeDate] =&amp;gt; DATETIME&lt;br /&gt;
            [cancelDate] =&amp;gt; DATETIME&lt;br /&gt;
            [checkoutRegistrationDate] =&amp;gt; DATETIME&lt;br /&gt;
            [checkoutAddressDate] =&amp;gt; DATETIME&lt;br /&gt;
            [checkoutPaymentDate] =&amp;gt; DATETIME&lt;br /&gt;
            [checkoutConfirmationDate] =&amp;gt; DATETIME&lt;br /&gt;
            [add2CartDate] =&amp;gt; DATETIME&lt;br /&gt;
            [accountUserId] =&amp;gt; INT&lt;br /&gt;
            [adminUserId] =&amp;gt; INT&lt;br /&gt;
            [notes] =&amp;gt; STRING&lt;br /&gt;
            [HTTP_REFERER] =&amp;gt; STING&lt;br /&gt;
            [ENTRY_URL] =&amp;gt; STRING&lt;br /&gt;
            [IP_ADDRESS] =&amp;gt; STRING&lt;br /&gt;
            [createDate] =&amp;gt; DATETIME&lt;br /&gt;
            [modDate] =&amp;gt; DATETIME&lt;br /&gt;
            [createUserId] =&amp;gt; INT&lt;br /&gt;
            [modUserId] =&amp;gt; INT&lt;br /&gt;
            [itemTotal] =&amp;gt; FLOAT&lt;br /&gt;
            [baseShippingTotal] =&amp;gt; FLOAT&lt;br /&gt;
            [shippingTotal] =&amp;gt; FLOAT&lt;br /&gt;
            [taxTotal] =&amp;gt; FLOAT&lt;br /&gt;
            [itemSurchargeTotal] =&amp;gt; FLOAT&lt;br /&gt;
            [paymentTotal] =&amp;gt; FLOAT&lt;br /&gt;
            [discountTotal] =&amp;gt; FLOAT&lt;br /&gt;
            [discountFreeTotal] =&amp;gt; FLOAT&lt;br /&gt;
            [grandTotal] =&amp;gt; FLOAT&lt;br /&gt;
            [totalDue] =&amp;gt; FLOAT&lt;br /&gt;
            [totalQuantity] =&amp;gt; INT&lt;br /&gt;
            [weightTotal] =&amp;gt; FLOAT&lt;br /&gt;
            [matrixAggregateMinQuantityMet] =&amp;gt; BOOL&lt;br /&gt;
            [matrixArr] =&amp;gt; Array [key is matrixId]&lt;br /&gt;
                 (&lt;br /&gt;
                        [aggregateMinQuantity] =&amp;gt; INT&lt;br /&gt;
                        [aggregateMinQuantityFailurePageId] =&amp;gt; INT&lt;br /&gt;
                        [totalQuantity] =&amp;gt; INT&lt;br /&gt;
                        [itemIndexes] =&amp;gt; Array of INT&lt;br /&gt;
                 )&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
;For an example of use in Shopping Cart, see [[Page Templates:Creating a Shopping Cart Template|Creating a Shipping Cart Template]]&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Functions:orderGetCompleteArray&amp;diff=641</id>
		<title>Functions:orderGetCompleteArray</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Functions:orderGetCompleteArray&amp;diff=641"/>
				<updated>2009-03-17T03:21:37Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: added poNumber, payMethod, instantCreditAccountNUmber to payments array&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Page Template Functions Shortcuts}}&lt;br /&gt;
== Description ==&lt;br /&gt;
Retrieves data for entire order including items, payments, addresses, etc. Use for building shopping cart page, order review/summary page and order receipts.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
$orderArray = eV::orderGetCompleteArray($orderId=NULL)&lt;br /&gt;
&lt;br /&gt;
== Paramaters ==&lt;br /&gt;
*$orderId INT OPTIONAL&lt;br /&gt;
:: unique orderId as assigned by the system upon creation of the order. If empty, the system will default to the current shopping cart (session.order.orderId)&lt;br /&gt;
&lt;br /&gt;
== Return Values ==&lt;br /&gt;
Associative array of complete order information.&lt;br /&gt;
The array is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [items] =&amp;gt; Array&lt;br /&gt;
        (&lt;br /&gt;
            [0] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                    [itemId] =&amp;gt; INT&lt;br /&gt;
                    [createDate] =&amp;gt; DATETIME&lt;br /&gt;
                    [modDate] =&amp;gt; DATETIME&lt;br /&gt;
                    [createUserId] =&amp;gt; INT&lt;br /&gt;
                    [modUserId] =&amp;gt; INT&lt;br /&gt;
                    [quantity] =&amp;gt; INT&lt;br /&gt;
                    [pricePer] =&amp;gt; FLOAT&lt;br /&gt;
                    [listPricePer] =&amp;gt; FLOAT&lt;br /&gt;
                    [sale_addressId] =&amp;gt; INT&lt;br /&gt;
                    [shipType] =&amp;gt; STRING&lt;br /&gt;
                    [shipTypeCode] =&amp;gt; STRING&lt;br /&gt;
                    [shipAmount] =&amp;gt; FLOAT&lt;br /&gt;
                    [addressName] =&amp;gt; STRING&lt;br /&gt;
                    [taxAmount] =&amp;gt; FLOAT&lt;br /&gt;
                    [firstName] =&amp;gt; STRING&lt;br /&gt;
                    [lastName] =&amp;gt; STRING&lt;br /&gt;
                    [user_addressId] =&amp;gt; INT&lt;br /&gt;
                    [street1] =&amp;gt; STRING&lt;br /&gt;
                    [street2] =&amp;gt; STRING&lt;br /&gt;
                    [city] =&amp;gt; STRING&lt;br /&gt;
                    [state] =&amp;gt; STRING&lt;br /&gt;
                    [zipCode] =&amp;gt; INT&lt;br /&gt;
                    [country] =&amp;gt; STRING&lt;br /&gt;
                    [phone1] =&amp;gt; STRING&lt;br /&gt;
                    [phone2] =&amp;gt; STRING&lt;br /&gt;
                    [phone3] =&amp;gt; STRING&lt;br /&gt;
                    [fax] =&amp;gt; STRING&lt;br /&gt;
                    [emailAddress] =&amp;gt; STING&lt;br /&gt;
                    [instructions] =&amp;gt; STRING&lt;br /&gt;
                    [deliveryDate] =&amp;gt; DATETIME&lt;br /&gt;
                    [imagePath] =&amp;gt; STRING&lt;br /&gt;
                    [isDiscontinued] =&amp;gt; BIT&lt;br /&gt;
                    [productId] =&amp;gt; INT&lt;br /&gt;
                    [productName] =&amp;gt; STRING&lt;br /&gt;
                    [productNumber] =&amp;gt; STRING&lt;br /&gt;
                    [sku] =&amp;gt; STRING&lt;br /&gt;
                    [cartDescription] =&amp;gt; STRING&lt;br /&gt;
                    [isTaxable] =&amp;gt; BIT&lt;br /&gt;
                    [shippingSurcharge] =&amp;gt; FLOAT&lt;br /&gt;
                    [affiliatePoints] =&amp;gt; INT&lt;br /&gt;
                    [weight] =&amp;gt; FLOAT&lt;br /&gt;
                    [itemLayout_complete] =&amp;gt; BIT&lt;br /&gt;
                    [itemLayout_configurable] =&amp;gt; BIT&lt;br /&gt;
                    [minQuantity] =&amp;gt; INT&lt;br /&gt;
                    [matrixId] =&amp;gt; INT&lt;br /&gt;
                    [aggregateBenefit] =&amp;gt; BIT&lt;br /&gt;
                    [aggregateMinQuantity] =&amp;gt; INT&lt;br /&gt;
                    [aggregateMinQuantityFailurePageId] =&amp;gt; INT&lt;br /&gt;
                    [freeItem_discountId] =&amp;gt; INT&lt;br /&gt;
                    [options] =&amp;gt; Array&lt;br /&gt;
                        (&lt;br /&gt;
                            [0] =&amp;gt; Array&lt;br /&gt;
                                (&lt;br /&gt;
                                    [groupId] =&amp;gt; INT&lt;br /&gt;
                                    [groupName] =&amp;gt; STRING&lt;br /&gt;
                                    [title] =&amp;gt; STRING&lt;br /&gt;
                                    [price] =&amp;gt; FLOAT&lt;br /&gt;
                                    [priceOption] =&amp;gt; INT                           )&lt;br /&gt;
                            [1] =&amp;gt; Array ...&lt;br /&gt;
&lt;br /&gt;
                        )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                )&lt;br /&gt;
            [1] =&amp;gt; Array ...&lt;br /&gt;
&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
    [payments] =&amp;gt; Array&lt;br /&gt;
        (&lt;br /&gt;
            [0] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                    [paymentId] =&amp;gt; INT&lt;br /&gt;
                    [createDate] =&amp;gt; DATETIME&lt;br /&gt;
                    [modDate] =&amp;gt; DATETIME&lt;br /&gt;
                    [createUserId] =&amp;gt; INT&lt;br /&gt;
                    [modUserId] =&amp;gt; INT&lt;br /&gt;
                    [sale_addressId] =&amp;gt; INT&lt;br /&gt;
                    [accountNumber] =&amp;gt; STRING&lt;br /&gt;
                    [expDate] =&amp;gt; DATETIME&lt;br /&gt;
                    [authNumber] =&amp;gt; STRING&lt;br /&gt;
                    [cancelDate] =&amp;gt; DATETIME&lt;br /&gt;
                    [manualPayment] =&amp;gt; BIT&lt;br /&gt;
                    [processDate] =&amp;gt; DATETIME&lt;br /&gt;
                    [amount] =&amp;gt; FLOAT&lt;br /&gt;
                    [payType] =&amp;gt; STRING&lt;br /&gt;
                    [poNumber] =&amp;gt; STRING&lt;br /&gt;
                    [payMethod] =&amp;gt; STRING&lt;br /&gt;
                    [instantCreditAccountNumber] =&amp;gt; STRING&lt;br /&gt;
                    [taxAmount] =&amp;gt; FLOAT&lt;br /&gt;
                    [firstName] =&amp;gt; STRING&lt;br /&gt;
                    [lastName] =&amp;gt; STRING&lt;br /&gt;
                    [user_addressId] =&amp;gt; INT&lt;br /&gt;
                    [street1] =&amp;gt; STRING&lt;br /&gt;
                    [street2] =&amp;gt; STRING&lt;br /&gt;
                    [city] =&amp;gt; STRING&lt;br /&gt;
                    [state] =&amp;gt; STRING&lt;br /&gt;
                    [zipCode] =&amp;gt; INT&lt;br /&gt;
                    [country] =&amp;gt; STRING&lt;br /&gt;
                    [phone1] =&amp;gt; STRING&lt;br /&gt;
                    [phone2] =&amp;gt; STRING&lt;br /&gt;
                    [phone3] =&amp;gt; STRING&lt;br /&gt;
                    [fax] =&amp;gt; STRING&lt;br /&gt;
                    [emailAddress] =&amp;gt; STRING&lt;br /&gt;
                    [instructions] =&amp;gt; STRING&lt;br /&gt;
                )&lt;br /&gt;
            [1] =&amp;gt; Array ...&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
    [discounts] =&amp;gt; Array&lt;br /&gt;
        (&lt;br /&gt;
            [0] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                    [discountId] =&amp;gt; INT&lt;br /&gt;
                    [prod_discountId] =&amp;gt; INT&lt;br /&gt;
                    [discountCode] =&amp;gt; STRING&lt;br /&gt;
                    [description] =&amp;gt; STRING&lt;br /&gt;
                    [amount] =&amp;gt; FLOAT&lt;br /&gt;
                    [createDate] =&amp;gt; DATETIME&lt;br /&gt;
                    [modDate] =&amp;gt; DATETIME&lt;br /&gt;
                    [createUserId] =&amp;gt; INT&lt;br /&gt;
                    [modUserId] =&amp;gt; INT&lt;br /&gt;
                    [mutuallyExclusive] =&amp;gt; BIT&lt;br /&gt;
                    [itemId] =&amp;gt; INT&lt;br /&gt;
                    [isStatic] =&amp;gt; BIT&lt;br /&gt;
                )&lt;br /&gt;
            [1] =&amp;gt; Array ...&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
    [order] =&amp;gt; Array&lt;br /&gt;
        (&lt;br /&gt;
            [orderId] =&amp;gt; INT&lt;br /&gt;
            [orderNumber] =&amp;gt; INT&lt;br /&gt;
            [completeDate] =&amp;gt; DATETIME&lt;br /&gt;
            [cancelDate] =&amp;gt; DATETIME&lt;br /&gt;
            [checkoutRegistrationDate] =&amp;gt; DATETIME&lt;br /&gt;
            [checkoutAddressDate] =&amp;gt; DATETIME&lt;br /&gt;
            [checkoutPaymentDate] =&amp;gt; DATETIME&lt;br /&gt;
            [checkoutConfirmationDate] =&amp;gt; DATETIME&lt;br /&gt;
            [add2CartDate] =&amp;gt; DATETIME&lt;br /&gt;
            [accountUserId] =&amp;gt; INT&lt;br /&gt;
            [adminUserId] =&amp;gt; INT&lt;br /&gt;
            [notes] =&amp;gt; STRING&lt;br /&gt;
            [HTTP_REFERER] =&amp;gt; STING&lt;br /&gt;
            [ENTRY_URL] =&amp;gt; STRING&lt;br /&gt;
            [IP_ADDRESS] =&amp;gt; STRING&lt;br /&gt;
            [createDate] =&amp;gt; DATETIME&lt;br /&gt;
            [modDate] =&amp;gt; DATETIME&lt;br /&gt;
            [createUserId] =&amp;gt; INT&lt;br /&gt;
            [modUserId] =&amp;gt; INT&lt;br /&gt;
            [itemTotal] =&amp;gt; FLOAT&lt;br /&gt;
            [baseShippingTotal] =&amp;gt; FLOAT&lt;br /&gt;
            [shippingTotal] =&amp;gt; FLOAT&lt;br /&gt;
            [taxTotal] =&amp;gt; FLOAT&lt;br /&gt;
            [itemSurchargeTotal] =&amp;gt; FLOAT&lt;br /&gt;
            [paymentTotal] =&amp;gt; FLOAT&lt;br /&gt;
            [discountTotal] =&amp;gt; FLOAT&lt;br /&gt;
            [discountFreeTotal] =&amp;gt; FLOAT&lt;br /&gt;
            [grandTotal] =&amp;gt; FLOAT&lt;br /&gt;
            [totalDue] =&amp;gt; FLOAT&lt;br /&gt;
            [totalQuantity] =&amp;gt; INT&lt;br /&gt;
            [weightTotal] =&amp;gt; FLOAT&lt;br /&gt;
            [matrixAggregateMinQuantityMet] =&amp;gt; BOOL&lt;br /&gt;
            [matrixArr] =&amp;gt; Array [key is matrixId]&lt;br /&gt;
                 (&lt;br /&gt;
                        [aggregateMinQuantity] =&amp;gt; INT&lt;br /&gt;
                        [aggregateMinQuantityFailurePageId] =&amp;gt; INT&lt;br /&gt;
                        [totalQuantity] =&amp;gt; INT&lt;br /&gt;
                        [itemIndexes] =&amp;gt; Array of INT&lt;br /&gt;
                 )&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
;For an example of use in Shopping Cart, see [[Page Templates:Creating a Shopping Cart Template|Creating a Shipping Cart Template]]&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Client_New_Site_Testing_Protocol&amp;diff=640</id>
		<title>Client New Site Testing Protocol</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Client_New_Site_Testing_Protocol&amp;diff=640"/>
				<updated>2009-03-16T14:36:49Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;While testing each of the following, verify each process works as you wish and the content produced during each stage in each process is acceptable.&lt;br /&gt;
&lt;br /&gt;
== Cnav links ==&lt;br /&gt;
:*Click every link in the top, left and bottom cnav menus. Verify they all go where you wish.&lt;br /&gt;
== Banner Ads ==&lt;br /&gt;
:*Verify all banner ads are displaying the correct banners and behaving correctly (rotating timing, etc).&lt;br /&gt;
== Product Navigation ==&lt;br /&gt;
:*In Home page / categories: Click the various links on the children (image, product name, featured category, etc) and verify each link goes where you wish. Do this for at least 5 of the categories, at least 2 children in each category. If you have categories that behave differently, be sure to test each potential behavior.&lt;br /&gt;
:*In Product Lines: use the sorting and paging tools (if applicable), verify they work as you wish. Click the various links on the children (image, name) verify they go where you wish. Do this for at least 5 product lines, 2 children for each product line. If you have product lines that behave differently, be sure to test each potential behavior.&lt;br /&gt;
== Searching ==&lt;br /&gt;
:*Perform keyword searches. Verify results are coming up as expected. Do this for varying types of target objects (products, categories, information pages, etc). Do this for as many target items as it takes for you to feel confident that keyword searches are working to your satisfaction. If you have keyword search reports from previous sites, use these for your tests. &lt;br /&gt;
== Purchase Process ==&lt;br /&gt;
== Account Management ==&lt;br /&gt;
:*Create an account at least once for each scenario you have to create accounts (from links in cnav, from login pages, from the checkout process, etc). Attempt to create accounts while filling and not filling in required fields, verify error messages display to your satisfaction. Verify the account is created and the process continues as you wish (if creating account during checkout process, do you land back in the checkout process after complete? etc.).&lt;br /&gt;
:*Edit your account login information&lt;br /&gt;
:*Look up and view previous orders&lt;br /&gt;
:*Log in to your account at least once for each available log in scenario (from links in cnav, from checkout process, etc). Try logging in with invalid information to test the failure processes and failure content produced. Verify processes continues for each scenario as you wish.&lt;br /&gt;
:*Retrieve a lost password. Verify the process and content throughout the process is acceptable.&lt;br /&gt;
== Custom Forms ==&lt;br /&gt;
== Web 2.0: Forums/Commenting ==&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Client_New_Site_Testing_Protocol&amp;diff=639</id>
		<title>Client New Site Testing Protocol</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Client_New_Site_Testing_Protocol&amp;diff=639"/>
				<updated>2009-03-16T13:53:59Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;While testing each of the following, verify each process works as you wish and the content produced during each stage in each process is acceptable.&lt;br /&gt;
&lt;br /&gt;
== Cnav links ==&lt;br /&gt;
:*Click every link in the top, left and bottom cnav menus. Verify they all go where you wish.&lt;br /&gt;
== Banner Ads ==&lt;br /&gt;
:*Verify all banner ads are displaying the correct banners and behaving correctly (rotating timing, etc).&lt;br /&gt;
== Product Navigation ==&lt;br /&gt;
:*In Home page / categories: Click the various links on the children (image, product name, featured category, etc) and verify each link goes where you wish. Do this for at least 5 of the categories, at least 2 children in each category. If you have categories that behave differently, be sure to test each potential behavior.&lt;br /&gt;
:*In Product Lines: use the sorting and paging tools (if applicable), verify they work as you wish. Click the various links on the children (image, name) verify they go where you wish. Do this for at least 5 product lines, 2 children for each product line. If you have product lines that behave differently, be sure to test each potential behavior.&lt;br /&gt;
== Searching ==&lt;br /&gt;
:*Perform keyword searches. Verify results are coming up as expected. Do this for varying types of target objects (products, categories, information pages, etc). Do this for as many target items as it takes for you to feel confident that keyword searches are working to your satisfaction. If you have keyword search reports from previous sites, use these for your tests. &lt;br /&gt;
== Purchase Process ==&lt;br /&gt;
== Account Management ==&lt;br /&gt;
:*Create an account at least once for each scenario you have to create accounts (from links in cnav, from login pages, from the checkout process, etc). Verify the account is created and the process continues as you wish (if creating account during checkout process, do you land back in the checkout process after complete? etc.).&lt;br /&gt;
:*Edit your account login information&lt;br /&gt;
:*Look up and view previous orders&lt;br /&gt;
:*&lt;br /&gt;
== Custom Forms ==&lt;br /&gt;
== Web 2.0: Forums/Commenting ==&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Client_New_Site_Testing_Protocol&amp;diff=638</id>
		<title>Client New Site Testing Protocol</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Client_New_Site_Testing_Protocol&amp;diff=638"/>
				<updated>2009-03-16T13:53:31Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;While testing each of the following, verify each process works as you wish and the content produced during each stage in each process is acceptable.&lt;br /&gt;
&lt;br /&gt;
== Cnav links ==&lt;br /&gt;
;*Click every link in the top, left and bottom cnav menus. Verify they all go where you wish.&lt;br /&gt;
== Banner Ads ==&lt;br /&gt;
;*Verify all banner ads are displaying the correct banners and behaving correctly (rotating timing, etc).&lt;br /&gt;
== Product Navigation ==&lt;br /&gt;
;*In Home page / categories: Click the various links on the children (image, product name, featured category, etc) and verify each link goes where you wish. Do this for at least 5 of the categories, at least 2 children in each category. If you have categories that behave differently, be sure to test each potential behavior.&lt;br /&gt;
;*In Product Lines: use the sorting and paging tools (if applicable), verify they work as you wish. Click the various links on the children (image, name) verify they go where you wish. Do this for at least 5 product lines, 2 children for each product line. If you have product lines that behave differently, be sure to test each potential behavior.&lt;br /&gt;
== Searching ==&lt;br /&gt;
;*Perform keyword searches. Verify results are coming up as expected. Do this for varying types of target objects (products, categories, information pages, etc). Do this for as many target items as it takes for you to feel confident that keyword searches are working to your satisfaction. If you have keyword search reports from previous sites, use these for your tests. &lt;br /&gt;
== Purchase Process ==&lt;br /&gt;
== Account Management ==&lt;br /&gt;
;*Create an account at least once for each scenario you have to create accounts (from links in cnav, from login pages, from the checkout process, etc). Verify the account is created and the process continues as you wish (if creating account during checkout process, do you land back in the checkout process after complete? etc.).&lt;br /&gt;
;*Edit your account login information&lt;br /&gt;
;*Look up and view previous orders&lt;br /&gt;
;*&lt;br /&gt;
== Custom Forms ==&lt;br /&gt;
== Web 2.0: Forums/Commenting ==&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Attn:_Template_Integrators&amp;diff=637</id>
		<title>Attn: Template Integrators</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Attn:_Template_Integrators&amp;diff=637"/>
				<updated>2009-03-16T13:21:46Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: added custom forms testing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Before Site Development=&lt;br /&gt;
&lt;br /&gt;
==Testing Criteria==&lt;br /&gt;
Generate testing criteria with the client, these will be your measurements of success. Testing criteria will start with the new site checklist below - augment this list with custom functions and templates built for the client. Create at least one testing scenario for each custom function / template possible conditions. If the function / template is to effect other site areas (cart, checkout, orders, importing / exporting) be sure to include a process flow test to ensure those other functions are impacted correctly.&lt;br /&gt;
&lt;br /&gt;
==During Site Development==&lt;br /&gt;
===For ANY deviations made from the designs===&lt;br /&gt;
*Email the client, verify response&lt;br /&gt;
*Note in the code when / how the client was notified of the change.&lt;br /&gt;
&lt;br /&gt;
=After Site Completion=&lt;br /&gt;
&lt;br /&gt;
==New Site Checklist==&lt;br /&gt;
&lt;br /&gt;
===Address Collection Form Homogeneity===&lt;br /&gt;
''Address forms should all have same fields AND validation rules, also that all pages that display addresses include all these fields''&lt;br /&gt;
*Create account (if address is included)&lt;br /&gt;
*Address book&lt;br /&gt;
*Checkout Billing&lt;br /&gt;
*Checkout Shipping&lt;br /&gt;
*Order Confirmation&lt;br /&gt;
*Viewable / Printable Invoice&lt;br /&gt;
*Emailed Invoice&lt;br /&gt;
&lt;br /&gt;
===Page Accessibility Conditions are Enforced===&lt;br /&gt;
;cannot view while logged OUT:&lt;br /&gt;
:*Your Account&lt;br /&gt;
:*Edit Account&lt;br /&gt;
:*Address Book&lt;br /&gt;
:*Order History&lt;br /&gt;
;cannot view while logged IN:&lt;br /&gt;
:*Welcome (checkout registration)&lt;br /&gt;
:*Create Account&lt;br /&gt;
:*Lost Password&lt;br /&gt;
&lt;br /&gt;
===Settings Completed===&lt;br /&gt;
;All Email Content Entered:&lt;br /&gt;
:*Page Management &amp;gt; Send 2 Friend Email Subject and Body&lt;br /&gt;
:*Campaign &amp;gt; Registration Email, Subject and Body (OR a page is built in page management and the &amp;quot;Registration Email Page ID&amp;quot; is pointing to that page)&lt;br /&gt;
:*Ecommerce &amp;gt; Invoice Header, Footer, Subject and Emails (OR a page is built in page management and the &amp;quot;Checkout (Confirmation) Email Page ID&amp;quot; is pointing to that page)&lt;br /&gt;
:*Users &amp;gt; Lost password header, footer, email, subject&lt;br /&gt;
;All Forwards Are Completed (and Pages for which are created):&lt;br /&gt;
:*Page Management &amp;gt; Search Page Id; 404 (not found) Page Id&lt;br /&gt;
:*Campaigns &amp;gt; Opt In / Out Success / Failure Urls&lt;br /&gt;
:*Ecommerce &amp;gt; Cart and Checkout Process Page Ids (all a required except &amp;quot;Checkout (Confirmation) Email Page ID&amp;quot;)&lt;br /&gt;
:*Users &amp;gt; Fail Access Authorization URL; Login Successfully URL; Fail Attempted Login URL; Logout URL; Password Expired Link; Create Account Link; Edit Account Link&lt;br /&gt;
&lt;br /&gt;
===Template Links Tested===&lt;br /&gt;
''Click ALL links for a page for every template and verify they link to their target. If links appear / disappear or change based on different conditions (logged in, logged out, appear in a loop such as children, appear when cart has items or meets certain conditions, etc) be sure to test under each condition to ensure link operates correctly''&lt;br /&gt;
&lt;br /&gt;
===Process Flow Tested===&lt;br /&gt;
;Navigation Flow:&lt;br /&gt;
:*Start at a CNAV category &amp;gt; Category page &amp;gt; Product line page &amp;gt; product page&lt;br /&gt;
:*Enter Search Keywords &amp;gt; Search &amp;gt; Select a product&lt;br /&gt;
;Email Registration Flow:&lt;br /&gt;
:*Enter email into newsletter field &amp;gt; Newsletter registration page &amp;gt; registration complete page &amp;gt; check the email received&lt;br /&gt;
;Purchase Flow (after completing all orders, log into administration to check if order is displayed correct and complete):&lt;br /&gt;
:*WHILE LOGGED OUT: Add one product utilizing each product template built to the shopping cart &amp;gt; checkout registration (continue as guest) &amp;gt; billing address &amp;gt; shipping address &amp;gt; payment &amp;gt; confirmation / review &amp;gt; order complete &amp;gt; view the order &amp;gt; check the email received&lt;br /&gt;
:*WHILE LOGGED OUT: Add one product to the shopping cart &amp;gt; checkout registration (create account) &amp;gt; create account page &amp;gt; billing address &amp;gt; shipping address &amp;gt; payment &amp;gt; confirmation / review &amp;gt; order complete &amp;gt; view the order &amp;gt; check the email received&lt;br /&gt;
:*WHILE LOGGED OUT: Add one product to the shopping cart &amp;gt; checkout registration (log in) &amp;gt; billing address &amp;gt; shipping address &amp;gt; payment &amp;gt; confirmation / review &amp;gt; order complete &amp;gt; view the order &amp;gt; check the email received&lt;br /&gt;
:*WHILE LOGGED IN: Add one product to the shopping cart &amp;gt; (should skip checkout registration) &amp;gt; billing address &amp;gt; shipping address &amp;gt; payment &amp;gt; confirmation / review &amp;gt; order complete &amp;gt; view the order &amp;gt; check the email received&lt;br /&gt;
;Account Management: &lt;br /&gt;
:*WHILE LOGGED OUT: Your Account &amp;gt; Create Account &amp;gt; Your Account Page&lt;br /&gt;
:*WHILE LOGGED OUT: Your Account &amp;gt; Log in &amp;gt; Your Account Page&lt;br /&gt;
:*WHILE LOGGED IN: Your Account &amp;gt; Your Account Page&lt;br /&gt;
:*Add one address, edit one address and delete one address from the address book&lt;br /&gt;
:*View an order through order history&lt;br /&gt;
:*Change your name and password in the edit account form&lt;br /&gt;
===Custom Forms Tested===&lt;br /&gt;
:*Enter samples into ALL custom forms built for the web site.&lt;br /&gt;
:*Verify each form has the 'form type' set to a unique value that will be easy for the client to use when looking up forms in the 'form submissions' area of administration.&lt;br /&gt;
:*Look up the submissions in the 'form submissions' area of administration, verify all the fields entered passed correctly.&lt;br /&gt;
:*Verify all email recipients specified in the custom form received the emails with the fields correctly filled out.&lt;br /&gt;
:*For each form, if newsletter subscription is used, submit the form TWICE (once subscribing, once not) and verify the subscription took by looking them up in the 'subscriptions' area of administration. Follow the newsletter registration process to completion, verify the process works as intended and all content during the course of :*the process is as the client wishes.&lt;br /&gt;
===Custom Development Tested===&lt;br /&gt;
Test all CUSTOM processes / templates / functions created for client as per the contract. Use testing criteria for evaluation.&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Upgrade_Requests_/_Bugs&amp;diff=636</id>
		<title>Upgrade Requests / Bugs</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Upgrade_Requests_/_Bugs&amp;diff=636"/>
				<updated>2009-03-16T13:16:20Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: added export/import templates&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Additional field to shared option groups - so it can have a name that is not the same as it's displayed title.&lt;br /&gt;
*Increments for products (visitor must buy in allotted increment)&lt;br /&gt;
*Coupon Memory - have the system remember coupon codes entered that where not qualified for, automatically apply coupon as soon as cart qualifies.&lt;br /&gt;
*Checkbox to discounts that allow an item to ignore the ‘only 1 discount per cart’ command.&lt;br /&gt;
*Text field in discounts for non-qualifying codes that will go into queue, when application is attempted.&lt;br /&gt;
*Banner Zones controlled by url data passed (tell a zone to display a specific banner), command expires after order is complete&lt;br /&gt;
*Banner repository queue to hold attempted, but unqualified, discount codes, attempt to re-apply with each cart modification.&lt;br /&gt;
*Tiered discounts for BOTH % and $ off.&lt;br /&gt;
*Checkout modifications to support non-pay accounts, po numbers.&lt;br /&gt;
*Cart check function, checks all items, shipping, discounts in cart to make sure they all still qualify, if any do not, remove and display message to visitor.&lt;br /&gt;
*Order management to allow product option changes.&lt;br /&gt;
*Auto deletion of expired data including: incomplete carts, searches, send2friend, banner tracking, campaign tracking, page views, user sessions.&lt;br /&gt;
*Export/Import templates (to duplicate BETWEEN sites)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Completed:&lt;br /&gt;
*2/5/2009: Free item alterations, store items as $0, pass controls that allow design changes for these items when presented in cart, etc.&lt;br /&gt;
*2/9/2009: When a visitor enters an email/name to register for the newsletter, and the billing/shipping addresses are blank, attach the email/name to the billing/shipping addresses in the order.&lt;br /&gt;
*2/13/2008: Reliable exit pop up&lt;br /&gt;
*2/16/2008: TEM channelId control for the order process (abandoned cart) manageable through admin console.&lt;br /&gt;
*2/18/2008: TEM custom image generation field set up&lt;br /&gt;
&lt;br /&gt;
;In Progress:&lt;br /&gt;
*Catalog quick order&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Pages_Templates:Forum&amp;diff=635</id>
		<title>Pages Templates:Forum</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Pages_Templates:Forum&amp;diff=635"/>
				<updated>2009-03-13T00:26:01Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Forum pages can contain forum post listings and / or a post form. The listing and the form can be separate templates or combined into the same template. The post form can vary in many ways depending on the data you want to collect, security controls and restrictions set up in [[settings]] for forums.&lt;br /&gt;
&lt;br /&gt;
Below are examples of various implementations&lt;br /&gt;
&lt;br /&gt;
=Example: Basic post listing and submission form=&lt;br /&gt;
Display's all posts and includes a submission form at the bottom. Submissions will be redirected back to the page containing this form, with a message as to the success / failure of the post.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// only process forum requests and output if forums is available and selected for this page&lt;br /&gt;
// accessing global settings variable forums_available (sets forum availability for entire site)&lt;br /&gt;
// and page core variable $isForum (sets forum availability for specific page)&lt;br /&gt;
&lt;br /&gt;
if($GLOBALS['iProducts']['forums_available'] AND $isForum){&lt;br /&gt;
   // get postings for current page&lt;br /&gt;
   // using core variable $page to get forum data for the current page we are in&lt;br /&gt;
   $forumArray = eV::pageForumPostsGet(NULL,$pageId,NULL,&amp;quot;post_createDate,post_handle,post_copy,post_title&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   // shortcut to the post array&lt;br /&gt;
   $postsArr = $forumArray['posts'];&lt;br /&gt;
 &lt;br /&gt;
   if(count($postsArr) &amp;gt; 0){&lt;br /&gt;
      // loop thru posts&lt;br /&gt;
      foreach($postsArr as $post){&lt;br /&gt;
         echo &amp;quot;&amp;lt;hr&amp;gt;&amp;quot; . $post['post_title'] . &amp;quot; by &amp;quot; . $post['post_handle'] . &amp;quot; on &amp;quot; . $post['post_createDate'];&lt;br /&gt;
         echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot; . $post['post_copy'];&lt;br /&gt;
      };&lt;br /&gt;
   } else {&lt;br /&gt;
      // no posts to this forum, lets output this to visitors&lt;br /&gt;
      echo &amp;quot;no posts to this forum&amp;quot;;&lt;br /&gt;
   };&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
	//////// post submission form ////////////////&lt;br /&gt;
   // arbitrary variable, passed in &amp;quot;redirect&amp;quot; field to signify a post has just been made&lt;br /&gt;
   if(isset($attributes['posted'])){&lt;br /&gt;
      echo &amp;quot;Your posting has been received&amp;quot;;&lt;br /&gt;
   } else {&lt;br /&gt;
	// anchor forumPostForm to so that kickbacks from submission function jump to the form&lt;br /&gt;
	echo &amp;quot;&amp;lt;a name=\&amp;quot;forumPostForm\&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;form action=\&amp;quot;index.php\&amp;quot; method=\&amp;quot;post\&amp;quot; name=\&amp;quot;forumPostForm\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
	// field for visitors to enter handle: must be 50 or less chars&lt;br /&gt;
	// only show this field if user NOT logged in (if logged in, handle will be pulled from user account)&lt;br /&gt;
	if(eV::authorizeIsLoggedIn()){&lt;br /&gt;
		echo &amp;quot;&amp;lt;br&amp;gt;Your entry will be posted under &amp;lt;i&amp;gt;&amp;quot; . $_SESSION['user']['handle'] . &amp;quot;&amp;lt;/i&amp;gt;. This not you? &amp;lt;a href=\&amp;quot;index.php?fa=USER.logout\&amp;quot;&amp;gt;Click here to log out&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &amp;quot;&amp;lt;br&amp;gt;Enter a Handle: &amp;lt;input type=\&amp;quot;text\&amp;quot; name=\&amp;quot;handle\&amp;quot; size=25 maxlength=50&amp;gt;&lt;br /&gt;
		&amp;lt;br&amp;gt;Enter your Email Address: &amp;lt;input type=\&amp;quot;text\&amp;quot; name=\&amp;quot;emailAddress\&amp;quot; size=25 maxlength=50&amp;gt;&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	// max length for post title is 100 chars&lt;br /&gt;
	echo &amp;quot;&amp;lt;br&amp;gt;Enter a Title for you post: &amp;lt;input type=\&amp;quot;text\&amp;quot; name=\&amp;quot;title\&amp;quot; size=50 maxlength=100&amp;gt;&amp;quot;;&lt;br /&gt;
	// post has not size limit&lt;br /&gt;
	echo &amp;quot;&amp;lt;br&amp;gt;Enter you post: &amp;lt;textarea name=\&amp;quot;copy\&amp;quot; cols=50 rows=5&amp;gt;&amp;lt;/textarea&amp;gt;&amp;quot;;&lt;br /&gt;
	// pass the current pageId - required&lt;br /&gt;
	echo &amp;quot;&amp;lt;input type=\&amp;quot;hidden\&amp;quot; name=\&amp;quot;pageId\&amp;quot; value=\&amp;quot;$pageId\&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;input type=\&amp;quot;hidden\&amp;quot; name=\&amp;quot;fa\&amp;quot; value=\&amp;quot;FORUM.post\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
	echo &amp;quot;&amp;lt;br&amp;gt;&amp;lt;input type=\&amp;quot;submit\&amp;quot; value=\&amp;quot;Post!\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
	// validate - this tells the system what fields must have value&lt;br /&gt;
	echo &amp;quot;&amp;lt;input type=\&amp;quot;hidden\&amp;quot; name=\&amp;quot;validate\&amp;quot; value=\&amp;quot;title,copy,handle\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
	// redirect - this is where to send the visitor after the post has been accepted&lt;br /&gt;
	echo &amp;quot;&amp;lt;input type=\&amp;quot;hidden\&amp;quot; name=\&amp;quot;redirect\&amp;quot; value=\&amp;quot;index.php?pageId=$pageId&amp;amp;posted=1#forumPostForm\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
	echo &amp;quot;&amp;lt;/form&amp;gt;&amp;quot;;&lt;br /&gt;
   // end if $posted&lt;br /&gt;
   };&lt;br /&gt;
// end if foroums available and this is a forum&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Pages_Templates:Forum&amp;diff=634</id>
		<title>Pages Templates:Forum</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Pages_Templates:Forum&amp;diff=634"/>
				<updated>2009-03-12T22:51:44Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Forum pages can contain forum post listings and / or a post form. The listing and the form can be separate templates or combined into the same template. The post form can vary in many ways depending on the data you want to collect, security controls and restrictions set up in [[settings]] for forums.&lt;br /&gt;
&lt;br /&gt;
Below are examples of various implementations&lt;br /&gt;
&lt;br /&gt;
=Example: Basic post listing and submission form=&lt;br /&gt;
Display's all posts and includes a submission form at the bottom. Submissions will be redirected back to the page containing this form, with a message as to the success / failure of the post.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// only process forum requests and output if forums is available and selected for this page&lt;br /&gt;
// accessing global settings variable forums_available (sets forum availability for entire site)&lt;br /&gt;
// and page core variable $isForum (sets forum availability for specific page)&lt;br /&gt;
&lt;br /&gt;
if($GLOBALS['iProducts']['forums_available'] AND $isForum){&lt;br /&gt;
   // get postings for current page&lt;br /&gt;
   // using core variable $page to get forum data for the current page we are in&lt;br /&gt;
   $forumArray = eV::pageForumPostsGet(NULL,$pageId,NULL,&amp;quot;post_createDate,post_handle,post_copy,post_title&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   // shortcut to the post array&lt;br /&gt;
   $postsArr = $forumArray['posts'];&lt;br /&gt;
 &lt;br /&gt;
   if(count($postsArr) &amp;gt; 0){&lt;br /&gt;
      // loop thru posts&lt;br /&gt;
      foreach($postsArr as $post){&lt;br /&gt;
         echo &amp;quot;&amp;lt;hr&amp;gt;&amp;quot; . $post['post_title'] . &amp;quot; by &amp;quot; . $post['post_handle'] . &amp;quot; on &amp;quot; . $post['post_createDate'];&lt;br /&gt;
         echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot; . $post['post_copy'];&lt;br /&gt;
      };&lt;br /&gt;
   } else {&lt;br /&gt;
      // no posts to this forum, lets output this to visitors&lt;br /&gt;
      echo &amp;quot;no posts to this forum&amp;quot;;&lt;br /&gt;
   };&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
	//////// post submission form ////////////////&lt;br /&gt;
	// anchor forumPostForm to so that kickbacks from submission function jump to the form&lt;br /&gt;
	echo &amp;quot;&amp;lt;a name=\&amp;quot;forumPostForm\&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;form action=\&amp;quot;index.php\&amp;quot; method=\&amp;quot;post\&amp;quot; name=\&amp;quot;forumPostForm\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
	// field for visitors to enter handle: must be 50 or less chars&lt;br /&gt;
	// only show this field if user NOT logged in (if logged in, handle will be pulled from user account)&lt;br /&gt;
	if(eV::authorizeIsLoggedIn()){&lt;br /&gt;
		echo &amp;quot;&amp;lt;br&amp;gt;Your entry will be posted under &amp;lt;i&amp;gt;&amp;quot; . $_SESSION['user']['handle'] . &amp;quot;&amp;lt;/i&amp;gt;. This not you? &amp;lt;a href=\&amp;quot;index.php?fa=USER.logout\&amp;quot;&amp;gt;Click here to log out&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &amp;quot;&amp;lt;br&amp;gt;Enter a Handle: &amp;lt;input type=\&amp;quot;text\&amp;quot; name=\&amp;quot;handle\&amp;quot; size=25 maxlength=50&amp;gt;&lt;br /&gt;
		&amp;lt;br&amp;gt;Enter your Email Address: &amp;lt;input type=\&amp;quot;text\&amp;quot; name=\&amp;quot;emailAddress\&amp;quot; size=25 maxlength=50&amp;gt;&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	// max length for post title is 100 chars&lt;br /&gt;
	echo &amp;quot;&amp;lt;br&amp;gt;Enter a Title for you post: &amp;lt;input type=\&amp;quot;text\&amp;quot; name=\&amp;quot;title\&amp;quot; size=50 maxlength=100&amp;gt;&amp;quot;;&lt;br /&gt;
	// post has not size limit&lt;br /&gt;
	echo &amp;quot;&amp;lt;br&amp;gt;Enter you post: &amp;lt;textarea name=\&amp;quot;copy\&amp;quot; cols=50 rows=5&amp;gt;&amp;lt;/textarea&amp;gt;&amp;quot;;&lt;br /&gt;
	// pass the current pageId - required&lt;br /&gt;
	echo &amp;quot;&amp;lt;input type=\&amp;quot;hidden\&amp;quot; name=\&amp;quot;pageId\&amp;quot; value=\&amp;quot;$pageId\&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;input type=\&amp;quot;hidden\&amp;quot; name=\&amp;quot;fa\&amp;quot; value=\&amp;quot;FORUM.post\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
	echo &amp;quot;&amp;lt;br&amp;gt;&amp;lt;input type=\&amp;quot;submit\&amp;quot; value=\&amp;quot;Post!\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
	// validate - this tells the system what fields must have value&lt;br /&gt;
	echo &amp;quot;&amp;lt;input type=\&amp;quot;hidden\&amp;quot; name=\&amp;quot;validate\&amp;quot; value=\&amp;quot;title,copy,handle\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
	// redirect - this is where to send the visitor after the post has been accepted&lt;br /&gt;
	echo &amp;quot;&amp;lt;input type=\&amp;quot;hidden\&amp;quot; name=\&amp;quot;redirect\&amp;quot; value=\&amp;quot;index.php?pageId=$pageId&amp;amp;message=You post has been received. Once it is approved you will see it live on our site.\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
	echo &amp;quot;&amp;lt;/form&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// end if foroums available and this is a forum&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Pages_Templates:Forum&amp;diff=633</id>
		<title>Pages Templates:Forum</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Pages_Templates:Forum&amp;diff=633"/>
				<updated>2009-03-12T22:51:00Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: New page: Forum pages can contain forum post listings and / or a post form. The listing and the form can be separate templates or combined into the same template. The post form can vary in many ways...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Forum pages can contain forum post listings and / or a post form. The listing and the form can be separate templates or combined into the same template. The post form can vary in many ways depending on the data you want to collect, security controls and restrictions set up in [[settings]] for forums.&lt;br /&gt;
&lt;br /&gt;
Below are examples of various implementations&lt;br /&gt;
&lt;br /&gt;
=Basic forums listing and form page=&lt;br /&gt;
Display's all posts and includes a submission form at the bottom. Submissions will be redirected back to the page containing this form, with a message as to the success / failure of the post.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// only process forum requests and output if forums is available and selected for this page&lt;br /&gt;
// accessing global settings variable forums_available (sets forum availability for entire site)&lt;br /&gt;
// and page core variable $isForum (sets forum availability for specific page)&lt;br /&gt;
&lt;br /&gt;
if($GLOBALS['iProducts']['forums_available'] AND $isForum){&lt;br /&gt;
   // get postings for current page&lt;br /&gt;
   // using core variable $page to get forum data for the current page we are in&lt;br /&gt;
   $forumArray = eV::pageForumPostsGet(NULL,$pageId,NULL,&amp;quot;post_createDate,post_handle,post_copy,post_title&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   // shortcut to the post array&lt;br /&gt;
   $postsArr = $forumArray['posts'];&lt;br /&gt;
 &lt;br /&gt;
   if(count($postsArr) &amp;gt; 0){&lt;br /&gt;
      // loop thru posts&lt;br /&gt;
      foreach($postsArr as $post){&lt;br /&gt;
         echo &amp;quot;&amp;lt;hr&amp;gt;&amp;quot; . $post['post_title'] . &amp;quot; by &amp;quot; . $post['post_handle'] . &amp;quot; on &amp;quot; . $post['post_createDate'];&lt;br /&gt;
         echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot; . $post['post_copy'];&lt;br /&gt;
      };&lt;br /&gt;
   } else {&lt;br /&gt;
      // no posts to this forum, lets output this to visitors&lt;br /&gt;
      echo &amp;quot;no posts to this forum&amp;quot;;&lt;br /&gt;
   };&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
	//////// post submission form ////////////////&lt;br /&gt;
	// anchor forumPostForm to so that kickbacks from submission function jump to the form&lt;br /&gt;
	echo &amp;quot;&amp;lt;a name=\&amp;quot;forumPostForm\&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;form action=\&amp;quot;index.php\&amp;quot; method=\&amp;quot;post\&amp;quot; name=\&amp;quot;forumPostForm\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
	// field for visitors to enter handle: must be 50 or less chars&lt;br /&gt;
	// only show this field if user NOT logged in (if logged in, handle will be pulled from user account)&lt;br /&gt;
	if(eV::authorizeIsLoggedIn()){&lt;br /&gt;
		echo &amp;quot;&amp;lt;br&amp;gt;Your entry will be posted under &amp;lt;i&amp;gt;&amp;quot; . $_SESSION['user']['handle'] . &amp;quot;&amp;lt;/i&amp;gt;. This not you? &amp;lt;a href=\&amp;quot;index.php?fa=USER.logout\&amp;quot;&amp;gt;Click here to log out&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;
	} else {&lt;br /&gt;
		echo &amp;quot;&amp;lt;br&amp;gt;Enter a Handle: &amp;lt;input type=\&amp;quot;text\&amp;quot; name=\&amp;quot;handle\&amp;quot; size=25 maxlength=50&amp;gt;&lt;br /&gt;
		&amp;lt;br&amp;gt;Enter your Email Address: &amp;lt;input type=\&amp;quot;text\&amp;quot; name=\&amp;quot;emailAddress\&amp;quot; size=25 maxlength=50&amp;gt;&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	// max length for post title is 100 chars&lt;br /&gt;
	echo &amp;quot;&amp;lt;br&amp;gt;Enter a Title for you post: &amp;lt;input type=\&amp;quot;text\&amp;quot; name=\&amp;quot;title\&amp;quot; size=50 maxlength=100&amp;gt;&amp;quot;;&lt;br /&gt;
	// post has not size limit&lt;br /&gt;
	echo &amp;quot;&amp;lt;br&amp;gt;Enter you post: &amp;lt;textarea name=\&amp;quot;copy\&amp;quot; cols=50 rows=5&amp;gt;&amp;lt;/textarea&amp;gt;&amp;quot;;&lt;br /&gt;
	// pass the current pageId - required&lt;br /&gt;
	echo &amp;quot;&amp;lt;input type=\&amp;quot;hidden\&amp;quot; name=\&amp;quot;pageId\&amp;quot; value=\&amp;quot;$pageId\&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;input type=\&amp;quot;hidden\&amp;quot; name=\&amp;quot;fa\&amp;quot; value=\&amp;quot;FORUM.post\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
	echo &amp;quot;&amp;lt;br&amp;gt;&amp;lt;input type=\&amp;quot;submit\&amp;quot; value=\&amp;quot;Post!\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
	// validate - this tells the system what fields must have value&lt;br /&gt;
	echo &amp;quot;&amp;lt;input type=\&amp;quot;hidden\&amp;quot; name=\&amp;quot;validate\&amp;quot; value=\&amp;quot;title,copy,handle\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
	// redirect - this is where to send the visitor after the post has been accepted&lt;br /&gt;
	echo &amp;quot;&amp;lt;input type=\&amp;quot;hidden\&amp;quot; name=\&amp;quot;redirect\&amp;quot; value=\&amp;quot;index.php?pageId=$pageId&amp;amp;message=You post has been received. Once it is approved you will see it live on our site.\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
	echo &amp;quot;&amp;lt;/form&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// end if foroums available and this is a forum&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	<entry>
		<id>http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Client_New_Site_Testing_Protocol&amp;diff=632</id>
		<title>Client New Site Testing Protocol</title>
		<link rel="alternate" type="text/html" href="http://wiki.whirlwind-ecommerce.com/mediawiki/index.php?title=Client_New_Site_Testing_Protocol&amp;diff=632"/>
				<updated>2009-03-11T22:33:59Z</updated>
		
		<summary type="html">&lt;p&gt;71.163.185.8: New page: coming soon&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;coming soon&lt;/div&gt;</summary>
		<author><name>71.163.185.8</name></author>	</entry>

	</feed>