<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"><id>tag:blogger.com,1999:blog-3090627440855066648</id><updated>2009-01-16T21:33:18.912-08:00</updated><title type="text">Madhan At Chennai - Drupal CMS</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://madhan-chennai.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>41</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/MadhanAtChennai-DrupalCms" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-3176951171491553725</id><published>2009-01-16T21:19:00.000-08:00</published><updated>2009-01-16T21:33:19.063-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2009-01-16T21:33:19.063-08:00</app:edited><title type="text">Simple Test Module - Drupal</title><content type="html">Drupal is currently lacking a test suite to be run by developers before submitting important patches. The simpletest module shows some great promise but it is unfortunately not widely adopted yet and there aren't many tests written. See here for a tutorial on how to write tests for your module.&lt;br /&gt;&lt;br /&gt;The following setup isn't really a test suite but it is a start to avoid the most embarrassing errors.&lt;br /&gt;&lt;br /&gt;Proceed as follows:&lt;br /&gt;&lt;br /&gt;   1. Enable the menu module and disable the 'log out' link.&lt;br /&gt;   2. If you have the image module installed, enable the image module and set permissions so images can be written for the userid running the link check. This will avoid image creation errors when crawling with image enabled.&lt;br /&gt;   3. Run&lt;br /&gt;      wget --mirror --delete-after http://example.com/&lt;br /&gt;&lt;br /&gt;      where example.com is your development site. This command will crawl your site very quickly which can put a large stress on the site. You can add --wait=5 to the options if you don't want to perform the stress test.&lt;br /&gt;   4. If you want to test as an authenticated user you first should login to the site using a browser and get the authenticated cookie. Then do&lt;br /&gt;      wget --mirror --delete-after --load-cookies=/path/to/cookies.txt http://example.com/&lt;br /&gt;&lt;br /&gt;      where /path/to/cookies.txt is the cookie for your site inside your cookie directory. The exact location of this cookie depends on which browser you are using.&lt;br /&gt;   5. You can repeat for each of your roles on your site, and look for errors users with different roles might experience.&lt;br /&gt;&lt;br /&gt;Note that this can take some time. wget will access every Drupal page linked from anywhere on your site. You can later have a look at the error logs and find out if any errors where caused. This will not test submitting forms. You can test submitting forms through simple test module.&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/lRxNwEoSw4U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/3176951171491553725/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=3176951171491553725" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/3176951171491553725?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/3176951171491553725?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/lRxNwEoSw4U/simple-test-module-drupal.html" title="Simple Test Module - Drupal" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2009/01/simple-test-module-drupal.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-5761166750398071732</id><published>2009-01-14T10:05:00.000-08:00</published><updated>2009-01-14T10:10:13.733-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2009-01-14T10:10:13.733-08:00</app:edited><title type="text">Drupal - Like or Dislike</title><content type="html">The review written by Justin James for Drupal is in an article titled, A product review of the Drupal Content Management System, does it make the grade? The author states that "Drupal does not make the grade". He bases his opinion on issues with usability and ease of installation. With regards to usability he says:&lt;br /&gt;&lt;br /&gt;    Drupal fails on these measures. There were links to create content, which I happily followed. I was immediately presented with an interesting dilemma: do I want to create a "page" or a "story?" The system explained that a "page" is for something like an "About Us" page, and a "story" contained content like a blog. This did not make any sense to me...Every other system I have used (that I can recall) lets you define a particular "page" as a blog, and then just add content to the blog.&lt;br /&gt;&lt;br /&gt;    I decided to try to make a "page." I was confronted by a plain area to enter text, with no WYSIWYG editing capabilities. I actually considered this to be good, because I have had so many problems with Web-based WYSIWYG editors. However, less than advanced users will be pretty helpless putting content into Drupal. &lt;br /&gt;&lt;br /&gt;Ouch! The author also concludes that "Drupal may be a decent choice for an ISP, but its difficult installation, lack of simple on-line content management, and failure to provide asset management make it too hard to use for the average user for anything above and beyond basic site creation." Double ouch!&lt;br /&gt;&lt;br /&gt;Most of my early complaints centered over some of the "special" privileges needed when accessing the MySQL database. Database privileges such as LOCK TABLES are not provided by all host providers. There are time when potential Drupal users talk about what they don't like about Drupal. Instead of acknowledging the user's remarks may have validity, there were those that who replied with what. Their simple reply would be that "Drupal isn't for everyone".Drupal's strength is understood not with the first impression it gives users, but with the final impression it leaves users.  IBM's project development series involving Drupal and other open source projects should become a good read and the start of some great discussions ahead.&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/BTs8dsTZuaQ" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/5761166750398071732?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/5761166750398071732?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/BTs8dsTZuaQ/drupal-like-or-dislike.html" title="Drupal - Like or Dislike" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://madhan-chennai.blogspot.com/2009/01/drupal-like-or-dislike.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-6247109949729199972</id><published>2009-01-13T05:11:00.000-08:00</published><updated>2009-01-13T05:12:41.489-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2009-01-13T05:12:41.489-08:00</app:edited><title type="text">Create Link From Drupal To Moodle</title><content type="html">This assumes that a) you have CCK and Computed Field installed&lt;br /&gt;&lt;br /&gt;First, give every DrupalEd course an automatic alias that is the same as your Moodle short-course name. (Yes, right now, we have to do that by hand. That needs to change eventually.)&lt;br /&gt;&lt;br /&gt;Then, in Content Management -&gt; Content Types -&gt; Course -- create a new field called field_moodle_link (or something like that) and select Field Type -- Computed and create the field.&lt;br /&gt;&lt;br /&gt;In the next page that pops up, fill in the Label with whatever you want the label to be on the Drupal Group page. Then I chose "Required" under data settings, but I'm not 100% sure that's necessary. And under Computed Code, enter this:&lt;br /&gt;&lt;br /&gt;$db = mysql_connect("&lt;machine&gt;", "&lt;moodle_username&gt;", "&lt;moodle_password&gt;");&lt;br /&gt; mysql_select_db("&lt;moodle_db&gt;",$db);&lt;br /&gt;&lt;br /&gt; #Enter base moodle website here&lt;br /&gt; $website = "http://www.yourwebsitehere.org/moodle";&lt;br /&gt;&lt;br /&gt; $nodepath = "node/";&lt;br /&gt; $nodepath .= arg(1);&lt;br /&gt; $shortname = drupal_get_path_alias($nodepath);&lt;br /&gt;&lt;br /&gt; $query = "SELECT id,fullname from mdl_course where shortname='$shortname'";&lt;br /&gt;&lt;br /&gt;# Standard debug test&lt;br /&gt;# print("&lt;br&gt;$query");&lt;br /&gt;&lt;br /&gt; $idquery = mysql_query($query);&lt;br /&gt; if ($idarray = mysql_fetch_array($idquery))&lt;br /&gt; {&lt;br /&gt;   $id = $idarray["id"];&lt;br /&gt;   $fullname = $idarray["fullname"];&lt;br /&gt;   $node_field[0]['value'] = "&lt;br&gt;&lt;a href=$website/course/view.php?id=$id&gt;$fullname&lt;/a&gt;";&lt;br /&gt; }&lt;br /&gt; else&lt;br /&gt; {&lt;br /&gt;  $node_field[0]['value'] =  "No Moodle Course w/ shortname: $shortname";&lt;br /&gt; }&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;Make sure "Display this field" is checked, and I use this as my display format:&lt;br /&gt;&lt;br /&gt;$display =  $node_field_item['value'] . "&lt;br&gt;&lt;br&gt;";&lt;br /&gt;&lt;br /&gt;And then save it.&lt;br /&gt;&lt;br /&gt;Once it's saved, click "Manage Fields" and make sure that your new field has a lower numerical value than the Highlighted Content Field, so that it's at the top of the Drupal page.&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/bQ0oWJ0CrmY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/6247109949729199972/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=6247109949729199972" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/6247109949729199972?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/6247109949729199972?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/bQ0oWJ0CrmY/create-link-from-drupal-to-moodle.html" title="Create Link From Drupal To Moodle" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2009/01/create-link-from-drupal-to-moodle.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-1599383003378669216</id><published>2009-01-13T01:43:00.000-08:00</published><updated>2009-01-13T01:46:31.427-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2009-01-13T01:46:31.427-08:00</app:edited><title type="text">Drupal Data Migration Services</title><content type="html">Standard Data Migration into Drupal&lt;br /&gt;&lt;br /&gt;If your moving from one technology to another one of the hardest areas to get right is the data migration. We have years of experience in migrating data from old systems into Drupal. Frequently we find that we are requested not to merely migrate from data from one application to Drupal but from multiple applications, this is where our knowledge and expertise in data architecture really come into play. We can take the headaches our of even the most complex data migrations.&lt;br /&gt; &lt;br /&gt;Drupal SEO Website Migration / upgrades&lt;br /&gt;&lt;br /&gt;It is imperative that you understand that moving from website technology to another that you don't lose your current SEO value. Many companies plough ahead and change their sites making what they think are great SEO improvements, but actually damage their position in Google and other Search engines by not doing the move properly. We have migrated countless sites without losing any of the existing search positions and still gaining by improving the seo.&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/Pld5ycIYY6s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/1599383003378669216/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=1599383003378669216" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/1599383003378669216?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/1599383003378669216?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/Pld5ycIYY6s/drupal-data-migration-services.html" title="Drupal Data Migration Services" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2009/01/drupal-data-migration-services.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-6787170716416139627</id><published>2009-01-10T05:10:00.000-08:00</published><updated>2009-01-10T05:13:29.464-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2009-01-10T05:13:29.464-08:00</app:edited><title type="text">PHP Zend</title><content type="html">Zend Platform is the only PHP Web application server for that supports the enterprise reliability and comprehensive performance features organizations need for business-critical applications. Platform PS provides the performance and management functions needed for every PHP deployment. Platform ES is the ultimate PHP solution incorporating enterprise-grade functionality for multi-server environments.Today's Web applications deliver diverse services including static content and rich media. By providing a multi-layered approach Zend Platform lets you easily optimize your application, according to the services you provide. Code acceleration, content caching, download optimization and configurable off-line processing capabilities give you the maximum performance options needed to get the most out of your business-critical applications.&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/ItAmh6LhK7Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/6787170716416139627/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=6787170716416139627" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/6787170716416139627?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/6787170716416139627?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/ItAmh6LhK7Q/php-zend.html" title="PHP Zend" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2009/01/php-zend.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-1616537646004067316</id><published>2009-01-08T04:23:00.000-08:00</published><updated>2009-01-08T04:26:29.770-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2009-01-08T04:26:29.770-08:00</app:edited><title type="text">Drupal 6 Theme Registry</title><content type="html">Drupal's theme registry maintains cached data on the available theming hooks and how to handle them.&lt;br /&gt;&lt;br /&gt;    For most theme developers, the registry does not have to be dealt with directly. Just remember to clear it when adding or removing theme functions and templates. Editing existing functions and templates does not require a registry rebuild.&lt;br /&gt;&lt;br /&gt;    To clear the theme registry, do one of the following things:&lt;br /&gt;&lt;br /&gt;       1. On the "Administer &gt; Site configuration &gt; Performance" page, click on the "Clear cached data" button.&lt;br /&gt;       2. With devel block enabled (comes with devel module), click the "Empty cache" link.&lt;br /&gt;       3. The API function drupal_rebuild_theme_registry.&lt;br /&gt;&lt;br /&gt;    The theme registry is cached data instructing Drupal on the available theming hooks and how to handle it by indicating its type. In previous versions all theming calls were handled on the fly. Since a lot more work is being done under the hood, the cached instructions speeds up the process especially for templates. The theme engine your theme is running under should automatically register all the theming hooks for you.&lt;br /&gt;&lt;br /&gt;    There are special cases where you may need to work with the registry directly. When your theme requires a new hook to be registered that was not already implemented on the layers below it (core, modules, engine). This includes some forms when they are not explicitly themed by core or modules but instead rely on the default form presentation.&lt;br /&gt;&lt;br /&gt;        * More details can be found in the sub-page, The theme registry for special cases.&lt;br /&gt;        * Do not confuse the theme registry with the theme's .info file which is also cached. Points 1 and 2 on clearing the registry will clear both.&lt;br /&gt;        * Your theme must be using phptemplate engine for the for its templates and functions to be discovered. Other engines should behave the same way. For engineless themes, it must be done manually. See phptemplate_theme to see how it is done.&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/e_j8oiXrIc4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/1616537646004067316/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=1616537646004067316" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/1616537646004067316?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/1616537646004067316?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/e_j8oiXrIc4/blog-post.html" title="Drupal 6 Theme Registry" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2009/01/blog-post.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-4760621190924514593</id><published>2009-01-07T06:52:00.000-08:00</published><updated>2009-01-07T06:54:27.818-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2009-01-07T06:54:27.818-08:00</app:edited><title type="text">Theming Drupal primary links with child sub-menus</title><content type="html">Using 'Primary links' for your Drupal site's main navigation menu is a great idea. However, most themes by default display primary links in such a way that if the menu has sub-child menus, they will not be displayed. Fortunately, the solution is much easier that you'd think.&lt;br /&gt;&lt;br /&gt;First off, the way that most themes generate primary links is like so:&lt;br /&gt;theme('links', $primary_links);&lt;br /&gt;As mentioned, this will only output the top-level menu items, like so:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Menu Item 1&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Menu Item 2&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Menu Item 3&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;That's not very useful for sites with a robust navigation tree.&lt;br /&gt;&lt;br /&gt;To get around this, the simplest way is to remove the original theme() function outputing the primary links, and create a new region in your template where you'd like your navigation menu to show up. Then, you can assign the 'Primary links' block to that region, and the entire menu tree will be displayed there.&lt;br /&gt;&lt;br /&gt;To create a region in Drupal 5:&lt;br /&gt;&lt;br /&gt;You'll need to modify your theme's template.php file. If it doesn't yet have one, create it, and enter the following:&lt;br /&gt;&lt;br /&gt;function name_of_theme_regions() {&lt;br /&gt;  return array(&lt;br /&gt;        'name_of_new_region' =&gt; t('name of new region'),&lt;br /&gt;   );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;To create a region in Drupal 6:&lt;br /&gt;&lt;br /&gt;In your theme's '.info' file, you'll need to define your new region. Put something like this:&lt;br /&gt;regions[name_of_new_region] = name of new region&lt;br /&gt;&lt;br /&gt;Be sure to replace 'name_of_theme' with the name of your theme, and 'name_of_new_region' with the name of your new region.&lt;br /&gt;&lt;br /&gt;Outputting content of the new region&lt;br /&gt;&lt;br /&gt;The key of the array item (or value in between brackets for Drupal 6) will be used as the variable name in your theme files, like '$name_of_new_region'.&lt;br /&gt;&lt;br /&gt;The value of the array item (or value to the right of the equals sign for Drupal 6) will be used as the title of the region on the '/admin/build/block' page.&lt;br /&gt;&lt;br /&gt;In your page.tpl.php file, output the content of the region like so:&lt;br /&gt;&lt;?php if ($name_of_new_region) print $name_of_new_region; ?&gt;&lt;br /&gt;&lt;br /&gt;Then, head over to '/admin/build/block' and set the 'Primary links' block to the region you just created.&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/2f0tu44uarc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/4760621190924514593/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=4760621190924514593" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/4760621190924514593?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/4760621190924514593?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/2f0tu44uarc/theming-drupal-primary-links-with-child.html" title="Theming Drupal primary links with child sub-menus" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2009/01/theming-drupal-primary-links-with-child.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-6381909342367509125</id><published>2009-01-06T08:54:00.001-08:00</published><updated>2009-01-06T08:54:33.777-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2009-01-06T08:54:33.777-08:00</app:edited><title type="text">Best Practices - Drupal 6</title><content type="html">If you are going to invest the time to set up a CMS, then you should protect your investment by following some simple best practices. These guidelines are only suggestions. It is up to you to decide what is appropriate for your site.&lt;br /&gt;&lt;br /&gt;The following list contains some quick pointers (for more detailed information, see the list of articles at the bottom of this page):&lt;br /&gt;&lt;br /&gt;    * Plan your site. Drupal provides a good toolset to help you build your site but you still need to plan. Good wireframes and proper planning can avoid significant misunderstandings and problems later.&lt;br /&gt;    * Plan for the future. You should revisit and reevaluate your site each time there is a major version release of Drupal. This does not mean you have to upgrade it, but you should evaluate and plan for an upgrade approximately each 12-24 months.&lt;br /&gt;    * Get involved in the community. This will help you follow development trends and, while helping others, you may just come across a cool idea that solves your own problem.&lt;br /&gt;    * Back up your site. Back up both the database and the files on the web server. Test your backups! If you don't test them, you have no idea if you are doing it right.&lt;br /&gt;    * Test your PHP snippets. Drupal gives you a great deal of power and flexibility when using PHP code in blocks. Unfortunately, a stray character or a missing semi-colon breaks PHP. Drupal then attempts to evaluate this broken code on any requested page, the PHP interpreter chokes on it and therefore your whole site is broken. Fortunately, there is a very simple and easy solution. Instead of writing and testing your code inside the administer &gt; blocks page, go to create content and create a new story or page node. Use PHP input format, write the code, and the Preview to debug your code. When you are satisfied that your code is working, copy and paste the code into the block.&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/XvXJZOIiH64" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/6381909342367509125/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=6381909342367509125" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/6381909342367509125?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/6381909342367509125?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/XvXJZOIiH64/best-practices-drupal-6.html" title="Best Practices - Drupal 6" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2009/01/best-practices-drupal-6.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-8674539698754589580</id><published>2009-01-06T03:50:00.000-08:00</published><updated>2009-01-06T03:55:58.272-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2009-01-06T03:55:58.272-08:00</app:edited><title type="text">mktime in PHP</title><content type="html">mktime -- Get Unix timestamp for a date&lt;br /&gt;&lt;br /&gt;Note the strange order of arguments, which differs from the order of arguments in a regular Unix mktime() call and which does not lend itself well to leaving out parameters from right to left (see below). It is a common error to mix these values up in a script.&lt;br /&gt;&lt;br /&gt;Returns the Unix timestamp corresponding to the arguments given. This timestamp is a long integer containing the number of seconds between the Unix Epoch (January 1 1970) and the time specified.&lt;br /&gt;&lt;br /&gt;Arguments may be left out in order from right to left; any arguments thus omitted will be set to the current value according to the local date and time.&lt;br /&gt;&lt;br /&gt;is_dst can be set to 1 if the time is during daylight savings time, 0 if it is not, or -1 (the default) if it is unknown whether the time is within daylight savings time or not. If it's unknown, PHP tries to figure it out itself. This can cause unexpected (but not incorrect) results.&lt;br /&gt;&lt;br /&gt;    Note: is_dst was added in 3.0.10.&lt;br /&gt;&lt;br /&gt;mktime() is useful for doing date arithmetic and validation, as it will automatically calculate the correct value for out-of-range input. For example, each of the following lines produces the string "Jan-01-1998".&lt;br /&gt;&lt;br /&gt;Example: mktime() example&lt;br /&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;&lt;br /&gt;echo date("M-d-Y", mktime(0, 0, 0, 12, 32, 1997));&lt;br /&gt;&lt;br /&gt;echo date("M-d-Y", mktime(0, 0, 0, 13, 1, 1997));&lt;br /&gt;&lt;br /&gt;echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 1998));&lt;br /&gt;&lt;br /&gt;echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 98));&lt;br /&gt;&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;Year may be a two or four digit value, with values between 0-69 mapping to 2000-2069 and 70-99 to 1970-1999 (on systems where time_t is a 32bit signed integer, as most common today, the valid range for year is somewhere between 1901 and 2038).&lt;br /&gt;&lt;br /&gt;    Windows: Negative timestamps are not supported under any known version of Windows. Therefore the range of valid years includes only 1970 through 2038.&lt;br /&gt;&lt;br /&gt;The last day of any given month can be expressed as the "0" day of the next month, not the -1 day. Both of the following examples will produce the string "The last day in Feb 2000 is: 29".&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/z4N8afFcYM8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/8674539698754589580/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=8674539698754589580" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/8674539698754589580?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/8674539698754589580?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/z4N8afFcYM8/mktime-in-php.html" title="mktime in PHP" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2009/01/mktime-in-php.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-8947885898229458654</id><published>2009-01-05T04:07:00.000-08:00</published><updated>2009-01-05T04:17:38.807-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2009-01-05T04:17:38.807-08:00</app:edited><title type="text">Drupal and CVS</title><content type="html">CVS is how Drupal developers manage code. It is a tool for managing the revisions and releases of a software project that is being developed by multiple people. In such a project, each developer will create one (or more) separate copies of the code, then make local modifications to fix bugs or add features. After debugging this modified code, the developer uploads it to a server, where it is merged with the other developers' modified code to create the next release of the software. Often, two or more developers will modify the same module at the same time, which creates a big problem when they try to combine their work. It is very easy for one of them to unintentionally overwrite the other's changes.&lt;br /&gt;&lt;br /&gt;CVS helps to manage this problem by maintaining a central code repository -- a directory on the CVS server that contains the definitive archive of a project's code, as well as a complete history of that code's development. You can use CVS to download a local copy of the code -- either the very latest version (which is often called HEAD, and is typically very unstable), or one of the earlier, stable versions (which are labelled with tags to identify them). When other developers change the code, CVS can download those changes and update your local copy.&lt;br /&gt;&lt;br /&gt;When project maintainers make changes they wish to share, CVS is used to upload and commit them. If your changes threaten to overwrite those of another developer, CVS will warn you and give you a chance to resolve the conflict. And when you make a mistake, CVS can help you recover: you can read a complete log of all the changes to the code since the project began, retrieve versions of files from any time in the past, and generate patch files that summarize the difference between any two versions of the code.&lt;br /&gt;&lt;br /&gt;In addition, CVS helps developers stay up to date on the state of the project. For example, the Drupal CVS server will email all CVS commits to all maintainers, automatically informing them of the work you have done.&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/bleCjO8RAOA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/8947885898229458654/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=8947885898229458654" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/8947885898229458654?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/8947885898229458654?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/bleCjO8RAOA/drupal-and-cvs.html" title="Drupal and CVS" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2009/01/drupal-and-cvs.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-1111337108600341020</id><published>2009-01-05T03:59:00.000-08:00</published><updated>2009-01-05T04:01:44.542-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2009-01-05T04:01:44.542-08:00</app:edited><title type="text">Drupal and PHP</title><content type="html">&lt;b&gt;Drupal 7 and PHP 5.2&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Drupal has long prided itself for staying ahead of the curve technologically. In order to be able to write the best quality Drupal software, Drupal developers need the best programming tools available. Today, the best PHP available is PHP 5.&lt;br /&gt;&lt;br /&gt;PHP 5 has been deployed and tested in production environments for three years. Unfortunately, web hosts have been slow to adopt PHP 5, which has made it difficult for Drupal and many other PHP projects to fully embrace PHP 5's features.&lt;br /&gt;&lt;br /&gt;Now a growing consortium of PHP projects have joined together and push for wider PHP 5 adoption. By all embracing PHP 5 together, the projects involved in the GoPHP 5 effort are sending a message to web hosts that it is time to embrace PHP's future.&lt;br /&gt;&lt;br /&gt;Drupal is now part of that movement.&lt;br /&gt;&lt;br /&gt;After much deliberation, the Drupal project is committed to the following path:&lt;br /&gt;&lt;br /&gt;    * As of Drupal 7, changes to Drupal which use language features found exclusively in PHP 5.2 will be considered for acceptance into Drupal core.&lt;br /&gt;    * This policy effectively means that Drupal 7 will be incompatible with PHP 4.&lt;br /&gt;&lt;br /&gt;The Drupal developer community agrees that this change is best for the future of Drupal. We are excited by the potential that PHP 5 brings, and we look forward to building better software for the community.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Drupal 6 and PHP 4&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The upcoming Drupal 6 and all current Drupal releases will remain PHP 4-compatible for as long as they are supported.&lt;br /&gt;&lt;br /&gt;In Drupal 6, contributed Drupal modules and themes may declare their PHP version compatibility. Contributed modules can only be installed on systems that support the required PHP version. This change will allow developers to leverage PHP 5 features without breaking existing Drupal sites. This feature will let Drupal users evaluate the advantages of moving their sites to PHP 5.&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/8DWbfAqtFAM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/1111337108600341020/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=1111337108600341020" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/1111337108600341020?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/1111337108600341020?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/8DWbfAqtFAM/drupal-and-php.html" title="Drupal and PHP" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2009/01/drupal-and-php.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-629763500081186950</id><published>2008-12-30T05:32:00.000-08:00</published><updated>2008-12-30T05:38:10.267-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2008-12-30T05:38:10.267-08:00</app:edited><title type="text">Drupal 6 Theming Views</title><content type="html">Views 2 provides a well structured theming environment allowing presentation control for each element of your view. And in my humble opinion, it rocks!&lt;br /&gt;&lt;br /&gt;Those with no past experience with Views 1 will find Views 2 uses standard PHPTemplate theming techniques. All of your experience theming Drupal can be used with Views.&lt;br /&gt;&lt;br /&gt;Views 1 themers starting with Views 2 might be a bit confused at first. I was. The single callback in template.php where everything happened is gone, refactored into a consistent framework of template files. All of the freedom that existed in the single function still exists with the added benefit of a well defined structure.&lt;br /&gt;Overview&lt;br /&gt;&lt;br /&gt;Views handles querying the database and organizing the information for display. It creates the output display by converting retrieved data into variables and passing them through a series of templates. Each template handles a different "level" of output creation. The number of templates used to create a view's output depends on the view's type and style, as well as the number of fields involved. These templates exist as files (with a .tpl.php extension), in either the module's or the theme's directory, and follow PHPTemplate's theming conventions.&lt;br /&gt;&lt;br /&gt;Generally speaking, the template levels are:&lt;br /&gt;Field:  When fields are used in the view ("Row style" = Fields), each field can be themed with a field specific template file. If "Row style" = Node, the node's .tpl.php file is used.&lt;br /&gt;Row:  Controls how the individual fields are assembled together into a row. This template isn't used for table styles&lt;br /&gt;Style:  Controls how the rows are assembled into the output. For example, in a list view a foreach loop places each row entry into the list entry (li) of an unordered list (ul).&lt;br /&gt;Display:  Controls the other information making up the view such as title, header and footer.&lt;br /&gt;&lt;br /&gt;Each level becomes input variables for the next level up. The output of field templates are input variables for the row template, the output for the row template becomes input variables for the style template, and so on. There are also level specific variables available, such as row number. A diagram is available at http://views-help.doc.logrus.com/help/views/analyze-theme.&lt;br /&gt;&lt;br /&gt;A template file naming convention is used to make the template highly specific or highly general. Through appropriate naming, a template file can apply to all views, a view of a specific type, or a specific display of a specific view. Where multiple files might apply to a view, the one with the most specific name is used.&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/yUXLrHy0O4U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/629763500081186950/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=629763500081186950" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/629763500081186950?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/629763500081186950?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/yUXLrHy0O4U/drupal-6-theming-views.html" title="Drupal 6 Theming Views" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2008/12/drupal-6-theming-views.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-5117991243498569491</id><published>2008-12-30T05:17:00.000-08:00</published><updated>2008-12-30T05:18:17.658-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2008-12-30T05:18:17.658-08:00</app:edited><title type="text">Landmarks to see in Chennai</title><content type="html">Chennai, being the gateway to south India is a very culturally rich city and offers something for everyone, with a south Indian flair. From Christian churches to Hindu temples, from military forts to motorcycle factories, there is something for everyone here.&lt;br /&gt;&lt;br /&gt;If you are a history or a culture buff, then welcome to the melting pot of south India, for Chennai is its capital, and over the centuries has attracted people from not only over South India, but also from all over the world. A must visit place is Mylapore, with its numerous Temples depicting the classical architecture of South India over the centuries.&lt;br /&gt;&lt;br /&gt;Chennai is more or less divided into 3 sections: George Town, Egmore and Central Chennai, and South Chennai. George Town, named in honor of King George V being crowned emperor of India, is reminiscent of Chennai's colonial past, where as the other parts of Chennai have a more ethnic feel.&lt;br /&gt;&lt;br /&gt;Places to see in Chennai&lt;br /&gt;&lt;br /&gt;George Town&lt;br /&gt;1. High Court Building&lt;br /&gt;2. Fort St. George&lt;br /&gt;3. St. Mary's Church&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/9P6J_Umshtc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/5117991243498569491/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=5117991243498569491" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/5117991243498569491?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/5117991243498569491?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/9P6J_Umshtc/landmarks-to-see-in-chennai.html" title="Landmarks to see in Chennai" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2008/12/landmarks-to-see-in-chennai.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-5682226275242354719</id><published>2008-12-30T04:50:00.000-08:00</published><updated>2008-12-30T04:52:35.831-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2008-12-30T04:52:35.831-08:00</app:edited><title type="text">Sending Mail with the hook_mail in Drupal 6</title><content type="html">The Drupal 6 Mail API is used to provide mail-sending services to Drupal modules.&lt;br /&gt;In most cases, using the Mail API is a two-step process:&lt;br /&gt;1. Implement hook_mail() in your module.&lt;br /&gt;2. Elsewhere in your module, use the drupal_mail() function to invoke&lt;br /&gt;your hook_mail() implementation and also do additional formatting&lt;br /&gt;and sending.&lt;br /&gt;In the previous section, we briefly glanced at the drupal_mail() function. Here, we&lt;br /&gt;will start by looking at the function in more detail. Inside emailusers_compose_&lt;br /&gt;form_submit(), we called drupal_mail() with the following parameters:&lt;br /&gt;drupal_mail(&lt;br /&gt;'emailusers',&lt;br /&gt;'composemessage',&lt;br /&gt;$account-&gt;mail,&lt;br /&gt;user_preferred_language($account),&lt;br /&gt;$form_values,&lt;br /&gt;variable_get('site_mail', null),&lt;br /&gt;true // Automatically send&lt;br /&gt;);&lt;br /&gt;Seven parameters! To get an idea as to what is going on here, let's look at each&lt;br /&gt;in turn.&lt;br /&gt;The first parameter (emailusers) is the name of the module that contains an&lt;br /&gt;implementation of hook_mail(). Later, we will look at the emailusers_mail()&lt;br /&gt;hook that will be called when this drupal_mail() function is executed.&lt;br /&gt;The second parameter, composemessage, is used as a key and passed on to the&lt;br /&gt;hook_mail() implementation. As we will see shortly, the mail hook can then&lt;br /&gt;determine how to treat the message based on the key. In other words, you can&lt;br /&gt;use one mail hook to handle various different mail-sending tasks simply by using&lt;br /&gt;different keys.&lt;br /&gt;The third parameter should contain the destination address. In this case, an&lt;br /&gt;administrator will be sending the message to the email address for the account he or&lt;br /&gt;she is examining. This is stored in $account-&gt;mail.&lt;br /&gt;The fourth parameter is the language that should be used by t() and other&lt;br /&gt;translation facilities when translating the message. Why is it necessary to specify&lt;br /&gt;this? Since the user receiving the message may prefer a different language than that&lt;br /&gt;of the system administrator who is sending the message.Fortunately, the user_preferred_language() function, which takes an account&lt;br /&gt;object (like the one returned from load_user()), can return the appropriate&lt;br /&gt;locale information.&lt;br /&gt;The fifth parameter holds an associative array of data that might be used when&lt;br /&gt;generating the message. This data is passed on to the hook_mail() implementation,&lt;br /&gt;and we will make use of it in a few moments. In this case, though, the data we want&lt;br /&gt;happens to be the values submitted through our form. So we pass $form_values&lt;br /&gt;here.&lt;br /&gt;Moving to the sixth parameter, we need to specify a delivery address. Who is&lt;br /&gt;this message from? One of the values in Drupal's site-wide configuration is the&lt;br /&gt;administration email address. We can use this address by retrieving the setting:&lt;br /&gt;variable_get('site_mail', null). This will attempt to get the 'site_mail'&lt;br /&gt;setting. If no such setting is found, this will return the default value null (in which&lt;br /&gt;case the mailing library will attempt to assign an appropriate from address).&lt;br /&gt;The last of the seven parameters is a Boolean flag to indicate whether or not the&lt;br /&gt;message should be sent. When drupal_mail() is executed, it will return a specially&lt;br /&gt;structured array, which can be passed to drupal_mail_send(). However, if this last&lt;br /&gt;parameter is set to true, then the drupal_mail() function will send the mail before&lt;br /&gt;returning. In that case, there is no need to call the drupal_mail_send() function or&lt;br /&gt;even capture the data returned from drupal_mail().When drupal_mail() is called, it goes through a series of steps to take the data&lt;br /&gt;passed in the seven parameters and create a suitable mail message. For example, it&lt;br /&gt;sets default RFC 2822 mail headers and makes sure that certain values (like a from&lt;br /&gt;address) are set.&lt;br /&gt;Then it executes the hook_mail() implementation (if found).&lt;br /&gt;After that, it proceeds through a few other steps, like executing any hook_mail_&lt;br /&gt;alter() implementations before it (optionally) sends the email and returns a&lt;br /&gt;formatted message.So the mail hook is executed right in the middle of this process. What does it do? In&lt;br /&gt;a nutshell, it is responsible for setting appropriate fields (like the subject, CC, or BCC&lt;br /&gt;fields) as well as creating a formatted body for the message.&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/hcPyTm1LzB4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/5682226275242354719/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=5682226275242354719" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/5682226275242354719?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/5682226275242354719?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/hcPyTm1LzB4/sending-mail-with-hookmail-in-drupal-6.html" title="Sending Mail with the hook_mail in Drupal 6" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2008/12/sending-mail-with-hookmail-in-drupal-6.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-1643893340125970392</id><published>2008-12-30T03:25:00.000-08:00</published><updated>2008-12-30T03:27:25.998-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2008-12-30T03:27:25.998-08:00</app:edited><title type="text">Drupal core caching and content caching modules</title><content type="html">Drupal core caching&lt;br /&gt;&lt;br /&gt;Caching stores "elements" in a cache table in the database, so the data can be retrieved by a single query, rather that constructing the page from individual elements.&lt;br /&gt;&lt;br /&gt;Drupal's core cache has two parts, stuff that gets caches no matter what, and stuff that is optional via an administrator defined settings.&lt;br /&gt;&lt;br /&gt;The always on cache is for the menu (the hierarchy of callbacks/urls, with access information), the variable table (all the various settings and configuration), and filters (all processed texts).&lt;br /&gt;&lt;br /&gt;The optional cache is the page cache, and it only applies for anonymous users.&lt;br /&gt;&lt;br /&gt;For Drupal 4.7 and earlier, the cache table was a single table storing all of the above. As of Drupal 5.x, the cache table is split into cache_menu, cache_filter, cache_variable and cache_page to decrease contention. Also new in Drupal 5.x is aggressive caching mode.&lt;br /&gt;Cache contention&lt;br /&gt;&lt;br /&gt;On a large site, if you are using MyISAM, contention occurs in the database tables when the cache is forced to clear after a node or a comment is added. With tens of thousands of filter text snippets needing to be deleted, the table will be locked for a long period, and any accesses to it will be queued pending the purge of the data in it. The same is true for the page cache as well.&lt;br /&gt;&lt;br /&gt;This often causes a "site hang" for a minute or two. During that time new requests keep piling up, and if you do not have the MaxClients parameter in Apache setup correctly, the system can go into thrashing because of excessive swapping.&lt;br /&gt;&lt;br /&gt;Example of such cases exist here, and here.&lt;br /&gt;&lt;br /&gt;If you change your database tables to InnoDB, you can avoid the table level locking, since it supports row level locking. However, you have to be careful of some InnoDB pitfalls that can cause other queries on the site to be slow, as well as eliminate the table locks as described in that same article.&lt;br /&gt;Eliminating cache contention&lt;br /&gt;&lt;br /&gt;To get rid of this contention, you have to first disable the page cache, which requires no code change. This is only possible if you have the CPU horsepower to generate the pages and filters for every page view. This means that you are on a dedicated server (which you need anyway if you have a large site), and that you have enabled one of the PHP op-code caches/accelerators.&lt;br /&gt;&lt;br /&gt;Do disable the filter cache, you have to manually edit code in Drupal 4.7 (and remember to change it when you get a new release).&lt;br /&gt;&lt;br /&gt;In filter.module, find the function check_markup(), then delete or comment out the following lines:&lt;br /&gt;&lt;br /&gt;if ($cached = cache_get($id, 'cache_filter')) {&lt;br /&gt;return $cached-&gt;data;&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;and&lt;br /&gt;&lt;br /&gt;if ($cache) {&lt;br /&gt;cache_set($id, 'cache_filter', $text, time() + (60 * 60 * 24));&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;With these lines removed/commented, you no longer have to worry about contention for the filter cache.&lt;br /&gt;&lt;br /&gt;In Drupal 5.x, there is a nifty feature that allows you to create your own caching strategy, by replacing includes/cache.inc with a file you define.&lt;br /&gt;&lt;br /&gt;Copy the includes/cache.inc file to sites/modules/cache_no_filter/cache_no_filter.inc, and then modify the file you just created like so:&lt;br /&gt;&lt;br /&gt;In the cache_get() function, put the following at the start of the function:&lt;br /&gt;&lt;br /&gt;if ($table == 'cache_filter') {&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;And this in cache_set(), put this at the start of the function:&lt;br /&gt;&lt;br /&gt;if ($table == 'cache_filter') {&lt;br /&gt;return;&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;Then, in your settings.php file, you do the following:&lt;br /&gt;&lt;br /&gt;$conf = array( &lt;br /&gt;'cache_inc' =&gt; './sites/all/modules/cache_no_filter/cache_no_filter.inc', &lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;A pre-patched version for Drupal 5.2 can be downloaded below towards the end of this article. Just rename the file to remove the .txt extension.&lt;br /&gt;&lt;br /&gt;The beauty of this is that you do not modify Drupal core, yet hook into your custom cache.&lt;br /&gt;Contributed caching modules&lt;br /&gt;&lt;br /&gt;There are quite a few contributed modules that help with caching.&lt;br /&gt;&lt;br /&gt;For example, there is a block cache module avoids the overhead of generating blocks for every page load.&lt;br /&gt;&lt;br /&gt;Taking it a step further, there is an API module by the name pressflow preempt that allows other modules to cache any function.&lt;br /&gt;&lt;br /&gt;Avoiding the database altogether is the ultimate in caching: if the pages are stored in HTML static files, they can be served faster.&lt;br /&gt;&lt;br /&gt;Taking this approach, there is the fastpath fscache module, as well as the boost module. &lt;input type="hidden" value="Drupal Chennai Drupal Chennai Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  Drupal Chennai  "&gt;&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/lg6boTziqy4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/1643893340125970392/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=1643893340125970392" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/1643893340125970392?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/1643893340125970392?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/lg6boTziqy4/drupal-core-caching-and-content-caching.html" title="Drupal core caching and content caching modules" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2008/12/drupal-core-caching-and-content-caching.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-2583552848445136078</id><published>2008-12-30T03:14:00.000-08:00</published><updated>2008-12-30T03:17:58.247-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2008-12-30T03:17:58.247-08:00</app:edited><title type="text">Upgrade from Drupal 5 to Drupal 6</title><content type="html">The module provides full upgrade scripts for a smooth transition to Drupal 6. However, due to some multilanguage features provided now by Drupal core and that the i18n package has been fully reworked, there are some special considerations. So please, read all this page before doing anything.&lt;br /&gt;Drupal 6 upgrade notes&lt;br /&gt;&lt;br /&gt;    * To upgrade from 5.x, first upgrade to the latest 5.x stable release. To upgrade from 4.x, first upgrade to 5.x, then to 6.x&lt;br /&gt;    * Note that some old features and behaviors have been dropped and replaced by new Drupal 6 multilingual features. This module won't pretend to replace Drupal core available features but to build on them and provide extended ones.&lt;br /&gt;    * While the upgrade scripts already work for nodes and taxonomy, there's other data that is simply deleted by the main Drupal 6 core upgrade, like the menu items language.&lt;br /&gt;    * Other parts like the multilingual block system have been completely reworked and will need manual reconfiguration. Existing normal blocks won't be lost but the language settings will need manual reconfiguration.&lt;br /&gt;    * The module layout, dependencies and names have important changes, so it is advised to take your time, read the new modules descriptions, and decide on which ones you new enabled, that may be different from the Drupal 5 ones.&lt;br /&gt;&lt;br /&gt;The upgrade process&lt;br /&gt;&lt;br /&gt;   1. As with any other upgrade, make a full back up of your database before and set the site in off-line mode.&lt;br /&gt;   2. Disable all i18n modules (Disabling all contributed modules is always recommended) before upgrading to Drupal 6.&lt;br /&gt;   3. Upgrade your codebase and run the Drupal 6 standard upgrade&lt;br /&gt;   4. First, enable Drupal 6 core Translation module. Internationalization now relies on it.&lt;br /&gt;   5. Go through the Inernationalization package module list and enable the ones you need.&lt;br /&gt;   6. Run the update script again (update.php) so i18n modules can update their data properly&lt;br /&gt;   7. Review *all* the language settings (Drupal 6 core settings have also changed), and reconfigure your multilingual menus, blocks and path aliases.&lt;br /&gt;&lt;br /&gt;After upgrading&lt;br /&gt;&lt;br /&gt;    * If you are using multilingual variables, some variable names have changed in Drupal 6. Review and update your settings.&lt;br /&gt;    * Language prefixes in path aliases are not supported anymore. Instead use the new language setting for path aliases. You'll need to update them manually&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/_GDTiCVvxLE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/2583552848445136078/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=2583552848445136078" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/2583552848445136078?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/2583552848445136078?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/_GDTiCVvxLE/upgrade-from-drupal-5-to-drupal-6.html" title="Upgrade from Drupal 5 to Drupal 6" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2008/12/upgrade-from-drupal-5-to-drupal-6.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-890541189694247006</id><published>2008-12-29T04:12:00.000-08:00</published><updated>2008-12-29T04:15:23.635-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2008-12-29T04:15:23.635-08:00</app:edited><title type="text">PHP Circle in Chennai</title><content type="html">While many believe that the real action in the IT business happens in the large companies, there are very few who realise that there is life outside as well. There is a vast potential for Indian small-scale IT companies and the thousands of job-aspirant programmers/engineers who work with them.&lt;br /&gt;&lt;br /&gt;A group of professionals and companies has joined hands to form Chennai’s first PHP professional forum, a free forum, called the ‘PHP Circle’.&lt;br /&gt;&lt;br /&gt;While TCSes, Infosyses and Wipros are busy catering to the large US business segment for software development, there is a large, untapped segment viz., the US and European small online business market. This is one of the high growth markets today, especially in the US, as businesses built around strong revenue models are now emerging from the rubbles of the dot com bust.&lt;br /&gt;&lt;br /&gt;Web applications market for small online business has its own characteristics. The size of each work is small, with low budgets (yet very viable for the Indian SSI IT market), and project management issues are more complex than the conventional software market. Still, Indian IT SSIs would do well to focus on these segments, as there is relatively less competition in this market from the established IT companies.&lt;br /&gt;&lt;br /&gt;While Microsoft platforms and other higher-end tools are the preferred by medium of large-scale companies, small businesses prefer PHP and mySQL to develop their web applications in view of their being low-cost and being from the open source stable.&lt;br /&gt;&lt;br /&gt;Due to the strong inroads that Microsoft ASP and .NET have made in providing easy tools to create web applications, and also due to the fact that India is favourably tilted towards Microsoft technology, there are not many trained programmers and solution-providers available to pursue PHP-based development. So, concerted efforts are required to develop manpower in PHP and mySQL. Companies willing to join these efforts are welcome to become members of this forum.&lt;br /&gt;&lt;br /&gt;The activities proposed, all free of cost, include weekend classroom training for programmers, free tutorials, monthly forum meets with popular guest speakers, career-related contact opportunities, PHP Help Desk through bulletin boards, weekly newsletter with job postings by companies, sub-forums in engineering colleges and more.&lt;br /&gt;Anyone with the required professional qualifications/programming experience and desirous of becoming a PHP programmer can become a free member of this circle. Since PHP is a fast expanding open source development tool, India can and must become the world leader in this widely used domain. And future prospects abound.&lt;br /&gt;&lt;br /&gt;‘PHP Circle’ is a Chennai based non-profit forum. For More Information &lt;a href="http://archives.chennaionline.com/science/Technology/03php.asp"&gt;Click Here&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/Dpo0wsTFmHo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/890541189694247006/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=890541189694247006" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/890541189694247006?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/890541189694247006?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/Dpo0wsTFmHo/php-circle-in-chennai.html" title="PHP Circle in Chennai" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2008/12/php-circle-in-chennai.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-8140189125415371730</id><published>2008-12-29T01:37:00.000-08:00</published><updated>2008-12-29T01:38:20.793-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2008-12-29T01:38:20.793-08:00</app:edited><title type="text">Joomla 1.5 &amp; Drupal 6.1 Performance Comparison</title><content type="html">Alldrupalthemes.com did a performance comparision between Joomla 1.5 &amp; Drupal 6.1. As the author of the post infers, the numbers collected may not mean much to the user in the "real world" and limitations in the test results should be noted. Nevertheless, numbers that compare Drupal and Joomla performance are always interesting.&lt;br /&gt;&lt;br /&gt;The conclusions drawn from the results are:&lt;br /&gt;&lt;br /&gt;   1. Drupal is significantly faster than Joomla in all 4 setups&lt;br /&gt;   2. Drupal cuts down pageload time by ~74% when caching is enabled on the fresh install and ~86% with the more populated setup&lt;br /&gt;   3. Joomla cuts down pageload time by ~23% on the fresh install and ~20% on the more populated setup&lt;br /&gt;&lt;br /&gt;These numbers are interesting and I bet the study pulls in a lot of visitors for All Drupal Themes. Not only are Drupal and Joomla users interested in these type of posts, but so are potential users shopping around the first time for a CMS. As always, you should judge a CMS by what it does for you and not what it does for others.&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/cj5PC-eFwHA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/8140189125415371730/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=8140189125415371730" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/8140189125415371730?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/8140189125415371730?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/cj5PC-eFwHA/joomla-15-drupal-61-performance.html" title="Joomla 1.5 &amp; Drupal 6.1 Performance Comparison" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2008/12/joomla-15-drupal-61-performance.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-74373532076758789</id><published>2008-12-29T01:34:00.000-08:00</published><updated>2008-12-29T01:36:38.932-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2008-12-29T01:36:38.932-08:00</app:edited><title type="text">Project usage overview</title><content type="html">This page summarizes the usage of all projects on drupal.org. For each week beginning on the given date the figures show the number of sites that reported they are using (any version of) the project. Detailed usage information for each release of a project is available by clicking the project name.&lt;br /&gt;&lt;br /&gt;These statistics are incomplete; only Drupal websites using the Update Status module are included in the data. As this module is now included with the download of Drupal since version 6.x, the data is heavily biased toward newer sites.For more information &lt;a href="http://drupal.org/project/usage"&gt;Click Here&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/dv5G4pbLuEw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/74373532076758789/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=74373532076758789" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/74373532076758789?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/74373532076758789?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/dv5G4pbLuEw/project-usage-overview.html" title="Project usage overview" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2008/12/project-usage-overview.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-6809480893476657526</id><published>2008-12-29T00:29:00.001-08:00</published><updated>2008-12-29T00:29:52.858-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2008-12-29T00:29:52.858-08:00</app:edited><title type="text">Comparison Between Drupal And Joomla</title><content type="html">Making comparisons between Joomla and Drupal are very common these days as they are currently considered the top two open source content management systems (CMS) out there. The forum post written by Steve Burge contains a link that takes you to a comparison table he did between Joomla and Drupal. While the table may not give the full picture of each CMS, I'm convinced that Burge tried to be as non-bias as he possibly could in his comparison.&lt;br /&gt;&lt;br /&gt;There is something interesting about the table posted at Burge's site. Specifically, take a look at which elements according to Burge each CMS excels in and which elements each CMS fails. Did you notice a particular pattern in where each CMS is considered to have failed? If not, perhaps you didn't see the excerpt I posted earlier from Gadgetopia's Deane Barker, titled Architecture and Functionality in Content Management.&lt;br /&gt;&lt;br /&gt;Let me be more specific. In the table Drupal fails on such elements as Shopping Carts, Event Calendars, Document Management, and Themes. The majority of these items are functions or features which are considered lacking in the Drupal CMS. Regarding the other CMS, Joomla fails to deliver in such elements as user permission, content management, multi-site management, and standard's compliance. Joomla fails in elements that are more architecture centric.&lt;br /&gt;&lt;br /&gt;Taking the flip side, Joomla as a CMS appears to excel in elements that can be identified as functional, while Drupal succeeds in the architectural elements. Which element is more important in a CMS, architecture or function? According to Deane Barker he believes it is more important for a CMS to have better architecture.&lt;br /&gt;&lt;br /&gt;    As a developer with the capability to write code, I find myself much more concerned with architectural matters. Functionality can be programmed, but I’m at the mercy of architecture. Put another way, give me the right tools and materials, and I can build anything. But give me nothing but a pile of sand and a toothbrush, and I’m pretty much screwed.&lt;br /&gt;&lt;br /&gt;In other words, if you agree with Barker that architecture is more important than function you're likely going to want to choose Drupal. However, if you need to make a quick sell where function, third party integration, and eye candy is important right out the box...Joomla still has the advantage.&lt;br /&gt;&lt;br /&gt;What does the future hold in the post-Drupal 5 and post-Joomla 1.5 era? It's hard to say, but I'm betting Drupal will likely become very competitive in functions as it currently is in architecture. Then again Joomla may still pull a few punches as it continues to shed it's roots with Mambo. Interesting times ahead and I'll be quite interested how comparison tables such as the one we have been looking at will look like a couple more years down the road.&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/8M9x-3C9hZo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/6809480893476657526/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=6809480893476657526" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/6809480893476657526?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/6809480893476657526?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/8M9x-3C9hZo/comparison-between-drupal-and-joomla.html" title="Comparison Between Drupal And Joomla" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2008/12/comparison-between-drupal-and-joomla.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-5165918356942336574</id><published>2008-12-28T22:04:00.000-08:00</published><updated>2008-12-28T22:05:30.981-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2008-12-28T22:05:30.981-08:00</app:edited><title type="text">Chimop For Indesign</title><content type="html">layout tool in InDesign that allows for semi-automatic page layouts. Chimp has little to do with Drupal per se, but it has a lot to do with making print media more accessible for low-budget organisations and newsrooms. The beta we're running locally has cut about a third off our layout time, and we're aiming at chopping a full half of our time spent layouting. It's different from PrintCasting in that it's intended for small newsrooms (locals, student newspapers, ...) that have a layout-staff and want to be more productive, rather than providing a fully-automatic solution for people who can't afford designers. It's different from other automatic layout systems (like DTI PageMagic, the ISI docuboxx, ...) in that it'll be free rather than unaffordable for us mere mortals.&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/KeeT1qajx-U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/5165918356942336574/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=5165918356942336574" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/5165918356942336574?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/5165918356942336574?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/KeeT1qajx-U/chimop-for-indesign.html" title="Chimop For Indesign" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2008/12/chimop-for-indesign.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-6098195487736142358</id><published>2008-12-25T21:05:00.000-08:00</published><updated>2008-12-25T21:07:35.447-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2008-12-25T21:07:35.447-08:00</app:edited><title type="text">Overriding Theme Functions in Modules Instead of Template.php</title><content type="html">Drupal's theming system offers developers and designers a flexible way to override default HTML output when specific portions of the page are rendered. Everything from the name of the currently logged in user to the HTML markup of the entire page can be customized by a plugin "theme".&lt;br /&gt;&lt;br /&gt;Unfortunately, this system can be its own worst enemy. Themes are very powerful, but in many cases they're the only place where specific output can be changed without hacking core. Because of this, themes on highly customized production sites can easily turn into code-monsters, carrying the weight of making 'Drupal' look like 'My Awesome Site.'&lt;br /&gt;&lt;br /&gt;This can make maintenance difficult, and it also makes sharing these tweaks with other Drupal developers tricky. In fact, some downloadable modules also come with instructions on how to modify a theme to 'complete' the module's work. Wouldn't it be great if certain re-usable theme overrides could be packaged up and distributed as part of any Drupal? As it turns out, that is possible. In this article, we'll be exploring two ways to do it: a tweaky, hacky approach for Drupal 5, and a clean and elegant approach that's only possible in Drupal 6.&lt;br /&gt;Under the Hood&lt;br /&gt;&lt;br /&gt;Before getting into the details, we'll look at how Drupal allows themes to override HTML rendering. This mechanism will be the key to our sneaky tricks.&lt;br /&gt;&lt;br /&gt;Whenever 'themable' HTML is being generated, Drupal modules first assemble the basic data that should pre presented (an array of numbers, a content node...), then call the theme() function. For example:&lt;br /&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;$node = node_load(1); // Load node id 1 from the database&lt;br /&gt;$output = theme('node', $node); // This generates themed HTML&lt;br /&gt;print $output;&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;The first paramater passed into the theme() function is the type of data being themed, while the second parameter is the 'thing' itself. When that function is called, Drupal walks through the following process:&lt;br /&gt;&lt;br /&gt;   1. Does the theme handle it?&lt;br /&gt;      The currently installed theme is first in line to render the object to HTML. Drupal checks for a function named theme-name_object-type(), and if it exists, calls it. For example, the Garland theme uses the function garland_breadcrumb() to control how the breadcrumb trail is displayed.&lt;br /&gt;   2. Does the theme engine handle it?&lt;br /&gt;      Next in line is the current 'theme engine.' In most cases, this is Drupal's default PHPTemplate theming engine. Smarty and PHPTal are other possibile engines. As with themes, Drupal checks for a function named theme-engine-name_object-type(), and if it exists, calls it. The PHPTemplate engine uses the function phptemplate_node() to control how nodes are displayed.&lt;br /&gt;   3. Let a module handle it.&lt;br /&gt;      Finally, if no overrides are found, Drupal checks for a function named theme_object-type() and calls it if it exists. These default theme functions are usually provided by modules to offer default HTML output for objects in case no one overrides them.&lt;br /&gt;&lt;br /&gt;This approach is very flexible: it gives themes and the underlying theme engines a chance to override the HTML, lets modules provide a 'default' style of output, and it makes the complexities of the overriding process invisible to a developer who just wants to print out a node (or any other themable object) on a page. The only problem is that it doesn't provide a way for another module to jump in between steps 2 and 3, overriding the default HTML.&lt;br /&gt;Drupal 5: Sneaky, Sneaky Hacks&lt;br /&gt;&lt;br /&gt;In Drupal 5, there's no officially supported way to overcome this limitation, There is, however, a crafty trick you can use to override theme functions in your modules. Take a look back at step 2 in the explanation of Drupal's overriding process, again. Drupal checks to see whether a function named theme-engine-name_object-type() exists in order to see if a theme engine wants to override the rendering. If that function name exists, Drupal will use it -- even if it's implemented in your module, not the actual theme engine.&lt;br /&gt;&lt;br /&gt;What does that mean? If your module implements the function phptemplate_username(), it will be treated as if it's the theme engine in step 2, overriding the default markup provided by Drupal core, without making any changes to the theme itself. Voila!&lt;br /&gt;&lt;br /&gt;The downside, of course, is that if the theme engine you're using does provide its own override, no module can play this trick: the function name already exists, and trying to define it again in your module will cause PHP errors. It can still be a useful way to isolate site-specific chunks of theme code in a way that's easy to track, enable or disable, and so on.&lt;br /&gt;Drupal 6: The Land of Milk and Honey&lt;br /&gt;&lt;br /&gt;In Drupal 6, things are a bit different. The same basic hierarchy is still in place: first themes, then theme engines, then modules all get opportunities to render an object to HTML. However, Drupal now caches the information about what function should be used in an internal "theme registry." This saves Drupal the work of 'discovering' who's in charge each time the theme() function is called.&lt;br /&gt;&lt;br /&gt;In addition to saving time, though, this cached "registry" of theme functions is something that modules can modify using the hook_theme_registry_alter() function. What does that mean? While a module can't insert itself between steps 2 and 3 in the discovery process, it can step in after the discovery process is complete, and replace the default function from step 1 with its own version -- even if it doesn't follow the naming conventions Drupal expects.&lt;br /&gt;&lt;br /&gt;Let's take a quick look at how this works, stealing a snippet of code from the WordPress Comments module. It's a module that intercepts Drupal's default rendering of all form elements to tweak the appearance of labels and 'required' flags on certain forms.&lt;br /&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;function wp_comments_theme_registry_alter(&amp;$theme_registry) {&lt;br /&gt;  if (!empty($theme_registry['form_element'])) {&lt;br /&gt;    $theme_registry['form_element']['function'] = 'wp_comments_form_element';&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function wp_comments_form_element($element, $value) {&lt;br /&gt;  // Here, we provide our customized version of the&lt;br /&gt;  // theme_form_element function from theme.inc...&lt;br /&gt;}&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;The above code is pretty straightforward: in hook_theme_registry_alter(), it first checks to be sure that the form_element theme data is properly defined, then swaps in its own custom function (wp_comments_form_element) in place of the default one (theme_form_element).&lt;br /&gt;&lt;br /&gt;The beautiful part of this system is that it continues to work cleanly with custom themes: if a theme overrides the form_element theming code as well, it will still take precedence over wp_comments' version. In addition, there's no chance of colliding function names, as it relies on the theme registry rather than 'magic' function names like phptemplate_form_element().&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/mwVa1_BfnW8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/6098195487736142358/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=6098195487736142358" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/6098195487736142358?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/6098195487736142358?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/mwVa1_BfnW8/overriding-theme-functions-in-modules.html" title="Overriding Theme Functions in Modules Instead of Template.php" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2008/12/overriding-theme-functions-in-modules.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-1913498820476318847</id><published>2008-12-23T22:23:00.000-08:00</published><updated>2008-12-24T01:58:26.992-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2008-12-24T01:58:26.992-08:00</app:edited><title type="text">Form Building in Drupal</title><content type="html">It's the Form builder module: an AJAX, Drag and Drop interface for constructing forms in Drupal.The Form builder project reads and modifies Form API arrays. Using a well-known data-structure that most Drupal developers are familiar with should make for low barrier to entry for utilizing the new module.&lt;br /&gt;&lt;br /&gt;The project uses a AJAX-based interface for updating form elements. As you modify properties such as "Title" or "Description", Form builder makes requests in the background to update the element through Drupal's internal FAPI system. The user gets a live preview of their changes without saving the form. This approach means that no additional JavaScript needs to be written by implementing modules, since the rendering is done in PHP and then sent to the client as needed. For Live Demo &lt;a href="http://quicksketch.org/demos/form-builder-example"&gt;Click Here.&lt;/a&gt;This module is still very new, so it is not recommended using it on any production site.&lt;input type="hidden" value="Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai Chennai"&gt;&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/75fdFNYZxig" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/1913498820476318847/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=1913498820476318847" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/1913498820476318847?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/1913498820476318847?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/75fdFNYZxig/form-building-in-drupal.html" title="Form Building in Drupal" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2008/12/form-building-in-drupal.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-1768796221269986780</id><published>2008-11-26T02:15:00.000-08:00</published><updated>2008-12-06T00:33:55.590-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2008-12-06T00:33:55.590-08:00</app:edited><title type="text">Photo Album</title><content type="html">&lt;div style="visibility:visible"&gt;&lt;embed src="http://flash.picturetrail.com/pflicks/3/spflick.swf" quality="high" FlashVars="ql=2&amp;src1=http://pic90.picturetrail.com/VOL2347/11806128/flicks/1/6068725" wmode="transparent" bgcolor="#000000" width="460" height="350" name="liquid" align="middle" allowScriptAccess="sameDomain" style="height:350px;width:460px" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;p style="whitespace:no-wrap;margin-top:10px;height:24px"&gt;&lt;a href="http://www.picturetrail.com/misc/counter.fcgi?link=%2FphotoFlick%2Fsamples%2Fpflicks.shtml&amp;cID=924"&gt;&lt;img align="left" src="http://pics.picturetrail.com/res/pflicks/pt.gif" border="0"&gt;&lt;/a&gt;&lt;a href="http://www.picturetrail.com/misc/counter.fcgi?link=%2FphotoFlick%2Fsamples%2Fpflicks.shtml&amp;cID=925"&gt;&lt;img align="left" style="margin-left:5px" src="http://pics.picturetrail.com/static/images/pt2.gif" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/ydLSWoQ4f-E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/1768796221269986780/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=1768796221269986780" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/1768796221269986780?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/1768796221269986780?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/ydLSWoQ4f-E/india-vs-england-5th-odi-live.html" title="Photo Album" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2008/11/india-vs-england-5th-odi-live.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3090627440855066648.post-508075543955608841</id><published>2008-11-25T05:22:00.000-08:00</published><updated>2008-11-25T05:23:08.193-08:00</updated><app:edited xmlns:app="http://purl.org/atom/app#">2008-11-25T05:23:08.193-08:00</app:edited><title type="text">December 12 2012 THE END</title><content type="html">&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/11iCmzGnOI8&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/11iCmzGnOI8&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;img src="http://feeds.feedburner.com/~r/MadhanAtChennai-DrupalCms/~4/P0FT568dJZs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madhan-chennai.blogspot.com/feeds/508075543955608841/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=3090627440855066648&amp;postID=508075543955608841" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/508075543955608841?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3090627440855066648/posts/default/508075543955608841?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadhanAtChennai-DrupalCms/~3/P0FT568dJZs/december-12-2012-end.html" title="December 12 2012 THE END" /><author><name>Madhan Mohan</name><uri>http://www.blogger.com/profile/11954212580297023155</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://madhan-chennai.blogspot.com/2008/11/december-12-2012-end.html</feedburner:origLink></entry></feed>
