Inaugural Dallas / Fort Worth CiviCRM Meetup

Following the great response from OpenCamp and the recent Dallas Drupal User group meeting, the Dallas / Fort Worth CiviCRM Meetup is a reality!

Join us on October 11 at this inaugural meeting to find how you can use this open source solution in your non-profit organization or a small business. We'll cover the basics of CiviCRM and explore the newest features released in version 3.2.3.

Image Protection with jQuery

Once an image is publicly available on the internet, there are many ways to make a local copy of it. There are also a number of ways that try to prevent such unauthorized downloads. Preventing right click / save of the image is most likely the easiest way to protect the casual drive-by image theft. How to incorporate it within a Drupal theme? 5 lines of code.

Within the theme directory, create (if it doesn't exist) or edit script.js. This file will be loaded automatically with the rest of the Drupal jQuery.

Remove Tabs and Elements from CKEditor Dialog Window

Sometimes having too many options confuses the end users, or it allows them to play with functions you would rather not expose. This came from a futile attempt to communicate the relevance of using site contact forms instead of exposing email addresses with mailto:// links - bots and spammers harvest these automatically, and then your (and your company's) inbox are overflowing with spam.

Presenting at OpenCamp

OpenCampOpenCamp is southwest’s first multi-platform web conference taking place August 27-29, 2010 in Addison, TX. Hundreds of attendees will participate in WordPress, Drupal, Joomla!, and .NET sessions throughout the weekend.

On Saturday, August 28, 2010 at 10:30 AM I will be presenting CiviCRM for Non-Profits and Small Businesses in the Drupal track. Join in and learn about what a CRM system can do for your organization!

Node Title for Custom Pagers

Custom Pagers module adds useful navigation to chosen nodes. The navigation can be displayed at the top and/or bottom of node's content, allows selection of specific node types, and further tweaking can be done with views. By default, however, custom pagers can only print <previous next >. How to display the node titles instead? Add this function to the template.php of the chosen theme:

Disable Google Analytics by Role or User

Update: new code to allow excluding individual node as well as roles and users.

Google Analytics module allows for tracking by selected roles. What it does not natively provide is a mechanism to exclude specific roles.

To disable tracking for a particular role or even a specific user, edit Page specific tracking settings section. Choose Add if the following PHP code returns TRUE and enter the following code, adjusting the role names and the user IDs (uid). This could be also used for control of block displays, when displaying content to authenticated users but excluding a particular role.

CKEditor and GeSHi filter

Update: This approach does not involve the WYSIWYG module. It relies on the installation of CKEditor (module and editor) without a middleman management module. If you desire finer control of toolbar display by roles or HTML functionality permissions, take a closer look at the Better Formats module.

It is easier to focus on content when working with a WYSIWYG editor. I can always switch to view the source code if I need to do more complex editing. As I continue to document my Drupal experiences, I wanted to use a syntax highlighter when sharing code samples.

Unapproved comments notification with Notify module

The Drupal Notify module is a lightweight solution for notifications of new or revised content as well as comments. It is meant to be used by admins and webmasters monitoring new content on a website. The module can notify of comments that are automatically approved and posted, but there is no built-in mechanism for notification of unapproved comments.

One line of code change to the rescue:

Hierarchical site and menu structure

Since Drupal stores all pages in a database, the webmaster is responsible for creating a hierarchical organization of the content. The visitors and search engines then navigate through a logically subdivided site structure.

Native Drupal URL for a page is or A user- and SEO-friendly URL is

Modules needed:


Subscribe to Blog