Follow Slashdot stories on Twitter

 



Forgot your password?
typodupeerror
×
Image

Learning Joomla! 1.5 Extension Development 73

Michael J. Ross writes "Every major content management system (CMS) offers considerable functionality for building Web sites out of the box. But to get the most out of any CMS, its functionality must be extended through the addition of modules, most of which are created by third-party developers. For instance, a given CMS may need to be supplemented by an e-commerce module in order to use that CMS for building an online store. Joomla, one of the most widely used CMSs, is no exception. Web developers interested in creating their own Joomla extensions can read Learning Joomla! 1.5 Extension Development, authored by Joseph LeBlanc." Read below for the rest of Michael's review.
Learning Joomla! 1.5 Extension Development
author Joseph LeBlanc
pages 284
publisher Packt Publishing
rating 7/10
reviewer Michael J. Ross
ISBN 978-1847196200
summary An introductory guide to creating Joomla extensions.
Released by Packt Publishing on 11 December 2008, with the ISBN 978-1847196200, this book can be considered the second edition of LeBlanc's previous effort, Learning Joomla! 1.5 Extension Development: Creating Modules, Components, and Plugins with PHP, published almost exactly one year earlier. Oddly, this second edition has the same title as the first (though a different subtitle), and yet is not identified by the publisher as a second edition. This is not the first Packt Publishing book whose second edition was instead given a slightly different name — a practice that may prove confusing to readers who could be uncertain as to whether an older book by the same author contains different material and thus should be purchased as a supplement to the newer book.

Nonetheless, this revised edition strengthens Packt Publishing's position as a leading — if not the preeminent — publisher of technical books devoted to CMSs. The firm makes available a Web page for the book that offers a detailed description, the table of contents, all of the sample code used in the book, and a free sample chapter ("Using JavaScript Effects," Chapter 8). There are links for submitting feedback, contacting the publisher with a question, and ordering the electronic version of the book, which is now available at a reduced price — even more so when purchased with the print version. Errata are not available on this book-specific page, but instead can only be accessed through the Packt Publishing support page, where the visitor has to find the particular book again. The publisher should move the links for sample code, errata, and feedback, to each book's individual page. As of this writing, no errata have been reported for this second edition.

At 284 pages, Learning Joomla! 1.5 Extension Development is certainly not overwhelming in size. In fact, one of the most common complaints about the first edition was its small size (176 pages). The revised edition's material is organized into a dozen chapters, covering a range of topics: an overview of Joomla and extensions; starting to create the example extension; interfacing with the Joomla database, and MVC; creating a front-end interface; use of JavaScript classes; a module for listing pages; user interface enhancements to the extension; JavaScript effects; creating three example plug-ins; adding configuration parameters; adding e-mail and internationalization features; and bundling all of the created elements into a Joomla archive file for distribution.

As with most if not all similar Joomla books, Learning Joomla! 1.5 Extension Development assumes that the reader has a solid understanding of PHP and MySQL, as well as some familiarity with administering a Joomla site. Absolutely no prior knowledge of Joomla extension development is required, and as a consequence this book can be a guide for any PHP programmer who knows how to install and administer Joomla, and wishes to take it to the next level through the development of custom Joomla extensions.

In the book's first chapter, LeBlanc explains the purpose of extending Joomla, and the advantages of this approach over hacking the Joomla core code in order to customize a site's functionality — a principle that should be known by any developer familiar with CMSs. He briefly discusses how Joomla extensions fall into five categories: components, modules, plug-ins, templates, and languages. The chapter continues with brief descriptions of what the subsequent chapters will cover — much of which is redundant, since that is already covered in the preface. This unsubstantial chapter next presents a brief mention of the example project to be created throughout the book (a restaurant reviews site), but offers no project requirements, constraints, or design parameters. Also noted are the requisite technologies one will need for creating the project on one's own: a Web server, PHP, MySQL, and Joomla 1.5. This chapter, like all others, ends with a chapter summary.

With Chapter 2, the author and the reader get into the actual technical content of the book — and not a moment too soon, having at this point passed more than five percent of the pages that follow the table of contents. This chapter's material should be especially welcome to any reader completely unfamiliar with Joomla components, because it explains how they are structured, how to execute them, the separation of front-end and back-end (administrator) directories, and how to register a component in the database (thereby enabling navigation to that component's page). Code and examples are provided that show how to create primary and secondary toolbars for the example project, as well as the native toolbar buttons. On page 17, the use of '_JEXEC' to prevent direct access to a Joomla PHP file, is explained three times; once would be enough. In fact, most if not all times that this (recommendable) technique appears in code in later chapters, its purpose is explained all over again.

One of the essential chapters for getting started on the example project, is the third, which discusses back-end development for the project, beginning first with the database table and its corresponding JTable class, for holding the restaurant reviews information. The discussion of best practices for a table prefix is a good idea, but many readers would most likely have appreciated some illustrative use of the inherited JTable methods. Next, the author briefly describes how the model-view-controller (MVC) design pattern can be used to simplify the code that will be written for the example project, and then explains the basic ideas of MVC, even more briefly. Naturally, the order of these two discussions should have been reversed. The chapter concludes with coverage of the Joomla code for creating the project's forms, as well as processing and managing the data.

With the fourth chapter, LeBlanc temporarily switches to front-end development, and demonstrates the Joomla code that allows visitors to the example project site to see a list of restaurant reviews, view the details of each, read comments posted by other visitors, and post their own comments. In addition, the use of search-engine-friendly (SEF) links is explored, including how to create and parse the needed HTTP request variables' parts.

In the subsequent chapter, the author steps the reader through the process of implementing profiles of restaurant critics in the example project — and in turn illustrates how to override JTable methods, sort records comprising database query results, track how many times particular records are viewed, implement record check-out and check-in functionality (for collaborative editing), store user information, generate page elements using the JHTML class, and enable user ordering of displayed records by using the JPagination class.

Module development is the focus of the sixth chapter, which explains how to register a new module in the Joomla database, how to create and configure one, and how to build and use a helper class. In Chapter 7, the lengthiest of all, the author explains how to: modify a controller to publish and unpublish articles (with a nice example of making a function more generic), delete database records, prompt the user with a confirmation dialog box, redirect the user to an alternate page, require user input for form fields using JavaScript, paginate any large number of records when output, search all available records and display the results, place toolbars within views, and implement user comments. On page 133, when LeBlanc states that "the backend does not work with JavaScript turned off," he should clarify whether he is referring to the Joomla administrative back-end or the example project back-end.

As Web developers increasingly utilize JavaScript libraries within their Web-based applications, the same is happening within the major CMSs, including Joomla and Drupal. In Chapter 8, LeBlanc shows how Joomla programmers can use JavaScript for creating modal boxes (using either raw HTML or views), tool tips, sliding panes, and Google Maps integrated with one's Joomla site. In the discussion of configuring modal boxes, the height and width parameters in the sample code certainly do not match the appearance of the figure on page 167. While most of the chapter makes use of the (native) MooTools library, this portion of the book is capped off with an examination of an alternative, jQuery, which is becoming quite popular. The author wisely provides some valuable advice to any reader considering using both JavaScript libraries simultaneously.

In Chapter 9, the focus shifts back toward more conventional Joomla extension topics — specifically, plug-ins. The author shows how to register new plug-ins in a Joomla database, how to create them, and what events can be registered (as functions in your plug-in), such as a user logging in or content being output. This knowledge is applied to creating plug-ins for the example project in order to support advanced searching of content, and for content authors to be able to have an example site automatically generate an information box when it detects specially tagged text in the content, before outputting it.

PHP programmers new to creating their own Joomla extensions, oftentimes struggle with figuring out how best to specify configuration settings so they are not buried in the code itself nor need to be added manually through MySQL queries — and, in turn, how to make it as easy as possible for those settings to be specified by any developer or site administrator who is using the custom extension. Chapter 10 shows how to do just that, with the information divided among the three types of Joomla extensions that most commonly need this flexibility: modules, plug-ins, and components.

Chapter 11 is somewhat like a catch-all repository for some miscellaneous topics: Leveraging Joomla's native article e-mailing functionality, Joomla extensions can be further enhanced by allowing the user to e-mail component content to other people. Joomla has built-in internationalization, allowing you to supplement any installable language packs with phrases for your custom extension's front-end and back-end user interface text — for any of the languages you choose to support. LeBlanc shows how to do that, for his example project. He also shows how to safely allow users to upload files to your Joomla server.

The final chapter of the book demonstrates how to package up all of the code and other files that you have created, so anyone else who wants to leverage that functionality can install your extension in their own Joomla-based Web site.

The book has a number of small blemishes, including several errata, e.g., "can [be] defined" (page 20), "set these variables to whatever value[s]" (page 31), "it the function proceeds" (page 74), "!." (page 76), "existing/modules" (page 112), and "contain[s] newlines" (page 238). There is the occasional erroneous capitalization of words (witness the first sentence in the "About the Reviewer" section), incorrect use of hyphens for creating adjectives, and inconsistent spelling of words (such as "back-end" and "backend"). All of these should have been caught by the publisher's line editors.

In some passages there is a dearth of commas that would help the reader know when to pause. The code formatting, such as indentation and brace placement, is not always consistent (e.g., pages 81 and 116). The chapter subheads should be in title case, but are instead in sentence case. Some of the HTML example code suffers from "div-itis," such as the use of div tags instead of label tags where appropriate (e.g., page 66). The Joomla root URL on the reader's local Web server — assumed by the author in all of the subsequent project URLs throughout the book — should have been mentioned in the first chapter, when discussing the prerequisite technologies for creating the example project, because that is the point in the book at which the reader would most likely have installed Joomla on their server.

All of the chapter summaries simply add bulk but no value to the book, and should be chopped, because the chapters are short enough to not justify any summarization. Moreover, in at least one instance (Chapter 10), the summary contains higher-level perspective not presented in the chapter itself, where it would be far more timely to the reader. In addition, the book provides apparently no figure numbers or captions, which arguably saves space, since readers rarely refer to them if they are reading the text closely, though less so when skimming through a technical book. Compared to its predecessor, this edition would still benefit from a lay-flat binding, and it still has the pointless header and footer lines, as well as page number bracketing (which admittedly seems to be part of the publisher's branding).

None of the aforesaid problems are of any gravity. The main problem with the book is that far too many of the discussions are rather cursory and fast-paced, lacking in both clear explanations of critical concepts and also an empathy for readers struggling to understand those concepts. For instance, the marketing copy for the book claims that the reader will learn the Model-View-Controller design pattern, when in fact the book fails to teach it well — instead only offering two foodservice examples, which are inadequate, particularly for any reader unfamiliar with design patterns in general. In other words, there is adequate explanation as to the specific steps for creating the example project code and other needed elements, but there is not enough explanation as to how those steps fit into the bigger picture, and how they could be enlarged so that the budding Joomla developer could create his or her own extensions, quite different from the book's example project.

On the other hand, this new version has several notable improvements over the previous edition, such as greater emphasis on Joomla 1.5-style coding, as well as more attractive screenshots, with far less pixelation. More importantly, there are three new chapters, addressing JTable, JHTML, JUser, JavaScript, e-mail, languages, and file uploading. As in the first edition of the book, LeBlanc opts for a nice balance of exposition, example code, and illustrative figures — along with the bolding of any changes in code shown in multiple places. Scattered throughout the book are handy tips and warnings to Joomla developers. Joomla's online documentation for extension development is not much better than it was a year ago, and thus there is still a need for helpful books such as this one.

On balance, Learning Joomla! 1.5 Extension Development is an approachable and useful resource for any developer who wants to maximize the functionality of their own Joomla-based Web sites — and perhaps share that new functionality with other developers by contributing the resultant extensions to the Joomla community.

Michael J. Ross is a freelance Web developer and writer.

You can purchase Learning Joomla! 1.5 Extension Development from amazon.com. Slashdot welcomes readers' book reviews — to see your own review here, read the book review guidelines, then visit the submission page.

*

This discussion has been archived. No new comments can be posted.

Learning Joomla! 1.5 Extension Development

Comments Filter:
  • by ceejayoz ( 567949 ) <cj@ceejayoz.com> on Wednesday February 04, 2009 @04:41PM (#26729401) Homepage Journal

    Amen to that. Mod parent up, please.

  • by theskipper ( 461997 ) on Wednesday February 04, 2009 @04:47PM (#26729463)

    Probably start with Drupal on top of the evaluation list. Yeah the usual PHP gripes apply. But coming from a programmer's mindset, the framework always seems to make sense to me. The others felt kludgy in one way or another. YMMV.

  • Good Book (Score:3, Informative)

    by Frosty Piss ( 770223 ) on Wednesday February 04, 2009 @04:53PM (#26729531)
    This is a good book (which I have) that walks you though building a complex multi-part Joomla component. All the code works and is non-trivial. My only complaint is how LeBlanc deals with interacting with the core Joomla classes. Joomla recommends building components with classes that extend the core classes, while LeBlanc does not do it this way, he builds his own functions outside that structure. But if you're looking for a great learning tool that doesn't dumb down the subject and has copious code samples, this is it. A more general reference that is also comprehensive is Mastering Joomla! 1.5 Extension and Framework Development [packtpub.com], by James Kennard, same publisher.

    WARNING: LeBlanc has a previous edition of this book, same title, which is WAY WAY WAY out of date, but still on sale at Amazon and the publisher Web site. You have been warned...
  • by Anonymous Coward on Wednesday February 04, 2009 @04:59PM (#26729597)

    Damn right. Joomla is not a CMS. It's an idiot portal for updating column based POS sites.

  • by Gizzmonic ( 412910 ) on Wednesday February 04, 2009 @05:26PM (#26729883) Homepage Journal

    I like Drupal and I'm running it at my job. I am not much of a programmer, more of an admin, but I can make it look the way I want by hacking around with the CSS and such. So far, no one has needed to do anything that can't be handled by modules. Those are easy to install, and they usually play nicely with other modules as well. It's a fine CMS.

  • by siDDis ( 961791 ) on Wednesday February 04, 2009 @05:47PM (#26730161)

    A good CMS to migrate to is Plone. I've been working the last few months with Plone and I love it! Plone is well structured and easy to develop for, the documentation on their site is a bit thin, and the documentation you can google is often outdated. However their IRC channel has plenty of nice peeps willing to help.

    Plone has a lot of freely available products which can improve your website and save hours of work.

    The application structure in Plone is easily structured. Everything is a module/plugin/product, like for example themes, archetypes, portlets/widgets. Setting up a Plone site is also very easy with the new buildout scripts, they're so advanced that you can build a *clone* a Plone site with all the add-on products without copying/moving any files(except the database). This also includes code you've written and commited to subversion.

    Developing html templates in Plone is a joyride. TAL is by far the nicest html template language I've ever developed in. Creating html templates that can be 100% perfectly validated is not very common in other template languages. You write html as you're used to and use html attributes to define where you want to repeat/loop code. Your html code will look like pure html, and not like a mixbag with regular programming code every second line(Django developers are you listening?).

    Not to mention that you get to program in a solid well designed programming language and not in a C/Perl inspired template language hack.

    But Plone isn't a solution for everything, especially if you need to modify it upside down or you're dealing with enormous amounts of data in the database.

    I highly recommend looking into Plone, if you're really stuck in the PHP world then the Midgard Project is also a good world to develop in, except that it's so tied to only MySQL.

  • by micheas ( 231635 ) on Wednesday February 04, 2009 @06:09PM (#26730361) Homepage Journal

    You might look at Joomla 1.5. Unless the migration is going to take a while in which case look at Joomla 1.6.

    The amount of shared code between Joomla 1.0.x and 1.5.x is extremely small.

    Joomla 1.5 has a very nice MVC framework that was written because of the performance problems they were having with cake. (Cake does somethings really well, but the rewrite that would be needed for Joomla to work well on Cake inspired the Joomla developers to write their own framework.)

    The foundation of Joomla 1.5 is really nice. Don't let the 1.0 code scare you away from migrating to 1.5.

    Plone is really nice if you have the hardware and are willing to deal with the smallish community.

    Drupal is really nice to code on althought the difference between joomla 1.5 and drupal 6 is not that huge, Drupal does use jQuery as it's native javascript library which is nice.

    Look at wordpress just because if it meets your needs it will save so much time.

    My favorite for multilingual sites are plone and Joomla.

    Joomla! big strength is complete control of the view with template overrides.

    Mediawiki works, but it is a bit of a pain to do graft the template on.

    Personally I would advise porting to joomla 1.5 on a test server taking note of everything that doesn't work as you would like, and then feature shop other content management systems.

    Drupal, Joomla, and Plone can all do more or less everything with custom extensions. The question is which one is closest to your needs out of the box.

  • Re:Ok I'll start (Score:3, Informative)

    by Swampash ( 1131503 ) on Wednesday February 04, 2009 @08:13PM (#26731657)

    Joomla is evil. That's all there is to it. The only way to get the functionality you would ever really need beyond basic content management is to pay large sums of money for commercial modules. The community is huge in the worst possible way. There are a million modules for one problem and it is near impossible to find the right one.

    The interface is deplorable. None of the methods of content management make any sense, and it is obviously not meant to be user friendly considering the top dollar training offered for the system. If there were ever a CMS to avoid, this would be it.

    "How to Choose the Right CMS" - http://www.webdesignerdepot.com/2009/01/how-to-choose-the-right-cms/ [webdesignerdepot.com]

  • by ceejayoz ( 567949 ) <cj@ceejayoz.com> on Wednesday February 04, 2009 @11:14PM (#26733075) Homepage Journal

    Joomla comes out-of-the-box as a quite powerful but extremely restrictive system. If your site needs to work exactly as Joomla's developers intended, great.

    If your site doesn't exactly fit their cookie-cutter mold, though, you are screwed. Most tweaks to the way the site works will have to be done by either a) hacking core code (and thus meaning upgrades are a nightmare) or b) replacing core modules wholesale.

    An example: I was an intern and the project specs called for Joomla. The project also required articles to be categorised in more than one category - i.e. it might be in the 'nightlife' category and the 'downtown' category. Joomla's categorisation system, however, allows only one category for a content item.

    To have multiple categorisation, I had two options - hack apart much of Joomla's core code to wedge that functionality in, or buy commercial replacements to the main com_content module. Plus, if we'd decided we wanted a second feature that commercial replacement didn't have, we'd then have to hack apart that component too.

    Add in the heavily pay-to-play nature of Joomla extensions - an oddity for a GPL project - and getting a site set up can be a nasty, nasty proposition.

    If a PHP CMS is what you're looking for, my favourite is indeed Drupal. The key in Drupal is its API - you can alter essentially every bit of Drupal, even core components, without having to hack core code. As an example, API hooks like hook_nodeapi [drupal.org] and hook_form_alter [drupal.org] allow developers to modify any form in the Drupal installation. Want to change the username field in the signup form to a checkbox? You can do that.

    Modules like CCK (allows web-based configuration of content types) and Views (lets you easily set up, via a web interface, filters and criteria for displaying content) are wonderful helps, and include their own APIs so you can extend them, again without hacking their code. There's a vibrant developer community with well over a thousand contributed modules - and all free, and (in my opinion) of higher quality than most of the ones I came across in Joomla.

    It's a bit longer of a learning curve than Joomla, but the result is a far less frustrating development experience.

  • Re:Ok I'll start (Score:3, Informative)

    by omuls are tasty ( 1321759 ) on Thursday February 05, 2009 @08:41AM (#26735707)

    The site will be almost entirely content. It will need to be updated by non-technical staff, specifically uploading PDFs, creating new pages, and applying tags from a set taxonomy. It will need to handle user accounts and control access permissions down to the page level. This doesn't seem to call for much more than a standard CMS.

    We do not want to spend a lot of money on a license. We want a system that we can host and for which we can easily outsource work (no vendor lock-in).

    So far so good. Joomla might fit the bill (the permissions bit might be problematic depending on your exact needs).

    We want a system that we can customize pretty easily; bonus if there is a large community creating extensions.

    That's where it starts to get interesting. Customizing Joomla is a pain. The "core" is not designed in a very modular/extensible way, and the quality of the code itself is generally low. Joomla provides nothing which would resemble a framework (think Cake, Symphony, etc) making you re-invent the wheel for every component (or create a framework of your own).

    The quality of third-party extensions (or "components" in the parlance) ranges, with some exceptions, from bad to dowright attrocious. To be fair most of them do their job, but customizing them? Forget it. Security-wise, you're lucky if they escape their SQL, forget about XSS or heaven forbid CSRF prevention. Not to mention that they tend to follow the time-honored PHP tradition of "notices are OK".

    Also, because of the lack of extensibility in Joomla, components often include so-called "core hacks", which comprise of replacing the original Joomla files with their own version. You can imagine that because of this some components don't play very well with each other, and don't play well with Joomla upgrades at all

    Search-engine friendly links are also a problem. Joomla comes with a SEF URL rewriter, but often that doesn't cover all the needs. So you need to install yet another component (openSEF or 404sef), which also tends to step on toes of some other things.

    The low cost IMHO is a red herring. I used to do contract work for a small company specialized in customizing Joomla for clients. The process would generally go like this:

    • The client wants to install Joomla - hey it's free, and has all these great features out of the box. He needs the template and some extra functionality, for which we can find 3rd party components.
    • The designers create the template.
    • We install the components and customize their appearance to match the site
    • With very simple sites, this is where it would end. More often than not, the process continues
    • The customer decides that he needs some more functionality. Install more components
    • Somewhere along the line, interoperability issues start to pop up, work on fixing those. Also, upon detailed inspection, it turns out that functionality of the Joomla core/components is missing/inadequate, so the programmers (i.e. me) start looking for ways to customize them and/or write new code. Without a proper Web framework (and the popular PHP frameworks tend not to work inside Joomla) this takes much more time than with one.

    By the time the process is finished, the original project has stretched from weeks to months, and the price has gone up from $1-2k to $10k+

    The funny thing is, if we developed the CMS from scratch using a proper framework (or better, started by customizing a CMS that utilizes one):

    • Duplicating the functionality of Joomla/needed components would most likely take a week or two - realistically, 95% of it little more than a thin interface layer over the database. Developement of new functionality would be orders of magnituted faster.
    • Customizing the appearance would take about the same time as with Joomla

    So please, do yourself a favor. Find a decent Web development company that works using a decent framework. I'm a Python fanboy so I'd su

Today is a good day for information-gathering. Read someone else's mail file.

Working...