MODx Web Development Building dynamic web sites with the PHP application framework and CMS Antano Solar John BIRMINGHAM - MUMBAI This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 MODx Web Development Copyright © 2009 Packt Publishing All rights reserved No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews Every effort has been made in the preparation of this book to ensure the accuracy of the information presented However, the information contained in this book is sold without warranty, either express or implied Neither the author, Packt Publishing, nor its dealers or distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book Packt Publishing has endeavored to provide trademark information about all the companies and products mentioned in this book by the appropriate use of capitals However, Packt Publishing cannot guarantee the accuracy of this information First published: March 2009 Production Reference: 1230309 Published by Packt Publishing Ltd 32 Lincoln Road Olton Birmingham, B27 6PA, UK ISBN 978-1-847194-90-9 www.packtpub.com Cover Image by Nilesh Mohite (nilpreet2000@yahoo.co.in) This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 Credits Author Antano Solar John Reviewers Shane Sponagle Editorial Team Leader Abhijeet Deobhakta Project Coordinator Leena Purkait Susan Ottwell Indexer Acquisition Editor Rekha Nair Viraj Joshi Proofreader Development Editors Chris Smith Sarah Cullington Siddharth Mangarole Production Coordinator Aparna Bhagat Technical Editor Mithun Sehgal Cover Work Aparna Bhagat This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 About the Author Antano Solar is a techie to the core—a tech evangelist who is passionate about using technology to revolutionize the learning experience! Antano has contributed to the open source community in terms of documentation, code, and support, with a variety of platforms based on languages such as PHP, Perl, Lisp, Python, and Ruby He loves to share his tech excitement with fellow techies and non-techies, and does so through publishing papers, books, and delivering seminars at colleges, universities such as the IIT, and corporate tech events He has published a paper on enhancing wireless networks in an IEEE Journal His paper on an engine helping machines understand objectives by meta-modelling, using Neuro Linguistic Programming principles and Deep Structure, is considered a landmark An avid hacker, Antano has won two Yahoo hack day awards He recently won the award for developing a Hybrid Search Engine from scratch in 24 hours that uses Machine Intelligence and Social Intelligence to identify, search, and present the information in the required format Professionally, Antano, until recently, has been a Consultant and a Trainer providing IT solutions and sessions on VoIP, Networks and Software Plaforms, and Languages He is currently the Chief Technology Officer at NuVeda Learning In his current role, he is responsible for the development and deployment of Learning Management Systems that are being used by large MNCs globally He also plays the role of a Chief Architect in the research and development of technologies related to the understanding and measuring of Learning He is excited by the challenges of using complex technologies such as Artificial Intelligence and Natural Language Processing Occasionally, when Antano needs to take a "Tech" break, he likes to train and tell stories! This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 To those who prepared me: My Mom and Dad—for all the hope, faith, love, and wise counsel And to those who made it happen: The Packt team—especially Leena and Sarah—the reviewers, and the MODx community for an awesome open source development platform This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 About the Reviewers Shane Sponagle has over 10 years of experience in developing web-based applications He is currently a senior partner at S/2M2 Design, and has worked on projects ranging from simple web sites to multi-level data-driven applications Shane is an active member of the MODx community where he enjoys learning about all the interesting ways people are using MODx He looks forward to collaborating on future publications Susan is a self-taught grandmother of eight She first became interested in computers, both hardware and programming, more than 40 years ago, but got her first computer only a year before the arrival of her first grandchild She spent a number of years working both independently and as a shop technician building and repairing PCs, from Connecticut to Miami to Israel, while learning various programming and database languages from x86 assembly to dBase to VB to perl in her spare time For a time, she taught C++ for an online gaming service's "online university" Her PHP studies began over eight years ago, and have been conducted solely with the assets garnered from the Internet She discovered MODx when it was still a set of modifications to Etomite, found that it suited her needs, and when MODx forked into its own CMS/CMF system, decided to stick with it, learn it thoroughly, and contribute what she could This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 Susan lives quietly, except for a very loud canary named Winston, in a Negev desert community in Israel, the home of PHP She divides her time between hiking and photography in the desert hills and canyons, quilt making and knitting, and working with MODx on her iBook g4 I owe everything I've accomplished in the last 15 years to my father and my first husband for telling me I'd never be able to it, computers weren't of any use, and it's not for girls anyway They triggered my stubborn streak, and made me determined to this in spite of them! Then I am indebted to the giants of teaching: Jeff Duntemann, Tom Swan, and especially Gary Cornell, for all of their wonderful books Certain web sites have become indispensable, among them Zend, O'Reilly's OnLamp, and A List Apart And finally, perhaps most importantly, I owe Ryan Thrash, Raymond Irving, and Jason Coward for giving me MODx to play with in the first place, and now the rest of the MODx team, whom I only know by their MODx Forum handles They're way above my head, but they give me something to work towards This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 Table of Contents Preface Chapter 1: What is MODx? Content management system An application framework Reusable program components Abstracting logic from presentation Web development methodologies Old school—conventional three tiers Advantages of the conventional three tiers Disadvantages of the conventional three tiers Templating Advantages of templating Disadvantages of templating Application frameworks Advantages of application frameworks Disadvantages of application frameworks Content management systems Advantages of content management systems Disadvantages of content management systems Why MODx? Why a CMS? Why an application framework? So, why Modx? Overview of the book Summary Chapter 2: Getting Started Setting up the development environment Prerequisites 7 8 9 10 10 11 11 12 12 12 13 13 14 14 15 15 15 15 16 17 19 19 19 Linux Windows MAC 20 20 21 Verification 22 This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 Chapter 13 Now you will notice a new link next to the SMF Connector at the top, after refreshing the page Module's Manager interface The execution of the module has provided us with a page in the Manager interface where we can use its functionalities The Autolink module allows us to define the keywords that will be used by the plug-in The plug-in replaces the keywords with an appropriate link Let us, for now, just add one keyword—MODx—with the value google This should allow the plug-in to create a link that searches for "MODx" in Google Click on Add Keywords in Modules|Manage Modules|Autolink Fill in the following details: Field Name Field Value Keyword MODx Value google Title Google MODx [ 245 ] This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 Plug-ins and Modules Click on Add Keywords at the bottom of the form Dependent plug-ins Now that we have installed the module that allows the creation of keywords from the Manager interface, let us create the accompanying plug-in that will convert the keywords to links in a document Click on New plugin from Resources|Manage resources|Plugins Fill in the following data: Field Name Field Value Plugin name Autolink Plugin code Code from autolink_plugin_v2.txt Configuration | Category Learning MODx System Events OnWebPagePrerender: checked Click on Save [ 246 ] This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 Chapter 13 Let us test the combined functionality of the module and the plug-in by creating a document with the following contents: Field Name Field Value Title Testing Modules Uses template Learning MODx default template Document content MODx Now preview the above document and it will look like the following: If you notice, the keyword has been changed to a link that is a Google search for "MODx" This is shown in the status bar of the browser at the bottom, and the title has been used for the tooltip So, the plug-in has got these values from what we inserted into the Modules page [ 247 ] This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 Plug-ins and Modules Remember that this section teaches you how to use modules and not Autolink You must also remember that there is no need to have a relation between the module name and the plug-in name The plug-in merely reads the values from the database using the regular MODx db API that we discussed earlier Ex: $rs = $MODx->db->select('*', $autolinkTable); Unlike snippets and plug-ins, we will not learn how to create modules, as to make efficient modules, you must first understand certain design patterns Learning to use custom modules Since the installation of modules and plug-ins that come as a package involves multiple steps, it can be a little confusing in the beginning It will be very easy to understand if you keep in mind a few points Modules are used for providing some functionality in the Manager interface, and for sharing the results of such interaction, like data collected, with plug-ins and snippets Summary In this chapter, we have learned about plug-ins and modules • The differences between plug-ins and modules: ° Snippets are executed when they are explicitly called either in a document, template, or from another snippet ° Plug-ins are executed on the trigger of events with which they are associated This allows the plug-in code to be executed just before the document rendering, user registration, and so on, as needed ° Modules are executed only from within the Manager They are used for creating the tables that dependent plug-ins or snippets may want to use Modules can also provide the values for plug-in and snippet parameters • You have also learned how to use plug-ins and how to use customize plug-ins • You have also learned how to create new plug-ins, and we analyzed the code of the prettify code plug-in that we used • You have also learned how to use modules by using the Autolink module and the plug-in package with an example document [ 248 ] This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 Index Symbols $MODx->setPlaceholder 201 &canpost, snippet parameter 141 &firstClass parameter 123 &hereClass parameter 123 &hereTpl parameter 134 &innerClass parameter 123 &lastClass parameter 123 &levelClass parameter 123 &level parameter 118 &outerClass parameter 123 &outertpl parameter 134 &parentClass parameter 123 &rowClass parameter 123 &rowTpl parameter 134 &selfClass parameter 123 &tplForm, snippet parameter 141 &webLinkClass parameter 123 @CHUNK 62 @DOCUMENT 62 @EVAL 62 @FILE 62 @INHERIT 62 @SELECT 62 A ActiveParentRowTpl parameter 134 application framework about 8, 12 advantages 12 disadvantages 13 logic separation, from presentations reusability feature authentication about 79 WayFinder 116 authorization about 79, 96 WayFinder 116 B basic elements, MODx containers 37 documents 37 basics, MODx Front Page, creating 40-42 HTML editor, using 39 QuickEdit module 43 site, configuring 33, 34 site name, changing 36 TinyMCE editor 40 blog site, template back-tick character, using 64 blog entry, posting 65-67 creating 63 document, creating 63, 65 bots 230 Bzip2 227 C Canonicalization 218 captcha, security 230 CMS, activities content, defining content, managing rules, setting containers, MODx 37 content XML formats 106 This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 content aggregation about 99 in MODx, Ditto used 99 content management system See CMS, activities content management systems, web development methodologies advantages 14 disadvantages 14 using 13 Web 2.0, creating 13 conventional three tier, web development methodologies advantages 10 client side layer database layer disadvantages 10 server side layer Three Tier Architecture custom form using, for blog page 69 custom plug-ins, plug-ins about 240, 241 Codeprettify plug-in, downloading 237, 238 using 237-240 DBAPI, MODx API $MODx->db->getRecordCount 208 $MODx->db->makeArray 208 $MODx->db->select 207, 208 about 207 deployment about 222 configuration setting, changing 228 database, configuration file 228 database, exporting 226 database, importing 226 database, migrating 225 filesystem 222 Ditto about 99 aggregation, theming 104, 105 and XML formats 109 Ditto call, introducing 101 document, modifying 101 documents, parameter 100 extenders 114 filtering rule 112 flexibility, with parameters 100 getting started 99 Learning MODx contents, replacing 102 parents parameter 100 placeholders 104 RSS views for each category, creating 110, 112 tagging 105 theming, using chunks 103, 104 theming, using placeholders 103, 104 Ditto, placeholders 104 [+author+] 104 [+id+] 104 [+summary+] 104 [+title+] 104 DittoCal, snippets adding 152 downloading 152 extracting 152 independent files snippet 156 installing 151, 152 required files, copying 153, 154 searching 157 using 151, 154-156 D Database abstraction 13 data types, template variables about 61 Check Box 61 date 61 DropDown List Menu 61 Email 61 File 61 Image 61 Listbox (Multi-Select) 61 Listbox (Single-Select) 61 number 61 Radio Options 61 RichText 61 Text 61 Textarea 61 Textarea (Mini) 61 URL 61 [ 250 ] This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 XAMPP, for Linux 20 XAMPP, for Windows 20, 21 Ditto snippet 195-198 Doc Manager, theming change template tab 130 Document Permissions tab 130 Other Properties tab 130 pages, removing 132 Sort Menu Items tab 130 Template Variables tab 130 using 130, 131 documentation community-driven documentation 29 official documentation 29 document group access, restricting 88, 89 document group access, restricting 88 user access, restricting 89 user group, linking to document group 88 documents, editing Add another option 44 close option 44 Continue editing option 44 description property 45 document’s alias property 45 document parent property 45 Edit option 44 link attributes property 45 Long title property 45 menu index property 45 menu title property 45 meta keywords tab 46 page settings, checkboxes 46 page settings,content disposition field 46 page settings,empty cache field 46 page settings, publish date field 46 page settings, un-publish date field 46 preview tab 47 properties 45 summary (introtext) property 45 Title property 45 uses template property 45 downloading DittoCal, snippets 152 LAMPP 20 MAMP 22 PHx 160 SMF 175 SMF module 180 E eForm snippet &formid parameter 188 &gotoid parameter 188 &subject parameter 188 &to parameter 188 &tp parameter 188 about 185, 188 existing plug-in, plug-ins other plug-ins, exploring 237 system events 237 F file manager tab, manager configuration new file permissions 231 new folder permissions 231 uploadable file types 231 file permission, security assets/cache folder 229 assets/files folder 229 assets/media folder 229 chmod 0644 * -R, using 229 read-only permissions, setting 229 filesystem, deployment about 222 FTP 223 FTP, in Linux 224 ftp command 224 get command 224 put command 224 SFTP 224 WebDAV 225 WebDAV, using in Windows 225 filtering rule, XML formats criterion 112 field 112 mode 112 multiple filtering clauses 113 operations 113 forms See HTML forms fortunes, snippets chunk, creating 213, 214 chunk, using 213 [ 251 ] This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 MAMP 22 MODx 23-26 PHx 160 SMF 175-179 SMF module 180, 181 WebLoginPE 190 XAMPP, for Windows 21 interactive support forums 30 guidelines 30 Internet Relay Chat (IRC) 31 files, using 214 parameters, accepting 213 placeholders, creating 213 records, inserting 209 snippet, testing 211, 212 snippet code 210 table, creating 209 forums about 175 implementing 175 SMF 175 SMF modules, using 175 use 175 friends’ document group creating 87 Front Page creating 40-42 fusedav application 225 J jot placeholder, placeholders [+jot.html.comments+] 149 [+jot.html.form+] 149 [+jot.html.moderate+] 149 [+jot.html.navigation+] 149 about 148, 150 jot snippet, snippets using, with minimal confi guration 138-140 JSON, XML format 108 G get command 224 H K HTML editor using 39 HTML forms date data type 189 email data type 189 emailing 187-189 file data type 189 float data type 189 html data type 189 integer data type 189 string data type 189 kasablanca, GUI-based client 224 keyword element, SEO about 218 adding 219 deleting 219 editing 219 kftpgrabber, GUI-based client 224 L LAMPP downloading 20 installing 20 levelClass parameter 129 login snippet adding 82, 83 friends user group, creating 86 homepage, previewing 84-86 Learning MODx default template 82, 83 style.css, changing 83 template, changing 84 I image gallery MaxiGallery snippet 181-185 MaxiGallery snippet, downloading 181 working 181-185 installing DittoCal, snippets 151, 152 LAMPP 20 Linux, for Windows 20 [ 252 ] This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 authentication 79 authorization 79 basic elements 37 basics 33 configuring, for using default template 56 content aggregation 99 content management system, need for 15 CSS code 53 database, creating 24, 25 database, migrating 225 documentation 29 features 7, 8, 15 forums 30, 175 HTML code 51 HTML forms, creating 185 image gallery 181 installation, verifying 22 installation status 26, 28 installing 23, 25, 26 Internet Relay Chat (IRC) 31 lists, creating 115 manager interface 219 menu details 115 modules 243 MODx API 206 need for 15 prerequisites 19 prerequisites, MySQL used 19 prerequisites, PHP used 19 prerequisites, XAMPP used 19 rich text editor 73 security 229 SMF modules 175 snippets 137 template 49, 51 user types 79 version 0.9.6.1p2 used 23 widgets 62 MODx, user types manager users 79 web users 79 MODx API $MODx->getDocument(1) 207 $MODx->getTemplateVars 207 $MODx object 206 DBAPI 207 M MAMP downloading 22 installing 22 manager configuration, security file manager tab 231 User tab 231 Manager interface, customizing left pane 38 left pane, collapse tree icon 39 left pane, expand tree icon 39 left pane, hide tree icon 39 left pane, new document icon 39 left pane, new weblink icon 39 left pane, purge icon 39 left pane, refresh tree icon 39 left pane, sort the tree icon 39 menu details in document properties 115 menu index 116 menu title 116 meta tag, SEO about 218 adding 219 content attribute 218 deleting 219 editing 219 name attribute 218 moderating blogs Blog Moderators role, checking 92 Blog Moderators role, creating 90 delegating 90 Manager user, creating 91 modules about 243 Autolink 244 creating 244 custom modules, using 248 dependant plug-in, creating 246-248 executing 245 Manager interface 245, 246 uses 243 using 244 MODx about application framework, need for 15 [ 253 ] This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 [+jot.html.moderate+], jot placeholder 149 [+jot.html.navigation+], jot placeholder 149 about 148, 150 Place Holders extended See PHx plug-ins $MODx->regClientCSS 242 creating 241, 242, 243 custom plug-ins, using 237 event-triggering snippet 243 regClientStartupScript 242 N NewsPublisher snippet HTML, custom blog form 69 new template, creating CSS code 52, 53 description field 54 Existing Category field 54 HTML code 51 New Category field 54 steps 53, 54 Template name field 54 non-bundled snippets, snippets See also DittoCal, snippets using 151 Q QuickEdit module Edit content function 43 QuickEdit function 43 O R Object Relational Mapping (ORM) 13 P PHP 19 PHP hypertext processor See PHP PHx about 159 downloading 160 Family and Friends documents, adding 160-170 features 159 installing 160 need for 159 notations 170 PHx notations [* *] syntax 170 [+ +] syntax 170 conditional operator 171 conditional statement, structure 171 lcase modifier 170 len modifier 170 PHx placeholder, multiple conditions 173 PHx placeholder, using 172 select modifier 171 ucase modifier 170 ucfirst modifier 170 placeholders, snippets [+jot.html.comments+], jot placeholder 149 [+jot.html.form+], jot placeholder 149 readers, XML formats about 107 Feed 107 rich text editor form template, modifying 74, 75 NewsPublisher 76 Rtcontent field 76 template variable, creating 73 using, for blog content 73 S search engine-friendly URLs, SEO about 215-218 Allow duplicate aliases option 218 Automatically generate alias option 218 Use friendly aliases option 218 Use friendly alias path option 218 Search Engine Optimization See SEO security captcha 230 file permission, setting 229 install directory 229 manager configuration 230 mod_security 230 mod_security htaccess file 230 unused php files 230 SEO about 215 [ 254 ] This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 keyword element 218 meta tag 218 search engine-friendly URLs 215-218 site layout, checking 221 site layout, creating 219, 220 tweaks 221 XHTML Strict conventions, using 221 SFTP, filesystem scp functionality 224 sshfs functionality 225 site, configuring about 33-35 categories 34 categories, File Manager 34 categories, Friendly URLs 34 categories, Interface & Features 34 categories, Site 34 categories, User 34 default Manager interface page 35 default Manager interface page, configuration tab 35, 36 default Manager interface page, Info tab 35 default Manager interface page, My MODx Site tab 35 default Manager interface page,online tab 36 default Manager interface page, Recent documents tab 35 errors, fixing 36 errors, noticing 36 warnings, noticing 36 SMF, forums downloading 175 installing 175-179 using 175 SMF module, forums downloading 180 installing 180, 181 snippet about 67, 68 chunks, using 67 creating 199 NewsPublisher 67, 68 NewsPublisher snippet, modifying 96 outputs, returning 67 parameters 68 snippet, creating chunk, processing 203, 205 fortunes 208 Hello World program, creating 200, 201 Hello World program used 199, 200 output, returning 200, 201 parameters, using 205, 206 placeholders, returning 201-203 snippets [!snippetname!] notation 137 [[snippetname]] notation 137 DittoCal, using 151 jot snippet, using with minimal configuration 138-140 parameters 141-148 placeholders 148-151 searching 138 tasks 137 working 137, 138 Synchronize Users 181 T tagcloud 156 tagging, Ditto documents to category, assigning 106 template variable, creating 105 template about 49 blog site, creating 63 changing 49 default template, choosing 56 existing template code, changing 58 modification steps 50, 51 modifying, to add dynamic behaviour 57, 58 new template, creating 51 template variables 56, 57 using, for Home Page 55 variables 56, 57 template variables about 56, 59 Access Permissions field 61 category field 61 creating 59 data source binding 62 data source binding, keywords 62 [ 255 ] This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 data types 61 default value field 60 description field 60 input option values field 60 input type field 60 Template Access field 61 values 61 variable name field 60 widgets, Sort order field 60 widgets 62 templating, web development methodologies about 11 advantages 11 disadvantages 12 theming breadcrumb navigation 133 chunks, using 133 Doc Manager 130 Learning MODx, modifying 128 list 118 menu, renaming 129 nested menus 122-127 simple menu, creating 118-122 testingwayfinder document, modifying 119 TinyMCE editor 40 tweaks, SEO content prirority 221 CSS, using 221 descriptive test 221 hidden text 221 inbound links 222 quality content 222 tracking mechanism, using 222 U user profiles implementing 190 linking, to edited Profile page 193-195 profile, editing 190, 191 profile, viewing 191, 192 users, listing 191, 192 WebLoginPE, installing 190 user registration assigning, a default group 95 signup form, showing 93, 94 signup page, adding a link 95 User tab, manager configuration blocked minutes, option 231 failed login attempts option 231 V variables, templates about 56, 59 Access Permissions fi eld 61 category fi eld 61 creating 59 data source binding 62 data source binding, keywords 62 data types 61 default value fi eld 60 description fi eld 60 input option values fi eld 60 input type fi eld 60 Template Access fi eld 61 values 61 variable name fi eld 60 widgets, Sort order fi eld 60 widgets 62 version 0.9.6.1p2, MODx using 23 View Port 62 W WayFinder about 116, 117 menu index 116 multiple calls 135 wayfinder snippet 148 web development, methodologies conventional three tier web development methodologies about application framework 12 content management systems 13 templating 11 WebLoginPE, user profiles downloading 190 installing 190 web users about 79 creating 80, 81 [ 256 ] This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 Unixtime 62 View Port 62 winscp downloading 223 general tab 81 Photo tab 81 user, blocking 82 user tab 81 user tab, Allowed Days 81 user tab, Allowed IP Address 81 user tab, Login Home Page 81 What You See Is What You Get (WYSIWYG) 39 widgets, template variables about 62 Data Grid 62 Date Formatter 62 Delimited List 63 Floater 62 HTML Entities 62 HTML Generic Tag 63 Hyperlink 63 Image 63 Marquee 62 RichText 62 String Formatter 63 Ticker 62 X XAMPP for Linux, downloading 20 for Windows, downloading 20, 21 XHTML Strict conventions, SEO using 221 XML formats about 106 and Ditto 109 Atom 108 Custom XML 108 extenders 114 filtering rule 112 JSON 108 machine-readable formats 107 machine-readable readers 107 Really Simple Syndication (RSS) 108 RSS views for each category, creating 110 [ 257 ] This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 Thank you for buying MODx Web Development Packt Open Source Project Royalties When we sell a book written on an Open Source project, we pay a royalty directly to that project Therefore by purchasing MODx Web Development, Packt will have given some of the money received to the MODx Project In the long term, we see ourselves and you—customers and readers of our books—as part of the Open Source ecosystem, providing sustainable revenue for the projects we publish on Our aim at Packt is to establish publishing royalties as an essential part of the service and support a business model that sustains Open Source If you're working with an Open Source project that you would like us to publish on, and subsequently pay royalties to, please get in touch with us Writing for Packt We welcome all inquiries from people who are interested in authoring Book proposals should be sent to authors@packtpub.com If your book idea is still at an early stage and you would like to discuss it first before writing a formal book proposal, contact us; one of our commissioning editors will get in touch with you We're not just looking for published authors; if you have strong technical skills but no writing experience, our experienced editors can help you develop a writing career, or simply get some additional reward for your expertise About Packt Publishing Packt, pronounced 'packed', published its first book "Mastering phpMyAdmin for Effective MySQL Management" in April 2004 and subsequently continued to specialize in publishing highly focused books on specific technologies and solutions Our books and publications share the experiences of your fellow IT professionals in adapting and customizing today's systems, applications, and frameworks Our solution-based books give you the knowledge and power to customize the software and technologies you're using to get the job done Packt books are more specific and less general than the IT books you have seen in the past Our unique business model allows us to bring you more focused information, giving you more of what you need to know, and less of what you don't Packt is a modern, yet unique publishing company, which focuses on producing quality, cutting-edge books for communities of developers, administrators, and newbies alike For more information, please visit our website: www.PacktPub.com This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 Building Websites with Joomla! 1.5 ISBN: 978-1-847195-30-2 Paperback: 363 pages The best-selling Joomla! tutorial guide updated for the latest 1.5 release Learn Joomla! 1.5 features Install and customize Joomla! 1.5 Configure Joomla! administration Create your own Joomla! templates Extend Joomla! with new components, modules, and plug-ins Building Powerful and Robust Websites with Drupal ISBN: 978-1-847192-97-4 Paperback: 362 pages Build your own professional blog, forum, portal or community website with Drupal Set up, configure, and deploy Drupal Harness Drupal’s world-class Content Management System Design and implement your website’s look and feel Easily add exciting and powerful features Promote, manage, and maintain your live website Please check www.PacktPub.com for information on our titles This material is copyright and is licensed for the sole use by Richard Ostheimer on 18th June 2009 2205 hilda ave., , missoula, , 59801 .. .MODx Web Development Building dynamic web sites with the PHP application framework and CMS Antano Solar John BIRMINGHAM - MUMBAI This material is copyright and is licensed for the sole... Dad—for all the hope, faith, love, and wise counsel And to those who made it happen: The Packt team—especially Leena and Sarah the reviewers, and the MODx community for an awesome open source development. .. that supports the language and, if necessary, the database server This advantage looks minimal considering the other overheads and the increasing support for CMSs and frameworks among the hosting