Review — Managing eZ Publish Web Content Management Projects

Trying to publish content to the web is easy enough, but can your server handle it? If not, server web hosting could be the best thing for you. When you outsource a web or Outlook Exchange server, you save valuable space on your own server. Plus, clients will appreciate the private label Exchange hosting that you’ll be able to provide when you outsource.

I was recently asked, by a representative of Packt publishing, to review the new book Managing eZ Publish Web Content Management Projects by Martin Bauer. The book claims to be a source of “strategies, best practices, and techniques for implementing eZ Publish open-source CMS projects to delight your clients.” In this review I’ll try to relate just how well the work succeeds in its stated goal.

My first look at any technical book always centers on the chapter listing. There, I’m usually able to tell what topics will be covered and get an idea of the extent to which each topic will be covered. The table of contents is available on the book’s product page at the Packt Publishing website.

As you can see, most of the normal project management topics are covered, and I’d have to say they are covered quite thoroughly. Even without the inclusion of the eZ Publish specific chapters, this could have been a very solid book on software project management. The inclusion of specific information about eZ Publish, however, pushes this book from merely average to pretty darn good. Targeting topics such as content modeling eZ Publish specific implementation details, the book reaches out to its target audience, project managers utilizing eZ Publish as their tool of choice.

In this review, I’d like to focus on the three things that I feel this book does best and the two things that it most fails at. I’ll start with the negative aspects.

First, the book has a serious problem with grammar and spelling errors. It was almost as if the copy editor only gave the book a single solitary glance rather than doing their job and examining the text in full. Spelling errors were rampant throughout the book both in the text and within illustrations. The grammar used was inconsistent much of the time, contributing to confusion at some points. The most odd thing was the “eZ Publish” itself was inconsistently spelled throughout the work. I’d think that if you were writing a book on a technical system that you would pay special attention to the spelling of that system at all times.

Second, some of the sections seemed to be lacking in details. For example, in Chapter 12 on training, the custom training contains no specifics on how to provide custom training or suggestions for performing end user training of custom features. Now, the author may have figured that custom solutions are so varied that nothing useful could be suggested, but there is no mention of this thought, and the lack of specifics was something I found rather disappointing.

In spite of these negative aspects, the book succeeds on many fronts. First, the work could serve as a great tool for any software project manager. Best practices and strategies are suggested throughout that are useful and time tested. The introduction of the Scrum methodology in the Open Project Management chapter is a great add and something that most modern PMs should know about.

Second, copious illustrations and screenshots are shown throughout the book. It has been shown that information is absorbed much better when shown visually to a learner. This book succeeds in highlighting important topics with visual aids that will help any project manager.

Finally, the discussion on risk management in this book is well thought out and explained. In my experience, risk management is one of the most important parts of any software project and I was happy to see that an entire chapter was devoted to the topic. Not only does this book cover risk management in general, it speaks out on the specific risks that a PM may face when implement an eZ Publish project.

Overall, I would rate this book very highly. It contains a copious amount of project management information and would be a good guide for any software PM. The eZ Publish specific information that is included in the work is interesting and often relates things that a beginner working with the system for the first time might overlook. If you’re part of the target audience, a project manager who is working with the eZ Publish system, then it would be well worth your time and money to pick this book up and read it.

Loading Javascript Libraries in Wordpress Plugins with wp_enqueue_script()

Have a lot of Wordpress plugins? You may need server web hosting if you’ve got limited server space. Whether you use Outlook or Exchange 2007 for your email, you can get it hosted at an outside company so that you save room on your own server. Outsourcing Microsoft Exchange will definitely save you time, money and server
space.

In the process of modifying my Pre-Publish Reminders plugin for WordPress, I came upon an instance where I wanted to use a javascript library that is packaged with WordPress by default, but I couldn’t figure out how. However, after a little bit of frustration, followed by a little bit of detective work, I found an elegant solution included in the WordPress core.

First, let me share with you what doesn’t work. I originally had planned on placing things in the admin <head> section like so:

function nfoppr_add_js_libs() {
?>

}

Now, this approach didn’t work. The reason is that ABSPATH has to do with the file system and not the URL of the blog. So you end up with something like:

... src="./home/usr/nickohrn/wp-includes/js/prototype.js" ..

and this will not include your script. So, I had to find an alternative that would work. Searching through the function reference on WordPress I came across a note about the WP_Scripts object. This looked promising so I started to dig into the core WordPress files. I ended up finding the function wp_enqueue_scripts() within /wp-includes/script_loader.php which allows you to add a script to the <head> section of the page very easily. The function call looks like this:

wp_enqueue_script( $handle, $src = false, $deps = array(), $ver = false );

If WordPress recognizes the handle you provide, the library will be added for you. If it doesn’t support calling the library by handle (or the library is something custom you wrote) you’ll have to supply the path to the file as a second argument. The third argument lists any dependencies that the library you are loading may have (in the form of an array or false if there are no dependences). Finally, the fourth argument is the script version which, according to the documentation is primarily for cache busting.

To use the function, you’d do something like this:

function nfoppr_add_js_libs() {
//Add the Prototype framework to the header
wp_enqueue_script('prototype');
wp_enqueue_script('my_custom_prototype_extension', 'path/to/my/lib', array('prototype'));
}

//When you're in the admin menu, add the javascript libraries
add_action('admin_menu', 'nfoppr_add_js_libs');

As I couldn’t find a comprehensive listing of what library names you can call, I’ve decided to include one here. In the following table you can find the full name and handle for each library that is include by default. If applicable, I’ve included a link to the script homepage for each of the libraries that noted one within their source. There is a separate list of libraries that can be included if the logged in user is an administrator, but I’ve left those off the list for now.

Name Calling Name
Docking Boxes dbx
Fade Anything Technique fat
Simple AJAX Code-Kit sack
QuickTags quicktags
ColorPicker colorpicker
Tiny MCE tiny_mce
WordPress Tiny MCE wp_tiny_mce
Prototype Framework prototype
Autosave autosave
WordPress AJAX wp-ajax
List Manipulation listman
Scriptaculous Root scriptaculous-root
Scriptaculous Builder scriptaculous-builder
Scriptaculous Drag & Drop scriptaculous-dragdrop
Scriptaculous Effects scriptaculous-effects
Scriptaculous Slider scriptaculous-slider
Scriptaculous Controls scriptaculous-controls
Scriptaculous scriptaculous
Image Cropper cropper
jQuery jquery

So there you have it. I think this is a really elegant solution. Plus, it prevents you from loading the same javascript library multiple times if multiple plugins are using it. If you have any questions, feel free to ask me, and I’ll try to sort things out, or you can refer to the WordPress documentation (although it didn’t have much reference to this at all.)