<?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-2898679639857571695</id><updated>2012-02-16T15:18:55.907+05:30</updated><category term='tab'/><category term='facebook'/><category term='jQuery'/><category term='logout'/><category term='GMT'/><category term='Mongo library'/><category term='NoSql'/><category term='breadcrumb'/><category term='permission'/><category term='autocomplete'/><category term='flash messenger'/><category term='redirect loop'/><category term='Ajax'/><category term='MongoDB'/><category term='PHP'/><category term='jQuery slider'/><category term='ui'/><category term='timezone'/><category term='Zend_Queue'/><category term='AMQP library'/><category term='Time Zone'/><category term='infinite loop'/><category term='zone offset'/><category term='plugin'/><category term='zend framework'/><category term='custom breadcrumb'/><category term='slide text up and down'/><category term='scroller'/><category term='AddThis'/><category term='RabbitMQ'/><category term='AMQP'/><category term='PHP AMQP'/><category term='window.addthis'/><category term='zend'/><title type='text'>Ritesh's Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://riteshsblog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://riteshsblog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>RKJ</name><uri>http://www.blogger.com/profile/10529357735976707857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='21' src='http://1.bp.blogspot.com/_1LhaSbznGS0/S16wof3n1NI/AAAAAAAAANU/rYUGOK_O1bc/S220/Rkj.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2898679639857571695.post-923223827672869667</id><published>2012-01-19T16:53:00.004+05:30</published><updated>2012-01-19T17:50:04.912+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='flash messenger'/><category scheme='http://www.blogger.com/atom/ns#' term='zend'/><category scheme='http://www.blogger.com/atom/ns#' term='zend framework'/><title type='text'>Zend Flash message</title><content type='html'>For displaying flash message after certain event like, when user submit the page and need to show the success message in next request or in current request. For that Zend framework has a action helper &lt;span style="font-weight:bold;"&gt;FlashMessenger&lt;/span&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here is a sample code that can used to flash the message.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 1: Add message to helper class in controller&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;code&gt;$flash = $this-&amp;gt;_helper-&amp;gt;getHelper('FlashMessenger');&lt;br /&gt;$flash-&amp;gt;addMessage(array('success' =&amp;gt; 'Posted message saved successfully' ));&lt;br /&gt;&lt;/code&gt;&lt;div&gt;&lt;br /&gt;&lt;b&gt;Ste 2: Create View Helper to display message in layout&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;class Custom_View_Helper_FlashMessenger extends Zend_View_Helper_Abstract&lt;br /&gt;{&lt;br /&gt; public function flashMessenger ($width = null)&lt;br /&gt;  {&lt;br /&gt;  $flash = Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger');&lt;br /&gt;&lt;br /&gt;  #for message&lt;br /&gt;  $message = array();&lt;br /&gt;  &lt;br /&gt;  if($flash-&amp;gt;getCurrentMessages())&lt;br /&gt;  {&lt;br /&gt;   foreach($flash-&amp;gt;getCurrentMessages() as $key =&amp;gt; $msg)&lt;br /&gt;   {&lt;br /&gt;    $message[key($msg)][] = $msg[key($msg)];&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   $flash-&amp;gt;clearCurrentMessages();&lt;br /&gt;  }&lt;br /&gt;  else if($flash-&amp;gt;getMessages())&lt;br /&gt;  {&lt;br /&gt;   foreach($flash-&amp;gt;getMessages() as $key =&amp;gt; $msg)&lt;br /&gt;   {&lt;br /&gt;    $message[key($msg)][] = $msg[key($msg)];&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  $str_msg = null;&lt;br /&gt;  $style = '';&lt;br /&gt;&lt;br /&gt;  if($width) $style = "style='width:".$width."px'";&lt;br /&gt;&lt;br /&gt;  if(count($message) &amp;gt; 0)&lt;br /&gt;  {&lt;br /&gt;   foreach($message as $key =&amp;gt; $arr_msg)&lt;br /&gt;   {&lt;br /&gt;              $key = ($key == 'error')?'errormsg':$key;&lt;br /&gt;&lt;br /&gt;    $str_msg .= '&lt;div class="message '.$key.'"&gt;';&lt;br /&gt;    $str_msg .= '&lt;p&gt;';&lt;br /&gt;&lt;br /&gt;    foreach($arr_msg as $msg)&lt;br /&gt;    {&lt;br /&gt;      $str_msg .= rtrim($msg,'.'). "&lt;br /&gt;";&lt;br /&gt;    }&lt;br /&gt;    $str_msg .= '&lt;/p&gt;';&lt;br /&gt;    $str_msg .= '&lt;/div&gt;';&lt;br /&gt;   }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    return $str_msg;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;  public function hasMessage()&lt;br /&gt;  {&lt;br /&gt;      $flash = Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger');&lt;br /&gt;    &lt;br /&gt;      if($flash-&amp;gt;hasMessages() || $flash-&amp;gt;hasCurrentMessages())&lt;br /&gt;          return true;&lt;br /&gt;      else&lt;br /&gt;          return false;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;span  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 3: Display the message in layout&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  echo $this-&gt;flashMessenger();&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Now you can add your falsh message in you any controller and it will display in you layout.&lt;br /&gt;&lt;br /&gt;Hope this helps someone. &lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898679639857571695-923223827672869667?l=riteshsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://riteshsblog.blogspot.com/feeds/923223827672869667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://riteshsblog.blogspot.com/2012/01/zend-flash-message.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/923223827672869667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/923223827672869667'/><link rel='alternate' type='text/html' href='http://riteshsblog.blogspot.com/2012/01/zend-flash-message.html' title='Zend Flash message'/><author><name>RKJ</name><uri>http://www.blogger.com/profile/10529357735976707857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='21' src='http://1.bp.blogspot.com/_1LhaSbznGS0/S16wof3n1NI/AAAAAAAAANU/rYUGOK_O1bc/S220/Rkj.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898679639857571695.post-192621648138259898</id><published>2011-09-01T14:46:00.015+05:30</published><updated>2011-10-25T16:20:37.271+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='tab'/><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='ui'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='scroller'/><title type='text'>jQuery UI Tab scroller plugin V 1.0</title><content type='html'>&lt;div&gt;I have just create my first jQuery plugin for scrolling UI tabs. The plugin basically add &lt;b&gt;next&lt;/b&gt; and &lt;b&gt;previous&lt;/b&gt; link in jQuery tab when the number of tab exceeds the width of tab panel. When you add/delete tab it automatically august the remaining tabs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can check it on google code with full example. http://code.google.com/p/scrolltab/downloads/list or just click &lt;a target="_blank" href="http://code.google.com/p/scrolltab/downloads/list"&gt;HERE&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a target="_blank" href="http://code.google.com/p/scrolltab/downloads/list"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://4.bp.blogspot.com/-RQGuV5kUf2o/Tl9qPIeSSZI/AAAAAAAAASU/gk6FUtuDu-U/s400/scrolltab.png" style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px; height: 54px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5647349265950984594" /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Does it work for you ?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898679639857571695-192621648138259898?l=riteshsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://riteshsblog.blogspot.com/feeds/192621648138259898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://riteshsblog.blogspot.com/2011/09/jquery-ui-tab-scroller-plugin.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/192621648138259898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/192621648138259898'/><link rel='alternate' type='text/html' href='http://riteshsblog.blogspot.com/2011/09/jquery-ui-tab-scroller-plugin.html' title='jQuery UI Tab scroller plugin V 1.0'/><author><name>RKJ</name><uri>http://www.blogger.com/profile/10529357735976707857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='21' src='http://1.bp.blogspot.com/_1LhaSbznGS0/S16wof3n1NI/AAAAAAAAANU/rYUGOK_O1bc/S220/Rkj.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-RQGuV5kUf2o/Tl9qPIeSSZI/AAAAAAAAASU/gk6FUtuDu-U/s72-c/scrolltab.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898679639857571695.post-7193934384132323246</id><published>2011-08-27T11:34:00.003+05:30</published><updated>2011-08-27T11:43:08.305+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='logout'/><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><title type='text'>Facebook logout problem php solved</title><content type='html'>After two days of searching, i have found a problem solved link and i wanted to share it with you all. Put this line in your logout script before redirect to Facebook logout.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;$session = $this-&amp;gt;facebook-&amp;gt;getSession();&lt;/div&gt;&lt;div&gt;$logoutUrl = $this-&amp;gt;facebook-&amp;gt;getLogoutUrl(array('next' =&amp;gt; base_url(), 'session_key' =&amp;gt; $session['session_key']));&lt;/div&gt;&lt;div&gt;setcookie('fbs_'.$this-&amp;gt;facebook-&amp;gt;getAppId(), '', time()-100, '/', '.domain.com');&lt;/div&gt;&lt;div&gt;$this-&amp;gt;session-&amp;gt;sess_destroy();&lt;/div&gt;&lt;div&gt;redirect($logoutUrl);&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I got it from this link http://forum.developers.facebook.net/viewtopic.php?id=71219.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hope it help someone.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898679639857571695-7193934384132323246?l=riteshsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://riteshsblog.blogspot.com/feeds/7193934384132323246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://riteshsblog.blogspot.com/2011/08/facebook-logout-problem-php-solved.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/7193934384132323246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/7193934384132323246'/><link rel='alternate' type='text/html' href='http://riteshsblog.blogspot.com/2011/08/facebook-logout-problem-php-solved.html' title='Facebook logout problem php solved'/><author><name>RKJ</name><uri>http://www.blogger.com/profile/10529357735976707857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='21' src='http://1.bp.blogspot.com/_1LhaSbznGS0/S16wof3n1NI/AAAAAAAAANU/rYUGOK_O1bc/S220/Rkj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898679639857571695.post-8500480144169652843</id><published>2011-08-22T16:59:00.003+05:30</published><updated>2011-08-22T17:12:16.944+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='window.addthis'/><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='AddThis'/><title type='text'>Addthis and ajax response page</title><content type='html'>There are lots of post regarding Addthis api usage for AJAX page. But none of the post worked perfectly for me. However i got some idea from all that posts to implement it. Here is my code, made little changes from different post.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var addthisScript = "http://s7.addthis.com/js/250/addthis_widget.js#domready=1";/&amp;gt;&lt;br /&gt;&lt;br /&gt;function initAddthis(){&lt;br /&gt;  if (window.addthis){&lt;br /&gt;     window.addthis.ost = 0;&lt;br /&gt;     window.addthis.init();&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;div&gt;&lt;code&gt;When you load page using ajax for example (here i have used jQuery)&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;$.load('http://example.com/lists',function(){&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;   &lt;/code&gt;$.getScript( addthisScript , function(){&lt;/div&gt;&lt;div&gt;         initAddthis&lt;/div&gt;&lt;div&gt;     });&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px; "&gt;});&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px; "&gt;Please let me know, does it work for you.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898679639857571695-8500480144169652843?l=riteshsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://riteshsblog.blogspot.com/feeds/8500480144169652843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://riteshsblog.blogspot.com/2011/08/addthis-and-ajax-response-page.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/8500480144169652843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/8500480144169652843'/><link rel='alternate' type='text/html' href='http://riteshsblog.blogspot.com/2011/08/addthis-and-ajax-response-page.html' title='Addthis and ajax response page'/><author><name>RKJ</name><uri>http://www.blogger.com/profile/10529357735976707857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='21' src='http://1.bp.blogspot.com/_1LhaSbznGS0/S16wof3n1NI/AAAAAAAAANU/rYUGOK_O1bc/S220/Rkj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898679639857571695.post-5015730758365998991</id><published>2011-07-07T13:28:00.022+05:30</published><updated>2011-07-11T18:00:36.663+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='breadcrumb'/><category scheme='http://www.blogger.com/atom/ns#' term='custom breadcrumb'/><category scheme='http://www.blogger.com/atom/ns#' term='zend framework'/><title type='text'>Zend Custom breadcrumb using XML file</title><content type='html'>As we know a breadcrumb can be generated using Zend_Navigation easily. But this will apply only to navigation menu items, not for other extra actions (outside from menu). Here i have overwrite Zend Navigation breadcrumb view helper, so that a separate XML file can be used for breadcrumb.&lt;br /&gt;&lt;br /&gt;To implement this there are 6 simple steps. I have used Custom_ as namespace either change it to any namespace that you have used in your application or add this namespace in you application.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 1 : Create Custom_BreadCrumb class by extending Zend_Navigation_Container&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;class Custom_BreadCrumb extends Zend_Navigation_Container&lt;br /&gt;{&lt;br /&gt;/**&lt;br /&gt;* Creates a new bread container from zend navigation help&lt;br /&gt;*&lt;br /&gt;* @param array|Zend_Config $pages [optional] pages to add&lt;br /&gt;* @throws Zend_Navigation_Exception if $pages is invalid&lt;br /&gt;*/&lt;br /&gt;public function __construct($pages = null)&lt;br /&gt;{&lt;br /&gt;if (is_array($pages) || $pages instanceof Zend_Config) {&lt;br /&gt;$this-&amp;gt;addPages($pages);&lt;br /&gt;} elseif (null !== $pages) {&lt;br /&gt;require_once 'Zend/Navigation/Exception.php';&lt;br /&gt;throw new Zend_Navigation_Exception(&lt;br /&gt;'Invalid argument: $pages must be an array, an ' .&lt;br /&gt;'instance of Zend_Config, or null');&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 2: Create an empty view helper class&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;class Custom_View_Helper_Breadcrumbs extends Zend_View_Helper_Navigation_Breadcrumbs{}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;you can override some feature of breadcrumbs view helper inside this class.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 3: Create XML File name breadcrumb.xml inside application/config/breadcrumbs.xml&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-tj7r-1uE0IA/ThV7YG9FUeI/AAAAAAAAARg/23v4h8x-JEs/s1600/breadcrumbXML.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 162px;" src="http://1.bp.blogspot.com/-tj7r-1uE0IA/ThV7YG9FUeI/AAAAAAAAARg/23v4h8x-JEs/s200/breadcrumbXML.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5626538963583193570" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 4: Load breadcrumb in bootstrap&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;protected function _initViewHelpers() {&lt;br /&gt;$this-&amp;gt;bootstrap('layout');&lt;br /&gt;$layout = $this-&amp;gt;getResource('layout');&lt;br /&gt;$view = $layout-&amp;gt;getView();&lt;br /&gt;#breadcrumb&lt;br /&gt;$breadCrubmConfig = new Zend_Config_Xml(APPLICATION_PATH . '/configs/breadcrumbs.xml');&lt;br /&gt;$breadCrumb = new Custom_BreadCrumb($breadCrubmConfig);&lt;br /&gt;$view-&amp;gt;breadcrumbs($breadCrumb);&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 5: Now set the breadcrumb active state in super action controller class&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Note: Super action controller class means, all the controller class in an application should extend this class.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$module = $this-&amp;gt;_request-&amp;gt;getModuleName();&lt;br /&gt;$controller = $this-&amp;gt;_request-&amp;gt;getControllerName();&lt;br /&gt;$action = $this-&amp;gt;_request-&amp;gt;getActionName();&lt;br /&gt;$mca = $module.'/'.$controller.'/'.$action;&lt;br /&gt;$activeBreadCrumbs = $this-&amp;gt;view-&amp;gt;breadcrumbs()-&amp;gt;findBymca($mca);&lt;br /&gt;$activeBreadCrumbs-&amp;gt;active = true;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 6: Usage&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Just paste this line in your layout&lt;br /&gt;&lt;br /&gt;echo $this-&amp;gt;breadcrumbs()-&amp;gt;setSeparator(' » ');&lt;br /&gt;&lt;br /&gt;Let me know does it works for you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898679639857571695-5015730758365998991?l=riteshsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://riteshsblog.blogspot.com/feeds/5015730758365998991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://riteshsblog.blogspot.com/2011/07/zend-custom-breadcrumb-using-xml-file.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/5015730758365998991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/5015730758365998991'/><link rel='alternate' type='text/html' href='http://riteshsblog.blogspot.com/2011/07/zend-custom-breadcrumb-using-xml-file.html' title='Zend Custom breadcrumb using XML file'/><author><name>RKJ</name><uri>http://www.blogger.com/profile/10529357735976707857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='21' src='http://1.bp.blogspot.com/_1LhaSbznGS0/S16wof3n1NI/AAAAAAAAANU/rYUGOK_O1bc/S220/Rkj.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-tj7r-1uE0IA/ThV7YG9FUeI/AAAAAAAAARg/23v4h8x-JEs/s72-c/breadcrumbXML.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898679639857571695.post-9009750415257862531</id><published>2011-06-10T09:45:00.004+05:30</published><updated>2011-07-07T13:29:13.915+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='permission'/><category scheme='http://www.blogger.com/atom/ns#' term='redirect loop'/><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='infinite loop'/><title type='text'>Facebook login or permission page redirect loop</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; line-height: 18px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;After 2 days of my head aching, i am able to find the problem of facebook login or permission infinite loop.&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; line-height: 18px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; line-height: 18px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"&gt;Actually the problem occurs when the facebook graph api ("makeRequest" function in base_facebook.php) make a curl request to https url then curl try to verify the ssl certificate and it returns false (specially in my case). So for quick fix, i have add&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; line-height: 18px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; line-height: 18px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"&gt;curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; line-height: 18px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; line-height: 18px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"&gt;just after curl_init. Hope it helps you. As it works for me.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; line-height: 18px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; line-height: 18px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"&gt;Let me know if it works for you.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; line-height: 18px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; line-height: 18px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"&gt;Cheers&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; color: rgb(51, 51, 51); font-family: 'Lucida Grande', verdana, arial, helvetica, sans-serif; line-height: 18px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-size: 13px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898679639857571695-9009750415257862531?l=riteshsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://riteshsblog.blogspot.com/feeds/9009750415257862531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://riteshsblog.blogspot.com/2011/06/facebook-login-or-permission-page.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/9009750415257862531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/9009750415257862531'/><link rel='alternate' type='text/html' href='http://riteshsblog.blogspot.com/2011/06/facebook-login-or-permission-page.html' title='Facebook login or permission page redirect loop'/><author><name>RKJ</name><uri>http://www.blogger.com/profile/10529357735976707857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='21' src='http://1.bp.blogspot.com/_1LhaSbznGS0/S16wof3n1NI/AAAAAAAAANU/rYUGOK_O1bc/S220/Rkj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898679639857571695.post-8325193404706783624</id><published>2011-04-04T15:28:00.001+05:30</published><updated>2011-04-12T12:41:19.620+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='MongoDB'/><category scheme='http://www.blogger.com/atom/ns#' term='Mongo library'/><category scheme='http://www.blogger.com/atom/ns#' term='NoSql'/><category scheme='http://www.blogger.com/atom/ns#' term='zend framework'/><title type='text'>Mongodb and Zend Framework using Mongo php library</title><content type='html'>Here you can use Mongodb(NoSql) database with Zend Framework using Mongo php library. I have created three classes &lt;span style="font-weight:bold;"&gt;Custom_Mongo_Instance&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;Custom_Mongo_Db&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;Custom_Mongo_Collection&lt;/span&gt; extending Mongo, MongoDB and MongoCollection respectively. So that you can overrides its methods easily.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First download mongo library for php from &lt;a href="http://pecl.php.net/package/mongo/download"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 1 :&lt;/span&gt; Custom_Mongo_Instanc&lt;br /&gt;&lt;code&gt;&lt;blockquote&gt;&lt;br /&gt;class Custom_Mongo_Instance extends Mongo&lt;br /&gt;{&lt;br /&gt;  public function  __construct( $server = "mongodb://localhost:27017",  $options = array("connect" =&amp;gt; TRUE) ) {&lt;br /&gt;      parent::__construct($server,  $options);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;/code&gt;&lt;span style="font-weight:bold;"&gt;Step 2 :&lt;/span&gt; Custom_Mongo_Db&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;blockquote&gt;class Custom_Mongo_Db extends MongoDB&lt;br /&gt;{&lt;br /&gt;  public function  __construct( Mongo $conn, $name ) {&lt;br /&gt;      parent::__construct( $conn, $name );&lt;br /&gt;  }&lt;br /&gt;}&lt;/blockquote&gt;&lt;/code&gt; &lt;span style="font-weight:bold;"&gt;Step 3 :&lt;/span&gt; Custom_Mongo_Collection&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;blockquote&gt;class Custom_Mongo_Collection extends MongoCollection&lt;br /&gt;{&lt;br /&gt; public function __construct ( $name, $db = null ){&lt;/blockquote&gt;&lt;blockquote&gt;  if($db == null) $db = Zend_Registry::get('mongoDB');&lt;br /&gt; parent::__construct ( $db , $name );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt; public function insert( array $a, $options = array())&lt;br /&gt;{&lt;br /&gt; $a['created'] = date('Y-m-d H:i');&lt;br /&gt; parent::insert( $a, $options);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 4 :&lt;/span&gt; Usage&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$cnn = "mongodb://username:password@localhost:27017";&lt;br /&gt;try{&lt;br /&gt;  $mongo = new Custom_Mongo_Instance($cnn);&lt;br /&gt;  $mongoDB = new Custom_Mongo_Db($mongo, "dbname");&lt;br /&gt;}catch(Exception $e){echo $e-&amp;gt;getMessage();exit;}&lt;br /&gt;&lt;br /&gt;$collection = new Custom_Mongo_Collection("my_collection", $mongoDB);&lt;br /&gt;$data['first_name'] = "Ritesh";&lt;br /&gt;$data['last_name'] = "jha"&lt;br /&gt;$collection-&amp;gt;insert($data);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Thats all. Now you can check the data either using mongo console or some third party GUI admin tools.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898679639857571695-8325193404706783624?l=riteshsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://riteshsblog.blogspot.com/feeds/8325193404706783624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://riteshsblog.blogspot.com/2011/04/mongodb-and-zend-framework-using-mongo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/8325193404706783624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/8325193404706783624'/><link rel='alternate' type='text/html' href='http://riteshsblog.blogspot.com/2011/04/mongodb-and-zend-framework-using-mongo.html' title='Mongodb and Zend Framework using Mongo php library'/><author><name>RKJ</name><uri>http://www.blogger.com/profile/10529357735976707857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='21' src='http://1.bp.blogspot.com/_1LhaSbznGS0/S16wof3n1NI/AAAAAAAAANU/rYUGOK_O1bc/S220/Rkj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898679639857571695.post-7922380534056329897</id><published>2011-03-28T13:20:00.001+05:30</published><updated>2011-04-12T13:17:18.043+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='RabbitMQ'/><category scheme='http://www.blogger.com/atom/ns#' term='AMQP library'/><category scheme='http://www.blogger.com/atom/ns#' term='AMQP'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP AMQP'/><category scheme='http://www.blogger.com/atom/ns#' term='zend framework'/><category scheme='http://www.blogger.com/atom/ns#' term='Zend_Queue'/><title type='text'>RabbitMQ adapter for Zend Framework and Zend Queue using AMQP php library</title><content type='html'>You can use this class as Zend_Queue adapter for RabbitMQ queue system using AMQP php library.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Download AMQP extension from &lt;a href="http://pecl.php.net/package/amqp"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;To compile and install follow this &lt;a href="http://code.google.com/p/php-amqp/"&gt;link&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There are three steps &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Note:&lt;/b&gt;  Here i have used Custom_ namespace for Zend. You can change the namespace as per your choice.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 1 &lt;/span&gt;(Create Adapter class)&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;blockquote&gt;/**&lt;br /&gt;* Class for using a Rabbitmq as a queue&lt;br /&gt;*&lt;br /&gt;* @category   Custom&lt;br /&gt;* @package    Custom_Queue_Rabbitmq&lt;br /&gt;* @subpackage Adapter&lt;br /&gt;* @author Ritesh Jha&lt;br /&gt;* @copyright  Copyright (c) (http://mailrkj(at)gmail(dot)com)&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;class Custom_Queue_Adapter_Rabbitmq extends Zend_Queue_Adapter_AdapterAbstract&lt;br /&gt;{&lt;br /&gt;/**&lt;br /&gt;* @var object AMQP connection object&lt;br /&gt;*/&lt;br /&gt;protected $_cnn = array();&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;*&lt;br /&gt;* @var object AMQP excahnge object&lt;br /&gt;*/&lt;br /&gt;protected $_exchange = null;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;*&lt;br /&gt;* @var object AMQP queue object&lt;br /&gt;*/&lt;br /&gt;protected $Queue = null;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;*&lt;br /&gt;* @var object AMQP queue object&lt;br /&gt;*/&lt;br /&gt;protected $QueueFlag = AMQP_DURABLE;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Constructor&lt;br /&gt;*&lt;br /&gt;* @param  array|Zend_Config $options&lt;br /&gt;* options (host,port,login,password)&lt;br /&gt;* @return AMQPConnection instance&lt;br /&gt;*/&lt;br /&gt;public function __construct($options, Zend_Queue $queue = null)&lt;br /&gt;{&lt;br /&gt;parent::__construct($options, $queue);&lt;br /&gt;&lt;br /&gt;if(is_array($options))&lt;br /&gt;{&lt;br /&gt;   try&lt;br /&gt;   {&lt;br /&gt;       $cnn = new AMQPConnection($options);&lt;br /&gt;       $cnn-&amp;gt;connect();&lt;br /&gt;&lt;br /&gt;       if(!$cnn-&amp;gt;isConnected())&lt;br /&gt;       {&lt;br /&gt;          throw new Zend_Queue_Exception("Unable to connect RabbitMQ server");&lt;br /&gt;       }&lt;br /&gt;       else&lt;br /&gt;       {&lt;br /&gt;           $this-&amp;gt;_cnn = $cnn;&lt;br /&gt;           $this-&amp;gt;Queue = new AMQPQueue($this-&amp;gt;_cnn);&lt;br /&gt;       }&lt;br /&gt;   }catch(Exception $e){throw new Zend_Queue_Exception($e-&amp;gt;getMessage());}&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;    throw new Zend_Queue_Exception("The options must be an associative array of host,port,login, password ...");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Get AMQPConnection object&lt;br /&gt;* @return object&lt;br /&gt;*/&lt;br /&gt;public function getConnection()&lt;br /&gt;{&lt;br /&gt;return $this-&amp;gt;_cnn;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Set exchange for sending message to queue&lt;br /&gt;* @param string $name&lt;br /&gt;* @param string $type (AMQP_EX_TYPE_DIRECT, AMQP_EX_TYPE_FANOUT, AMQP_EX_TYPE_TOPIC or AMQP_EX_TYPE_HEADER)&lt;br /&gt;* @param int $flags (AMQP_PASSIVE, AMQP_DURABLE, AMQP_AUTODELETE)&lt;br /&gt;* @return boolean&lt;br /&gt;*/&lt;br /&gt;public function setExchange($exchange , $routingKey = "*", $type = AMQP_EX_TYPE_DIRECT, $flags = AMQP_DURABLE)&lt;br /&gt;{&lt;br /&gt;if($exchange instanceof  Custom_Queue_Exchange)&lt;br /&gt;{&lt;br /&gt;   $this-&amp;gt;_exchange = $exchange;&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;   $exchange = new Custom_Queue_Exchange($this-&amp;gt;_cnn, $exchange , $type, $flags);&lt;br /&gt;   $this-&amp;gt;_exchange = $exchange;&lt;br /&gt;}&lt;br /&gt;$this-&amp;gt;setRoutingKey($routingKey);&lt;br /&gt;&lt;br /&gt;return $exchange;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Set routing key for queu&lt;br /&gt;* @param string $routing_key&lt;br /&gt;* @param Custom_Queue $queue&lt;br /&gt;* @return bool&lt;br /&gt;*/&lt;br /&gt;public function setRoutingKey($routingKey, Custom_Queue $queue = null)&lt;br /&gt;{&lt;br /&gt;if($queue)&lt;br /&gt;   $queueName = $queue-&amp;gt;getName ();&lt;br /&gt;else&lt;br /&gt;   $queueName = $this-&amp;gt;_queue-&amp;gt;getName();&lt;br /&gt;&lt;br /&gt;return $this-&amp;gt;_exchange-&amp;gt;bind($queueName, $routingKey);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* get AMQPQueue object&lt;br /&gt;* @return &lt;type&gt;&lt;br /&gt;*/&lt;br /&gt;public function setQueueFlag($flag)&lt;br /&gt;{&lt;br /&gt;return $this-&amp;gt;QueueFlag = $flag;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* create queue&lt;br /&gt;* @param &lt;type&gt; $name&lt;br /&gt;* @param &lt;type&gt; $timeout&lt;br /&gt;*/&lt;br /&gt;public function create($name, $timeout=null)&lt;br /&gt;{&lt;br /&gt;return $this-&amp;gt;Queue-&amp;gt;declare($name, $this-&amp;gt;QueueFlag);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* delete queue&lt;br /&gt;* @param &lt;type&gt; $name&lt;br /&gt;* @param &lt;type&gt; $timeout&lt;br /&gt;*/&lt;br /&gt;public function delete($name)&lt;br /&gt;{&lt;br /&gt;return $this-&amp;gt;Queue-&amp;gt;delete($name);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Publish message to queue&lt;br /&gt;* @param mixed $message (array or string)&lt;br /&gt;* @param Custom_Queue $queue&lt;br /&gt;* @return boolean&lt;br /&gt;*/&lt;br /&gt;public function send($message, Zend_Queue $queue = null)&lt;br /&gt;{&lt;br /&gt;if(is_array($message))&lt;br /&gt;{&lt;br /&gt;  $message = Zend_Json_Encoder::encode($message);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if($queue)&lt;br /&gt; $routingKey = $queue-&amp;gt;getOption('routingKey');&lt;br /&gt;else&lt;br /&gt; $routingKey = $this-&amp;gt;_queue-&amp;gt;getOption('routingKey');&lt;br /&gt;&lt;br /&gt;if($this-&amp;gt;_exchange)&lt;br /&gt;{&lt;br /&gt;return $this-&amp;gt;_exchange-&amp;gt;publish($message, $routingKey, AMQP_MANDATORY, array('delivery_mode' =&amp;gt; 2));&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt; throw new Zend_Queue_Exception("Rabbitmq exchange not found");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;*&lt;br /&gt;* @param array $options (min, max. ack)&lt;br /&gt;* @param int $timeout&lt;br /&gt;* @param Zend_Queue $queue&lt;br /&gt;* @return &lt;type&gt;&lt;br /&gt;*/&lt;br /&gt;public function receive($options = null, $timeout = null, Zend_Queue $queue = null)&lt;br /&gt;{&lt;br /&gt;$messages = $this-&amp;gt;Queue-&amp;gt;get();&lt;br /&gt;return $messages;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public function getCapabilities(){&lt;br /&gt;return array(&lt;br /&gt;   'create'        =&amp;gt; true,&lt;br /&gt;   'delete'        =&amp;gt; true,&lt;br /&gt;   'send'          =&amp;gt; true,&lt;br /&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public function isExists($name){}&lt;br /&gt;public function getQueues(){}&lt;br /&gt;public function count(Zend_Queue $queue = null){}&lt;br /&gt;public function deleteMessage(Zend_Queue_Message $message){}&lt;br /&gt;}&lt;br /&gt;&lt;/type&gt;&lt;/type&gt;&lt;/type&gt;&lt;/type&gt;&lt;/type&gt;&lt;/type&gt;&lt;/blockquote&gt;&lt;type&gt;&lt;type&gt;&lt;type&gt;&lt;type&gt;&lt;type&gt;&lt;type&gt;&lt;/type&gt;&lt;/type&gt;&lt;/type&gt;&lt;/type&gt;&lt;/type&gt;&lt;/type&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 2&lt;/span&gt;(Create Exchange Class)&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;class Custom_Queue_Exchange extends AMQPExchange&lt;br /&gt;{&lt;br /&gt;public function __construct ( AMQPConnection $connection , $exchange_name , $type = AMQP_EX_TYPE_DIRECT, $flags = AMQP_AUTODELETE)&lt;br /&gt;{&lt;br /&gt;parent::__construct ($connection);&lt;br /&gt;$this-&amp;gt;declare($exchange_name, $type, $flags);&lt;br /&gt;}&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 3&lt;/span&gt;(Overwrite Zend_Queue Class)&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;blockquote&gt;/**&lt;br /&gt;* Class for using a Rabbitmq as a queue&lt;br /&gt;*&lt;br /&gt;* @category   Custom&lt;br /&gt;* @package    Custom_Queue&lt;br /&gt;* @subpackage Adapter&lt;br /&gt;* @author Ritesh Jha&lt;br /&gt;* @copyright  Copyright (c) (http://mailrkj(at)gmail(dot)com)&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;class Custom_Queue extends Zend_Queue&lt;br /&gt;{&lt;br /&gt;var $_instance = null;&lt;br /&gt;&lt;br /&gt;public function __construct($adapter, $options = array())&lt;br /&gt;{&lt;br /&gt;if($adapter instanceof  Custom_Queue_Adapter_Rabbitmq)&lt;br /&gt;{&lt;br /&gt;    parent::__construct($adapter, $options);&lt;br /&gt;&lt;br /&gt;    #declare new queue&lt;br /&gt;    $queueName = (array_key_exists('name', $options))?$options['name']:'queue';&lt;br /&gt;    if(array_key_exists('flag', $options)) $adapter-&amp;gt;setQueueFlag ($options['flag']);&lt;br /&gt;    $queue = $adapter-&amp;gt;create($queueName);&lt;br /&gt;    $this-&amp;gt;_setName($queueName);&lt;br /&gt;    #declare exchange&lt;br /&gt;    $routingKey = (array_key_exists('routingKey', $options))?$options['routingKey']:'*';&lt;br /&gt;    $exchangeName = (array_key_exists('exchange', $options))?$options['exchange']:'exchange';&lt;br /&gt;    $ex = $adapter-&amp;gt;setExchange($exchangeName, $routingKey);&lt;br /&gt;    $this-&amp;gt;setOptions($options);&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;    throw new Zend_Queue_Exception("Invalid Rabbitmq adapter");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Create a new queue&lt;br /&gt;* @param  string  $name  queue name&lt;br /&gt;* @param int $flag A bitmask of any of the flags: AMQP_AUTODELETE, AMQP_PASSIVE, AMQP_DURABLE, AMQP_NOACK.&lt;br /&gt;* @return int (message count)&lt;br /&gt;*/&lt;br /&gt;public function  createQueue($name, $flag = AMQP_DURABLE)&lt;br /&gt;{&lt;br /&gt;$this-&amp;gt;getAdapter()-&amp;gt;setQueueFlag($flag);&lt;br /&gt;parent::createQueue($name);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Delete a queue and all of it's messages&lt;br /&gt;* Returns false if the queue is not delete, true if the queue deleted&lt;br /&gt;* @param  string  $name queue name&lt;br /&gt;* @return boolean&lt;br /&gt;*/&lt;br /&gt;public function deleteQueue($name)&lt;br /&gt;{&lt;br /&gt;return $this-&amp;gt;getAdapter()-&amp;gt;delete($name);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Send a message to the queue&lt;br /&gt;*&lt;br /&gt;* @param  array|string $message message&lt;br /&gt;* @return Zend_Queue_Message&lt;br /&gt;* @throws Zend_Queue_Exception&lt;br /&gt;*/&lt;br /&gt;public function send($message)&lt;br /&gt;{&lt;br /&gt;return $this-&amp;gt;getAdapter()-&amp;gt;send($message);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Consume message&lt;br /&gt;*&lt;br /&gt;* @param array $options&lt;br /&gt;* @param int $timeout&lt;br /&gt;* @return array&lt;br /&gt;*/&lt;br /&gt;public function  receive($options = null, $timeout = null)&lt;br /&gt;{&lt;br /&gt;return $this-&amp;gt;getAdapter()-&amp;gt;receive($options, $timeout);&lt;br /&gt;}&lt;br /&gt;}&lt;/blockquote&gt;&lt;/code&gt;&lt;/div&gt;&lt;span style="font-weight:bold;"&gt;Usage:&lt;/span&gt;&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;span style="font-weight:bold;"&gt;Sending Message&lt;/span&gt;&lt;code&gt;&lt;blockquote&gt;try{&lt;br /&gt;$adapter = new Custom_Queue_Adapter_Rabbitmq($adapteroptions);&lt;br /&gt;$queue = new Custom_Queue($adapter, $queueoptions);&lt;br /&gt;$message = 'Testing queue';&lt;br /&gt;if($queue-&amp;gt;send($message))&lt;br /&gt; echo "Message published \n";&lt;br /&gt;else&lt;br /&gt; echo "Not";&lt;br /&gt;&lt;br /&gt;}  catch (Exception $e){echo $e-&amp;gt;getMessage(); }&lt;/blockquote&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Receive Message&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;blockquote&gt;try{&lt;br /&gt;$adapter = new Custom_Queue_Adapter_Rabbitmq($adapteroptions);&lt;br /&gt;$queue = new Custom_Queue($adapter, $queueoptions);&lt;br /&gt;$messages = $queue-&amp;gt;receive($options);&lt;br /&gt;}  catch (Exception $e){echo $e-&amp;gt;getMessage(); }&lt;/blockquote&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898679639857571695-7922380534056329897?l=riteshsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://riteshsblog.blogspot.com/feeds/7922380534056329897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://riteshsblog.blogspot.com/2011/03/rabbitmq-adapter-for-zend-queue-using.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/7922380534056329897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/7922380534056329897'/><link rel='alternate' type='text/html' href='http://riteshsblog.blogspot.com/2011/03/rabbitmq-adapter-for-zend-queue-using.html' title='RabbitMQ adapter for Zend Framework and Zend Queue using AMQP php library'/><author><name>RKJ</name><uri>http://www.blogger.com/profile/10529357735976707857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='21' src='http://1.bp.blogspot.com/_1LhaSbznGS0/S16wof3n1NI/AAAAAAAAANU/rYUGOK_O1bc/S220/Rkj.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898679639857571695.post-8866022003437226926</id><published>2011-03-10T14:48:00.000+05:30</published><updated>2011-03-25T10:32:08.808+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Time Zone'/><category scheme='http://www.blogger.com/atom/ns#' term='zone offset'/><category scheme='http://www.blogger.com/atom/ns#' term='GMT'/><title type='text'>PHP Convert GMT time to local time</title><content type='html'>Get user timezone offset(ex. Timezone offset for nepal +5:45)&lt;br /&gt;&lt;code&gt;&lt;blockquote&gt;$userTzOffset = +5:45&lt;br /&gt;$gmtDateTime = "2011-03-10 9:00"&lt;br /&gt;$osts = explode(":",$userTzOffset);&lt;br /&gt;$sec  = ($osts[0] * 60 * 60) + $osts[1] * 60 ;&lt;br /&gt;$gmtTimeStamp = strtotime($gmtDateTime, time()) + $sec;&lt;br /&gt;$dt = date('Y-m-d::H:i:s',$gmtTimeStamp);&lt;br /&gt;&lt;br /&gt;echo $dt;&lt;/blockquote&gt;&lt;/code&gt;Hope this will help someone.&lt;br /&gt;&lt;br /&gt;Related post &lt;a href="http://riteshsblog.blogspot.com/2011/03/php-convert-local-time-to-gmt-time.html"&gt;PHP Convert local time to GMT time&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For getting timezone and offset see this post &lt;a href="http://riteshsblog.blogspot.com/2011/01/get-timezone-with-daylight-saving-in.html"&gt;Get TimeZone with Daylight saving in PHP&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898679639857571695-8866022003437226926?l=riteshsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://riteshsblog.blogspot.com/feeds/8866022003437226926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://riteshsblog.blogspot.com/2011/03/php-convert-gmt-time-to-local-time.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/8866022003437226926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/8866022003437226926'/><link rel='alternate' type='text/html' href='http://riteshsblog.blogspot.com/2011/03/php-convert-gmt-time-to-local-time.html' title='PHP Convert GMT time to local time'/><author><name>RKJ</name><uri>http://www.blogger.com/profile/10529357735976707857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='21' src='http://1.bp.blogspot.com/_1LhaSbznGS0/S16wof3n1NI/AAAAAAAAANU/rYUGOK_O1bc/S220/Rkj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898679639857571695.post-6965867518681781982</id><published>2011-03-10T13:49:00.004+05:30</published><updated>2011-04-05T16:45:05.631+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='timezone'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='GMT'/><title type='text'>PHP Convert local time to GMT time</title><content type='html'>Get user timezone offset(ex. Timezone offset for nepal +5:45)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$userTzOffset = +5:45&lt;br /&gt;$userDateTime = "2011-03-10 14:00"&lt;br /&gt;&lt;br /&gt;$osts = explode(":",$userTzOffset);&lt;br /&gt;$secs  = ($osts[0] * 60 * 60) + $osts[1] * 60 ;&lt;br /&gt;$userTimeStamp = strtotime(date('Y-m-d H:i:s',time()+$secs));&lt;br /&gt;$dt = date('Y-m-d H:i:s',strtotime($dateTime,$userTimeStamp) - $sec);&lt;br /&gt;echo $dt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Related Post &lt;a href="http://riteshsblog.blogspot.com/2011/03/php-convert-gmt-time-to-local-time.html"&gt;PHP Convert GMT time to local time&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For getting timezone and offset see this post &lt;a href="http://riteshsblog.blogspot.com/2011/01/get-timezone-with-daylight-saving-in.html"&gt;Get TimeZone with Daylight saving in PHP&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898679639857571695-6965867518681781982?l=riteshsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://riteshsblog.blogspot.com/feeds/6965867518681781982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://riteshsblog.blogspot.com/2011/03/php-convert-local-time-to-gmt-time.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/6965867518681781982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/6965867518681781982'/><link rel='alternate' type='text/html' href='http://riteshsblog.blogspot.com/2011/03/php-convert-local-time-to-gmt-time.html' title='PHP Convert local time to GMT time'/><author><name>RKJ</name><uri>http://www.blogger.com/profile/10529357735976707857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='21' src='http://1.bp.blogspot.com/_1LhaSbznGS0/S16wof3n1NI/AAAAAAAAANU/rYUGOK_O1bc/S220/Rkj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898679639857571695.post-6019414851251020267</id><published>2011-01-19T17:16:00.000+05:30</published><updated>2011-01-19T17:23:41.565+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Time Zone'/><title type='text'>Get TimeZone with Daylight saving in PHP</title><content type='html'>function timeZones()&lt;br /&gt;{&lt;br /&gt;    $list = DateTimeZone::listAbbreviations();&lt;br /&gt;    $idents = DateTimeZone::listIdentifiers();&lt;br /&gt;&lt;br /&gt;    $data = $offset = $added = array();&lt;br /&gt;    foreach ($list as $abbr =&gt; $info) &lt;br /&gt;    {&lt;br /&gt;      foreach ($info as $zone) &lt;br /&gt;        {&lt;br /&gt;  if ( ! empty($zone['timezone_id']) &amp;amp;&amp;amp;&lt;br /&gt;              ! in_array($zone['timezone_id'], $added))&lt;br /&gt;   {&lt;br /&gt;      $z = new DateTimeZone($zone['timezone_id']);&lt;br /&gt;      $c = new DateTime('now', $z);&lt;br /&gt;      $value['offset'] = formatOffset($z-&gt;getOffset($c));&lt;br /&gt;&lt;br /&gt;      if($zone['dst'])&lt;br /&gt;    $day_light_saving = 'DST Yes';&lt;br /&gt;      else&lt;br /&gt;    $day_light_saving = 'DST No';&lt;br /&gt;&lt;br /&gt;     $value['timezone'] = $c-&gt;format('H:i a')." -- GMT ".$value['offset']." ".$zone['timezone_id']."--".$day_light_saving;&lt;br /&gt;     $data[$zone['timezone_id']] = $value;&lt;br /&gt;      $added[] = $zone['timezone_id'];&lt;br /&gt;   }&lt;br /&gt; }&lt;br /&gt;  &lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;   ksort($data);&lt;br /&gt;   return $data;&lt;br /&gt;  &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;static private  function formatOffset($offset)&lt;br /&gt;{&lt;br /&gt;       $hours = $offset / 3600;&lt;br /&gt;       $remainder = $offset % 3600;&lt;br /&gt;       $sign = $hours &gt; 0 ? '+' : '-';&lt;br /&gt;       $hour = (int) abs($hours);&lt;br /&gt;       $minutes = (int) abs($remainder / 60);&lt;br /&gt;&lt;br /&gt;       return $sign . str_pad($hour, 2, '0', STR_PAD_LEFT)&lt;br /&gt;               .':'. str_pad($minutes,2, '0');&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Made simple correction from the below link discussions&lt;br /&gt;http://stackoverflow.com/questions/1727077/generating-a-drop-down-list-of-timezones-with-php&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898679639857571695-6019414851251020267?l=riteshsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://riteshsblog.blogspot.com/feeds/6019414851251020267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://riteshsblog.blogspot.com/2011/01/get-timezone-with-daylight-saving-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/6019414851251020267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/6019414851251020267'/><link rel='alternate' type='text/html' href='http://riteshsblog.blogspot.com/2011/01/get-timezone-with-daylight-saving-in.html' title='Get TimeZone with Daylight saving in PHP'/><author><name>RKJ</name><uri>http://www.blogger.com/profile/10529357735976707857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='21' src='http://1.bp.blogspot.com/_1LhaSbznGS0/S16wof3n1NI/AAAAAAAAANU/rYUGOK_O1bc/S220/Rkj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898679639857571695.post-1530787813605889804</id><published>2010-11-02T12:58:00.000+05:30</published><updated>2010-11-02T13:13:49.393+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='autocomplete'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery autocomplete with caching and custom value selection</title><content type='html'>Download jQuery library from jQuery site and its ui plugin for autocomplete from this link http://jqueryui.com/home&lt;br /&gt;&lt;br /&gt;Define below function in any your js file. (ex: common.js) and then include it in your page.&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Set autocomplete property &lt;br /&gt; */&lt;br /&gt;function setAutoComplete(element_id, ajax_url, listener, cache_name, term_length)&lt;br /&gt;{&lt;br /&gt; if (element_id === undefined || ajax_url === undefined) return false;&lt;br /&gt;        if (listener   === undefined) listener   = 'itemselected';&lt;br /&gt; if (term_length === undefined) term_length = 1;&lt;br /&gt; if (cache_name === undefined) cache_name = 'itosa_ac_cache';&lt;br /&gt;&lt;br /&gt; var cache   = [];&lt;br /&gt; cache[cache_name] = [];&lt;br /&gt; &lt;br /&gt; $("#"+element_id).autocomplete({&lt;br /&gt;  source: function( request, response ) {&lt;br /&gt;    var term = request.term;&lt;br /&gt;    if ( term in cache[cache_name] ) {&lt;br /&gt;     response( cache[cache_name][ term ] );&lt;br /&gt;     return;&lt;br /&gt;    }&lt;br /&gt;    $(this).addClass('ui-autocomplete-loading');&lt;br /&gt;    lastXhr = $.getJSON( ajax_url, request, function( data, status, xhr ) {&lt;br /&gt;     cache[cache_name][ term ] = data;&lt;br /&gt;     if ( data != null &amp;&amp;  xhr === lastXhr ) {&lt;br /&gt;      response( data );&lt;br /&gt;     }&lt;br /&gt;    });&lt;br /&gt;   },&lt;br /&gt;  minLength: term_length,&lt;br /&gt;  select: function(event, ui){$('body').trigger(listener,[event,ui]);}&lt;br /&gt; })&lt;br /&gt;&lt;br /&gt; return false;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;When you select item from list it will trigger listener event, you have passed through function parameter "listener".&lt;br /&gt;&lt;br /&gt;To access the code&lt;br /&gt;&lt;br /&gt;setAutoComplete('search_person','http://example.com/person.php','personselect');&lt;br /&gt;$('body').bind('itemselected',function (event,input_event,ui){&lt;br /&gt; $('#seach_key').val(ui.item.id);&lt;br /&gt; return false;&lt;br /&gt;});&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898679639857571695-1530787813605889804?l=riteshsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://riteshsblog.blogspot.com/feeds/1530787813605889804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://riteshsblog.blogspot.com/2010/11/jquery-autocomplete-with-caching-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/1530787813605889804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/1530787813605889804'/><link rel='alternate' type='text/html' href='http://riteshsblog.blogspot.com/2010/11/jquery-autocomplete-with-caching-and.html' title='jQuery autocomplete with caching and custom value selection'/><author><name>RKJ</name><uri>http://www.blogger.com/profile/10529357735976707857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='21' src='http://1.bp.blogspot.com/_1LhaSbznGS0/S16wof3n1NI/AAAAAAAAANU/rYUGOK_O1bc/S220/Rkj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898679639857571695.post-4047041540734049392</id><published>2010-08-06T09:05:00.000+05:30</published><updated>2010-08-06T13:26:00.017+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQuery slider'/><category scheme='http://www.blogger.com/atom/ns#' term='slide text up and down'/><title type='text'>jQuery Read More and Read Less</title><content type='html'>Here is the jQuery code for showing readmore and read less with sliding effect. You have to just add the jQuery.js file and the below javascript code.&lt;br /&gt;&lt;br /&gt;&lt;div class="slider"&gt;&lt;br /&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span id="readmore_cnt"&gt;&lt;br /&gt;  &lt;a class="slider_menu" href="javascript:void(0)"&gt;Read More&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;var sliderHeight = "40";&lt;br /&gt;&lt;br /&gt;$(document).ready(function(){&lt;br /&gt;&lt;br /&gt;   $('.slider').each(function () {&lt;br /&gt;               var current = $(this);&lt;br /&gt;               current.attr("box_h", current.height());&lt;br /&gt;if(current.height() &lt;= sliderHeight) $('#readmore_cnt').hide();      });     $(".slider").css("height", sliderHeight+ "px");     $(".slider_menu").click(function() { openSlider() }) });  function openSlider() {     var open_height = $(".slider").attr("box_h") + "px";     $(".slider").animate({"height": open_height}, {duration: "slow" });     $(".slider_menu").html('');&lt;br /&gt;   $(".slider_menu").removeClass('view-more');&lt;br /&gt;   $(".slider_menu").addClass('view-less');&lt;br /&gt;   $(".slider_menu").unbind("click");&lt;br /&gt;   $(".slider_menu").click(function() { closeSlider() });&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function closeSlider()&lt;br /&gt;{  &lt;br /&gt;   $(".slider").animate({"height": sliderHeight+ "px"}, {duration: "slow" });&lt;br /&gt;   $(".slider_menu").html('');&lt;br /&gt;   $(".slider_menu").removeClass('view-less');&lt;br /&gt;   $(".slider_menu").addClass('view-more');&lt;br /&gt;   $(".slider_menu").unbind("click");&lt;br /&gt;   $(".slider_menu").click(function() { openSlider() });&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898679639857571695-4047041540734049392?l=riteshsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://riteshsblog.blogspot.com/feeds/4047041540734049392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://riteshsblog.blogspot.com/2010/08/jquery-read-more-and-read-less.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/4047041540734049392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/4047041540734049392'/><link rel='alternate' type='text/html' href='http://riteshsblog.blogspot.com/2010/08/jquery-read-more-and-read-less.html' title='jQuery Read More and Read Less'/><author><name>RKJ</name><uri>http://www.blogger.com/profile/10529357735976707857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='21' src='http://1.bp.blogspot.com/_1LhaSbznGS0/S16wof3n1NI/AAAAAAAAANU/rYUGOK_O1bc/S220/Rkj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898679639857571695.post-4603482533226899267</id><published>2010-07-28T16:43:00.000+05:30</published><updated>2010-07-29T16:52:59.195+05:30</updated><title type='text'>How to get past date from today</title><content type='html'>&lt;div&gt;Here is the code,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;$today  =  strtotime(date('y-m-d'));&lt;/div&gt;&lt;div&gt;for($i=0; $i &lt;  7;$i++)&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;$days[]&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;= date('y-m-d:l',($today-($i*24*60*60)));&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;print_r($days);die;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Output:&lt;/div&gt;&lt;div&gt;&lt;pre&gt;Array ( &lt;/pre&gt;&lt;pre&gt;    [0] =&gt; 10-07-28:Wednesday    &lt;/pre&gt;&lt;pre&gt;    [1] =&gt; 10-07-27:Tuesday &lt;/pre&gt;&lt;pre&gt;    [2] =&gt; 10-07-26:Monday  &lt;/pre&gt;&lt;pre&gt;    [3] =&gt; 10-07-25:Sunday  &lt;/pre&gt;&lt;pre&gt;    [4] =&gt; 10-07-24:Saturday   &lt;/pre&gt;&lt;pre&gt;   [5] =&gt; 10-07-23:Friday   &lt;/pre&gt;&lt;pre&gt;   [6] =&gt; 10-07-22:Thursday&lt;/pre&gt;&lt;pre&gt; ) &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Note: The result might be different as your testing date will be different.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898679639857571695-4603482533226899267?l=riteshsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://riteshsblog.blogspot.com/feeds/4603482533226899267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://riteshsblog.blogspot.com/2010/07/how-to-get-past-date-from-today.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/4603482533226899267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/4603482533226899267'/><link rel='alternate' type='text/html' href='http://riteshsblog.blogspot.com/2010/07/how-to-get-past-date-from-today.html' title='How to get past date from today'/><author><name>RKJ</name><uri>http://www.blogger.com/profile/10529357735976707857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='21' src='http://1.bp.blogspot.com/_1LhaSbznGS0/S16wof3n1NI/AAAAAAAAANU/rYUGOK_O1bc/S220/Rkj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898679639857571695.post-3324820611760715561</id><published>2010-07-28T11:00:00.000+05:30</published><updated>2010-07-28T11:04:12.020+05:30</updated><title type='text'>Getting real IP</title><content type='html'>&lt;pre&gt;Here is the function that will give you a real IP address&lt;br /&gt;&lt;br /&gt;function getIP() {&lt;br /&gt;if (getenv('HTTP_CLIENT_IP')) {&lt;br /&gt;$ip = getenv('HTTP_CLIENT_IP');&lt;br /&gt;}&lt;br /&gt;elseif (getenv('HTTP_X_FORWARDED_FOR')) {&lt;br /&gt;$ip = getenv('HTTP_X_FORWARDED_FOR');&lt;br /&gt;}&lt;br /&gt;elseif (getenv('HTTP_X_FORWARDED')) {&lt;br /&gt;$ip = getenv('HTTP_X_FORWARDED');&lt;br /&gt;}&lt;br /&gt;elseif (getenv('HTTP_FORWARDED_FOR')) {&lt;br /&gt;$ip = getenv('HTTP_FORWARDED_FOR');&lt;br /&gt;}&lt;br /&gt;elseif (getenv('HTTP_FORWARDED')) {&lt;br /&gt;$ip = getenv('HTTP_FORWARDED');&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;$ip = $_SERVER['REMOTE_ADDR'];&lt;br /&gt;}&lt;br /&gt;return $ip;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Resource from comment of this link&lt;br /&gt;"http://www.cyberciti.biz/faq/php-howto-read-ip-address-of-remote-computerbrowser/"&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898679639857571695-3324820611760715561?l=riteshsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://riteshsblog.blogspot.com/feeds/3324820611760715561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://riteshsblog.blogspot.com/2010/07/getting-real-ip.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/3324820611760715561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/3324820611760715561'/><link rel='alternate' type='text/html' href='http://riteshsblog.blogspot.com/2010/07/getting-real-ip.html' title='Getting real IP'/><author><name>RKJ</name><uri>http://www.blogger.com/profile/10529357735976707857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='21' src='http://1.bp.blogspot.com/_1LhaSbznGS0/S16wof3n1NI/AAAAAAAAANU/rYUGOK_O1bc/S220/Rkj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898679639857571695.post-7749529572726062360</id><published>2010-04-27T09:08:00.001+05:30</published><updated>2010-04-27T09:19:17.249+05:30</updated><title type='text'>Google Map Code link</title><content type='html'>http://code.google.com/apis/maps/documentation/overlays.html&lt;br /&gt;&lt;br /&gt;&lt;pre id="line75"&gt;   if (GBrowserIsCompatible()) {&lt;br /&gt;         map = new GMap(document.getElementById("map"));&lt;br /&gt;    map.setCenter(new GLatLng(33.5923607, -86.9924358), 13);&lt;br /&gt;    var point = new GLatLng(33.5923607,-86.9924358);&lt;br /&gt;    var marker=new GMarker(point);&lt;br /&gt;    GEvent.addListener(marker, "click", function() {&lt;br /&gt;    marker.openInfoWindowHtml(details);&lt;br /&gt;    });&lt;br /&gt;&lt;br /&gt;    map.addOverlay(marker);&lt;br /&gt;  }&lt;br /&gt;     &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898679639857571695-7749529572726062360?l=riteshsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://riteshsblog.blogspot.com/feeds/7749529572726062360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://riteshsblog.blogspot.com/2010/04/google-map-code-link.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/7749529572726062360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/7749529572726062360'/><link rel='alternate' type='text/html' href='http://riteshsblog.blogspot.com/2010/04/google-map-code-link.html' title='Google Map Code link'/><author><name>RKJ</name><uri>http://www.blogger.com/profile/10529357735976707857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='21' src='http://1.bp.blogspot.com/_1LhaSbznGS0/S16wof3n1NI/AAAAAAAAANU/rYUGOK_O1bc/S220/Rkj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898679639857571695.post-416655357403469748</id><published>2010-03-23T16:53:00.000+05:30</published><updated>2010-03-23T16:57:46.213+05:30</updated><title type='text'>PHP file upload class</title><content type='html'>&lt;?php&lt;br /&gt;/**&lt;br /&gt; * File uploader class&lt;br /&gt; * @name FileUploader&lt;br /&gt; * @author Ritesh&lt;br /&gt; */&lt;br /&gt;class FileUploader&lt;br /&gt;{&lt;br /&gt;    /**&lt;br /&gt;     * Constant variables&lt;br /&gt;     */&lt;br /&gt;    const ERR_INVALID_FILE  = 'Invalid file';&lt;br /&gt;    const ERR_FILE_SIZE        = 'File size is too large';&lt;br /&gt;    const ERR_UNKNOWN        = 'Unknown file upload error';&lt;br /&gt;    const ERR_FILE_EXISTS    = 'File already exist';&lt;br /&gt;   &lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Default 100 KB&lt;br /&gt;     * @var string $_filesize&lt;br /&gt;     */&lt;br /&gt;    private $_filesize = "102400";&lt;br /&gt;   &lt;br /&gt;    /**&lt;br /&gt;     *&lt;br /&gt;     * @var array $_file_types&lt;br /&gt;     */&lt;br /&gt;    private $_file_types = array('image/jpeg','image/ico','image/gif','image/png');&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * detault root folder of class file&lt;br /&gt;     * @var string $_upload_path&lt;br /&gt;     */&lt;br /&gt;    private $_upload_path = ".";&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * error message&lt;br /&gt;     * @var string $_error&lt;br /&gt;     */&lt;br /&gt;    private $_error = '';&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * @var string $_uploaded_file&lt;br /&gt;     */&lt;br /&gt;    private $_uploaded_file = '';&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Add other files&lt;br /&gt;     * @param array $file_types&lt;br /&gt;     */&lt;br /&gt;    function addFileTypes($file_types)&lt;br /&gt;    {&lt;br /&gt;        $this-&gt;_file_types = array_merge($this-&gt;_file_types,$file_types);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * reset upload file types&lt;br /&gt;     * @param array $file_types&lt;br /&gt;     */&lt;br /&gt;    function resetFileTypes($file_types)&lt;br /&gt;    {&lt;br /&gt;        $this-&gt;_file_types = $file_types;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * set file size&lt;br /&gt;     * @param int $size&lt;br /&gt;     */&lt;br /&gt;    function setFileSize($size)&lt;br /&gt;    {&lt;br /&gt;        $this-&gt;_filesize = $size;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * set file upload path&lt;br /&gt;     * @param string $path&lt;br /&gt;     */&lt;br /&gt;    function setUploadPath($path)&lt;br /&gt;    {&lt;br /&gt;        $this-&gt;_upload_path = $path;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * set error message&lt;br /&gt;     * @param string $error&lt;br /&gt;     */&lt;br /&gt;    function setError($error)&lt;br /&gt;    {&lt;br /&gt;        $this-&gt;_error = $error;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * return error message&lt;br /&gt;     * @return string&lt;br /&gt;     */&lt;br /&gt;    function getError()&lt;br /&gt;    {&lt;br /&gt;        return __($this-&gt;_error);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * File upload function to upload file&lt;br /&gt;     * @param string $input_name&lt;br /&gt;     * @param boolean $check_file_exists&lt;br /&gt;     * @param string $saved_file_name&lt;br /&gt;     * @return boolean&lt;br /&gt;     */&lt;br /&gt;    function upload( $input_name, $check_file_exists = false, $saved_file_name = null )&lt;br /&gt;    {&lt;br /&gt;        $file_type = $_FILES[$input_name]['type'];&lt;br /&gt;        $file_size = $_FILES[$input_name]['size'];&lt;br /&gt;       &lt;br /&gt;        if($saved_file_name == null)&lt;br /&gt;            $saved_file_name = $_FILES[$input_name]['name'];&lt;br /&gt;        else&lt;br /&gt;            $saved_file_name = $saved_file_name.".".$this-&gt;getFileExt($_FILES[$input_name]['name']);&lt;br /&gt;&lt;br /&gt;        # Check file type&lt;br /&gt;        if (!in_array($file_type, $this-&gt;_file_types))&lt;br /&gt;        {&lt;br /&gt;            $this-&gt;setError(self::ERR_INVALID_FILE);&lt;br /&gt;            return false;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        # Check file size&lt;br /&gt;        if ($file_size &gt; $this-&gt;_filesize)&lt;br /&gt;        {&lt;br /&gt;            $this-&gt;setError(self::ERR_FILE_SIZE);&lt;br /&gt;            return false;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        # Check for unknown error&lt;br /&gt;        if ($_FILES[$input_name]["error"] &gt; 0)&lt;br /&gt;        {&lt;br /&gt;            $this-&gt;setError(self::ERR_UNKNOWN);&lt;br /&gt;            return false;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        # Check file exist&lt;br /&gt;        if ($check_file_exists &amp;amp;&amp;amp; file_exists($this-&gt;_upload_path . DS . $saved_file_name))&lt;br /&gt;        {&lt;br /&gt;            $this-&gt;setError(self::ERR_FILE_EXISTS);&lt;br /&gt;            return false;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        $result = move_uploaded_file($_FILES[$input_name]["tmp_name"],$this-&gt;_upload_path . DS . $saved_file_name);&lt;br /&gt;&lt;br /&gt;        if (!$result)&lt;br /&gt;        {&lt;br /&gt;            $this-&gt;setError(self::ERR_UNKNOWN);&lt;br /&gt;            $this-&gt;_uploaded_file = '';&lt;br /&gt;            return false;&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;        {&lt;br /&gt;            $this-&gt;_uploaded_file = $saved_file_name;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return $result;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    function getUploadedFile()&lt;br /&gt;    {&lt;br /&gt;        return $this-&gt;_uploaded_file;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * get file extention&lt;br /&gt;     * @param string $file_name&lt;br /&gt;     */&lt;br /&gt;    private function getFileExt($file_name)&lt;br /&gt;    {&lt;br /&gt;        $filename = strtolower($file_name) ;&lt;br /&gt;        $exts = split("[/\\.]", $file_name) ;&lt;br /&gt;        $n = count($exts)-1;&lt;br /&gt;        $exts = $exts[$n];&lt;br /&gt;        return $exts;&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;?&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898679639857571695-416655357403469748?l=riteshsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://riteshsblog.blogspot.com/feeds/416655357403469748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://riteshsblog.blogspot.com/2010/03/php-file-upload-class.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/416655357403469748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/416655357403469748'/><link rel='alternate' type='text/html' href='http://riteshsblog.blogspot.com/2010/03/php-file-upload-class.html' title='PHP file upload class'/><author><name>RKJ</name><uri>http://www.blogger.com/profile/10529357735976707857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='21' src='http://1.bp.blogspot.com/_1LhaSbznGS0/S16wof3n1NI/AAAAAAAAANU/rYUGOK_O1bc/S220/Rkj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898679639857571695.post-4450851751473833936</id><published>2010-02-23T15:31:00.000+05:30</published><updated>2010-02-23T15:33:28.031+05:30</updated><title type='text'>TinyMce image uploader</title><content type='html'>The best image uploader for tinyMce editor. You can found it at http://www.net4visions.com/downloads.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898679639857571695-4450851751473833936?l=riteshsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://riteshsblog.blogspot.com/feeds/4450851751473833936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://riteshsblog.blogspot.com/2010/02/tinymce-image-uploader.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/4450851751473833936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/4450851751473833936'/><link rel='alternate' type='text/html' href='http://riteshsblog.blogspot.com/2010/02/tinymce-image-uploader.html' title='TinyMce image uploader'/><author><name>RKJ</name><uri>http://www.blogger.com/profile/10529357735976707857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='21' src='http://1.bp.blogspot.com/_1LhaSbznGS0/S16wof3n1NI/AAAAAAAAANU/rYUGOK_O1bc/S220/Rkj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898679639857571695.post-9135717637906270037</id><published>2010-02-08T15:49:00.000+05:30</published><updated>2010-02-08T15:50:39.585+05:30</updated><title type='text'>PHP Generating MO Language file from PO file</title><content type='html'>/**&lt;br /&gt;     * Generate Mo File from an array generate by PO file&lt;br /&gt;     * @param Object $file  PO file path with file name&lt;br /&gt;     * @param String $msgid_key  msgid key in PO file&lt;br /&gt;     * @param String $msgid_value  msgstr value for above msgid&lt;br /&gt;     * @param String $mo_file  mo file path&lt;br /&gt;     * @return boolean&lt;br /&gt;     */&lt;br /&gt;    &lt;span style="font-weight: bold;"&gt;function writePo($file,$msgid_key,$msgid_value,$mo_file){&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;          $fd = fopen($file-&gt;filepath, "r+b"); // File will get closed by PHP on return&lt;br /&gt;          if (!$fd) {&lt;br /&gt;            $msg = sprintf(__('The file %s could not be open for write'),$file_name);&lt;br /&gt;            //do whatever you want with this error msg&lt;br /&gt;            return FALSE;&lt;br /&gt;          }&lt;br /&gt;&lt;br /&gt;          $context = "MSGID";&lt;br /&gt;          $lineno = 0;&lt;br /&gt;          $wflag = false;&lt;br /&gt;          while (!feof($fd)) {&lt;br /&gt;&lt;br /&gt;            $line = fgets($fd, 10*1024); // A line should not be this long&lt;br /&gt;&lt;br /&gt;            if ($lineno == 0) {&lt;br /&gt;              // The first line might come with a UTF-8 BOM, which should be removed.&lt;br /&gt;              $line = str_replace("\xEF\xBB\xBF", '', $line);&lt;br /&gt;            }&lt;br /&gt;            $lineno++;&lt;br /&gt;            $line = trim(strtr($line, array("\\\n" =&gt; "")));&lt;br /&gt;           &lt;br /&gt;            if (!strncmp("msgid", $line, 5) &amp;amp;&amp;amp; $context = "MSGID") {&lt;br /&gt;                  $line = trim(substr($line, 5));&lt;br /&gt;                  $quoted = $this-&gt;_parse_quoted($line);&lt;br /&gt;                  if ($quoted === FALSE) {&lt;br /&gt;                    $msg = sprintf(__('The PO file %s contains a syntax error on %d line'),$file-&gt;filename,$lineno);&lt;br /&gt;                    //do whatever you want with this error msg&lt;br /&gt;                    return FALSE;&lt;br /&gt;                  }&lt;br /&gt;                  if($quoted == $msgid_key){&lt;br /&gt;                        $wflag = true;&lt;br /&gt;                        $context = "MSGSTR";&lt;br /&gt;                  }&lt;br /&gt;            }&lt;br /&gt;            if (!strncmp("msgstr", $line, 5)) {&lt;br /&gt;&lt;br /&gt;                if($context == "MSGSTR" &amp;amp;&amp;amp; $wflag == true){&lt;br /&gt;                    fclose($fd);&lt;br /&gt;                    $wflag = false;&lt;br /&gt;                    //write msgdtr value to file&lt;br /&gt;                    $msg = "msgstr ".'"'.$msgid_value.'"';&lt;br /&gt;                    $lines = file($file-&gt;filepath);&lt;br /&gt;                    $lines[$lineno-1] = $msg . "\r\n";&lt;br /&gt;                    // Turn array back into a string to write to file&lt;br /&gt;                    $data = implode('',$lines);&lt;br /&gt;                    $fp = fopen($file-&gt;filepath,'wb');&lt;br /&gt;                    fwrite($fp,$data);&lt;br /&gt;                    fclose($fp);&lt;br /&gt;&lt;br /&gt;                    //generate mo file&lt;br /&gt;                    if(file_exists($mo_file)){&lt;br /&gt;                        $mo_lines = file($mo_file);&lt;br /&gt;                       foreach($mo_lines as $key =&gt; $value){&lt;br /&gt;                           if(strlen(strstr($value,$msgid_key)) &gt; 0){&lt;br /&gt;                                $mo_lines[$key] = "'".addslashes($msgid_key)."' =&gt;".$msgid_value.",\r\n";&lt;br /&gt;                                $data = implode('',$mo_lines);&lt;br /&gt;                                $fm = fopen($mo_file,'wb');&lt;br /&gt;                                fwrite($fm,$data);&lt;br /&gt;                                fclose($fm);&lt;br /&gt;                                return true; //found msg key then return&lt;br /&gt;                            }&lt;br /&gt;                            else if(strlen(strstr($value,");")) &gt; 0 ){&lt;br /&gt;                                $mo_lines[$key] = "'".addslashes($msgid_key)."'=&gt;".$msgid_value.",\r\n";&lt;br /&gt;                                $mo_lines[] = ");";&lt;br /&gt;                                $data = implode('',$mo_lines);&lt;br /&gt;                                $fm = fopen($mo_file,'wb');&lt;br /&gt;                                fwrite($fm,$data);&lt;br /&gt;                                fclose($fm);&lt;br /&gt;                                return true;&lt;br /&gt;                            }&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                    else {&lt;br /&gt;                        $data = "#do not touch this file. This is machine generated fie.\r\n#Changes in file structure may cause file parsing error.\r\n\r\n";&lt;br /&gt;                        $data .= '$translation = Array('."\r\n";&lt;br /&gt;                        $data .= "'".addslashes($msgid_key)."'=&gt;".$msgid_value.",\r\n";&lt;br /&gt;                        $data .= ");";&lt;br /&gt;                        $fm = fopen($mo_file,'wb');&lt;br /&gt;                        fwrite($fm,$data);&lt;br /&gt;                        fclose($fm);&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;      return true;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    }&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898679639857571695-9135717637906270037?l=riteshsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://riteshsblog.blogspot.com/feeds/9135717637906270037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://riteshsblog.blogspot.com/2010/02/php-generating-mo-language-file-from-po.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/9135717637906270037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/9135717637906270037'/><link rel='alternate' type='text/html' href='http://riteshsblog.blogspot.com/2010/02/php-generating-mo-language-file-from-po.html' title='PHP Generating MO Language file from PO file'/><author><name>RKJ</name><uri>http://www.blogger.com/profile/10529357735976707857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='21' src='http://1.bp.blogspot.com/_1LhaSbznGS0/S16wof3n1NI/AAAAAAAAANU/rYUGOK_O1bc/S220/Rkj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898679639857571695.post-7791011712529850583</id><published>2010-02-08T15:27:00.003+05:30</published><updated>2011-04-05T09:44:08.121+05:30</updated><title type='text'>PHP Reading PO file (the file generated from php source)</title><content type='html'>Hi Guy's,&lt;br /&gt;&lt;br /&gt;Here is the code for parsing PO file for editing in PHP. I have little modified the Drupal's code.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;/**&lt;br /&gt;    * Parses Gettext Portable Object file into an array&lt;br /&gt;    * @param Object $file  PO file path with file name&lt;br /&gt;    * @param string $search_key  search word to find msgid in po file&lt;br /&gt;    * File object corresponding to the PO file to read&lt;br /&gt;    */&lt;br /&gt;  &lt;span style="font-weight: bold;"&gt; function readPo($file,$search_key) {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;     $fd = fopen($file-&gt;filepath, "rb"); // File will get closed by PHP on return&lt;br /&gt;     $file_name = $file-&gt;filename;&lt;br /&gt;     if (!$fd) {&lt;br /&gt;       $msg = sprintf(__('The translation import failed, because the file %s could not be read'),$file_name);&lt;br /&gt; //do whatever you want with this error msg&lt;br /&gt;       return FALSE;&lt;br /&gt;     }&lt;br /&gt;    &lt;br /&gt;     $context = "COMMENT"; // Parser context: COMMENT, MSGID, MSGID_PLURAL, MSGSTR and MSGSTR_ARR&lt;br /&gt;     $current = array();   // Current entry being read&lt;br /&gt;     $plural = 0;          // Current plural form&lt;br /&gt;     $lineno = 0;          // Current line&lt;br /&gt;     $lang_arr = Array(); // total message in the file&lt;br /&gt;&lt;br /&gt;     while (!feof($fd)) {&lt;br /&gt;&lt;br /&gt;   $line = fgets($fd, 10*1024); // A line should not be this long&lt;br /&gt;           if ($lineno == 0) {&lt;br /&gt;             // The first line might come with a UTF-8 BOM, which should be removed.&lt;br /&gt;             $line = str_replace("\xEF\xBB\xBF", '', $line);&lt;br /&gt;           }&lt;br /&gt;           $lineno++;&lt;br /&gt;           $line = trim(strtr($line, array("\\\n" =&gt; "")));&lt;br /&gt;           if (!strncmp("#", $line, 1)) { // A comment&lt;br /&gt;                 if ($context == "COMMENT") { // Already in comment context: add&lt;br /&gt;      $current["#"][] = substr($line, 2);&lt;br /&gt;                 }&lt;br /&gt;                 elseif (($context == "MSGSTR") || ($context == "MSGSTR_ARR")) { // End current entry, start a new one&lt;br /&gt;&lt;br /&gt;                   if(!empty($search_key)){&lt;br /&gt;                       $pattern = "/\b".$search_key."\b/i";&lt;br /&gt;                       if(preg_match($pattern ,trim($current['msgid'])))&lt;br /&gt;                           $lang_arr[] = $current;&lt;br /&gt;                   }&lt;br /&gt;                   else&lt;br /&gt;                       $lang_arr[] = $current;&lt;br /&gt;                  &lt;br /&gt;                   $current = array();&lt;br /&gt;                   $current["#"][] = substr($line, 2);&lt;br /&gt;                   $context = "COMMENT";&lt;br /&gt;                 }&lt;br /&gt;                 else { // Parse error&lt;br /&gt;                   $msg = sprintf(__('The translation file %s contains an error: "msgstr" was expected but not found on %d line'),$file_name,$lineno);&lt;br /&gt;                   //do whatever you want with this error msg&lt;br /&gt;      return FALSE;&lt;br /&gt;                 }&lt;br /&gt;           }&lt;br /&gt;           elseif (!strncmp("msgid_plural", $line, 12)) {&lt;br /&gt;                 if ($context != "MSGID") { // Must be plural form for current entry&lt;br /&gt;                    $msg = sprintf(__('The translation file %s contains an error: "msgid_plural" was expected but not found on %d line'),$file_name,$lineno);&lt;br /&gt;                    $this-&gt;ErrSucc-&gt;addError($msg);&lt;br /&gt;                    return FALSE;&lt;br /&gt;                 }&lt;br /&gt;                 $line = trim(substr($line, 12));&lt;br /&gt;                 $quoted = $this-&gt;_parse_quoted($line);&lt;br /&gt;                 if ($quoted === FALSE) {&lt;br /&gt;                   $msg = sprintf(__('The translation file %s contains a syntax error on %d line'),$file_name,$lineno);&lt;br /&gt;                   //do whatever you want with this error msg&lt;br /&gt;                   return FALSE;&lt;br /&gt;                 }&lt;br /&gt;                 $current["msgid"] = $current["msgid"] ."\0". $quoted;&lt;br /&gt;                 $context = "MSGID_PLURAL";&lt;br /&gt;           }&lt;br /&gt;           elseif (!strncmp("msgid", $line, 5)) {&lt;br /&gt;                 if ($context == "MSGSTR") {   // End current entry, start a new one&lt;br /&gt;                   //$lang_arr[] = $current;&lt;br /&gt;                   $current = array();&lt;br /&gt;                 }&lt;br /&gt;                 elseif ($context == "MSGID") { // Already in this context? Parse error&lt;br /&gt;                   $msg = sprintf(__('The translation file %s contains an error: "msgid" is unexpected on %d line'),$file_name,$lineno);&lt;br /&gt;                   //do whatever you want with this error msg&lt;br /&gt;                   return FALSE;&lt;br /&gt;                 }&lt;br /&gt;                 $line = trim(substr($line, 5));&lt;br /&gt;                 $quoted = $this-&gt;_parse_quoted($line);&lt;br /&gt;                 if ($quoted === FALSE) {&lt;br /&gt;                   $msg = sprintf(__('The translation file %s contains a syntax error on %d line'),$file_name,$lineno);&lt;br /&gt;                   //do whatever you want with this error msg&lt;br /&gt;                   return FALSE;&lt;br /&gt;                 }&lt;br /&gt;                 $current["msgid"] = $quoted;&lt;br /&gt;                 $context = "MSGID";&lt;br /&gt;           }&lt;br /&gt;           elseif (!strncmp("msgstr[", $line, 7)) {&lt;br /&gt;                 if (($context != "MSGID") &amp;amp;&amp;amp; ($context != "MSGID_PLURAL") &amp;amp;&amp;amp; ($context != "MSGSTR_ARR")) { // Must come after msgid, msgid_plural, or msgstr[]&lt;br /&gt;                   $msg = sprintf(__('The translation file %s contains an error: "msgstr[]" is unexpected on %d line'),$file_name,$lineno);&lt;br /&gt;                   //do whatever you want with this error msg&lt;br /&gt;                   return FALSE;&lt;br /&gt;                 }&lt;br /&gt;                 if (strpos($line, "]") === FALSE) {&lt;br /&gt;                   $msg = sprintf(__('The translation file %s contains a syntax error on %d line'),$file_name,$lineno);&lt;br /&gt;                   //do whatever you want with this error msg&lt;br /&gt;                   return FALSE;&lt;br /&gt;                 }&lt;br /&gt;                 $frombracket = strstr($line, "[");&lt;br /&gt;                 $plural = substr($frombracket, 1, strpos($frombracket, "]") - 1);&lt;br /&gt;                 $line = trim(strstr($line, " "));&lt;br /&gt;                 $quoted = $this-&gt;_parse_quoted($line);&lt;br /&gt;                 if ($quoted === FALSE) {&lt;br /&gt;                   $msg = sprintf(__('The translation file %s contains a syntax error on %d line'),$file_name,$lineno);&lt;br /&gt;                   //do whatever you want with this error msg&lt;br /&gt;                   return FALSE;&lt;br /&gt;                 }&lt;br /&gt;                 $current["msgstr"][$plural] = $quoted;&lt;br /&gt;                 $context = "MSGSTR_ARR";&lt;br /&gt;           }&lt;br /&gt;           elseif (!strncmp("msgstr", $line, 6)) {&lt;br /&gt;                 if ($context != "MSGID") {   // Should come just after a msgid block&lt;br /&gt;                   $msg = sprintf(__('The translation file %s contains an error: "msgstr" is unexpected on %d line'),$file_name,$lineno);&lt;br /&gt;                   //do whatever you want with this error msg&lt;br /&gt;                   return FALSE;&lt;br /&gt;                 }&lt;br /&gt;                 $line = trim(substr($line, 6));&lt;br /&gt;                 $quoted = $this-&gt;_parse_quoted($line);&lt;br /&gt;                 if ($quoted === FALSE) {&lt;br /&gt;                   $msg = sprintf(__('The translation file %s contains a syntax error on %d line'),$file_name,$lineno);&lt;br /&gt;                   //do whatever you want with this error msg&lt;br /&gt;                   return FALSE;&lt;br /&gt;                 }&lt;br /&gt;                 $current["msgstr"] = $quoted;&lt;br /&gt;                 $context = "MSGSTR";&lt;br /&gt;           }&lt;br /&gt;           elseif ($line != "") {&lt;br /&gt;                 $quoted = $this-&gt;_parse_quoted($line);&lt;br /&gt;                 if ($quoted === FALSE) {&lt;br /&gt;                   $msg = sprintf(__('The translation file %s contains a syntax error on %d line'),$file_name,$lineno);&lt;br /&gt;                   //do whatever you want with this error msg&lt;br /&gt;                   return FALSE;&lt;br /&gt;                 }&lt;br /&gt;                 if (($context == "MSGID") || ($context == "MSGID_PLURAL")) {&lt;br /&gt;                   $current["msgid"] .= $quoted;&lt;br /&gt;                 }&lt;br /&gt;                 elseif ($context == "MSGSTR") {&lt;br /&gt;                   $current["msgstr"] .= $quoted;&lt;br /&gt;                 }&lt;br /&gt;                 elseif ($context == "MSGSTR_ARR") {&lt;br /&gt;                   $current["msgstr"][$plural] .= $quoted;&lt;br /&gt;                 }&lt;br /&gt;                 else {&lt;br /&gt;                   $msg = sprintf(__('The translation file %s contains an error: there is an unexpected string on %d line'),$file_name,$lineno);&lt;br /&gt;                   //do whatever you want with this error msg&lt;br /&gt;                   return FALSE;&lt;br /&gt;                 }&lt;br /&gt;           }&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       // End of PO file, flush last entry&lt;br /&gt;       if (($context == "MSGSTR") || ($context == "MSGSTR_ARR")) {&lt;br /&gt;          &lt;br /&gt;           if(!empty($search_key)){&lt;br /&gt;               $pattern = "/\b".$search_key."\b/i";&lt;br /&gt;               if(preg_match($pattern ,trim($current['msgid'])))&lt;br /&gt;                   $lang_arr[] = $current;&lt;br /&gt;           }&lt;br /&gt;           else&lt;br /&gt;             $lang_arr[] = $current;&lt;br /&gt;        }&lt;br /&gt;         elseif ($context != "COMMENT") {&lt;br /&gt;           $msg = sprintf(__('The translation file %s ended unexpectedly at %d line'),$file_name,$lineno);&lt;br /&gt;           //do whatever you want with this error msg&lt;br /&gt;           return FALSE;&lt;br /&gt;         }&lt;br /&gt;       fclose($fd);&lt;br /&gt;&lt;br /&gt;       return $lang_arr;&lt;br /&gt;   &lt;span style="font-weight: bold;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   /**&lt;br /&gt;    * Parses a string in quotes&lt;br /&gt;    *&lt;br /&gt;    * @param $string&lt;br /&gt;    *   A string specified with enclosing quotes&lt;br /&gt;    * @return&lt;br /&gt;    *   The string parsed from inside the quotes&lt;br /&gt;    */&lt;br /&gt;   &lt;span style="font-weight: bold;"&gt;function _parse_quoted($string) {&lt;/span&gt;&lt;br /&gt;         if (substr($string, 0, 1) != substr($string, -1, 1)) {&lt;br /&gt;           return FALSE;   // Start and end quotes must be the same&lt;br /&gt;         }&lt;br /&gt;         $quote = substr($string, 0, 1);&lt;br /&gt;         $string = substr($string, 1, -1);&lt;br /&gt;         if ($quote == '"') {        // Double quotes: strip slashes&lt;br /&gt;           return stripcslashes($string);&lt;br /&gt;         }&lt;br /&gt;         elseif ($quote == "'") {  // Simple quote: return as-is&lt;br /&gt;           return $string;&lt;br /&gt;         }&lt;br /&gt;         else {&lt;br /&gt;           return FALSE;             // Unrecognized quote&lt;br /&gt;         }&lt;br /&gt;   &lt;span style="font-weight: bold;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898679639857571695-7791011712529850583?l=riteshsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://riteshsblog.blogspot.com/feeds/7791011712529850583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://riteshsblog.blogspot.com/2010/02/php-reading-po-file-file-generated-from.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/7791011712529850583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/7791011712529850583'/><link rel='alternate' type='text/html' href='http://riteshsblog.blogspot.com/2010/02/php-reading-po-file-file-generated-from.html' title='PHP Reading PO file (the file generated from php source)'/><author><name>RKJ</name><uri>http://www.blogger.com/profile/10529357735976707857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='21' src='http://1.bp.blogspot.com/_1LhaSbznGS0/S16wof3n1NI/AAAAAAAAANU/rYUGOK_O1bc/S220/Rkj.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2898679639857571695.post-2567815831106495445</id><published>2010-01-26T14:43:00.001+05:30</published><updated>2011-04-05T09:40:50.848+05:30</updated><title type='text'>Convert PHP source file to PO file</title><content type='html'>I have written a simple code for generating PHP source code to PO file. I hope it may help you.&lt;br /&gt;&lt;br /&gt;Here $file is your php file path (ex c:/my_file/test.php) with message content as __('your message in php code');&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$msg_lines = "";&lt;br /&gt;$po_obj = new POContent();&lt;br /&gt;$po_obj-&gt;generatePoContent($file,$msg_lines);&lt;br /&gt;&lt;br /&gt;#write po file content&lt;br /&gt;$po_strings = "";&lt;br /&gt;foreach($msg_lines as $msgid =&gt; $line_contents)&lt;br /&gt;{&lt;br /&gt;   $po_strings .= "#  Translator comments\r\n";&lt;br /&gt;   $po_strings .= "#. Programmer comments\r\n";&lt;br /&gt;   foreach($line_contents['line'] as $key =&gt; $line)&lt;br /&gt;       $po_strings .= "#: ".$line."\r\n";&lt;br /&gt;   $po_strings .= "msgid \"".$msgid."\"\r\n";&lt;br /&gt;   $po_strings .= "msgstr ''\r\n";&lt;br /&gt;   $po_strings .= "\r\n";&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;   $po_file_path = 'c:/my_file/test.po';&lt;br /&gt;   $fh = fopen($po_file_path,'wb');&lt;br /&gt;   if (!$fh) {&lt;br /&gt;       echo __('PO File generation failed');&lt;br /&gt;   }&lt;br /&gt;   else{&lt;br /&gt;       fwrite($fh,$po_strings);&lt;br /&gt;       fclose($fh);&lt;br /&gt;       echo __('PO File generated successfully');&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;class POContent{&lt;br /&gt;/**&lt;br /&gt;    * Generate PO File by reading entire particular component's source file&lt;br /&gt;    * @param $file String (PHP Source file path to parse)&lt;br /&gt;    * @param $msg_lines String (Refrence variable to store all the msgid)&lt;br /&gt;    * @return&lt;br /&gt;    */&lt;br /&gt;   function generatePoContent($file,&amp;amp;$msg_lines){&lt;br /&gt;       //open source file&lt;br /&gt;       $datas     = file($file);&lt;br /&gt;       $msg_file = basename($file);&lt;br /&gt;       $pattern  ="/__\([\"\']([^()]+)[\"\']\)/";&lt;br /&gt;  &lt;br /&gt;       foreach($datas as $indx =&gt; $data){&lt;br /&gt;           $msgs = "";&lt;br /&gt;           preg_match($pattern, $data, $msgs);&lt;br /&gt;           if(count($msgs) &gt; 0){&lt;br /&gt;              if(!array_key_exists($msgs[1],$msg_lines)){&lt;br /&gt;                  $msg_lines[$msgs[1]]['file'][$msg_file] = $msg_file.":Line No.".($indx+1);&lt;br /&gt;                  $msg_lines[$msgs[1]]['line'][] = $msg_file.":Line No.".($indx+1);&lt;br /&gt;              }&lt;br /&gt;              else{&lt;br /&gt;                  $temp_line = $msg_lines[$msgs[1]]['file'][$msg_file];&lt;br /&gt;                  if(!array_key_exists($msg_file,$msg_lines[$msgs[1]]['file'])){&lt;br /&gt;                   $msg_lines[$msgs[1]]['file'][$msg_file] = $msg_file.":Line No.".($indx+1);&lt;br /&gt;                   $msg_lines[$msgs[1]]['line'][] = $msg_file.":Line No.".($indx+1);&lt;br /&gt;                  }&lt;br /&gt;                  else{&lt;br /&gt;                   $msg_lines[$msgs[1]]['file'][$msg_file] = $temp_line.",".($indx+1);&lt;br /&gt;                   $msg_lines[$msgs[1]]['line'][count($msg_lines[$msgs[1]]['line'])-1]=$temp_line.",".($indx+1);&lt;br /&gt;                  }&lt;br /&gt;              }&lt;br /&gt;           }&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Now You can check the c:/my_file/test.po&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2898679639857571695-2567815831106495445?l=riteshsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://riteshsblog.blogspot.com/feeds/2567815831106495445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://riteshsblog.blogspot.com/2010/01/convert-php-source-file-to-po-file.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/2567815831106495445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2898679639857571695/posts/default/2567815831106495445'/><link rel='alternate' type='text/html' href='http://riteshsblog.blogspot.com/2010/01/convert-php-source-file-to-po-file.html' title='Convert PHP source file to PO file'/><author><name>RKJ</name><uri>http://www.blogger.com/profile/10529357735976707857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='21' src='http://1.bp.blogspot.com/_1LhaSbznGS0/S16wof3n1NI/AAAAAAAAANU/rYUGOK_O1bc/S220/Rkj.jpg'/></author><thr:total>0</thr:total></entry></feed>
