<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5594179984753423894</id><updated>2011-11-28T04:58:32.388+05:30</updated><title type='text'>Nagarajan in Drupal Chennai</title><subtitle type='html'>Drupal Chennai, Opensource, CMS, PHP, Drupal, Frameworks</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>23</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5594179984753423894.post-224497670761571570</id><published>2011-07-23T22:54:00.004+05:30</published><updated>2011-07-23T23:20:52.112+05:30</updated><title type='text'>Hook to register JS/CSS libraries in Drupal 7</title><content type='html'>&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" latentstylecount="156"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable  {mso-style-name:"Table Normal";  mso-tstyle-rowband-size:0;  mso-tstyle-colband-size:0;  mso-style-noshow:yes;  mso-style-parent:"";  mso-padding-alt:0in 5.4pt 0in 5.4pt;  mso-para-margin:0in;  mso-para-margin-bottom:.0001pt;  mso-pagination:widow-orphan;  font-size:10.0pt;  font-family:"Times New Roman";  mso-ansi-language:#0400;  mso-fareast-language:#0400;  mso-bidi-language:#0400;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;span style="font-family:Verdana;"&gt;hook_library()&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Verdana;font-size:10.0pt;"&gt;Registers JavaScript/CSS libraries associated with a module.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Verdana;font-size:10.0pt;"&gt;Modules implementing this return an array of arrays. The key to each sub-array is the machine readable name of the library. Each library may contain the following items:&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l0 level1 lfo1;tab-stops:list .5in"&gt;&lt;span style="      ;font-family:Verdana;font-size:10.0pt;"  &gt;'title': The human readable name of the library. &lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l0 level1 lfo1;tab-stops:list .5in"&gt;&lt;span style="      ;font-family:Verdana;font-size:10.0pt;"  &gt;'website': The URL of the library's web site. &lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l0 level1 lfo1;tab-stops:list .5in"&gt;&lt;span style="      ;font-family:Verdana;font-size:10.0pt;"  &gt;'version': A string specifying the version of the      library; intentionally not a float because a version like      "1.2.3" is not a valid float. Use PHP's &lt;a href="http://php.net/version_compare" title="mixed version_compare(string $version1, string $version2 [, string $operator = ''])      Compares two &amp;quot;PHP-standardized&amp;quot; version number strings"&gt;version_compare&lt;/a&gt;()      to compare different versions. &lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l0 level1 lfo1;tab-stops:list .5in"&gt;&lt;span style="      ;font-family:Verdana;font-size:10.0pt;"  &gt;'js': An array of JavaScript elements; each element's      key is used as $data argument, each element's value is used as $options      array for &lt;a href="http://api.drupal.org/api/drupal/includes--common.inc/function/drupal_add_js/7" title="Adds a JavaScript file, setting, or inline code to the page."&gt;drupal_add_js&lt;/a&gt;().      To add library-specific (not module-specific) JavaScript settings, the key      may be skipped, the value must specify 'type' =&amp;gt; 'setting', and the      actual settings must be contained in a 'data' element of the value. &lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l0 level1 lfo1;tab-stops:list .5in"&gt;&lt;span style="      ;font-family:Verdana;font-size:10.0pt;"  &gt;'css': Like 'js', an array of CSS elements passed to &lt;a href="http://api.drupal.org/api/drupal/includes--common.inc/function/drupal_add_css/7" title="Adds a cascading stylesheet to the stylesheet queue."&gt;drupal_add_css&lt;/a&gt;().      &lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l0 level1 lfo1;tab-stops:list .5in"&gt;&lt;span style="      ;font-family:Verdana;font-size:10.0pt;"  &gt;'dependencies': An array of libraries that are      required for a library. Each element is an array listing the module and      name of another library. Note that all dependencies for each dependent      library will also be added when this library is added. &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;&lt;span style="font-family:Verdana;font-size:10.0pt;"&gt;Registered information for a library should contain re-usable data only. Module- or implementation-specific data and integration logic should be added separately.&lt;/span&gt;&lt;/p&gt;  &lt;h3&gt;&lt;span style="font-family:Verdana;font-size:10.0pt;"&gt;Return value&lt;/span&gt;&lt;/h3&gt;  &lt;p&gt;&lt;span style="font-family:Verdana;font-size:10.0pt;"&gt;An array defining libraries associated with a module.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;span style="font-family:Verdana;font-size:10.0pt;"&gt;Usage&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Verdana;font-size:10.0pt;"&gt;If you want to call &lt;a href="http://api.drupal.org/api/drupal/includes--common.inc/function/drupal_add_library/7"&gt;&lt;code&gt;&lt;span style="font-family:Verdana;"&gt;drupal_add_library()&lt;/span&gt;&lt;/code&gt;&lt;/a&gt; in node add / edit pages, following approaches can be used.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;span style="font-family:Verdana;font-size:10.0pt;"&gt;Method 1:&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;pre&gt;&lt;span class="kwd"&gt;&lt;span style="font-family:Verdana;"&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span style="font-family:Verdana;"&gt; &lt;b&gt;MODULE1&lt;/b&gt;_form_alter&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span style="font-family:Verdana;"&gt;(&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span style="font-family:Verdana;"&gt;$form&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span style="font-family:Verdana;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span style="font-family:Verdana;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span style="font-family:Verdana;"&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span style="font-family:Verdana;"&gt;$form_state&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span style="font-family:Verdana;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span style="font-family:Verdana;"&gt; $form_id&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span style="font-family:Verdana;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span style="font-family:Verdana;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span style="font-family:Verdana;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;br /&gt;&lt;span class="pln"&gt;  &lt;/span&gt;&lt;span class="kwd"&gt;if&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;isset&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;$form&lt;/span&gt;&lt;span class="pun"&gt;[&lt;/span&gt;&lt;span class="str"&gt;'#node_edit_form'&lt;/span&gt;&lt;span class="pun"&gt;])&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="pln"&gt; $form&lt;/span&gt;&lt;span class="pun"&gt;[&lt;/span&gt;&lt;span class="str"&gt;'#node_edit_form'&lt;/span&gt;&lt;span class="pun"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class="pln"&gt;    &lt;span style="mso-tab-count:1"&gt;        &lt;/span&gt;drupal_add_library&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="str"&gt;'&lt;b&gt;MODULE&lt;/b&gt;'&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str"&gt;'&lt;b&gt;LIBRARY&lt;/b&gt;'&lt;/span&gt;&lt;span class="pun"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span class="pln"&gt;  &lt;/span&gt;&lt;span class="pun"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="pun"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;  &lt;p&gt;&lt;span style="font-family:Verdana;font-size:10.0pt;"&gt;This should ensure the library is loaded whenever a node form is displayed.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;span style="font-family:Verdana;font-size:10.0pt;"&gt;Method 2:&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Verdana;font-size:10.0pt;"&gt;Using the ‘#attached’ attribute in &lt;b&gt;hook_form_BASE_FORM_ID_alter&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;pre&gt;&lt;span class="kwd"&gt;&lt;span style="font-family:Verdana;"&gt;function&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span style="font-family:Verdana;"&gt; &lt;b&gt;MODULE1&lt;/b&gt;_form_node_form_alter&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span style="font-family:Verdana;"&gt;(&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span style="font-family:Verdana;"&gt;$form&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span style="font-family:Verdana;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span style="font-family:Verdana;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span style="font-family:Verdana;"&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span style="font-family:Verdana;"&gt;$form_state&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span style="font-family:Verdana;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span style="font-family:Verdana;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span style="font-family:Verdana;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;br /&gt;&lt;span class="pln"&gt;  $form&lt;/span&gt;&lt;span class="pun"&gt;[&lt;/span&gt;&lt;span class="str"&gt;'#attached'&lt;/span&gt;&lt;span class="pun"&gt;][&lt;/span&gt;&lt;span class="str"&gt;'library'&lt;/span&gt;&lt;span class="pun"&gt;][]&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; array&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="str"&gt;'&lt;b&gt;MODULE&lt;/b&gt;'&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str"&gt;'&lt;b&gt;LIBRARY&lt;/b&gt;'&lt;/span&gt;&lt;span class="pun"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span class="pun"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:10.0pt;"&gt;If you are modifying, or outputting a form, you can use the &lt;a href="http://api.drupal.org/api/drupal/developer--topics--forms_api_reference.html/7#attached"&gt;#attached&lt;/a&gt; attribute, which is described as "allows loading of CSS, Javascript, libraries, or custom types when the form is built".&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594179984753423894-224497670761571570?l=nagarajan-drupal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/224497670761571570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5594179984753423894&amp;postID=224497670761571570' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/224497670761571570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/224497670761571570'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/2011/07/hook-to-register-jscss-libraries-in.html' title='Hook to register JS/CSS libraries in Drupal 7'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5594179984753423894.post-7701660611966380004</id><published>2010-08-29T23:50:00.001+05:30</published><updated>2010-08-29T23:50:37.578+05:30</updated><title type='text'>Droopal</title><content type='html'>&lt;p&gt;&lt;br /&gt;      The Droopal module offers out of the box support for writing modules in full OOP and accessing other modules via OOP. While not all developers wish to have this functionality, this module is targeted at those who do. Here are some examples of what you can do out of the box, all with zero configuration:&lt;br /&gt;    &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;          Access any core module using OOP:&lt;br /&gt;        &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&amp;lt;?php&lt;br /&gt;&amp;nbsp; ModNode&lt;/span&gt;&lt;span style="color: #007700"&gt;::&lt;/span&gt;&lt;span style="color: #0000BB"&gt;load&lt;/span&gt;&lt;span style="color: #007700"&gt;()&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;          This would be the equivalent of:&lt;br /&gt;        &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&amp;lt;?php&lt;br /&gt;&amp;nbsp; node_load&lt;/span&gt;&lt;span style="color: #007700"&gt;()&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;          Access any core include using OOP:&lt;br /&gt;        &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&amp;lt;?php&lt;br /&gt;&amp;nbsp; LibCommon&lt;/span&gt;&lt;span style="color: #007700"&gt;::&lt;/span&gt;&lt;span style="color: #0000BB"&gt;drupal_add_css&lt;/span&gt;&lt;span style="color: #007700"&gt;()&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;          This would be the equivalent of:&lt;br /&gt;        &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&amp;lt;?php&lt;br /&gt;&amp;nbsp; drupal_add_css&lt;/span&gt;&lt;span style="color: #007700"&gt;(); &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;          Access any non-core module or include using OOP:&lt;br /&gt;        &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&amp;lt;?php&lt;br /&gt;&amp;nbsp; ModImagecache&lt;/span&gt;&lt;span style="color: #007700"&gt;::&lt;/span&gt;&lt;span style="color: #0000BB"&gt;action_save&lt;br /&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;          This would be the equivalent of:&lt;br /&gt;        &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&amp;lt;?php&lt;br /&gt;&amp;nbsp; imagecache_action_save&lt;/span&gt;&lt;span style="color: #007700"&gt;()&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;          Write custom modules using OOP structures:&lt;br /&gt;        &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;div class="codeblock"&gt;&lt;code&gt;&lt;span style="color: #000000"&gt;&lt;span style="color: #0000BB"&gt;&amp;lt;?php&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #007700"&gt;class &lt;/span&gt;&lt;span style="color: #0000BB"&gt;ModMyModule &lt;/span&gt;&lt;span style="color: #007700"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// hook_menu&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;menu&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;//etc...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #007700"&gt;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;// hook_nodeapi&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #007700"&gt;function &lt;/span&gt;&lt;span style="color: #0000BB"&gt;nodeapi&lt;/span&gt;&lt;span style="color: #007700"&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #FF8000"&gt;//etc...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #007700"&gt;}&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000BB"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;      The functionality to make this work is completely hidden and offered at virtually no performance hit. All existing Drupal APIs also remain completely intact.&lt;br /&gt;    &lt;/p&gt;&lt;br /&gt;&lt;h2&gt;WARNINGS&lt;/h2&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;        This module will safely modify your core Drupal files.&lt;br /&gt;      &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;        Upon un-installation, this file will safely restore your core Drupal files, provided you follow the instructions below.&lt;br /&gt;      &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;        If any of the installation instructions below do not make sense to you, don't make assumptions. As with any module, know what you are doing before installing this module.&lt;br /&gt;      &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;        This module has only been designed to work on UNIX based systems.&lt;br /&gt;      &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h2&gt;INSTALLATION INSTRUCTIONS&lt;/h2&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;        As always, backup your important files&lt;br /&gt;      &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;        Make sure the "patch" utility is installed and accessible from from your PHP scripts. This is VERY IMPORTANT. On most OSX, Linux, and Unix Variants the "patch" utility will be installed and accessible by default from PHP.&lt;br /&gt;      &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;        Download and unzip the module into your modules directory like any other module&lt;br /&gt;      &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;        Set the permissions to be writeable by your webserver for the following files:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;includes/menu.inc&lt;/li&gt;&lt;br /&gt;&lt;li&gt;includes/module.inc&lt;/li&gt;&lt;br /&gt;&lt;li&gt;includes/theme.inc&lt;/li&gt;&lt;br /&gt;&lt;li&gt;modules/node/node.module&lt;/li&gt;&lt;br /&gt;&lt;li&gt;modules/user/user.module&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;sites/all/files or sites/default/files&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;        THESE PERMISSIONS MUST ALSO BE SET FOR UNINSTALLATION TO SUCCEED&lt;br /&gt;      &lt;/p&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;        Activate module "Droopal"&lt;br /&gt;      &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;        For testing and examples, activate module "Droopal Demo OOP", which can&lt;br /&gt;&lt;br /&gt;    be compared and contrasted with the module, "Drupal Demo Standard".&lt;br /&gt;      &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594179984753423894-7701660611966380004?l=nagarajan-drupal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/7701660611966380004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5594179984753423894&amp;postID=7701660611966380004' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/7701660611966380004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/7701660611966380004'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/2010/08/droopal.html' title='Droopal'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5594179984753423894.post-8886566679579929659</id><published>2009-01-30T20:01:00.002+05:30</published><updated>2009-01-30T20:06:44.462+05:30</updated><title type='text'>Genesis - A starter theme for Drupal 6</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_6Gam5qOpQIw/SYMPsw5PIPI/AAAAAAAAAGQ/zYHoQFB3faA/s1600-h/genesis.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 300px; height: 146px;" src="http://4.bp.blogspot.com/_6Gam5qOpQIw/SYMPsw5PIPI/AAAAAAAAAGQ/zYHoQFB3faA/s320/genesis.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5297094848431464690" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;&lt;a href="http://drupal.org/project/genesis"&gt;Genesis&lt;/a&gt; is a starter theme for Drupal 6&lt;/b&gt; and is an ideal way to get started building your own Drupal theme. Similar to other frameworks the idea is to build a subtheme. A starter subtheme is included in the download. Using a starter theme makes building a theme faster and easier than starting from scratch. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://drupal.adaptivethemes.com/node?theme=genesis_SUBTHEME"&gt;Genesis Subtheme demo site&lt;/a&gt;. View the un-styled subtheme and use the theme switcher to view demos of the pre-built subthemes as well.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Main Features:&lt;/h3&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Provides easy sub theming.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;7 easy to use layouts included - &lt;em&gt;&lt;a href="http://drupal.org/node/323406"&gt;view screenshots&lt;/a&gt;&lt;/em&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Use a different layout for each page-xxx.tpl.php file.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Fluid or Fixed width.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Built in snippets for aligning Primary &amp; Secondary links center or right.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Additional regions - &lt;em&gt;&lt;a href="http://adaptivethemes.com/genesis-tutorials/pagetplphp-variables-screenshot"&gt;see a visual rendering of page.tpl.php&lt;/a&gt;&lt;/em&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Elastic design - all values in ems.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;All core CSS is abstracted into mini-stylesheets, allowing you to unset what you don't need.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Prints many conditional CSS classes to make themeing easier - body, page, node, comment, block, header &amp; nav classes.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://drupal.org/project/genesis_LITE"&gt;genesis_LITE sub-theme&lt;/a&gt; -  a lite-weight version with much less HTML.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Tested in all A grade browsers, including IE6.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Many comments included in the CSS and templates.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;You must first download Genesis and install it in your Drupal site, then add the subthemes.&lt;/b&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594179984753423894-8886566679579929659?l=nagarajan-drupal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/8886566679579929659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5594179984753423894&amp;postID=8886566679579929659' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/8886566679579929659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/8886566679579929659'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/2009/01/genesis-starter-theme-for-drupal-6.html' title='Genesis - A starter theme for Drupal 6'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_6Gam5qOpQIw/SYMPsw5PIPI/AAAAAAAAAGQ/zYHoQFB3faA/s72-c/genesis.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5594179984753423894.post-1396198246571450890</id><published>2009-01-24T19:22:00.005+05:30</published><updated>2009-01-24T22:09:07.395+05:30</updated><title type='text'>Drupal 6 Hooks</title><content type='html'>&lt;strong&gt;&lt;a href = 'http://api.drupal.org/api/function/hook_menu_alter/6'&gt;hook_menu_alter(&amp;$callbacks)&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;Alter the data being saved to the {menu_router} table after hook_menu is invoked.This hook is invoked by &lt;a href="/api/function/menu_router_build/6" title="Collect, alter and store the menu definitions." class="local"&gt;menu_router_build&lt;/a&gt;(). The menu definitions are passed in by reference.  Each element of the $callbacks array is one item returned by a module from hook_menu.  Additional items may be added, or existing items&lt;br /&gt;altered.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href = 'http://api.drupal.org/api/function/hook_mail/6'&gt;hook_mail($key, &amp;$message, $params)&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;Prepare a message based on parameters. @see drupal_mail for more.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href = 'http://api.drupal.org/api/function/hook_watchdog/6'&gt;hook_watchdog($log_entry)&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;Log an event message. This hook allows modules to route log events to custom destinations, such as SMS, Email, pager, syslog, ...etc.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href = 'http://api.drupal.org/api/function/hook_theme/6'&gt;hook_theme($existing, $type, $theme, $path)&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Register a module (or theme's) theme implementations.&lt;br /&gt;&lt;br /&gt;Modules and themes implementing this return an array of arrays. The key to each sub-array is the internal name of the hook, and the array contains info about the hook.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href = 'http://api.drupal.org/api/function/hook_theme_registry_alter/6'&gt;hook_theme_registry_alter(&amp;$theme_registry)&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Alter the theme registry information returned from hook_theme().&lt;br /&gt;&lt;br /&gt;The theme registry stores information about all available theme hooks, including which callback functions those hooks will call when triggered, what template files are exposed by these hooks, and so on.&lt;br /&gt;&lt;br /&gt;Note that this hook is only executed as the theme cache is re-built. Changes here will not be visible until the next cache clear.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href = 'http://api.drupal.org/api/function/hook_boot/6'&gt;hook_boot()&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Perform setup tasks. See also, hook_init.&lt;br /&gt;&lt;br /&gt;This hook is run at the beginning of the page request. It is typically used to set up global parameters which are needed later in the request.&lt;br /&gt;&lt;br /&gt;Only use this hook if your code must run even for cached page views.This hook is called before modules or most include files are loaded into memory. It happens while Drupal is still in bootstrap mode.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href = 'http://api.drupal.org/api/function/hook_form_FORM_ID_alter/6'&gt;hook_form_FORM_ID_alter(&amp;$form, &amp;$form_state)&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Provide a form-specific alteration instead of the global hook_form_alter().&lt;br /&gt;&lt;br /&gt;Modules can implement hook_form_FORM_ID_alter() to modify a specific form, rather than implementing hook_form_alter() and checking the form ID, or using long switch statements to alter multiple forms.&lt;br /&gt;&lt;br /&gt;Note that this hook fires before hook_form_alter(). Therefore all implementations of hook_form_FORM_ID_alter() will run before all implementations of hook_form_alter(), regardless of the module order.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href = 'http://api.drupal.org/api/function/hook_term_path/6'&gt;hook_term_path($term)&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Allows modules to provide an alternative path for the terms it manages.&lt;br /&gt;&lt;br /&gt;For vocabularies not maintained by taxonomy.module, give the maintaining module a chance to provide a path for terms in that vocabulary.&lt;br /&gt;&lt;br /&gt;"Not maintained by taxonomy.module" is misleading. It means that the vocabulary table contains a module name in the 'module' column. Any module may update this column and will then be called to provide an alternative path for the terms it recognizes (manages).&lt;br /&gt;&lt;br /&gt;This hook should be used rather than hard-coding a "taxonomy/term/xxx" path. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href = 'http://api.drupal.org/api/function/hook_locale/6'&gt;hook_locale($op = 'groups')&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Allows modules to define their own text groups that can be translated.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href = 'http://api.drupal.org/api/function/hook_schema/6'&gt;hook_schema()&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Define the current version of the database schema.&lt;br /&gt;&lt;br /&gt;A Drupal schema definition is an array structure representing one or more tables and their related keys and indexes. A schema is defined by hook_schema() which must live in your module's .install file.&lt;br /&gt;&lt;br /&gt;By implementing hook_schema() and specifying the tables your module declares, you can easily create and drop these tables on all supported database engines. You don't have to deal with the different SQL dialects for table creation and alteration of the supported database engines.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href = 'http://api.drupal.org/api/function/hook_schema/6'&gt;hook_system_info_alter(&amp;$info, $file)&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Alter the information parsed from module and theme .info files&lt;br /&gt;&lt;br /&gt;This hook is invoked in module_rebuild_cache() and in system_theme_data(). A module may implement this hook in order to add to or alter the data generated by reading the .info file with drupal_parse_info_file().&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594179984753423894-1396198246571450890?l=nagarajan-drupal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/1396198246571450890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5594179984753423894&amp;postID=1396198246571450890' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/1396198246571450890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/1396198246571450890'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/2009/01/drupal6-hooks.html' title='Drupal 6 Hooks'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5594179984753423894.post-8789445213017622381</id><published>2009-01-11T18:56:00.005+05:30</published><updated>2009-01-21T23:58:02.582+05:30</updated><title type='text'>OOP Concepts in Drupal</title><content type='html'>&lt;p&gt;Despite the lack of explicitly-declared classes in Drupal, many&lt;br /&gt;    object-oriented paradigms are still used in its design. There are many sets&lt;br /&gt;    of "essential features" that are said to be necessary to classify a system&lt;br /&gt;    as object-oriented; we will look at one of the &lt;a href="http://en.wikipedia.org/wiki/Object-oriented_programming"&gt;more popular definitions&lt;/a&gt; and examine some ways in which Drupal exhibits those characteristics.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;    &lt;h3&gt;Objects&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;    &lt;p&gt;There are many constructs in Drupal that fit the description of an&lt;br /&gt;    "object". Some of the more prominent Drupal components that could be&lt;br /&gt;    considered objects are modules, themes, nodes, and users.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;    &lt;p&gt;Nodes are the basic content building blocks of a Drupal site, and&lt;br /&gt;    bundle together the data that makes up a "page" or "story" on a typical&lt;br /&gt;    site. The methods that operate on this object are defined in &lt;a href="/api/file/modules/node/node.module/6" title="The core that allows content to be submitted to the site. Modules and scripts may&lt;br /&gt;programmatically submit nodes using the usual form API pattern." class="local"&gt;node.module&lt;/a&gt;,&lt;br /&gt;    usually called by the &lt;a href="/api/function/node_invoke/6" title="Invoke a node hook." class="local"&gt;node_invoke&lt;/a&gt;() function. User objects similarly&lt;br /&gt;    package data together, bringing together information about each account on&lt;br /&gt;    the site, profile information, and session tracking. In both cases, the&lt;br /&gt;    data structure is defined by a database table instead of a class. Drupal&lt;br /&gt;    exploits the relational nature of its supported databases to allow other&lt;br /&gt;    modules to extend the objects with additional data fields.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;    &lt;p&gt;Modules and themes are object-like as well, filling the "controller"&lt;br /&gt;    role in many ways. Each module is a source file, but also bundles together&lt;br /&gt;    related functions and follows a pattern of defining Drupal hooks.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;    &lt;h3&gt;Abstraction&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;    &lt;p&gt;Drupal's &lt;a href="http://api.drupal.org/api/group/hooks"&gt;hook&lt;br /&gt;    system&lt;/a&gt; is the basis for its interface abstraction. Hooks define the&lt;br /&gt;    operations that can be performed on or by a module. If a module implements&lt;br /&gt;    a hook, it enters into a contract to perform a particular task when the&lt;br /&gt;    hook is invoked. The calling code need not know anything else about the&lt;br /&gt;    module or the way the hook is implemented in order to get useful work done&lt;br /&gt;    by invoking the hook.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;    &lt;h3&gt;Encapsulation&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;    &lt;p&gt;Like most other object-oriented systems, Drupal does not have a way of&lt;br /&gt;    strictly limiting access to an object's inner workings, but rather relies&lt;br /&gt;    on convention to accomplish this. Since Drupal code is based around&lt;br /&gt;    functions, which share a single namespace, this namespace is subdivided by&lt;br /&gt;    the use of prefixes. By following this simple convention, each module can&lt;br /&gt;    declare its own functions and variables without the worry of conflict with&lt;br /&gt;    others.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;    &lt;p&gt;Convention also delineates the public API of a class from its internal&lt;br /&gt;    implementation. Internal functions are prefixed by an underscore to&lt;br /&gt;    indicate that they should not be called by outside modules. For example,&lt;br /&gt;    &lt;a href="/api/function/_user_categories/6" title="Retrieve a list of all user setting/information categories and sort them by weight." class="local"&gt;_user_categories&lt;/a&gt;() is a private function which is subject to change without&lt;br /&gt;    notice, while &lt;a href="/api/function/user_save/6" title="Save changes to a user account or add a new user." class="local"&gt;user_save&lt;/a&gt;() is part of the public interface to the user&lt;br /&gt;    object and can be called with the expectation that the user object will be&lt;br /&gt;    saved to the database (even though the method of doing this is&lt;br /&gt;    private).&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;    &lt;h3&gt;Polymorphism&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;    &lt;p&gt;Nodes are polymorphic in the classical sense. If a module needs to&lt;br /&gt;    display a node, for example, it can call &lt;a href="/api/function/node_view/6" title="Generate a display of the given node." class="local"&gt;node_view&lt;/a&gt;() on that node to get an&lt;br /&gt;    HTML representation. The actual rendering, though, will depend on which&lt;br /&gt;    type of node is passed to the function; this is directly analogous to&lt;br /&gt;    having the class of an object determine its behavior when a message is sent&lt;br /&gt;    to it. Drupal itself handles the same introspection tasks required of an&lt;br /&gt;    OOP language's runtime library.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;    &lt;p&gt;Furthermore, the rendering of the node in this example can be affected&lt;br /&gt;    by the active theme. Themes are polymorphic in the same way; the theme is&lt;br /&gt;    passed a "render this node" message, and responds to it in a different way&lt;br /&gt;    depending on the implementation of the active theme, though the interface&lt;br /&gt;    is constant.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;    &lt;h3&gt;Inheritance&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;    &lt;p&gt;Modules and themes can define whatever functions they please. However,&lt;br /&gt;    they can both be thought to inherit their behavior from an abstract base&lt;br /&gt;    class. In the case of themes, the behavior of this class is determined by&lt;br /&gt;    the functions in &lt;a href="/api/file/includes/theme.inc/6" title="The theme system, which controls the output of Drupal." class="local"&gt;theme.inc&lt;/a&gt;; if a theme does not override a function defined&lt;br /&gt;    there, the default rendering of an interface component is used, but the&lt;br /&gt;    theme can instead provide its own rendering. Modules similarly have the&lt;br /&gt;    selection of all Drupal hooks to override at will, and may pick and choose&lt;br /&gt;    which ones to implement.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594179984753423894-8789445213017622381?l=nagarajan-drupal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/8789445213017622381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5594179984753423894&amp;postID=8789445213017622381' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/8789445213017622381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/8789445213017622381'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/2009/01/oop-concepts-in-drupal.html' title='OOP Concepts in Drupal'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5594179984753423894.post-3910922005826882591</id><published>2009-01-11T18:47:00.001+05:30</published><updated>2009-01-11T18:49:48.440+05:30</updated><title type='text'>Better Select module in Drupal</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_6Gam5qOpQIw/SWnxh_kbezI/AAAAAAAAAGI/QkcbsqPND0M/s1600-h/betterselect.thumbnail.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 300px; height: 113px;" src="http://2.bp.blogspot.com/_6Gam5qOpQIw/SWnxh_kbezI/AAAAAAAAAGI/QkcbsqPND0M/s320/betterselect.thumbnail.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5290024803625564978" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Multiselect HTML select elements are hard for users. Selecting more than one requires Ctrl+clicking (or Cmd+clicking on Macs) and explaining this to users who sometimes have trouble even clicking the mouse at all is no one's idea of fun.&lt;br /&gt;&lt;br /&gt;Better Select module overrides all multiselect HTML elements in Drupal and replaces them with checkboxes, in an auto-scrolling div so they don't take up much room on the page.&lt;br /&gt;&lt;br /&gt;This module can be downloaded from &lt;a href = 'http://drupal.org/project/betterselect'&gt;http://drupal.org/project/betterselect&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594179984753423894-3910922005826882591?l=nagarajan-drupal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/3910922005826882591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5594179984753423894&amp;postID=3910922005826882591' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/3910922005826882591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/3910922005826882591'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/2009/01/better-select-module-in-drupal.html' title='Better Select module in Drupal'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_6Gam5qOpQIw/SWnxh_kbezI/AAAAAAAAAGI/QkcbsqPND0M/s72-c/betterselect.thumbnail.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5594179984753423894.post-1641065530265578538</id><published>2009-01-04T21:14:00.007+05:30</published><updated>2009-01-04T21:51:08.921+05:30</updated><title type='text'>Creating views for custom tables in Drupal 6</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Gam5qOpQIw/SWDfdG4qpYI/AAAAAAAAAGA/GLJ7wcqdL74/s1600-h/views2.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 236px; height: 320px;" src="http://1.bp.blogspot.com/_6Gam5qOpQIw/SWDfdG4qpYI/AAAAAAAAAGA/GLJ7wcqdL74/s320/views2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5287471653690451330" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;At a minimum, if your module wants to use Views, it needs to implement one hook:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  function hook_views_data();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This function returns data that will describe how your module's tables relate to the Drupal node table, as well as what fields can be displayed and sorted, and how your tables may be filtered. This hook can return just one or many tables. This function should be placed in a file named MODULENAME.views.inc in your module's directory. Views will automatically find it and include it when necessary.&lt;br /&gt;&lt;br /&gt;If you want to provide default views that your users can immediately use, implement hook_views_default_views(). You can use the views exporter tool to create this hook. This hook should be placed in MODULENAME.views_default.inc.&lt;br /&gt;&lt;br /&gt;Implementation steps&lt;br /&gt;&lt;br /&gt;1.Implement the hook_views_api() in your module.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  function MODULENAME_views_api() {&lt;br /&gt;    return array(&lt;br /&gt;      'api' =&gt; 2,&lt;br /&gt;      'path' =&gt; drupal_get_path('module', 'MODULENAME') . '/modules',&lt;br /&gt;    );&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. Create a file named MODULENAME.views.inc and put it in your modules diretory.&lt;br /&gt;  /sites/all/modules/MODULENAME/modules/MODULENAME.views.inc&lt;br /&gt;    &lt;br /&gt;3. This .inc file must implement the hook_views_data() and the sample impelemntation is given below.&lt;br /&gt;&lt;br /&gt;  function custom_views_views_data() {&lt;br /&gt;     &lt;br /&gt;     $data['custom_views']['table']['group']  = t('Custom View');&lt;br /&gt;&lt;br /&gt;     // Here 'custom_views' will be your table name and this will be treated as base table&lt;br /&gt;     $data['custom_views']['table']['base'] = array(&lt;br /&gt;       'field' =&gt; 'id',&lt;br /&gt;       'title' =&gt; t('Custom table'),&lt;br /&gt;       'help' =&gt; t('Stores information about custom table.'),&lt;br /&gt;       'weight' =&gt; 10,&lt;br /&gt;     );&lt;br /&gt;     // Following are the fields of the table 'custom_views'&lt;br /&gt;     // Field:custom_id&lt;br /&gt;     $data['custom_views']['custom_id'] = array(&lt;br /&gt;       'title' =&gt; t('ID'),&lt;br /&gt;       'help' =&gt; t('ID of the custom table.'),&lt;br /&gt;&lt;br /&gt;       'field' =&gt; array(&lt;br /&gt;         'handler' =&gt; 'views_handler_field',&lt;br /&gt;         'click sortable' =&gt; TRUE,&lt;br /&gt;        ),&lt;br /&gt;        'filter' =&gt; array(&lt;br /&gt;         'handler' =&gt; 'views_handler_filter_string',&lt;br /&gt;        ),&lt;br /&gt;        'argument' =&gt; array(&lt;br /&gt;          'handler' =&gt; 'views_handler_argument_string',&lt;br /&gt;        ),&lt;br /&gt;        'sort' =&gt; array(&lt;br /&gt;         'handler' =&gt; 'views_handler_sort',&lt;br /&gt;        ),&lt;br /&gt;     );&lt;br /&gt;&lt;br /&gt;     // Field:custom_title&lt;br /&gt;     $data['custom_views']['custom_title'] = array(&lt;br /&gt;       'title' =&gt; t('Name'),&lt;br /&gt;       'help' =&gt; t('Name of the field.'),&lt;br /&gt;&lt;br /&gt;       'field' =&gt; array(&lt;br /&gt;         'handler' =&gt; 'views_handler_field',&lt;br /&gt;         'click sortable' =&gt; TRUE,&lt;br /&gt;        ),&lt;br /&gt;        'filter' =&gt; array(&lt;br /&gt;         'handler' =&gt; 'views_handler_filter_string',&lt;br /&gt;        ),&lt;br /&gt;        'sort' =&gt; array(&lt;br /&gt;         'handler' =&gt; 'views_handler_sort',&lt;br /&gt;        ),&lt;br /&gt;        'argument' =&gt; array(&lt;br /&gt;         'handler' =&gt; 'views_handler_argument_string',&lt;br /&gt;        ),&lt;br /&gt;     );&lt;br /&gt;     return $data;&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;Now when you create a new view, the custom fields will be included in the view.&lt;br /&gt;&lt;br /&gt;For more information on views2 visit on &lt;a href='http://drupal.org/node/235062'&gt;http://drupal.org/node/235062&lt;/a&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594179984753423894-1641065530265578538?l=nagarajan-drupal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/1641065530265578538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5594179984753423894&amp;postID=1641065530265578538' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/1641065530265578538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/1641065530265578538'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/2009/01/creating-views-for-used-defined-tables.html' title='Creating views for custom tables in Drupal 6'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_6Gam5qOpQIw/SWDfdG4qpYI/AAAAAAAAAGA/GLJ7wcqdL74/s72-c/views2.jpg' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5594179984753423894.post-505329069349609899</id><published>2009-01-01T21:51:00.001+05:30</published><updated>2009-01-01T21:54:23.111+05:30</updated><title type='text'>PHP-Cache-Kit</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_6Gam5qOpQIw/SVzt3hlpy1I/AAAAAAAAAFw/9G_l_VUU5AE/s1600-h/php-cache-kit_sshot.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 249px;" src="http://2.bp.blogspot.com/_6Gam5qOpQIw/SVzt3hlpy1I/AAAAAAAAAFw/9G_l_VUU5AE/s320/php-cache-kit_sshot.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5286361600791006034" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PHP-Cache-Kit is a slim little PHP class which allow you to quickly and easily implement module-level caching into your PHP projects. &lt;br /&gt;&lt;br /&gt;With some thoughtful caching, your site can scale upwards dramatically with existing infrastructure. Once you see it in action and understand how simple caching is to implement, you'll surely find lots of uses. PHP-Cache-Kit is easy to understand and simplified down to under a hundred lines of code. &lt;br /&gt;&lt;br /&gt;Easy to integrate, flexible and blazingly fast.&lt;br /&gt;&lt;br /&gt;It can be downloadable from &lt;a href = 'http://acme-web-design.info/php-cache-kit.htm'&gt;http://acme-web-design.info/php-cache-kit.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594179984753423894-505329069349609899?l=nagarajan-drupal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/505329069349609899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5594179984753423894&amp;postID=505329069349609899' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/505329069349609899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/505329069349609899'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/2009/01/php-cache-kit.html' title='PHP-Cache-Kit'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_6Gam5qOpQIw/SVzt3hlpy1I/AAAAAAAAAFw/9G_l_VUU5AE/s72-c/php-cache-kit_sshot.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5594179984753423894.post-4948701576498886409</id><published>2009-01-01T21:44:00.001+05:30</published><updated>2009-01-01T21:50:09.244+05:30</updated><title type='text'>BBClone - A PHP based Web Counter</title><content type='html'>BBclone is a web counter written in PHP and gives a detailed view of the visitors of your web site by displaying the nth last users (and the data they provided, like their IP, browser and so on) that visited the web site, not just showing a number of visitors. This is very handy for webmasters that want to see who is visiting their sites, what browser people use, where they came from etc.&lt;br /&gt;&lt;br /&gt;For each visitor, BBClone can display &lt;br /&gt;IP address, &lt;br /&gt;hostname, &lt;br /&gt;operating system, &lt;br /&gt;robots, &lt;br /&gt;browser, &lt;br /&gt;referring URL (where do they come from), &lt;br /&gt;visit date, &lt;br /&gt;number of time the visitor has loaded the page, &lt;br /&gt;number of visitor &lt;br /&gt;the visited pages in the order someone viewed them &lt;br /&gt;the last visited page &lt;br /&gt;the search engine query that lead to your site (if applicable) &lt;br /&gt;ranking of the most frequent countries, referrers, OS, browsers, robots, page views and hostnames.&lt;br /&gt;&lt;br /&gt;It can be downloadable from &lt;a href = 'http://bbclone.de/features.php'&gt;http://bbclone.de&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594179984753423894-4948701576498886409?l=nagarajan-drupal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/4948701576498886409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5594179984753423894&amp;postID=4948701576498886409' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/4948701576498886409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/4948701576498886409'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/2009/01/bbclone-php-based-web-counter.html' title='BBClone - A PHP based Web Counter'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5594179984753423894.post-1136887959460569654</id><published>2008-12-14T20:45:00.003+05:30</published><updated>2008-12-14T20:51:47.042+05:30</updated><title type='text'>Bug tracking system in PHP</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_6Gam5qOpQIw/SUUkRRao5YI/AAAAAAAAAFo/wpEvvYvJxXg/s1600-h/My+View+-+MantisBT+DEMO+site.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 285px; height: 320px;" src="http://1.bp.blogspot.com/_6Gam5qOpQIw/SUUkRRao5YI/AAAAAAAAAFo/wpEvvYvJxXg/s320/My+View+-+MantisBT+DEMO+site.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5279666017313285506" /&gt;&lt;/a&gt;&lt;br /&gt;MantisBT is a free popular web-based bugtracking system (feature list). It is written in the PHP scripting language and works with MySQL, MS SQL, and PostgreSQL databases and a webserver. MantisBT has been installed on Windows, Linux, Mac OS, OS/2, and others. Almost any web browser should be able to function as a client. It is released under the terms of the GNU General Public License (GPL).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It is freely available for download and customization at &lt;a href = 'http://www.mantisbt.org'&gt;http://www.mantisbt.org&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594179984753423894-1136887959460569654?l=nagarajan-drupal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/1136887959460569654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5594179984753423894&amp;postID=1136887959460569654' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/1136887959460569654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/1136887959460569654'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/2008/12/bug-tracking-system-in-php.html' title='Bug tracking system in PHP'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_6Gam5qOpQIw/SUUkRRao5YI/AAAAAAAAAFo/wpEvvYvJxXg/s72-c/My+View+-+MantisBT+DEMO+site.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5594179984753423894.post-7028911434727607299</id><published>2008-12-09T13:13:00.002+05:30</published><updated>2008-12-09T13:27:53.966+05:30</updated><title type='text'>CodeLobster Free PHP Editor Supports Drupal/Smarty</title><content type='html'>CodeLobster is a free PHP Editor that supports PHP, HTML, JavaScript, CSS code highlighting and debugging. It has the following functionality.&lt;br /&gt;&lt;br /&gt;• PHP, HTML, JavaScript, CSS code highlighting&lt;br /&gt;• HTML autocomplete &lt;br /&gt;• CSS autocomplete&lt;br /&gt;• JavaScript Advanced autocomplete&lt;br /&gt;• PHP Advanced autocomplete&lt;br /&gt;• PHP Debugger&lt;br /&gt;• SQL Autocomplete&lt;br /&gt;• Preview in a browser &lt;br /&gt;• Project manager&lt;br /&gt;• &lt;a href="http://www.codelobster.com/drupal.html"&gt;Drupal&lt;/a&gt; plug-in available &lt;br /&gt;• &lt;a href="http://www.codelobster.com/smarty.html"&gt;Smarty&lt;/a&gt;plug-in available &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For more information and download this editor please visit &lt;a href = 'http://www.codelobster.com'&gt;http://www.codelobster.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594179984753423894-7028911434727607299?l=nagarajan-drupal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/7028911434727607299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5594179984753423894&amp;postID=7028911434727607299' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/7028911434727607299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/7028911434727607299'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/2008/12/codelobster-free-php-editor-supports.html' title='CodeLobster Free PHP Editor Supports Drupal/Smarty'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5594179984753423894.post-5419115455305199478</id><published>2008-11-29T19:01:00.002+05:30</published><updated>2008-11-29T19:07:39.740+05:30</updated><title type='text'>XAJAX</title><content type='html'>XAJAX Offers an open source PHP class library that allows to create Ajax applications using HTML, CSS, JavaScript, and PHP.&lt;br /&gt;&lt;br /&gt;It is an AJAX library for PHP that allows you to create AJAX functionality without writing javascript. It’s very functional and fairly simple to use.&lt;br /&gt;&lt;br /&gt;For more information please visit &lt;a href = 'http://www.xajaxproject.org/'&gt;http://www.xajaxproject.org/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It can be easily integrated with drupal and the relevant information will be found at &lt;a href = 'http://www.shamit.org/dpal/node/76'&gt;http://www.shamit.org/dpal/node/76&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594179984753423894-5419115455305199478?l=nagarajan-drupal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/5419115455305199478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5594179984753423894&amp;postID=5419115455305199478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/5419115455305199478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/5419115455305199478'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/2008/11/xajax.html' title='XAJAX'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5594179984753423894.post-7996905232355387272</id><published>2008-11-23T18:27:00.002+05:30</published><updated>2008-11-23T18:33:05.618+05:30</updated><title type='text'>STORM : Drupal Project management</title><content type='html'>STORM (SpeedTech Organization and Resource Manager) is a new project management application for Drupal platform versions 5 and 6. It uses only Drupal core features and doesn't rely on any external modules. The objective is to provide a complete crm and project management application both for freelancers and small-medium size companies. At now it provides the following features :&lt;br /&gt;&lt;br /&gt;    * Attributes : to manage the different list of values used in STORM, like : tasks status, countries, currencies and so on&lt;br /&gt;    * Organizations : the companies or individual stakeholders of your projects&lt;br /&gt;    * Projects : your projects. Every project can have multiple tasks hierarchically nested to build a WBS&lt;br /&gt;    * Tasks : the parts that compose a project&lt;br /&gt;    * Tickets : every ticket can be associated with an organization, project and task&lt;br /&gt;    * Timetrackings : where you can register your activities on an organization, project, task or ticket&lt;br /&gt;    * People : organizations contacts&lt;br /&gt;    * Permission control : a fine grained permission control permits to share the data with other users and organizations&lt;br /&gt;    * Reporting : a simple and themeable support for reporting (with optional multilingual support)&lt;br /&gt;    * Notes : a note can be associated to an organization, project and task&lt;br /&gt;    * Knowledgebase : simple container to organize your knowledge&lt;br /&gt;    * Invoices : an invoice must have a customer and can be linked to a project&lt;br /&gt;    * Expenses : to keep track of both internal and for customers expenses&lt;br /&gt;&lt;br /&gt;This could be downloaded from &lt;a href = 'http://drupal.org/project/storm'&gt;http://drupal.org/project/storm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594179984753423894-7996905232355387272?l=nagarajan-drupal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/7996905232355387272/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5594179984753423894&amp;postID=7996905232355387272' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/7996905232355387272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/7996905232355387272'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/2008/11/storm-drupal-project-management.html' title='STORM : Drupal Project management'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5594179984753423894.post-3556250915513558546</id><published>2008-11-22T22:53:00.003+05:30</published><updated>2008-11-22T22:56:22.124+05:30</updated><title type='text'>CodeIgniter</title><content type='html'>CodeIgniter is an Application Development Framework - a toolkit - for people who build web sites using PHP. Its goal is to enable you to develop projects much faster than you could if you were writing code from scratch, by providing a rich set of libraries for commonly needed tasks, as well as a simple interface and logical structure to access these libraries. CodeIgniter lets you creatively focus on your project by minimizing the amount of code needed for a given task.&lt;br /&gt;&lt;br /&gt;CodeIgniter is right for you if:&lt;br /&gt;&lt;br /&gt;    * You want a framework with a small footprint.&lt;br /&gt;    * You need exceptional performance.&lt;br /&gt;    * You need broad compatibility with standard hosting accounts that run a variety of PHP versions and configurations.&lt;br /&gt;    * You want a framework that requires nearly zero configuration.&lt;br /&gt;    * You want a framework that does not require you to use the command line.&lt;br /&gt;    * You want a framework that does not require you to adhere to restrictive coding rules.&lt;br /&gt;    * You are not interested in large-scale monolithic libraries like PEAR.&lt;br /&gt;    * You do not want to be forced to learn a templating language (although a template parser is optionally available if you desire one).&lt;br /&gt;&lt;br /&gt;For more information please visit &lt;a href = 'http://codeigniter.com/'&gt;http://codeigniter.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594179984753423894-3556250915513558546?l=nagarajan-drupal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/3556250915513558546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5594179984753423894&amp;postID=3556250915513558546' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/3556250915513558546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/3556250915513558546'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/2008/11/codeigniter-is-application-development.html' title='CodeIgniter'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5594179984753423894.post-9079923034250613968</id><published>2008-11-16T22:48:00.003+05:30</published><updated>2008-11-16T22:53:57.272+05:30</updated><title type='text'>PHP Optimization-Best practices</title><content type='html'>• Use single quotes for strings&lt;br /&gt;&lt;br /&gt;o When you surround a PHP string in double quotes, it is subsequently parsed by the PHP interpreter for variables and special characters, such as "\n". If you just want to output a basic string, use single quotes! There is a marginal performance benefit, since the string does not get parsed. &lt;br /&gt;&lt;br /&gt;o “print” is slower than “echo”, putting variables inline in a string is slower than concatenating them, and concatenating strings is slower than using comma-separated echo values! Not only does not-inlining your variables give you a performance boost, but it also makes your code easier to read in any editor that has syntax highlighting (your variables will show up in nice colors).&lt;br /&gt;echo "Hi my name is ",$a,". I am ",$b; //Good&lt;br /&gt;print "Hi my name is $a. I am $b"; //Bad&lt;br /&gt;&lt;br /&gt;• Use single-quotes around array indexes&lt;br /&gt;&lt;br /&gt;o PHP considers the unquoted index as a "bare" string, and considers it a defined constant. When it can't find a matching symbol for this constant in the symbol table however, it converts it to a real string, which is why your code will work. Quoting the index prevents this constant-checking stuff, and makes it safer in case someone defines a future constant with the same name.&lt;br /&gt;&lt;br /&gt;$arr['name'] //Good&lt;br /&gt;$arr[name] //Bad&lt;br /&gt;&lt;br /&gt;• Don't use short open tags.It can cause conflicts with XML parsers, and if you ever distribute code, it's going to annoy the heck out of people who have to start modifying their PHP ini directives to get it to work.&lt;br /&gt;&lt;br /&gt;• Don't use regular expressions if you don't need to.&lt;br /&gt;&lt;br /&gt;o If you're doing basic string operations, stay away from the preg and ereg function groups whenever possible. str_replace is much faster than preg_replace, and strtr is even faster than str_replace.&lt;br /&gt;&lt;br /&gt;• Don't use functions inside a loop declaration.&lt;br /&gt;&lt;br /&gt;o If you use a function like count() inside a loop declaration, it's going to get executed at every iteration! If your loop is large, you're using a lot of extra execution time.&lt;br /&gt;       $count = count($array);&lt;br /&gt;        for($i = 0; $i &lt; $count; $i++) {} //Good&lt;br /&gt; for ($i = 0; $i &lt; count($array); $i++) {} //Bad&lt;br /&gt;&lt;br /&gt;• Never rely on register_globals or magic quotes.&lt;br /&gt;&lt;br /&gt;• Always initialize your variables&lt;br /&gt;o PHP will automatically create a variable if it hasn't been initialized, but it's not good practice to rely on this feature. It makes for sloppy code, and in large functions or projects can become quite confusing if you have to track down where it's being created. In addition, incrementing an uninitialized variable is much slower than if it was initialized.&lt;br /&gt;&lt;br /&gt;• Validate and sanitize your inputs&lt;br /&gt;o Always use isset() or empty() before checking for type because is_array() is costly and could waste many valuable cpu-cycles if the variable isn't even set in the first place. Short-circuit is your best friend when it comes to efficient programming.&lt;br /&gt;        if (isset($myVar) &amp;&amp; is_array($myVar)) {} //Good&lt;br /&gt;        if ($myVar) { } //Bad&lt;br /&gt;&lt;br /&gt;• It’s better to use switch case statements than multi if, else if, statements.&lt;br /&gt;&lt;br /&gt;• Cache as much as possible. Use memcached - memcached is a high-performance memory object caching system intended to speed up dynamic web applications by alleviating database load. OP code caches are useful so that your script does not have to be compiled on every request.&lt;br /&gt;&lt;br /&gt;• mod_gzip which is available as an Apache module compresses your data on the fly and can reduce the data to transfer up to 80%.&lt;br /&gt;&lt;br /&gt;• Do NOT use SQL wildcard select. eg. SELECT *.&lt;br /&gt;&lt;br /&gt;• Possibly use “strncasecmp”, “strpbrk” and “stripos” instead of “regex.”.&lt;br /&gt;&lt;br /&gt;• Just declaring a global variable without using it in a function also slows things down (by about the same amount as incrementing a local var). PHP probably does a check to see if the global exists.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594179984753423894-9079923034250613968?l=nagarajan-drupal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/9079923034250613968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5594179984753423894&amp;postID=9079923034250613968' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/9079923034250613968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/9079923034250613968'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/2008/11/php-optimization-best-practices.html' title='PHP Optimization-Best practices'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5594179984753423894.post-1361406516214459267</id><published>2008-10-26T18:34:00.002+05:30</published><updated>2008-10-26T18:41:17.796+05:30</updated><title type='text'>Upgrade Drupal 5.x website to Drupal 6.x version</title><content type='html'>Before upgrading from Drupal 5.x to Drupal 6.x version, we need to follow the below mentioned steps.&lt;br /&gt;&lt;br /&gt;• Make a backup of all files and database. If anything goes wrong during upgrade process, than you can restore your Drupal 5.x web site. Must make a copy “Files” and “Site” Folder from the Drupal installation directory on your local system. &lt;br /&gt;&lt;br /&gt;• If your site needs some particular module, ensure that those modules are available because few Drupal 5.x modules are still not available. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;• Disable all contributed modules and set your Drupal site to default theme such as Garland or Bluemarine. You should upgrade modules and themes after you have completed core Drupal upgradation. &lt;br /&gt;&lt;br /&gt;• Login in Drupal 5.x web site administrator panel. Navigate to modules setting page. Disable update_status module and uninstall this module.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;• Again in Drupal 5.x admin panel, navigate to Logs -&gt; Status report&lt;br /&gt;If there is any problem fix it before upgrade. &lt;br /&gt;&lt;br /&gt;• Upgrade all installed modules to its latest version available for Drupal 5.x&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;• Set your Drupal site to off-line mode. This can be done as follow. In Drupal admin panel Navigate to : Administrator -&gt; Site Configuration -&gt; Site maintenance -&gt; select site status as off-line -&gt; Save Configuration. &lt;br /&gt;&lt;br /&gt;• Now using any FTP delete all files and folder from the Drupal installation directory. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;• Download the latest version of Drupal 6.x from drupal.org. Unpack the files and upload it to the Drupal installation directory. &lt;br /&gt;&lt;br /&gt;• Copy and paste “Files” and “Site” Folder from your backup to Drupal installation directory. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;• If other system files such as .htaccess or robots.txt were customized, re-create the modifications in the new versions of the files using the backups. &lt;br /&gt;&lt;br /&gt;• Run update.php by visiting http://www.example.com/update.php (replace www.example.com with your Drupal installation's domain name and path). &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;• Replace all custom old modules to their latest version compatible with version 6.x &lt;br /&gt;&lt;br /&gt;• Re-enable custom and contributed modules and re-run update.php to update custom and contributed database tables. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;• Upload any new theme for your site and enable it. &lt;br /&gt;&lt;br /&gt;• Now you have updated your Drupal 5.x website to Drupal 6.x . Now login to admin panel and set your website status to online mode.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594179984753423894-1361406516214459267?l=nagarajan-drupal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/1361406516214459267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5594179984753423894&amp;postID=1361406516214459267' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/1361406516214459267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/1361406516214459267'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/2008/10/upgrade-drupal-5x-website-to-drupal-6x.html' title='Upgrade Drupal 5.x website to Drupal 6.x version'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5594179984753423894.post-6344260936694903191</id><published>2008-10-26T18:07:00.002+05:30</published><updated>2008-10-26T18:09:59.740+05:30</updated><title type='text'>Drupal and Twitter</title><content type='html'>&lt;a href = 'http://drupal.org/project/twitter'&gt;Twitter&lt;/a&gt; module provides twitter notification for new posts. Each user can use their own twitter account to post updates too, as well as have a custom format string.&lt;br /&gt;&lt;br /&gt;For more information on twitter, see &lt;a href = 'http://twitter.com/'&gt;http://twitter.com/&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594179984753423894-6344260936694903191?l=nagarajan-drupal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/6344260936694903191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5594179984753423894&amp;postID=6344260936694903191' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/6344260936694903191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/6344260936694903191'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/2008/10/drupal-and-twitter.html' title='Drupal and Twitter'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5594179984753423894.post-3808064879685360581</id><published>2008-10-26T17:56:00.000+05:30</published><updated>2008-10-26T17:57:46.622+05:30</updated><title type='text'>Galleria</title><content type='html'>Galleria is a javascript image gallery written in jQuery. It loads the images one by one from an unordered list and displays thumbnails when each image is loaded. It will create thumbnails for you if you choose so, scaled or unscaled, centered and cropped inside a fixed thumbnail box defined by CSS.&lt;br /&gt;&lt;br /&gt;For more information please visit &lt;a href = 'http://devkick.com/lab/galleria/'&gt;http://devkick.com/lab/galleria&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594179984753423894-3808064879685360581?l=nagarajan-drupal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/3808064879685360581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5594179984753423894&amp;postID=3808064879685360581' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/3808064879685360581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/3808064879685360581'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/2008/10/galleria.html' title='Galleria'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5594179984753423894.post-2074476244370041097</id><published>2008-10-25T22:15:00.003+05:30</published><updated>2008-10-25T22:25:32.821+05:30</updated><title type='text'>FTP of drupal.org</title><content type='html'>We can directly download modules from drupal.org even if the site is off-line. Navigate to ftp link &lt;a href = 'ftp://ftp.drupal.org/pub/drupal/files/projects'&gt;ftp://ftp.drupal.org/pub/drupal/files/projects.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Host name : ftp.drupal.org&lt;br /&gt;User name : anonymous &lt;br /&gt;Password : your email_address.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After providing these informations just browse to the directory /pub/drupal/files/projects to download the contributed modules.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594179984753423894-2074476244370041097?l=nagarajan-drupal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/2074476244370041097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5594179984753423894&amp;postID=2074476244370041097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/2074476244370041097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/2074476244370041097'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/2008/10/ftp-of-drupalorg.html' title='FTP of drupal.org'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5594179984753423894.post-4219937996430786379</id><published>2008-10-19T01:31:00.002+05:30</published><updated>2008-10-19T01:36:05.764+05:30</updated><title type='text'>HTML Validator</title><content type='html'>There is an interesting addon from firefox for validating the HTML pages, &lt;a href= 'https://addons.mozilla.org/en-US/firefox/addon/249'&gt;HTML Validator&lt;/a&gt; is a Mozilla extension that adds HTML validation inside Firefox and Mozilla. The number of errors of a HTML page is seen on the form of an icon in the status bar when browsing.&lt;br /&gt;&lt;br /&gt;The extension can validate the HTML sent by the server or the HTML in the memory (after Ajax execution)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594179984753423894-4219937996430786379?l=nagarajan-drupal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/4219937996430786379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5594179984753423894&amp;postID=4219937996430786379' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/4219937996430786379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/4219937996430786379'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/2008/10/there-is-interesting-addon-from-firefox.html' title='HTML Validator'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5594179984753423894.post-6572674244957671795</id><published>2008-10-16T22:32:00.004+05:30</published><updated>2008-10-16T22:39:57.720+05:30</updated><title type='text'>CSS/JS Aggregator bug</title><content type='html'>In drupal, CSS Aggregation works almost with compressing the files like cleaning&lt;br /&gt;out white spaces (just like a zip program ).&lt;br /&gt; &lt;br /&gt;To reduce the count of request CSS Files can be combined.This can break your theming if you have not followed good coding guide lines. Especially while commenting the files good standards needs to be followed. Namespaces should not be overlapped.&lt;br /&gt;&lt;br /&gt;On the other hand we can disable the option 'Optimize javascript' files in 'Javascript Aggregation' settings so that invalid comments in js files are not taken in to account and js flow will not get screwed up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594179984753423894-6572674244957671795?l=nagarajan-drupal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/6572674244957671795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5594179984753423894&amp;postID=6572674244957671795' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/6572674244957671795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/6572674244957671795'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/2008/10/cssjs-aggregator-bug.html' title='CSS/JS Aggregator bug'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5594179984753423894.post-2358734684411569300</id><published>2008-10-12T18:38:00.003+05:30</published><updated>2008-10-12T18:43:33.435+05:30</updated><title type='text'>Free email tracking for web pages</title><content type='html'>&lt;a href = 'http://www.spypig.com/'&gt;SpyPig&lt;/a&gt; is a simple email tracking system that sends you a notification email as soon as the recipient opens and reads your message.  We have to specify an email address which we will notify by email when your message has been read. They will provide an tracking image in which we need to embed with the message body. whenever the recipient opens the email you will be notified immediately.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594179984753423894-2358734684411569300?l=nagarajan-drupal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/2358734684411569300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5594179984753423894&amp;postID=2358734684411569300' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/2358734684411569300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/2358734684411569300'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/2008/10/free-email-tracking-for-web-pages.html' title='Free email tracking for web pages'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5594179984753423894.post-2244694059522600405</id><published>2008-10-10T23:11:00.004+05:30</published><updated>2008-10-13T23:08:02.386+05:30</updated><title type='text'>Performance improvement guidelines for drupal sites</title><content type='html'>&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CVENKAT%7E1.WAR%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" latentstylecount="156"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Wingdings; 	panose-1:5 0 0 0 0 0 0 0 0 0; 	mso-font-charset:2; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face 	{font-family:Verdana; 	panose-1:2 11 6 4 3 5 4 4 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:536871559 0 0 0 415 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} h4 	{mso-margin-top-alt:auto; 	margin-right:0in; 	mso-margin-bottom-alt:auto; 	margin-left:0in; 	mso-pagination:widow-orphan; 	mso-outline-level:4; 	font-size:12.0pt; 	font-family:"Times New Roman";} a:link, span.MsoHyperlink 	{color:blue; 	text-decoration:underline; 	text-underline:single;} a:visited, span.MsoHyperlinkFollowed 	{color:purple; 	text-decoration:underline; 	text-underline:single;} code 	{font-family:"Courier New"; 	mso-ascii-font-family:"Courier New"; 	mso-fareast-font-family:"Times New Roman"; 	mso-hansi-font-family:"Courier New"; 	mso-bidi-font-family:"Courier New";} @page Section1 	{size:8.5in 11.0in; 	margin:1.0in 1.25in 1.0in 1.25in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.Section1 	{page:Section1;}  /* List Definitions */  @list l0 	{mso-list-id:1803769658; 	mso-list-type:hybrid; 	mso-list-template-ids:1235378742 67698699 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l0:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:.5in; 	mso-level-number-position:left; 	text-indent:-.25in; 	font-family:Wingdings;} @list l0:level2 	{mso-level-number-format:bullet; 	mso-level-text:o; 	mso-level-tab-stop:1.0in; 	mso-level-number-position:left; 	text-indent:-.25in; 	font-family:"Courier New";} @list l0:level3 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:1.5in; 	mso-level-number-position:left; 	text-indent:-.25in; 	font-family:Wingdings;} @list l0:level4 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:2.0in; 	mso-level-number-position:left; 	text-indent:-.25in; 	font-family:Symbol;} ol 	{margin-bottom:0in;} ul 	{margin-bottom:0in;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0in 5.4pt 0in 5.4pt; 	mso-para-margin:0in; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p class="MsoNormal" style="margin-bottom: 12pt;"&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;In most of the web pages,&lt;b&gt;&lt;u&gt; &lt;/u&gt;&lt;/b&gt;less than 20% of the total response time is used to retrieve the HTMl document. That means the other 80+% is used to process what's in the HTML file: CSS, JS, images, videos. And in many cases, that number is even higher.&lt;br /&gt;&lt;br /&gt;In order to improve the performance on drupal sites, drive in to the following procedures. This includes both the server side caching and &lt;a href="http://developer.yahoo.com/yslow/"&gt;YSlow for Firebug&lt;/a&gt; recommendations.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 12pt;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b style=""&gt;&lt;u&gt;&lt;span style=";font-family:Verdana;" &gt;Drupal Side&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h4 style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-weight: normal;font-family:Wingdings;font-size:85%;"  &gt;&lt;span style=""&gt;Ø&lt;span style=";font-family:&amp;quot;;" &gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-weight: normal;font-family:Verdana;font-size:85%;"  &gt;Enable the CSS Aggregation and JS Aggregation from the drupal administrators settings (In drupal5 JS Aggregator is a separate module - &lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;a href="http://drupal.org/project/javascript_aggregator"&gt;http://drupal.org/project/javascript_aggregator&lt;/a&gt;&lt;/span&gt;&lt;span style="font-weight: normal;font-family:Verdana;font-size:85%;"  &gt;).&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;h4 style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;"  &gt;&lt;span style=""&gt;o&lt;span style=";font-family:&amp;quot;;" &gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-weight: normal;font-family:Verdana;font-size:85%;"  &gt;If js errors are encountered, disable the option ‘optimize js files’ from your drupal settings or make sure all the comments in the JS files are valid.&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;h4 style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;"  &gt;&lt;span style=""&gt;o&lt;span style=";font-family:&amp;quot;;" &gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-weight: normal;font-family:Verdana;font-size:85%;"  &gt;After enabling the ‘CSS Aggregator’, if the theme gets messed up make sure that the CSS files are commented properly.&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;h4 style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-weight: normal;font-family:Wingdings;font-size:85%;"  &gt;&lt;span style=""&gt;Ø&lt;span style=";font-family:&amp;quot;;" &gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-weight: normal;font-family:Verdana;font-size:85%;"  &gt;Activate the memcache (&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;a href="http://www.danga.com/memcached/"&gt;http://www.danga.com/memcached/&lt;/a&gt;&lt;/span&gt;&lt;span style="font-weight: normal;font-family:Verdana;font-size:85%;"  &gt;) by installing this service. Memcache is intended for use in speeding up dynamic web applications by alleviating database load.&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;h4 style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;"  &gt;&lt;span style=""&gt;o&lt;span style=";font-family:&amp;quot;;" &gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-weight: normal;font-family:Verdana;font-size:85%;"  &gt;Install the drupal-memcache module in drupal5 as a module (&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;a href="http://drupal.org/project/memcache"&gt;http://drupal.org/project/memcache&lt;/a&gt;&lt;/span&gt;&lt;span style="font-weight: normal;font-family:Verdana;font-size:85%;"  &gt;). &lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;h4 style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;"  &gt;&lt;span style=""&gt;o&lt;span style=";font-family:&amp;quot;;" &gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-weight: normal;font-family:Verdana;font-size:85%;"  &gt;After installing this module, add the following lines in settings.php&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;h4 style="margin-left: 1.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size:85%;"&gt;&lt;code&gt;&lt;span style="font-weight: normal;font-family:Wingdings;" &gt;&lt;span style=""&gt;§&lt;span style=";font-family:&amp;quot;;" &gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;$conf &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;= array(&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;"  &gt;&lt;br /&gt;&lt;code&gt;   &lt;/code&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;code&gt;&lt;span style="color: rgb(221, 0, 0);"&gt;'cache_inc' &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;=&gt; &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style="color: rgb(221, 0, 0);"&gt;'./sites/all/modules/memcache/memcache.inc'&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;"  &gt;&lt;br /&gt;&lt;code&gt;   &lt;/code&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;code&gt;&lt;span style="color: rgb(255, 128, 0);"&gt;// or&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;"  &gt;&lt;br /&gt;&lt;code&gt;   // 'cache_inc' =&gt; './sites/all/modules/memcache/memcache.db.inc',&lt;/code&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;code&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;);&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=";font-family:Verdana;" &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;h4 style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;"  &gt;&lt;span style=""&gt;o&lt;span style=";font-family:&amp;quot;;" &gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-weight: normal;font-family:Verdana;font-size:85%;"  &gt;This will override the default cache file (ie) cache_set() and cache_get() functional calls will get data from the memcache server and not in the drupal cache table. So number of db calls and query time will be reduced.&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;h4 style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-weight: normal;font-family:Wingdings;font-size:85%;"  &gt;&lt;span style=""&gt;Ø&lt;span style=";font-family:&amp;quot;;" &gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-weight: normal;font-family:Verdana;font-size:85%;"  &gt;If the information is retrieved from views, avoid the usage of calling views_view() for many times and store the output of the views in cache by using cache_set(). Clear the cache periodically based on the view type and avoids showing the static information.&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;h4 style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-weight: normal;font-family:Wingdings;font-size:85%;"  &gt;&lt;span style=""&gt;Ø&lt;span style=";font-family:&amp;quot;;" &gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-weight: normal;font-family:Verdana;font-size:85%;"  &gt;Enable the ‘page caching’ from drupal settings so that anonymous users will be benefited and re-construction of web page will be avoided.&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;p class="MsoNormal" style="margin-bottom: 12pt;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b style=""&gt;&lt;u&gt;&lt;span style=";font-family:Verdana;" &gt;Apache Side&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h4 style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-weight: normal;font-family:Wingdings;font-size:85%;"  &gt;&lt;span style=""&gt;Ø&lt;span style=";font-family:&amp;quot;;" &gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-weight: normal;font-family:Verdana;font-size:85%;"  &gt;Add an expires headers for all the files types like CSS, Images etc.&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;h4 style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;"  &gt;&lt;span style=""&gt;o&lt;span style=";font-family:&amp;quot;;" &gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-weight: normal;font-family:Verdana;font-size:85%;"  &gt;Changing the future date for the Expires headers is easy enough: simply edit your .htaccess file. Your Apache server must also have mod_expires installed; this is available by default on most servers.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;h4&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;h4 style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-weight: normal;font-family:Wingdings;font-size:85%;"  &gt;&lt;span style=""&gt;Ø&lt;span style=";font-family:&amp;quot;;" &gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-weight: normal;font-family:Verdana;font-size:85%;"  &gt;Add the gzip component so that web pages are written to the cache in GZIPped form.&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;h4 style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;"  &gt;&lt;span style=""&gt;o&lt;span style=";font-family:&amp;quot;;" &gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-weight: normal;font-family:Verdana;font-size:85%;"  &gt;Following lines has to be written in .htaccess file for gzip&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;h4 style="margin-left: 1.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-weight: normal;font-family:Wingdings;font-size:85%;"  &gt;&lt;span style=""&gt;§&lt;span style=";font-family:&amp;quot;;" &gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-weight: normal;font-family:Verdana;font-size:85%;"  &gt;“AddOutputFilterByType DEFLATE text/css application/x-javascript”.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;h4 style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-weight: normal;font-family:Wingdings;font-size:85%;"  &gt;&lt;span style=""&gt;Ø&lt;span style=";font-family:&amp;quot;;" &gt;       &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-weight: normal;font-family:Verdana;font-size:85%;"  &gt;An ETag uniquely identifies a file, and is used to verify if the file in the browser's cache matches the file on the server..&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;h4 style="margin-left: 1in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=";font-family:&amp;quot;;font-size:85%;"  &gt;&lt;span style=""&gt;o&lt;span style=";font-family:&amp;quot;;" &gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-weight: normal;font-family:Verdana;font-size:85%;"  &gt;Following lines has to be written in .htaccess file for disable etag&lt;/span&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;h4 style="margin-left: 1.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-weight: normal;font-family:Wingdings;font-size:85%;"  &gt;&lt;span style=""&gt;§&lt;span style=";font-family:&amp;quot;;" &gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-weight: normal;font-family:Verdana;font-size:85%;"  &gt;“FileEtag none”.&lt;/span&gt;&lt;/h4&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;References :&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;1. &lt;a href="http://www.blogger.com/%20%27http://wimleers.com/article/improving-drupals-page-loading-performance%27"&gt;http://wimleers.com/article/improving-drupals-page-loading-performance&lt;/a&gt;&lt;br /&gt;2. &lt;a href="http://www.blogger.com/%20%27http://video.yahoo.com/watch/1040890/3880720%27"&gt;http://video.yahoo.com/watch/1040890/3880720&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;h4&gt;&lt;span style="font-weight: normal;font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;h4 style="margin-left: 1.25in;"&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;h4&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;h4&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;h4&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;h4 style="margin-left: 0.75in;"&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/h4&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5594179984753423894-2244694059522600405?l=nagarajan-drupal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nagarajan-drupal.blogspot.com/feeds/2244694059522600405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5594179984753423894&amp;postID=2244694059522600405' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/2244694059522600405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5594179984753423894/posts/default/2244694059522600405'/><link rel='alternate' type='text/html' href='http://nagarajan-drupal.blogspot.com/2008/10/performance-improvement-guidelines-for.html' title='Performance improvement guidelines for drupal sites'/><author><name>Nagarajan Lashminarayanan</name><uri>http://www.blogger.com/profile/00644988063405266271</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_6Gam5qOpQIw/TSs1ikR6GEI/AAAAAAAAALQ/UQ85wDSL1H4/S220/naga1.JPG'/></author><thr:total>0</thr:total></entry></feed>
