<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D04NRXc4eyp7ImA9WxNUF0Q.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841</id><updated>2009-11-09T19:46:34.933Z</updated><title type="text">More Tech Tips!</title><subtitle type="html">More tech tips on web development using ASP, ASP.Net, SQL Server, XML, JavaScript,  CSS, HTML</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.moretechtips.net/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.moretechtips.net/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Mike</name><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>44</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/3.0/" /><link rel="self" href="http://feeds.feedburner.com/MoreTechTips" type="application/atom+xml" /><feedburner:emailServiceId>MoreTechTips</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;Ak8FSHgzfSp7ImA9WxNUEkQ.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-6957117666422977905</id><published>2009-11-04T00:01:00.033Z</published><updated>2009-11-04T01:40:19.685Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-04T01:40:19.685Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="hot" /><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><category scheme="http://www.blogger.com/atom/ns#" term="WordPress" /><category scheme="http://www.blogger.com/atom/ns#" term="Tech Tips" /><title>Topsy Tip: Another Retweet Button to Embed Anywhere!</title><content type="html">&lt;a href="http://www.moretechtips.net/2009/11/topsy-tip-another-retweet-button-to.html" imageanchor="1" style="margin-left: 1em; margin-right: 1em;clear: both; text-align: center;"&gt;&lt;img border="0" src="http://lh3.ggpht.com/_3JiqFA24tHU/SvDaEBMSCjI/AAAAAAAAApM/nkz7AYU2b4Y/s800/topsy-retweet-button.png" style="border: 1px solid silver" title="Topsy Tip: Another Retweet Button to Embed Anywhere"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;a href="http://labs.topsy.com/2009/11/03/1st-birthday/"&gt;Topsy has just released a Wordpress plugin&lt;/a&gt; that gives you another retweet button. But, what if you can only work with a JavaScript widget? here is a small hack..&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
As you can see, they got 2 buttons..&lt;br /&gt;
&lt;h3&gt;
A Tall(big) button&lt;/h3&gt;
&lt;code class="short"&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://button.topsy.com/widget/retweet-big?nick=[twitter_name]&amp;amp;url=[post_url]"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;/code&gt;&lt;br /&gt;
next, replace &lt;b&gt;[twitter_name]&lt;/b&gt; with your Twitter username.&lt;br /&gt;
and &lt;b&gt;[post_url]&lt;/b&gt; with your post URL.&lt;br /&gt;
&lt;h3&gt;
And a Wide(small) button&lt;/h3&gt;
&lt;code class="short"&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://button.topsy.com/widget/retweet-small?nick=[twitter_name]&amp;amp;url=[post_url]"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;/code&gt;
&lt;br /&gt;
&lt;h3&gt;
Advantages of Topsy Retweet Button&lt;/h3&gt;
Topsy is a Real time search and discovery engine that was launched in last May. and unlike TweetMeme retweet button. Topsy holds the data about tweets of your link &lt;b&gt;forever&lt;/b&gt;!&lt;br /&gt;
&lt;br /&gt;
Topsy offers free tweet &lt;b&gt;analytics&lt;/b&gt; about your link &amp;amp; your site that currently TweetMeme will charge you for it! [ See analytics of my popular &lt;a href="http://topsy.com/tb/www.moretechtips.net/2009/10/twitter-friends-followers-widget-jquery.html"&gt;Twitter Friends widget&lt;/a&gt;]&lt;br /&gt;
&lt;br /&gt;
It also shows any &lt;b&gt;badges earned&lt;/b&gt; for your URL in TopLinks.(&lt;a class="nav nav-foot-top100" href="http://topsy.com/top100"&gt;TOP 100&lt;/a&gt;, &lt;a class="nav nav-foot-top100" href="http://topsy.com/top1k"&gt;TOP 1k&lt;/a&gt;, &lt;a class="nav nav-foot-top5k" href="http://topsy.com/top5k"&gt;TOP 5K&lt;/a&gt; ). TopLinks are collections of the top 100, 1000, and 5000 new links tweeted each day by influential people on Twitter. &lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-6957117666422977905?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jncVL13M6tNICwVQbPqPS57K4l8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jncVL13M6tNICwVQbPqPS57K4l8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jncVL13M6tNICwVQbPqPS57K4l8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jncVL13M6tNICwVQbPqPS57K4l8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=hTF3OVxXOIQ:xMH7aLBXJmM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=hTF3OVxXOIQ:xMH7aLBXJmM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=hTF3OVxXOIQ:xMH7aLBXJmM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=hTF3OVxXOIQ:xMH7aLBXJmM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=hTF3OVxXOIQ:xMH7aLBXJmM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=hTF3OVxXOIQ:xMH7aLBXJmM:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=hTF3OVxXOIQ:xMH7aLBXJmM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=hTF3OVxXOIQ:xMH7aLBXJmM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/hTF3OVxXOIQ" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2009/11/topsy-tip-another-retweet-button-to.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/6957117666422977905?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/6957117666422977905?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/hTF3OVxXOIQ/topsy-tip-another-retweet-button-to.html" title="Topsy Tip: Another Retweet Button to Embed Anywhere!" /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_3JiqFA24tHU/SvDaEBMSCjI/AAAAAAAAApM/nkz7AYU2b4Y/s72-c/topsy-retweet-button.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.moretechtips.net/2009/11/topsy-tip-another-retweet-button-to.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUHRng5eyp7ImA9WxNUEEQ.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-3028479376719550699</id><published>2009-11-01T11:00:00.059Z</published><updated>2009-11-01T16:50:37.623Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-01T16:50:37.623Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="Social Bookmarking" /><category scheme="http://www.blogger.com/atom/ns#" term="CSS" /><category scheme="http://www.blogger.com/atom/ns#" term="Tech Tips" /><title>Shrinking that Fat Delicious Tagometer Badge!</title><content type="html">&lt;a href="http://www.moretechtips.net/2009/11/shrinking-that-fat-delicious-tagometer.html" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_3JiqFA24tHU/Su24pBl3MCI/AAAAAAAAAnA/mDqBQBRf-kE/s320/delicious.png" title="Preview of the customized Delicious Tagometer" /&gt;&lt;/a&gt;
I needed to use the tall &lt;a href="http://delicious.com/help/tagometer"&gt;Delicious save button&lt;/a&gt;, but I found that it wasn't tall at all.. it was short &amp;amp; fat :)&lt;br /&gt;
&lt;br /&gt;
So, I had to shrink it a little by hiding some parts. And, since Delicious was smart enough to implement their button using AJAX. It is easy to customize the button using CSS. &lt;br /&gt;
Most of the other networks implement their buttons using iFrames which you can't modify anything inside of it.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;
&lt;br /&gt;
Will use the same &lt;b&gt;Javascript&lt;/b&gt; code of the &lt;a href="http://delicious.com/help/tagometer"&gt;tall Tagometer&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (typeof window.Delicious == &lt;b class="qs"&gt;"undefined"&lt;/b&gt;) window.Delicious = {};&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Delicious.BLOGBADGE_DEFAULT_CLASS = &lt;b class="qs"&gt;'delicious-blogbadge-tall'&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Delicious.BLOGBADGE_GRAPH_SHOW = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Delicious.BLOGBADGE_TAGS_SHOW = false;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; src=&lt;b class="qs"&gt;"http://static.delicious.com/js/d2-blogbadge.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
And insert this &lt;b&gt;CSS&lt;/b&gt; before the JavaScript code preferably in the head of the page:&lt;br /&gt;
&lt;code&gt;&amp;lt;&lt;b class="Kw"&gt;style&lt;/b&gt; type=&lt;b class="qs"&gt;"&lt;b class="Kw"&gt;text&lt;/b&gt;/css"&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* less &lt;b class="Kw"&gt;width&lt;/b&gt;! */&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.delicious-blogbadge-tall&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;width&lt;/b&gt;:62px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* less &lt;b class="Kw"&gt;border&lt;/b&gt; and &lt;b class="Kw"&gt;font&lt;/b&gt;-&lt;b class="Kw"&gt;size&lt;/b&gt; */&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.delicious-blogbadge&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;border&lt;/b&gt;-&lt;b class="Kw"&gt;width&lt;/b&gt;:1px !&lt;b class="Kw"&gt;important&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;font&lt;/b&gt;-&lt;b class="Kw"&gt;size&lt;/b&gt;:9px !&lt;b class="Kw"&gt;important&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;padding&lt;/b&gt;:2px !&lt;b class="Kw"&gt;important&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.delicious-blogbadge .save-to-link&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;padding&lt;/b&gt;-&lt;b class="Kw"&gt;left&lt;/b&gt;:17px !&lt;b class="Kw"&gt;important&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* boldify and center the count  */&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.delicious-blogbadge .url-link .post-count&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;display&lt;/b&gt;:block;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;font&lt;/b&gt;-&lt;b class="Kw"&gt;size&lt;/b&gt;:20px !&lt;b class="Kw"&gt;important&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;padding&lt;/b&gt;:5px 1px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;text&lt;/b&gt;-&lt;b class="Kw"&gt;align&lt;/b&gt;:center;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* less &lt;b class="Kw"&gt;padding&lt;/b&gt; around the count */&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.delicious-blogbadge-tall .url-link&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;padding&lt;/b&gt;:1px !&lt;b class="Kw"&gt;important&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* hiding useless parts */&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.delicious-blogbadge .save-to-link-label span&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,.delicious-blogbadge .save-to-link-label strong&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,.delicious-blogbadge .post-count-label-after&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;display&lt;/b&gt;:none&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;lt;/&lt;b class="Kw"&gt;style&lt;/b&gt;&amp;gt;&lt;/code&gt;&lt;br /&gt;
Another important hack that you will not find in Delicious tagometer page, is to &lt;b&gt;set the URL manually&lt;/b&gt;. that is useful when you are displaying multiple buttons in the same page.&lt;br /&gt;
You can find about that old hack at [&lt;a href="http://ycoolthing.com/archives/232/adding-delicious-to-wordpress-blogs"&gt;Adding Del.icio.us to Wordpress Blogs&lt;/a&gt;]&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-3028479376719550699?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FGu8lCMM6SrhEdq-VAi-PaQ7hR8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FGu8lCMM6SrhEdq-VAi-PaQ7hR8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FGu8lCMM6SrhEdq-VAi-PaQ7hR8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FGu8lCMM6SrhEdq-VAi-PaQ7hR8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=oHjp-qU1COQ:G5Mzn-dBvsY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=oHjp-qU1COQ:G5Mzn-dBvsY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=oHjp-qU1COQ:G5Mzn-dBvsY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=oHjp-qU1COQ:G5Mzn-dBvsY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=oHjp-qU1COQ:G5Mzn-dBvsY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=oHjp-qU1COQ:G5Mzn-dBvsY:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=oHjp-qU1COQ:G5Mzn-dBvsY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=oHjp-qU1COQ:G5Mzn-dBvsY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/oHjp-qU1COQ" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2009/11/shrinking-that-fat-delicious-tagometer.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/3028479376719550699?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/3028479376719550699?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/oHjp-qU1COQ/shrinking-that-fat-delicious-tagometer.html" title="Shrinking that Fat Delicious Tagometer Badge!" /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_3JiqFA24tHU/Su24pBl3MCI/AAAAAAAAAnA/mDqBQBRf-kE/s72-c/delicious.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.moretechtips.net/2009/11/shrinking-that-fat-delicious-tagometer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ECQ3k-eCp7ImA9WxNUEko.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-8496226286730696687</id><published>2009-10-22T01:01:00.013Z</published><updated>2009-11-03T18:07:42.750Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-03T18:07:42.750Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="RESTful" /><category scheme="http://www.blogger.com/atom/ns#" term="hot" /><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>Twitter Friends &amp; Followers Widget - A jQuery Plugin!</title><content type="html">&lt;div align="center"&gt;
&lt;a href="http://www.moretechtips.net/2009/10/twitter-friends-followers-widget-jquery.html"&gt;&lt;img alt="Twitter Friends &amp;amp; Followers Widget - A jQuery Plugin" src="http://lh3.ggpht.com/_3JiqFA24tHU/St5poRrrDbI/AAAAAAAAAl4/Pa0LZ5j0I_4/s800/twitter-friends-widget.jpg" title="Twitter Friends &amp;amp; Followers Widget - A jQuery Plugin" /&gt;
&lt;/a&gt;
&lt;br /&gt;
&lt;/div&gt;
There is a Facebook fans widget, Google friends widget, what about a 
&lt;b&gt;Twitter&lt;/b&gt; friends widget?!&lt;br /&gt;
Here is a jQuery plugin that you can embed anywhere to 
display pictures of your Twitter followers or friends (whom you follow) and their latest tweets if 
you like. &lt;br /&gt;
&lt;br /&gt;
By featuring your Twitter friends or followers on your blog, you will encourage others to become friends too..&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;View these Demos..&lt;/b&gt; &lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;
&lt;div style="text-align: center;font-weight:bold"&gt;
&lt;a href="http://twitter-friends-widget.googlecode.com/svn/v1/demo4.htm"&gt;Demo 4&lt;/a&gt;
 | 
&lt;a href="http://twitter-friends-widget.googlecode.com/svn/v1/demo3.htm"&gt;Demo 3&lt;/a&gt;
 | 
&lt;a href="http://twitter-friends-widget.googlecode.com/svn/v1/demo2.htm"&gt;Demo 2&lt;/a&gt;
 | 
&lt;a href="http://twitter-friends-widget.googlecode.com/svn/v1/demo1.htm"&gt;Demo 1&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
Each demo page contains HTML &amp;amp; CSS &amp;amp; JS you need to use... 
&lt;b&gt;&lt;i&gt;CSS code is essential &lt;/i&gt;&lt;/b&gt;for this widget looking, but will not focus on it here. 

&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Demo 1:
&lt;a href="http://twitter-friends-widget.googlecode.com/svn/v1/demo1.htm"&gt;Simple Followers List 
&lt;span style="font-family: Arial;"&gt;►&lt;/span&gt;&lt;/a&gt;&lt;/span&gt; &lt;br /&gt;&lt;/b&gt;By Default widget will fetch your latest 100 followers and append each 
picture of the 1st 20 of them with a fade transition, then the 2nd 20 pictures, 
then 3rd 20 and so on..&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://twitter-friends-widget.googlecode.com/files/jquery.twitter-friends-1.0.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(document).ready(function(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;b class="qs"&gt;'#friends'&lt;/b&gt;).twitterFriends({&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;debug:1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,username:&lt;b class="qs"&gt;'Mike_More'&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; id=&lt;b class="qs"&gt;"friends"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Demo 2:
&lt;a href="http://twitter-friends-widget.googlecode.com/svn/v1/demo2.htm"&gt;Your 
Profile &amp;amp; Followers List &lt;span style="font-family: Arial;"&gt;►&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/b&gt;Now, to show your Twitter profile information -your picture, 
profile link, followers count- we will use the (header) option. which may 
contain any HTML code with these optional variables: &lt;br /&gt;
_tp_ : Twitter profile Link.&lt;br /&gt;
_ti_ : Twitter picture.&lt;br /&gt;
_fo_ : followers count.&lt;br /&gt;
_fr_ : friends count.&lt;br /&gt;
&lt;code&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; 
type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://twitter-friends-widget.googlecode.com/files/jquery.twitter-friends-1.0.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; class=&lt;b class="qs"&gt;"twitter-friends"&lt;/b&gt; options=&lt;b class="qs"&gt;"{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;username:&lt;b class="qs"&gt;'Mike_More'&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,header:&lt;b class="qs"&gt;'&amp;lt;&lt;b class="Kw"&gt;a&lt;/b&gt; href=\'&lt;/b&gt;_tp_\&lt;b class="qs"&gt;'&amp;gt;&amp;lt;&lt;b class="Kw"&gt;img&lt;/b&gt; src=\'&lt;/b&gt;_ti_\&lt;b class="qs"&gt;'/&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/a&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;h2&lt;/b&gt;&amp;gt;_fo_ Awesome Follwers!&amp;lt;&lt;b class="Kw"&gt;/h2&lt;/b&gt;&amp;gt;'&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,user_animate:&lt;b class="qs"&gt;'width'&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,users:50&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,user_image:32&lt;br /&gt;}"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;/code&gt;&lt;br /&gt;
To install this widget:&lt;br /&gt;
1. Embed CSS code from demo page then include jQuery 
JS file and widget JS file. &lt;br /&gt;
2. Add a div with a &lt;b&gt;"twitter-friends"&lt;/b&gt; 
class.&lt;br /&gt;
3. Don't forget to set (&lt;b&gt;username&lt;/b&gt;) option with your Twitter username, which is 
 the only &lt;b&gt;essential&lt;/b&gt; option!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Also Note that: &lt;/b&gt;&lt;br /&gt;
- Unlike typcial JS call in demo 1, any Div's with a &lt;b&gt;"twitter-friends"&lt;/b&gt; 
class will be automatically widgetized!&lt;br /&gt;
- any single quote (&lt;b&gt;'&lt;/b&gt;) inside the header value must be escaped with 
(&lt;b&gt;\'&lt;/b&gt;)&lt;br /&gt;
- Used the 'width' for picture animation instead of default fade animation.&lt;br /&gt;
- Changed the default visible users count to 50, Scaled down each pictures to 
32x32, and the width of container so the 50 pictures would be divided into 4 
rows equally.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Demo 3:
&lt;a href="http://twitter-friends-widget.googlecode.com/svn/v1/demo3.htm"&gt;Simple 
Friends List &lt;span style="font-family: Arial;"&gt;►&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/b&gt;As in demo 1 except (friends) option was set 1 to switch to friends mode.&lt;br /&gt;
You can see that widget is very flexible and can fit in different layouts.&lt;br /&gt;
&lt;code&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; 
type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://twitter-friends-widget.googlecode.com/files/jquery.twitter-friends-1.0.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; class=&lt;b class="qs"&gt;"twitter-friends"&lt;/b&gt; options=&lt;b class="qs"&gt;"{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;friends:1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,username:&lt;b class="qs"&gt;'Mike_More'&lt;/b&gt;&lt;br /&gt;}"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: 120%;"&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Demo 4:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;
&lt;a href="http://twitter-friends-widget.googlecode.com/svn/v1/demo4.htm"&gt;Your 
Profile &amp;amp; Friends &amp;amp; Friends Tweets &lt;span style="font-family: Arial;"&gt;►&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/b&gt;Another optional part in this widget is Friends tweets. after friends 
pictures were added, their latest tweets will start animate one after another. 
when you enable tweets by setting (tweet) option to 1 each friend icon will also 
show his/her tweet as a tooltip.&lt;br /&gt;
&lt;code&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; 
type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://twitter-friends-widget.googlecode.com/files/jquery.twitter-friends-1.0.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; class=&lt;b class="qs"&gt;"twitter-friends"&lt;/b&gt; options=&lt;b class="qs"&gt;"{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;username:&lt;b class="qs"&gt;'Mike_More'&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,friends:1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,tweet:1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,header:&lt;b class="qs"&gt;'&amp;lt;&lt;b class="Kw"&gt;a&lt;/b&gt; href=\'&lt;/b&gt;_tp_\&lt;b class="qs"&gt;' title=\'&lt;/b&gt;follow me\&lt;b class="qs"&gt;'&amp;gt;&amp;lt;&lt;b class="Kw"&gt;img&lt;/b&gt; src=\'&lt;/b&gt;_ti_\&lt;b class="qs"&gt;'/&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/a&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;h2&lt;/b&gt;&amp;gt;_fr_ Friends / _fo_ Followers&amp;lt;&lt;b class="Kw"&gt;/h2&lt;/b&gt;&amp;gt;'&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,loop:1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,users:50&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,user_animate:&lt;b class="qs"&gt;'height'&lt;/b&gt;&lt;br /&gt;}"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;/code&gt;&lt;br /&gt;
you can also see that we used the (header) option to show number of Friends &amp;amp; 
Followers.&lt;br /&gt;
and (loop) option was set to 1 to loop users pictures animation. &lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: 120%;"&gt;&lt;b&gt;Widget Highlights&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 120%;"&gt;:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Show your latest Twitter Friends and Followers with custom animation.&lt;/li&gt;
&lt;li&gt;With your own words; Display your profile and total count of your 
 friends and followers.&lt;/li&gt;
&lt;li&gt;Display your friends or followers latest tweets.&lt;/li&gt;
&lt;li&gt;Instead of linking a picture to friend's twitter page; You can link it 
 to his/her home page. So, They would know that your are linking to them (by 
 referrals). &lt;/li&gt;
&lt;li&gt;Don't worry about your SEO with the quality of all these outbound links 
 as they are loaded by Javascript and wouldn't be visible to a search engine 
 crawler. &lt;/li&gt;
&lt;li&gt;Widget is very flexible and can easily fit in different layouts by 
 adjusting the number of visible pictures and its dimension.&lt;/li&gt;
&lt;li&gt;Many pictures &amp;amp; tweets transition options like opacity, width, height.&lt;/li&gt;
&lt;li&gt;Each part of the tweet like Avatar, links, Hashtags.. has its own CSS class 
 so it can be styled easily.&lt;/li&gt;
&lt;li&gt;Show or hide some parts of the tweet like avatar, author name, date, 
 etc...&lt;/li&gt;
&lt;li&gt;Use a typical JS call or auto-load div elements that have "twitter-friends" 
 class.&lt;/li&gt;
&lt;li&gt;Widget adds a small &lt;b&gt;"i" &lt;/b&gt;letter that links to the widget page. &lt;b&gt;
 You can remove it&lt;/b&gt; by setting (info) option to empty string (''), but 
 I'll appreciate it if you attribute/link-back to me elsewhere on 
 your website.&lt;/li&gt;
&lt;/ol&gt;
&lt;b&gt;Go to plugin page&lt;/b&gt; for more details on plugin options, request features or submit bugs.&lt;br /&gt;
&lt;div align="center"&gt;
&lt;b&gt;
&lt;a href="http://twitter-friends-widget.googlecode.com/svn/v1/demo1.htm"&gt;Demo 1&lt;/a&gt; 
| &lt;a href="http://twitter-friends-widget.googlecode.com/svn/v1/demo2.htm"&gt;Demo 2&lt;/a&gt; 
| &lt;a href="http://twitter-friends-widget.googlecode.com/svn/v1/demo3.htm"&gt;Demo 3&lt;/a&gt; 
| &lt;a href="http://twitter-friends-widget.googlecode.com/svn/v1/demo4.htm"&gt;Demo 4&lt;/a&gt; 
|
&lt;a href="http://twitter-friends-widget.googlecode.com/files/jquery.twitter-friends-1.0.min.js"&gt;
Download Plugin&lt;/a&gt; |
&lt;a href="http://code.google.com/p/twitter-friends-widget/wiki/Options"&gt;Plugin 
Options&lt;/a&gt; | &lt;a href="http://code.google.com/p/twitter-friends-widget/"&gt;Plugin 
Page&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-8496226286730696687?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7Dvd58rMrQ6TAFpjColIW4f4aKI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7Dvd58rMrQ6TAFpjColIW4f4aKI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7Dvd58rMrQ6TAFpjColIW4f4aKI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7Dvd58rMrQ6TAFpjColIW4f4aKI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=JHp-BKdfzxE:hRNTTDuvWWk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=JHp-BKdfzxE:hRNTTDuvWWk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=JHp-BKdfzxE:hRNTTDuvWWk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=JHp-BKdfzxE:hRNTTDuvWWk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=JHp-BKdfzxE:hRNTTDuvWWk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=JHp-BKdfzxE:hRNTTDuvWWk:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=JHp-BKdfzxE:hRNTTDuvWWk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=JHp-BKdfzxE:hRNTTDuvWWk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/JHp-BKdfzxE" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2009/10/twitter-friends-followers-widget-jquery.html#comment-form" title="11 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/8496226286730696687?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/8496226286730696687?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/JHp-BKdfzxE/twitter-friends-followers-widget-jquery.html" title="Twitter Friends &amp; Followers Widget - A jQuery Plugin!" /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_3JiqFA24tHU/St5poRrrDbI/AAAAAAAAAl4/Pa0LZ5j0I_4/s72-c/twitter-friends-widget.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">11</thr:total><feedburner:origLink>http://www.moretechtips.net/2009/10/twitter-friends-followers-widget-jquery.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AHQnYzeSp7ImA9WxNUEko.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-1989485738170928535</id><published>2009-10-06T01:00:00.036Z</published><updated>2009-11-03T18:08:53.881Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-03T18:08:53.881Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="RESTful" /><category scheme="http://www.blogger.com/atom/ns#" term="JSON" /><category scheme="http://www.blogger.com/atom/ns#" term="realtime-search" /><category scheme="http://www.blogger.com/atom/ns#" term="hot" /><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>Realtime Related Stream Bar: A Collecta-powered jQuery plugin</title><content type="html">&lt;a href="http://www.moretechtips.net/2009/10/realtime-realted-stream-bar-collecta.html"&gt;&lt;img alt="Realtime Related Stream Bar; Collecta-powered jQuery plugin" border="0" src="http://lh6.ggpht.com/_3JiqFA24tHU/SsqkoJ0vj-I/AAAAAAAAAk0/GXqa69K3EGU/s800/Realtime-Related-Stream-Bar.jpg" style="display: block; margin: 0pt auto;" title="Realtime Related Stream Bar; A Collecta-powered jQuery plugin" /&gt;&lt;/a&gt;

&lt;br /&gt;
This is a jQuery plugin to create a bar of real-time stream of information 
related to your post powered by &lt;a href="http://collecta.com/"&gt;Collecta&lt;/a&gt; search 
engine. Collecta monitors the streams of news sites, popular blogs and social 
media. So it can show you results as they happen. There are five content 
categories in Collecta - updates, stories, comments, photos, and videos.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Check these Demos..&lt;/b&gt;&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Each one links to the demo page where you can see HTML &amp;amp; CSS &amp;amp; JS you need to use... 
CSS code is important but it is almost the same across those different samples, 
so I'm not going to focus on it here. 
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: 120%;"&gt;Demo 1&lt;/span&gt;:
&lt;a href="http://realtime-related-stream-bar.googlecode.com/svn/v1/demo-realtime.htm"&gt;Typical Real-time Search &lt;span style="font-family: Arial;"&gt;►&lt;/span&gt;&lt;/a&gt; &lt;br /&gt;
&lt;/b&gt;Post tags will be extracted automatically and used to do a typical realtime search 
to return related streams..&lt;br /&gt;
&lt;code class="short"&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; 
src=&lt;b class="qs"&gt;"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://realtime-related-stream-bar.googlecode.com/files/jquery.relatedstream-1.0.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; class=&lt;b class="qs"&gt;"related-stream"&lt;/b&gt;&amp;gt;loading..&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;/code&gt;
&lt;br /&gt;
Use CSS in demo file then include jQuery and plugin JS and add a div with a &lt;b&gt;"related-stream"&lt;/b&gt; 
class and it will be auto-loaded with default options!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: 120%;"&gt;Demo 2&lt;/span&gt;:
&lt;a href="http://realtime-related-stream-bar.googlecode.com/svn/v1/demo-realtime-and.htm"&gt;Real-time Search by All Tags &lt;span style="font-family: Arial;"&gt;►&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
By default, plugin will search by OR-ing those tags to return results with any 
of the tags. but you can force it to return results that contain all 
tags. &lt;br /&gt;
you may also limit number of the used tags to avoid empty resultset when 
Collecta 
can't find any results that have all tags!&lt;br /&gt;
&lt;code&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; 
type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://realtime-related-stream-bar.googlecode.com/files/jquery.relatedstream-1.0.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; class=&lt;b class="qs"&gt;"related-stream"&lt;/b&gt; options=&lt;b class="qs"&gt;"{&lt;br /&gt;
&amp;nbsp;&amp;nbsp; debug:1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; ,or_tags:0&lt;br /&gt;
&amp;nbsp;&amp;nbsp; ,max_tags:2&lt;br /&gt;
&amp;nbsp;&amp;nbsp; ,animate:'height'&lt;br /&gt;
}"&lt;/b&gt;&amp;gt;loading..&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;/code&gt; &lt;br /&gt;
you can see that (or_tags) was set to 0 to disable. and (max_tags) to 2. also animation 
is done by the height!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: 120%;"&gt;Demo 3&lt;/span&gt;: &lt;a href="http://realtime-related-stream-bar.googlecode.com/svn/v1/demo-realtime-text.htm"&gt;Real-time 
Search without Photos or Videos &lt;span style="font-family: Arial;"&gt;►&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
By default, Search will return results from all content categories. to exclude 
photos and videos will set (get_photo) and (get_video) to 0. which will leave 
you with updates, stories and comments.&lt;br /&gt;
&lt;div dir="ltr"&gt;
&lt;code&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; 
type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://realtime-related-stream-bar.googlecode.com/files/jquery.relatedstream-1.0.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; class=&lt;b class="qs"&gt;"related-stream"&lt;/b&gt; options=&lt;b class="qs"&gt;"{&lt;br /&gt;
&amp;nbsp;&amp;nbsp; debug:1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; ,get_photo:0&lt;br /&gt;
&amp;nbsp;&amp;nbsp; ,get_video:0&lt;br /&gt;
&amp;nbsp;&amp;nbsp; ,animate:'lineHeight'&lt;br /&gt;
&amp;nbsp;&amp;nbsp; ,default_avatar:'http://groups.google.com/group/collecta-developer/icon'&lt;br /&gt;
}"&lt;/b&gt;&amp;gt;loading..&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;/code&gt; &lt;br /&gt;
you can see that 
line-height is used for animation. and (default_avatar) is set with some image 
URL to show default 
avatar when no one is present in search result. &lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: 120%;"&gt;Demo 4&lt;/span&gt;:
&lt;a href="http://realtime-related-stream-bar.googlecode.com/svn/v1/demo-custom.htm"&gt;Custom Search &lt;span style="font-family: Arial;"&gt;►&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Not related not realtime search, just searching a fixed query using a typical Javascript call. &lt;br /&gt;
(realtime) was set to 0 to stop refreshing search automatically. 
and Increased (n) which is the number of results to return.&lt;br /&gt;
And set (query) to search for jQuery or AJAX.&lt;br /&gt;
&lt;code&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://realtime-related-stream-bar.googlecode.com/files/jquery.relatedstream-1.0.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt;&amp;gt;&amp;nbsp;&amp;nbsp;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; $(&lt;b class="Kw"&gt;document&lt;/b&gt;).ready(&lt;b class="Kw"&gt;function&lt;/b&gt;(){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&lt;b class="qs"&gt;'#rrs'&lt;/b&gt;).relatedStream({&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug:1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,realtime:0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,query:'jQuery OR AJAX'&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,n:20&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br /&gt;
&amp;nbsp;&amp;nbsp; });&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; id=&lt;b class="qs"&gt;"rrs"&lt;/b&gt;&amp;gt;loading..&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: 120%;"&gt;Features:&lt;/span&gt;&lt;br /&gt;
&lt;/b&gt;Allow me to summarize the features of this plugin.&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Show realtime related stream of information based on your post tags.&lt;/li&gt;
&lt;li&gt;Collecta provides streams of information from a wide variety of sources. 
 you can choose from 5 categories of content:&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Updates&lt;/b&gt;: Tweets, Dents, and other status update messages 
  common on social sites. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Stories&lt;/b&gt;: blog posts and news articles.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Comments&lt;/b&gt;: comments for blog posts. but it is expected to 
  include photo and video comments as well.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Photos&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Videos&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Search by tags in OR or AND operators.&lt;/li&gt;
&lt;li&gt;You can also search using a custom query (Fixed query or based on user 
 input). &lt;/li&gt;
&lt;li&gt;Many transition options like opacity, height, font-size.&lt;/li&gt;
&lt;li&gt;Each part of the result -avatar, author name, link- has its own class 
 for easy style customization.&lt;/li&gt;
&lt;li&gt;Show or hide some parts of the results like avatar, author name, date.&lt;/li&gt;
&lt;li&gt;Use a typical JS call or auto-load div elements that have "related-stream" 
 class.&lt;/li&gt;
&lt;/ol&gt;
&lt;span style="font-size: 120%;"&gt;&lt;b&gt;Notes:&lt;br /&gt;
&lt;/b&gt;&lt;/span&gt;The Collecta API is very promising, but it is currently beta. So, 
things might not go as planned in this early stage.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Searching in updates doesn't return twitter tweets, just
 &lt;a href="http://identi.ca/"&gt;Identi.ca&lt;/a&gt; dents (and any service related to
 &lt;a href="http://status.net/"&gt;Status.Net&lt;/a&gt;). but the API is supposed to 
 include Twitter later.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Beta API has an initial limit of 5000 requests per hour&lt;/b&gt;. So, things 
 might get a little sluggish if many of you Digg this. So, please don't.. No, not 
 really ;) Digg it and Retweet it if you like.&lt;/li&gt;
&lt;li&gt;It is free API. so, you are required to keep that small Collecta badge 
 as is.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;&lt;span style="font-size: 120%;"&gt;
&lt;a href="http://code.google.com/p/realtime-related-stream-bar/"&gt;Project&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/b&gt;
Go to project page for more details on plugin options, request features or submit bugs :( 
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;
 &lt;a href="http://realtime-related-stream-bar.googlecode.com/files/jquery.relatedstream-1.0.min.js"&gt;
 Plugin Javascript file&lt;/a&gt; (minified ~8KB)&lt;/li&gt;
&lt;li&gt;
 &lt;a href="http://code.google.com/p/realtime-related-stream-bar/wiki/Options"&gt;Plugin
Options&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://realtime-related-stream-bar.googlecode.com/files/package-1.0.zip"&gt;Demo Package&lt;/a&gt;&lt;/b&gt; &lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Related Work&lt;br /&gt;
&lt;/b&gt;Lately I've been interested in related information and real-time search . So, 
this is the 4th plugin in that category:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;
 &lt;a href="http://www.moretechtips.net/2009/09/realtime-related-tweets-bar-another.html"&gt;
 Realtime Related Tweets Bar&lt;/a&gt; (2 weeks ago)&lt;/li&gt;
&lt;li&gt;
 &lt;a href="http://www.moretechtips.net/2009/06/rebuilding-google-blog-bar-jquery-ed.html"&gt;
 Rebuilding Google Blog Bar; jQuery-ed Version &lt;/a&gt;(Jun 2009)&lt;/li&gt;
&lt;li&gt;
 &lt;a href="http://www.moretechtips.net/2009/04/jquery-gdata-api-smarter-related-posts.html"&gt;
 A Smarter Related Posts widget&lt;/a&gt; (Apr 2009)&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-1989485738170928535?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ah9wAJVBNsjlRiMxdxs3XjI2SOU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ah9wAJVBNsjlRiMxdxs3XjI2SOU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ah9wAJVBNsjlRiMxdxs3XjI2SOU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ah9wAJVBNsjlRiMxdxs3XjI2SOU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=xYKZsDpMoxo:r_0Zai2WPg4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=xYKZsDpMoxo:r_0Zai2WPg4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=xYKZsDpMoxo:r_0Zai2WPg4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=xYKZsDpMoxo:r_0Zai2WPg4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=xYKZsDpMoxo:r_0Zai2WPg4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=xYKZsDpMoxo:r_0Zai2WPg4:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=xYKZsDpMoxo:r_0Zai2WPg4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=xYKZsDpMoxo:r_0Zai2WPg4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/xYKZsDpMoxo" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2009/10/realtime-realted-stream-bar-collecta.html#comment-form" title="12 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/1989485738170928535?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/1989485738170928535?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/xYKZsDpMoxo/realtime-realted-stream-bar-collecta.html" title="Realtime Related Stream Bar: A Collecta-powered jQuery plugin" /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_3JiqFA24tHU/SsqkoJ0vj-I/AAAAAAAAAk0/GXqa69K3EGU/s72-c/Realtime-Related-Stream-Bar.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">12</thr:total><feedburner:origLink>http://www.moretechtips.net/2009/10/realtime-realted-stream-bar-collecta.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AHQnYzeip7ImA9WxNUEko.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-1452644499407900244</id><published>2009-09-24T01:03:00.042Z</published><updated>2009-11-03T18:08:53.882Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-03T18:08:53.882Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="RESTful" /><category scheme="http://www.blogger.com/atom/ns#" term="JSON" /><category scheme="http://www.blogger.com/atom/ns#" term="realtime-search" /><category scheme="http://www.blogger.com/atom/ns#" term="hot" /><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>Realtime Related Tweets Bar: Another jQuery Plugin</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.moretechtips.net/2009/09/realtime-related-tweets-bar-another.html"&gt;
&lt;img alt="Realtime Related Tweets Bar: Another jQuery Plugin" border="0" 
src="http://4.bp.blogspot.com/_3JiqFA24tHU/Srwcfk2zPyI/AAAAAAAAAjk/MqN9RxtfHbY/s800/Realtime-Related-Tweets-Bar.png" 
style="border: 1px solid silver" title="Realtime Related Tweets Bar: Another jQuery Plugin" /&gt;
&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
With all the buzz lately about Twitter real-time search. Why don't you add a real-time tweets bar related to your posts from your twitter timeline or from anybody or even limit it by a geocode coordinates!
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Check out These Demos..&lt;/b&gt; &lt;br /&gt;
Each one links to the demo page where you can see HTML &amp;amp; CSS &amp;amp; JS you need to use... 
CSS code is important but it is almost the same across those different samples, 
so I'm not going to focus on it here. &lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Demo 1&lt;/span&gt;:
&lt;a href="http://realtime-related-tweets-bar.googlecode.com/svn/v1/html-realtime.htm"&gt;
Typical Real-time related Search &lt;span style="font-family: Arial;"&gt;►&lt;/span&gt;&lt;/a&gt; &lt;br /&gt;
&lt;/b&gt;This sample will extract tags that already exists in the page and do a typical 
realtime related search..&lt;br /&gt;
&lt;code class="short"&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; 
src=&lt;b class="qs"&gt;"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; src=&lt;b class="qs"&gt;"http://realtime-related-tweets-bar.googlecode.com/files/jquery.relatedtweets-1.0.min.js"&lt;/b&gt; 
type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; class=&lt;b class="qs"&gt;"related-tweets"&lt;/b&gt;&amp;gt;loading..&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;/code&gt;
&lt;br /&gt;
Use CSS in demo file then include jQuery and plugin JS and add a div with a &lt;b&gt;"related-tweets"&lt;/b&gt; 
class and it will be auto-loaded with default options!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Demo 2&lt;/span&gt;:
&lt;a href="http://realtime-related-tweets-bar.googlecode.com/svn/v1/html-realtime-users.htm"&gt;
Real-time Search Limited to Some Users &lt;span style="font-family: Arial;"&gt;►&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/b&gt;Few options were changed here:&lt;br /&gt;
Limiting tweets by users like @TechCrunch and @mashable only.&lt;br /&gt;
Returning only tweets that have links.&lt;br /&gt;
Increasing entry transition time of each tweet to 500ms.&lt;br /&gt;
Animating text font-size instead of the default opacity animation.&lt;br /&gt;
&lt;code&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; src=&lt;b class="qs"&gt;"http://realtime-related-tweets-bar.googlecode.com/files/jquery.relatedtweets-1.0.min.js"&lt;/b&gt; 
type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; class=&lt;b class="qs"&gt;"related-tweets"&lt;/b&gt; options=&lt;b class="qs"&gt;"{&lt;br /&gt;
&amp;nbsp;&amp;nbsp; debug:true&lt;br /&gt;
&amp;nbsp;&amp;nbsp; ,from_users:'TechCrunch,mashable'&lt;br /&gt;
&amp;nbsp;&amp;nbsp; ,links_only:1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; ,animate:&lt;b class="qs"&gt;'fontSize'&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; ,enter_time:500&lt;br /&gt;
}"&lt;/b&gt;&amp;gt;loading..&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;/code&gt; &lt;br /&gt;
Div now has a new attribute (options) that contains comma delimited list of options. 
(a trailing comma is fatal)&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Demo 3&lt;/span&gt;:
&lt;a href="http://realtime-related-tweets-bar.googlecode.com/svn/v1/html-realtime-geocode.htm"&gt;
Realtime Search Limited by Geocode of 'Mountain View, CA'&lt;span style="font-family: Arial;"&gt;►&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/b&gt;Returns tweets by users located within a given radius of the given latitude/longitude.
&lt;code class="short"&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; 
src=&lt;b class="qs"&gt;"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; src=&lt;b class="qs"&gt;"http://realtime-related-tweets-bar.googlecode.com/files/jquery.relatedtweets-1.0.min.js"&lt;/b&gt; 
type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; class=&lt;b class="qs"&gt;"related-tweets"&lt;/b&gt; options=&lt;b class="qs"&gt;"{&lt;br /&gt;
&amp;nbsp;&amp;nbsp; debug:true&lt;br /&gt;
&amp;nbsp;&amp;nbsp; ,geocode:&lt;b class="qs"&gt;'37.400465,-122.073003,25km'&lt;/b&gt;&lt;br /&gt;
}"&lt;/b&gt;&amp;gt;loading..&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;/code&gt;&lt;br /&gt;
Just added a geocode on the from of "latitude,longitude,radius". &lt;br /&gt;
To convert an address to a geocode
&lt;a href="http://www.gpsvisualizer.com/geocode"&gt;try this&lt;/a&gt; and don't forget to 
add the radius in mi(miles) or km(kilometers)!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Demo 4&lt;/span&gt;:
&lt;a href="http://realtime-related-tweets-bar.googlecode.com/svn/v1/html-realtime-and.htm"&gt;
Realtime Search by All Tags &lt;span style="font-family: Arial;"&gt;►&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
By default, plugin will search twitter by OR-ing those tags to return tweets with 
any of the tags. but you can force the search to return tweets that contain all 
tags. &lt;br /&gt;
you may also limit number of the used tags to avoid empty result set when twitter 
can't find tweets that have all tags on current page!&lt;br /&gt;
&lt;code&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; src=&lt;b class="qs"&gt;"http://realtime-related-tweets-bar.googlecode.com/files/jquery.relatedtweets-1.0.min.js"&lt;/b&gt; 
type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; class=&lt;b class="qs"&gt;"related-tweets"&lt;/b&gt; options=&lt;b class="qs"&gt;"{&lt;br /&gt;
&amp;nbsp;&amp;nbsp; debug:true&lt;br /&gt;
&amp;nbsp;&amp;nbsp; ,animate:&lt;b class="qs"&gt;'height'&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; ,or_tags:0&lt;br /&gt;
&amp;nbsp;&amp;nbsp; ,max_tags:2&lt;br /&gt;
}"&lt;/b&gt;&amp;gt;loading..&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;/code&gt; &lt;br /&gt;
you can see that (or_tags) was set to 0 to disable. and (max_tags) to 2. also animation 
is done by the height!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Demo 5&lt;/span&gt;:
&lt;a href="http://realtime-related-tweets-bar.googlecode.com/svn/v1/js-status.htm"&gt;
Just Your Twitter Timeline &lt;span style="font-family: Arial;"&gt;►&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
This is a -not related not realtime- search, just your twitter feed. and using a 
typical Javascript call. &lt;br /&gt;
'status' was set to 1 to ignore tags.&lt;br /&gt;
'realtime' was set to 0 to stop realtime search and perform search once. and Increased 
'n' which is the number of tweets to return.&lt;br /&gt;
&lt;code&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://realtime-related-tweets-bar.googlecode.com/files/jquery.relatedtweets-1.0.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt;&amp;gt;&amp;nbsp;&amp;nbsp;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; $(document).ready(function(){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&lt;b class="qs"&gt;'#rrt'&lt;/b&gt;).relatedTweets({&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug:true&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,from_users:&lt;b class="qs"&gt;'Mike_More'&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,status:1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,realtime:0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,n:20&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,show_avatar:0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,show_author:0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br /&gt;
&amp;nbsp;&amp;nbsp; });&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; id=&lt;b class="qs"&gt;"rrt"&lt;/b&gt;&amp;gt;loading..&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;/code&gt;&lt;br /&gt;
Since It is just your tweets. you might wanna hide avatar and author name by setting 
'show_avatar' and 'show_author' to 0!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: 120%;"&gt;Features:&lt;/span&gt;&lt;br /&gt;
&lt;/b&gt;Now, You've seen most of the plugin features but let me summarize it..&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Show realtime related tweets based on your post tags.&lt;/li&gt;
&lt;li&gt;Show your twitter timeline; related to your post or not.&lt;/li&gt;
&lt;li&gt;Return only tweets with links or return all.&lt;/li&gt;
&lt;li&gt;Limit tweets by 1 or more users. (from/to/mention users!)&lt;/li&gt;
&lt;li&gt;Limit tweets by a location geocode and a radius.&lt;/li&gt;
&lt;li&gt;Search by tags in Or-ing or And-ing mode.&lt;/li&gt;
&lt;li&gt;Many tweets' transition options like opacity, height, font-size.&lt;/li&gt;
&lt;li&gt;Each part of the tweet like Avatar, links, Hashtags.. has its own class 
 so you can customize its style.&lt;/li&gt;
&lt;li&gt;Show or hide some parts of the tweet like avatar, author name, date.&lt;/li&gt;
&lt;li&gt;Use a typical JS call or auto-load div elements that have "related-tweets" 
 class.&lt;/li&gt;
&lt;/ol&gt;
&lt;b&gt;&lt;a href="http://code.google.com/p/realtime-related-tweets-bar/"&gt;
&lt;span style="font-size: 120%;"&gt;Project Pages&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/b&gt;For more details on plugin options, request features or submit bugs :( &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;
 &lt;a href="http://realtime-related-tweets-bar.googlecode.com/files/jquery.relatedtweets-1.0.min.js"&gt;Download plugin Javascript file&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
 &lt;a href="http://code.google.com/p/realtime-related-tweets-bar/wiki/Options"&gt;
 Plugin
Options list &lt;/a&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div style="font-size:x-small"&gt;* Original tweeties icon by &lt;a href="http://www.chris-wallace.com/"&gt;Chris Wallace&lt;/a&gt;&lt;/div&gt;
&lt;img src="http://sourcedfrom.com/analytics/token.png?id=1306bfbfe27e6f39ac44fbb6c5452b27" width=0 height=0/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-1452644499407900244?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/e89JilAuB0M4ptYoiciBSmRAftY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/e89JilAuB0M4ptYoiciBSmRAftY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/e89JilAuB0M4ptYoiciBSmRAftY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/e89JilAuB0M4ptYoiciBSmRAftY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=BofNpBI7Q3w:zP0My3h-W5E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=BofNpBI7Q3w:zP0My3h-W5E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=BofNpBI7Q3w:zP0My3h-W5E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=BofNpBI7Q3w:zP0My3h-W5E:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=BofNpBI7Q3w:zP0My3h-W5E:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=BofNpBI7Q3w:zP0My3h-W5E:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=BofNpBI7Q3w:zP0My3h-W5E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=BofNpBI7Q3w:zP0My3h-W5E:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/BofNpBI7Q3w" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2009/09/realtime-related-tweets-bar-another.html#comment-form" title="17 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/1452644499407900244?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/1452644499407900244?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/BofNpBI7Q3w/realtime-related-tweets-bar-another.html" title="Realtime Related Tweets Bar: Another jQuery Plugin" /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_3JiqFA24tHU/SrrM0Mjb22I/AAAAAAAAAjU/QegQIzOlOcE/s72-c/Realtime-Related-Tweets-Bar.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">17</thr:total><feedburner:origLink>http://www.moretechtips.net/2009/09/realtime-related-tweets-bar-another.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcFQ3k8eCp7ImA9WxNQGUw.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-1518142264489143468</id><published>2009-09-17T22:35:00.038Z</published><updated>2009-09-25T22:33:32.770Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-25T22:33:32.770Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Blogger/Blogspot" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="Tech Tips" /><title>Blogger said "Show your face!". Great, but..</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.moretechtips.net/2009/09/blogger-said-show-your-face-great-but.html" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Blogger said: Show your face!" border="0" src="http://1.bp.blogspot.com/_3JiqFA24tHU/SrL0tKoUGWI/AAAAAAAAAiM/9Dbr8ezghQU/s800/Commenter-Profile-Avatar.png" style="border: 1px solid silver;" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;Google Blogger just Added another feature to &lt;a href="http://buzz.blogger.com/2009/09/show-your-face.html"&gt;show commenter avatar&lt;/a&gt;! So again. this is great, but if you have a customized template the avatars won't show up. So how to fix that..&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;How To Fix:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;To enable profile images in your blog's comments, go to &lt;b&gt;Settings&lt;/b&gt; | &lt;b&gt;Comments&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;If you still don't see avatars. Go to Layout &amp;gt; Edit HTML :.&amp;nbsp;&lt;/li&gt;
&lt;ol&gt;&lt;li&gt;Click "Download Full Template" to backup your template.&lt;/li&gt;
&lt;li&gt;Check "&lt;label for="expandWidgets"&gt;Expand Widget Templates&lt;/label&gt;" to show full template.&lt;/li&gt;
&lt;li&gt;Look-up &amp;lt;&lt;b class="Kw"&gt;b:if&lt;/b&gt; cond=&lt;b class="qs"&gt;'data:comment.authorUrl'&lt;/b&gt;&amp;gt; and insert the following code right before it:&lt;br /&gt;
&lt;code class="short"&gt;&amp;lt;&lt;b class="Kw"&gt;b:if&lt;/b&gt; cond=&lt;b class="qs"&gt;'data:comment.favicon'&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;img&lt;/b&gt; expr:src=&lt;b class="qs"&gt;'data:comment.favicon'&lt;/b&gt; height=&lt;b class="qs"&gt;'35px'&lt;/b&gt; width=&lt;b class="qs"&gt;'35px'&lt;/b&gt;/&amp;gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;/b:if&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;b:if&lt;/b&gt; cond=&lt;b class="qs"&gt;'data:blog.enabledCommentProfileImages'&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;data:comment.authorAvatarImage&lt;/b&gt;/&amp;gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;/b:if&lt;/b&gt;&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/ul&gt;&lt;br /&gt;
After Google Blogger 10th anniversary.. It started to present new features like:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Jump Breaks to &lt;a href="http://www.moretechtips.net/2009/09/blogger-said-you-might-as-well-jump.html"&gt;show Post summaries on index page&lt;/a&gt;. &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Tag-Cloud widgets : &lt;a href="http://buzz.blogger.com/2009/08/partly-cloudy-chance-of-labels.html"&gt;Partly cloudy, chance of labels&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;New Post Editor: &lt;a href="http://www.google.com/support/blogger/bin/answer.py?hl=en&amp;amp;answer=156829#enable"&gt;An overview of the new post editor.&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;But I'm waiting most for&lt;a href="http://www.moretechtips.net/2009/08/google-you-got-pages-sites-and-blogspot.html"&gt; Pages &amp;amp; File hosting space&lt;/a&gt;.. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-1518142264489143468?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QigP-woO7qDdNWkCKYhnCDuKr_o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QigP-woO7qDdNWkCKYhnCDuKr_o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QigP-woO7qDdNWkCKYhnCDuKr_o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QigP-woO7qDdNWkCKYhnCDuKr_o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=OEv2QEvOJwc:QQ0YXg921Kg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=OEv2QEvOJwc:QQ0YXg921Kg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=OEv2QEvOJwc:QQ0YXg921Kg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=OEv2QEvOJwc:QQ0YXg921Kg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=OEv2QEvOJwc:QQ0YXg921Kg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=OEv2QEvOJwc:QQ0YXg921Kg:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=OEv2QEvOJwc:QQ0YXg921Kg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=OEv2QEvOJwc:QQ0YXg921Kg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/OEv2QEvOJwc" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2009/09/blogger-said-show-your-face-great-but.html#comment-form" title="12 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/1518142264489143468?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/1518142264489143468?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/OEv2QEvOJwc/blogger-said-show-your-face-great-but.html" title="Blogger said &quot;Show your face!&quot;. Great, but.." /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_3JiqFA24tHU/SrL0tKoUGWI/AAAAAAAAAiM/9Dbr8ezghQU/s72-c/Commenter-Profile-Avatar.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">12</thr:total><feedburner:origLink>http://www.moretechtips.net/2009/09/blogger-said-show-your-face-great-but.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkAFRHs-cCp7ImA9WxNQFEQ.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-8633170401976272692</id><published>2009-09-09T23:49:00.011Z</published><updated>2009-09-21T00:58:35.558Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-21T00:58:35.558Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Blogger/Blogspot" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="Tech Tips" /><title>Blogger said "You Might As Well Jump"!  Great, but..</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.moretechtips.net/2009/09/blogger-said-you-might-as-well-jump.html" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Blogger said 'You Might As Well Jump'! Great, but.." border="0" src="http://3.bp.blogspot.com/_3JiqFA24tHU/Sqh5KmM2YQI/AAAAAAAAAiE/UKBL12jbCDA/s800/read-more.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Google Blogger has added new feature, an easy way to show posts summaries on your blog index page! But if you still don't see the "read more" link like I did! Google knows why, But I had to dig into it a little bit more..&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
If you didn't read [&lt;a href="http://buzz.blogger.com/2009/09/you-might-as-well-jump.html"&gt;You Might As Well Jump!&lt;/a&gt;] from Blogger Buzz. It is pretty straight-forward:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;You can insert a "Jump Break" by clicking on "Insert Jump Break" button on the toolbar of the &lt;b&gt;NEW post editor&lt;/b&gt;.&lt;/li&gt;
&lt;a href="http://2.bp.blogspot.com/_3JiqFA24tHU/Sqh34VI69OI/AAAAAAAAAh0/GmDKVJYGSZs/s1600-h/readmore.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_3JiqFA24tHU/Sqh34VI69OI/AAAAAAAAAh0/GmDKVJYGSZs/s400/readmore.png" /&gt;&lt;/a&gt;
&lt;li&gt;If you don't have the NEW post editor: go to &lt;b&gt;Settings&lt;/b&gt; &amp;gt; &lt;b&gt;Basic &lt;/b&gt;&amp;gt; set &lt;b&gt;'Select post editor'&lt;/b&gt; to &lt;b&gt;'Update editor'&lt;/b&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Or just type "&amp;lt;!-- more --&amp;gt;" where you want to position the jump break.&lt;/li&gt;
&lt;a href="http://2.bp.blogspot.com/_3JiqFA24tHU/Sqh35zaoGfI/AAAAAAAAAh8/kH0b09TbrkA/s1600-h/jumppoint.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_3JiqFA24tHU/Sqh35zaoGfI/AAAAAAAAAh8/kH0b09TbrkA/s400/jumppoint.png" /&gt;&lt;/a&gt;
&lt;li&gt;To customize "Read more" text:&amp;nbsp; click &lt;b&gt;Layout &lt;/b&gt;and then &lt;b&gt;Edit &lt;/b&gt;the &lt;b&gt;Blog Posts&lt;/b&gt; widget.&lt;/li&gt;
&lt;/ul&gt;After doing that, You can see that index page shows only posts summaries.. great, &lt;b&gt;but&lt;/b&gt;..&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;You don't see the "read more" link yet?&lt;/b&gt;&lt;br /&gt;
Very normal, it is just a new feature and your blog template will mostly need this tweak.. Google just kept it under cover @ &lt;a href="http://www.google.com/support/blogger/bin/answer.py?answer=154172"&gt;Creating 'After the jump' summaries&lt;/a&gt; :&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Open your blog's Layout | Edit HTML tab, and then click the Expand Widget Templates checkbox.&lt;/li&gt;
&lt;li&gt;Scan your HTML for the following snippet &amp;lt;&lt;b class="Kw"&gt;data:post.body&lt;/b&gt;/&amp;gt;&lt;/li&gt;
&lt;li&gt;Paste the following snippet directly below it:&lt;/li&gt;
&lt;/ol&gt;&lt;code class="short"&gt;&amp;lt;&lt;b class="Kw"&gt;b:if&lt;/b&gt; cond=&lt;b class="qs"&gt;'data:post.hasJumpLink'&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; class=&lt;b class="qs"&gt;'jump-link'&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;a&lt;/b&gt; expr:href=&lt;b class="qs"&gt;'data:post.url + &lt;b class="qs"&gt;"#more"&lt;/b&gt;'&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;data:post.jumpText&lt;/b&gt;/&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/a&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;/b:if&lt;/b&gt; &amp;gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;After Google Blogger 10th anniversary&lt;/b&gt;.. It started to present new features like:&lt;br /&gt;
- Tag-Cloud widgets : &lt;a href="http://buzz.blogger.com/2009/08/partly-cloudy-chance-of-labels.html"&gt;Partly cloudy, chance of labels&lt;br /&gt;
&lt;/a&gt;&lt;br /&gt;
- New Post Editor: &lt;a href="http://www.google.com/support/blogger/bin/answer.py?hl=en&amp;amp;answer=156829#enable"&gt;An overview of the new post editor&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
and other minor stuff.. But I'm still waiting for 2 major features as I shouted at [&lt;a href="http://www.moretechtips.net/2009/08/google-you-got-pages-sites-and-blogspot.html"&gt;@Google: you got Pages, Sites and Blogspot... why?!&lt;/a&gt;], which are:&lt;br /&gt;
- Blog Pages!&lt;br /&gt;
- File space for CSS, Javascript files as in Google Page Creator.&lt;br /&gt;
&lt;br /&gt;
Well, I'm waiting Google..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-8633170401976272692?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3vvAtNndN1G_b7sFkXAGyrRjZ_g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3vvAtNndN1G_b7sFkXAGyrRjZ_g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3vvAtNndN1G_b7sFkXAGyrRjZ_g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3vvAtNndN1G_b7sFkXAGyrRjZ_g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=CXW3CDr18Po:HVbol1rWkBE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=CXW3CDr18Po:HVbol1rWkBE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=CXW3CDr18Po:HVbol1rWkBE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=CXW3CDr18Po:HVbol1rWkBE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=CXW3CDr18Po:HVbol1rWkBE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=CXW3CDr18Po:HVbol1rWkBE:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=CXW3CDr18Po:HVbol1rWkBE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=CXW3CDr18Po:HVbol1rWkBE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/CXW3CDr18Po" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2009/09/blogger-said-you-might-as-well-jump.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/8633170401976272692?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/8633170401976272692?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/CXW3CDr18Po/blogger-said-you-might-as-well-jump.html" title="Blogger said &quot;You Might As Well Jump&quot;!  Great, but.." /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_3JiqFA24tHU/Sqh5KmM2YQI/AAAAAAAAAiE/UKBL12jbCDA/s72-c/read-more.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total><feedburner:origLink>http://www.moretechtips.net/2009/09/blogger-said-you-might-as-well-jump.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMFSXg_fip7ImA9WxNRFUk.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-5658241061114591881</id><published>2009-08-28T20:12:00.015Z</published><updated>2009-09-10T02:06:58.646Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-10T02:06:58.646Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Blogger/Blogspot" /><category scheme="http://www.blogger.com/atom/ns#" term="Opinions" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>@Google: you got Pages, Sites and Blogspot... why?!</title><content type="html">&lt;img style="display:block;margin:0px auto 10px;text-align:center;border:silver 1px solid;width: 580px; height: 222px;" src="http://1.bp.blogspot.com/_3JiqFA24tHU/SpiEqDVCM7I/AAAAAAAAAfc/SnkA5SjovoU/s800/Google_Blogger.jpg" border="0" alt="@Google: you got Pages, Sites and Blogspot... why?!" id="BLOGGER_PHOTO_ID_5375192013249590194" /&gt;&lt;br /&gt;After &lt;a href="http://buzz.blogger.com/2009/08/blogger-is-turning-10.html"&gt;Google Blogger 10th anniversary&lt;/a&gt;.. Google Blogger promises that &lt;a href="http://productideas.appspot.com/#15/e=e828&amp;amp;t=d15f"&gt;many of our dreams as Bloggers&lt;/a&gt; will come true so soon.. by dreams I mean "&lt;a href="http://productideas.appspot.com/#16/e=e828"&gt;Product Ideas for Blogger&lt;/a&gt;" which Google has launched on last April to collect users votes &amp;amp; feature requests on blogger.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt; &lt;br /&gt;Google Blogger actually has started by offering a &lt;a href="http://buzz.blogger.com/2009/08/partly-cloudy-chance-of-labels.html"&gt;Tag-Cloud&lt;/a&gt; widget.. &lt;span style="font-size:85%;"&gt;&lt;br /&gt;I've already made a &lt;a href="http://www.moretechtips.net/2009/03/jquery-manipulation-clear-tags-are.html"&gt;Tag-Cloud widget&lt;/a&gt; to address the issue but a native solution from blogger will certainly be better :(&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;You should know that..&lt;/span&gt; don't even think of skipping the following part :)&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;img style="float:right;margin:0 0 10px 10px;border:silver 1px solid;width:288px;height:238px;" src="http://3.bp.blogspot.com/_3JiqFA24tHU/SpiFpdbzAwI/AAAAAAAAAfk/3oOJRKIrPc4/s288/Google-Blogger.jpg" border="0" alt="Google Blogger" id="BLOGGER_PHOTO_ID_5375193102589035266" /&gt;In August 23, 1999, &lt;b&gt;Blogger&lt;/b&gt; was launched by Pyra Labs. As one of the earliest dedicated blog-publishing tools, it is credited for helping popularize the format.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In February 2003, &lt;span style="font-weight: bold;"&gt;Pyra Labs was acquired by Google&lt;/span&gt;. The acquisition allowed premium features (for which Pyra had charged) to become free.&lt;/li&gt;&lt;li&gt;On August 14, 2006, &lt;span style="font-weight: bold;"&gt;Blogger launched its latest redesign version in beta&lt;/span&gt;. In December 2006, this new version of Blogger was taken out of beta.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;img style="border: 1px solid silver; margin: 0pt 0pt 10px 10px; float: right; width:288px; height:199px;" src="http://1.bp.blogspot.com/_3JiqFA24tHU/SphtkgrI5RI/AAAAAAAAAek/XTM3NnpkY68/s288/Google-Pages.jpg" alt="Google Page Creator" id="BLOGGER_PHOTO_ID_5375166629280277778" border="0" /&gt;In 2006 Google introduced &lt;b&gt;Page Creator&lt;/b&gt;. As of August 2008, Google pages had over 3 million users.&lt;/li&gt;&lt;li&gt;In September 2008, Google announced that &lt;span style="font-weight: bold;"&gt;it would not accept new sign-ups &lt;/span&gt;to Page Creator, instead encouraging users to use &lt;a style="font-weight: bold;" href="http://sites.google.com/"&gt;Google Sites&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;img style="border: 1px solid silver; margin: 0pt 0pt 10px 10px;float:right;width:288px;height:202px;" src="http://2.bp.blogspot.com/_3JiqFA24tHU/Sphtk8f47VI/AAAAAAAAAes/k2cWlto2y5g/s288/Google-Sites.jpg" alt="Google Sites" id="BLOGGER_PHOTO_ID_5375166636749286738" border="0" /&gt;&lt;b&gt;Google Sites&lt;/b&gt; was launched on February 2008. based on the wiki-like software "JotSpot" that was acquired by Google on October 2006!&lt;/li&gt;&lt;li&gt;As of May 21, 2008, Google Sites became available for free separately from Google Apps, and without the need for a domain.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What I'm trying to say..&lt;/span&gt;&lt;br /&gt;Google Blogger was a very successful acquisition. Google Blogger is the best free blogging platform out there.. I love it.. &lt;span style="font-weight: bold;"&gt; so please focus on developing it!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A Major advantage of Google Page Creator was the free 100MB file hosting.  and that is high feature request on "&lt;a href="http://productideas.appspot.com/#16/e=e828"&gt;Product Ideas for Blogger&lt;/a&gt;" to allow users to upload  Javascript and CSS to their blogs.. Google already offers 1GB of free image hosting on Picasa! &lt;span style="font-weight: bold;"&gt;so how hard it gonna be?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Another advantage of Page creator is creating pages :) People also requested that to be added to blogger..&lt;br /&gt;&lt;br /&gt;After responding to this 2 particular wishes, It would be easy for Google Blogger to completely replace Page creator..  also Google sites will not offer any extra features! Google sites will have no place in the picture.. &lt;span style="font-weight: bold;"&gt;Period&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I've been thinking about this for a while.. and blogging about it gives me a relief what about you? what do you think?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-5658241061114591881?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7dkRegNUJCKDw2jUayOa9cPFqvM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7dkRegNUJCKDw2jUayOa9cPFqvM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7dkRegNUJCKDw2jUayOa9cPFqvM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7dkRegNUJCKDw2jUayOa9cPFqvM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=1tQA4tTIeEc:YyM4QsBSfw0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=1tQA4tTIeEc:YyM4QsBSfw0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=1tQA4tTIeEc:YyM4QsBSfw0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=1tQA4tTIeEc:YyM4QsBSfw0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=1tQA4tTIeEc:YyM4QsBSfw0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=1tQA4tTIeEc:YyM4QsBSfw0:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=1tQA4tTIeEc:YyM4QsBSfw0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=1tQA4tTIeEc:YyM4QsBSfw0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/1tQA4tTIeEc" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2009/08/google-you-got-pages-sites-and-blogspot.html#comment-form" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/5658241061114591881?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/5658241061114591881?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/1tQA4tTIeEc/google-you-got-pages-sites-and-blogspot.html" title="@Google: you got Pages, Sites and Blogspot... why?!" /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_3JiqFA24tHU/SpiEqDVCM7I/AAAAAAAAAfc/SnkA5SjovoU/s72-c/Google_Blogger.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">9</thr:total><feedburner:origLink>http://www.moretechtips.net/2009/08/google-you-got-pages-sites-and-blogspot.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AHQnYzeyp7ImA9WxNUEko.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-7724177546193023363</id><published>2009-07-12T23:11:00.010Z</published><updated>2009-11-03T18:08:53.883Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-03T18:08:53.883Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="AJAX" /><category scheme="http://www.blogger.com/atom/ns#" term="VB.Net" /><category scheme="http://www.blogger.com/atom/ns#" term="Paging" /><category scheme="http://www.blogger.com/atom/ns#" term="hot" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>Paging Listbox; Another jQuery Plugin</title><content type="html">&lt;img style="float:right; margin:0 0 10px 10px;width: 219px; height: 216px;border:silver 1px solid" src="http://4.bp.blogspot.com/_3JiqFA24tHU/SlqGXyOkfqI/AAAAAAAAAZo/6x0rTrjcGmE/s320/Paging-ListBox.jpg" border="0" title="Paging Listbox" alt="Paging Listbox" id="BLOGGER_PHOTO_ID_5357742449888624290" /&gt;Few months ago I posted a Javascript class on how to &lt;a href="http://www.moretechtips.net/2009/01/jquery-ajax-fun-implementing-paging.html"&gt;Implement a paging listbox using jQuery&lt;/a&gt;. which has drawn a lot of traffic and few questions lately so I thought it would be more convenient to rewrite the code as jQuery plugin and make few enhancements plus providing a complete sample code in VB.Net and C#.&lt;p&gt;&lt;b&gt;Enhancements:&lt;/b&gt;&lt;/p&gt;&lt;ol&gt; &lt;li&gt;Easier usage, You only need to insert a div with the class  &amp;quot;paging-listbox&amp;quot; and settings inside &amp;quot;options&amp;quot; attribute to automatically  have the paging listbox loaded inside that div. still you can load the  listbox with regular Javascript call.&lt;/li&gt; &lt;li&gt;Added support for right-to-left layout.&lt;/li&gt; &lt;li&gt;You can pass additional parameters to source page via AJAX. for example  a category ID that user selects from another form field and should be used  to query records by  on the source page.&lt;/li&gt; &lt;li&gt;Few visual enhancements.&lt;/li&gt;&lt;/ol&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;div class="post-more"&gt;&lt;b&gt;Implementation Steps&lt;/b&gt;&lt;ol&gt; &lt;li&gt;First, download &lt;a href="http://paging-listbox.googlecode.com/files/jquery.paginglistbox-1.0.min.js"&gt;minified JavaScript&lt;/a&gt; of latest version from  &lt;a href="http://code.google.com/p/paging-listbox/"&gt;project page&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;Upload plugin Javascript file to your site. replace the link &amp;quot;&lt;b&gt;jquery.paginglistbox-1.0.js&lt;/b&gt;&amp;quot; with the full URL  you got.&lt;br /&gt; &lt;b&gt;*No need &lt;/b&gt;to host jQuery Javascript on your own.. Google hosts jQuery  for you!&lt;/li&gt; &lt;li&gt;Include the following CSS Code somewhere in your page usually inside Head  element. &lt;/li&gt; &lt;li&gt;Insert Code as described in the following Typical usage&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;b&gt;CSS Code&lt;/b&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;&lt;b class="Kw"&gt;style&lt;/b&gt; type=&lt;b class="qs"&gt;"&lt;b class="Kw"&gt;text&lt;/b&gt;/css"&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* container layer of listbox */&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.pl-layer{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;border&lt;/b&gt;:gray 1px solid;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;margin&lt;/b&gt;:0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* arrow button */&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.pl-button{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;border&lt;/b&gt;:gray 1px solid;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;background&lt;/b&gt;-&lt;b class="Kw"&gt;color&lt;/b&gt;:#333333;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;color&lt;/b&gt;:white;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;padding&lt;/b&gt;:.5px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;font&lt;/b&gt;:100% arial;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;margin&lt;/b&gt;:0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;width&lt;/b&gt;:18px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* keyword input  */&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.pl-key{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;margin&lt;/b&gt;:0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;font&lt;/b&gt;:100% arial;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;border&lt;/b&gt;:gray 1px solid;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;lt;/&lt;b class="Kw"&gt;style&lt;/b&gt;&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Typical Usage&lt;br /&gt;&lt;/b&gt;You will only need to include the 2 JavaScript's (jQuery and plugin) once; even if you have more than one listbox.&amp;nbsp; &lt;br&gt;You can defer Javascript downloading in the browser by placing the JavaScript's by the end of your web page.&amp;nbsp; &lt;br /&gt;Options must be separated by a comma, but a trailing comma is fatal.&lt;br /&gt;&lt;code&gt;&lt;b class="Cm"&gt;&amp;lt;!--Include once in your page--&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"jquery.paginglistbox-1.0.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;b class="Cm"&gt;&amp;lt;!-- Listbox auto. created by setting class=&lt;b class="qs"&gt;"paging-listbox"&lt;/b&gt; and options=&lt;b class="qs"&gt;"{options list}"&lt;/b&gt; --&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; class=&lt;b class="qs"&gt;"paging-listbox"&lt;/b&gt; options=&lt;b class="qs"&gt;"{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;source:&lt;b class="qs"&gt;'listbox.aspx'&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,id:&lt;b class="qs"&gt;'Field2'&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,value:&lt;b class="qs"&gt;'product'&lt;/b&gt;&lt;br /&gt;}"&lt;/b&gt;&amp;gt;&lt;br /&gt;loading..&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;br /&gt;&lt;/code&gt;for more usage examples download &lt;a href="http://paging-listbox.googlecode.com/files/paging-listbox-v1-sample.zip"&gt;sample code&lt;/a&gt;..!&lt;/p&gt;&lt;p&gt;&lt;b&gt;Custom Usage&lt;/b&gt;&lt;br /&gt;Load plugin content by Javascript call..&lt;br/&gt;&lt;code&gt;&lt;b class="Cm"&gt;&amp;lt;!--Include once in your page--&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"jquery.paginglistbox-1.0.js"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt;&amp;gt;&lt;br /&gt;&lt;b class="Cm"&gt;// on document ready&lt;/b&gt;&lt;br /&gt;$(document).ready(&lt;b class="Kw"&gt;function&lt;/b&gt;(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// Creating listbox by javascript call&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;b class="qs"&gt;'#listbox'&lt;/b&gt;).pagingListbox({&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;source:&lt;b class="qs"&gt;'listbox.aspx'&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,id:&lt;b class="qs"&gt;'Field1'&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,value:&lt;b class="qs"&gt;'product'&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;});&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;/code&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br&gt;Check &lt;a href="http://code.google.com/p/paging-listbox/"&gt;Project page&lt;/a&gt; for detailed documentation; Follow project changes, request features or submit bugs :(&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Plugin files&lt;/b&gt;&lt;ol&gt;&lt;li&gt; &lt;a href="http://paging-listbox.googlecode.com/files/jquery.paginglistbox-1.0.min.js"&gt;jquery.paginglistbox-1.0.min.js&lt;/a&gt; &lt;/li&gt;&lt;li&gt; &lt;a href="http://paging-listbox.googlecode.com/files/paging-listbox-v1-sample.zip"&gt;paging-listbox-v1-sample.zip&lt;/a&gt; &lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;b&gt;Plugin Documentation&lt;/b&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/paging-listbox/wiki/Implementation"&gt;Implementation Steps&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/paging-listbox/wiki/Options"&gt;Options List&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-7724177546193023363?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-pBgetF23Ca2QEx_QFT02_7wLwY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-pBgetF23Ca2QEx_QFT02_7wLwY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-pBgetF23Ca2QEx_QFT02_7wLwY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-pBgetF23Ca2QEx_QFT02_7wLwY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=2iJbsRDMKUg:Q1LO5voA9-s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=2iJbsRDMKUg:Q1LO5voA9-s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=2iJbsRDMKUg:Q1LO5voA9-s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=2iJbsRDMKUg:Q1LO5voA9-s:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=2iJbsRDMKUg:Q1LO5voA9-s:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=2iJbsRDMKUg:Q1LO5voA9-s:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=2iJbsRDMKUg:Q1LO5voA9-s:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=2iJbsRDMKUg:Q1LO5voA9-s:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/2iJbsRDMKUg" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2009/07/paging-listbox-another-jquery-plugin.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/7724177546193023363?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/7724177546193023363?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/2iJbsRDMKUg/paging-listbox-another-jquery-plugin.html" title="Paging Listbox; Another jQuery Plugin" /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_3JiqFA24tHU/SlqGXyOkfqI/AAAAAAAAAZo/6x0rTrjcGmE/s72-c/Paging-ListBox.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.moretechtips.net/2009/07/paging-listbox-another-jquery-plugin.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYMRHgyfyp7ImA9WxNRFUg.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-5002143089765451968</id><published>2009-07-04T07:48:00.005Z</published><updated>2009-09-10T02:36:25.697Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-10T02:36:25.697Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SEO" /><category scheme="http://www.blogger.com/atom/ns#" term="WordPress" /><category scheme="http://www.blogger.com/atom/ns#" term="Tech Tips" /><title>Posts Thumbs for WordPress; The Smart &amp; Easy way</title><content type="html">&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3JiqFA24tHU/Sk4JsRWhj0I/AAAAAAAAAZg/Qyd0SOiSZfs/s1600-h/Custom+Field+Images.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 265px;" src="http://3.bp.blogspot.com/_3JiqFA24tHU/Sk4JsRWhj0I/AAAAAAAAAZg/Qyd0SOiSZfs/s320/Custom+Field+Images.jpg" alt="Custom Field Images Plugin" title="After you uploaded some image, you see (Insert CFI) button to attach selected image to current post.." id="BLOGGER_PHOTO_ID_5354227663166869314" border="0" /&gt;&lt;/a&gt;Have you spent much time adding posts thumbnails using custom fields.. or -like me- spent much time trying many plugins that either not working well or very limited.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I was always not convinced with "Read more" built-in option in WordPress. As it is very unlikely to use the starting portion of your post as a teaser or summary.&lt;/div&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="post-more"&gt;&lt;div&gt;Many people use custom fields for doing it which is somehow complicated. Especially if you are building a Wordpress Blog for a client; you would want to make it easy for him.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;I've came across a very smart and easy plugin that will associate  thumbnails to each post on your WordPress blog:&lt;br /&gt;It is&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://scribu.net/wordpress/custom-field-images/"&gt;Custom Field Images&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Here some of its features:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt; The plugin will intelligently utilize WordPress built-in media library. and that comes with many advantages..&lt;/li&gt;&lt;li&gt;You don't have to upload images again to attach thumbnail for each post.&lt;/li&gt;&lt;li&gt;On media library window you have a button "Insert CFI" to instruct the plugin to attach the selected image to current post. plus the image title you already entered for that image. (Which is a very &lt;span style="font-weight: bold;"&gt;SEO &lt;/span&gt;thing to do!) &lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;My favorite&lt;/span&gt; feature is: Post Thumbnail is not saved by its URL instead by the&lt;span style="font-weight: bold;"&gt; Image ID&lt;/span&gt; , So in home page I can use the medium sized images and somewhere else -like Posts Reel- I can use the thumb sized images!&lt;/li&gt;&lt;li&gt;Very simple installation is required to replace the code that output whole post content  with the post excerpt. and you configure the plugin to insert the thumb in excerpt. That is it&lt;/li&gt;&lt;li&gt;The plugin comes with a &lt;span style="font-weight: bold;"&gt;widget&lt;/span&gt; to display posts thumbs selected by any query you like (Recent 5 or Some Category Posts)&lt;/li&gt;&lt;li&gt;Plugin can extract thumbnails from images already in your posts content.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Still, If you have custom layout somewhere else.  All you need is to place this line in the &lt;a href="http://codex.wordpress.org/The_Loop"&gt;Loop&lt;/a&gt;&lt;br /&gt;&lt;code class="short"&gt;&amp;lt;?&lt;b class="kw"&gt;php&lt;/b&gt; custom_field_image(&lt;b class="qs"&gt;''&lt;/b&gt;, &lt;b class="qs"&gt;'size=medium&amp;amp;align=left'&lt;/b&gt;); ?&amp;gt;&lt;/code&gt;&lt;br /&gt;Which will display medium sized images and left aligned!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;More important than the plugin itself, is the developer Behind it. A dedicated developer that amazed me with his expertise and his fast response to bug reports or feature requests.&lt;br /&gt;&lt;br /&gt;Go, get latest version from &lt;a href="http://scribu.net/wordpress/custom-field-images"&gt;Plugin Homepage&lt;/a&gt; , Version 2.0 was just released last night!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-5002143089765451968?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/P5ZdndJ-KoNiWcomMHQlye0Bl1k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P5ZdndJ-KoNiWcomMHQlye0Bl1k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/P5ZdndJ-KoNiWcomMHQlye0Bl1k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P5ZdndJ-KoNiWcomMHQlye0Bl1k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=mX6m0kDT_ng:mqTIKiK6eyI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=mX6m0kDT_ng:mqTIKiK6eyI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=mX6m0kDT_ng:mqTIKiK6eyI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=mX6m0kDT_ng:mqTIKiK6eyI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=mX6m0kDT_ng:mqTIKiK6eyI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=mX6m0kDT_ng:mqTIKiK6eyI:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=mX6m0kDT_ng:mqTIKiK6eyI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=mX6m0kDT_ng:mqTIKiK6eyI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/mX6m0kDT_ng" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2009/07/posts-thumbs-for-wordpress-smart-easy.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/5002143089765451968?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/5002143089765451968?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/mX6m0kDT_ng/posts-thumbs-for-wordpress-smart-easy.html" title="Posts Thumbs for WordPress; The Smart &amp; Easy way" /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_3JiqFA24tHU/Sk4JsRWhj0I/AAAAAAAAAZg/Qyd0SOiSZfs/s72-c/Custom+Field+Images.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.moretechtips.net/2009/07/posts-thumbs-for-wordpress-smart-easy.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AHQnYzfCp7ImA9WxNUEko.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-6571444316543411783</id><published>2009-06-18T22:01:00.008Z</published><updated>2009-11-03T18:08:53.884Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-03T18:08:53.884Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="RESTful" /><category scheme="http://www.blogger.com/atom/ns#" term="JSON" /><category scheme="http://www.blogger.com/atom/ns#" term="AJAX" /><category scheme="http://www.blogger.com/atom/ns#" term="Google AJAX APIs" /><category scheme="http://www.blogger.com/atom/ns#" term="hot" /><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>Rebuilding The Google Blog Bar; jQuery-ed Version</title><content type="html">My first jQuery Plugin.. A &lt;font color="#000080"&gt; &lt;b&gt;4&lt;/b&gt;KB&lt;/font&gt; jQuery plugin  instead of a &lt;b&gt;&lt;font color="#800000"&gt;118&lt;/font&gt;&lt;/b&gt;&lt;font color="#800000"&gt;KB&lt;/font&gt; Google Blog Bar!! &lt;p&gt;I have shown before how to use &lt;a href="http://www.moretechtips.net/2009/05/google-ajax-apis-related-posts-widget.html"&gt;Google Blog Bar as related posts widget&lt;/a&gt;, But when I actually tried to use it on my site, I didn&amp;#39;t like all these JavaScript/CSS  files that I&amp;#39;ve to include. &lt;br /&gt; And since I already use jQuery -&lt;i&gt;and who doesn&amp;#39;t&lt;/i&gt;- I decided to rebuild the  Blog Bar from scratch.&lt;/p&gt; &lt;p&gt;Of course, I&amp;#39;ll be using the RESTful interface of the AJAX Search API that returns JSON encoded results. So I didn&amp;#39;t scratch too much :) &lt;/p&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="post-more"&gt;&lt;b&gt;&lt;i&gt;Quick Definitions&lt;/i&gt;..&lt;br /&gt; &lt;/b&gt; &lt;a href="http://www.google.com/uds/solutions/blogbar/index.html" target="_blank"&gt;Google Blog Bar&lt;/a&gt; is a Google AJAX Search API application that lets you easily add page-controlled blog search results to your web pages or blog.&lt;br /&gt; &lt;br /&gt; &lt;a href="http://code.google.com/apis/ajaxsearch/" target="_blank"&gt;AJAX Search API&lt;/a&gt;&lt;b&gt; &lt;/b&gt;is the easiest way to incorporate a Google search box on your site. You can incorporate results from Web Search, News Search, and Blog Search into your blog or web site with just a few lines of JavaScript. &lt;p&gt;&lt;b&gt;Advantages Of My jQuery-ed Google Blog Bar:&lt;/b&gt;&lt;/p&gt; &lt;ol&gt;  &lt;li&gt;&lt;b&gt;Much lighter&lt;/b&gt;: Using Google Blog Bar, you will have to include 3 Javascript files (2   files Actually , but fist one dynamically loads the third ):&lt;br /&gt;-   &lt;a href="http://code.google.com/apis/ajaxsearch/documentation/#AJAX_Loader" target="_blank"&gt;Google AJAX API Loader&lt;/a&gt;   file which is &lt;b&gt;15KB&amp;nbsp; &lt;/b&gt;&lt;br /&gt;- And AJAX Search API file which is &lt;b&gt;72KB&lt;/b&gt;&lt;br /&gt;- Google Blog Bar   file which is &lt;b&gt;31KB&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;-&amp;nbsp; Plus 2 CSS files that you can go without them   and weighs &lt;b&gt;26KB&lt;/b&gt; total&lt;br /&gt;So, Total of Javascript files is &lt;b&gt;118KB&lt;/b&gt; vs. My   &lt;b&gt;4KB&lt;/b&gt; Blog Bar!&lt;br /&gt;Of course, I will not count jQuery 55KB, cause -as I said- it is an essential include.&lt;/li&gt;  &lt;li&gt;&lt;b&gt;More Control&lt;/b&gt;: Google Blog Bar will do repeated JSON queries to   get more results that I didn&amp;#39;t need and can&amp;#39;t be disabled.&lt;/li&gt;  &lt;li&gt;&lt;b&gt;It is jQuery-ed&lt;/b&gt;, Which is the most important :) One can add extra   pretty jQuery effects.. &lt;/li&gt;  &lt;li&gt;&lt;b&gt;Works as related posts widget:&lt;/b&gt; When no query expression was   set , By Default plugin use current page tags to create search expression by   ORing those tags.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;&lt;b&gt;Implementation Steps&lt;/b&gt;&lt;/p&gt; &lt;ol&gt;  &lt;li&gt;First, download &lt;a href="http://jquery-ed-google-blog-bar.googlecode.com/files/jquery.googleblogbar-1.0.min.js"&gt;minified JavaScript&lt;/a&gt; of latest plugin version from project page  &lt;a href="http://code.google.com/p/jquery-ed-google-blog-bar"&gt;  http://code.google.com/p/jquery-ed-google-blog-bar&lt;/a&gt;.&lt;/li&gt;  &lt;li&gt;&lt;a href="http://code.google.com/apis/ajaxsearch/signup.html" target="_blank"&gt;Sign-up for   an AJAX Search API Key for your website&lt;/a&gt; You must have a Google Account   to obtain a Google API key, and your API key is tied directly to your Google   Account. You can generate multiple API keys for your account if you have   multiple web sites.&lt;/li&gt;  &lt;li&gt;Set your key in the default options list where it says &lt;b&gt;key:&amp;#39;YOUR-KEY&amp;#39;&lt;/b&gt;&lt;/li&gt;  &lt;li&gt;Upload plugin Javascript file to your site. If you are on Blogger try a free file hosting   that provides direct linking like &lt;a href="http://www.fileden.com/" target="_blank"&gt;FileDen&lt;/a&gt;.   replace the link &amp;quot;&lt;b&gt;jquery.googleblogbar-1.0.min.js&lt;/b&gt;&amp;quot; with the full direct URL   you got.&lt;br /&gt;  &lt;b&gt;*Direct Linking:&lt;/b&gt; No redirection to another URL happens when you open   link in a browser. &lt;br /&gt;  &lt;b&gt;*No need &lt;/b&gt;to host jQuery Javascript on your own.. Google hosts jQuery   for you!&lt;/li&gt;  &lt;li&gt;Include the following CSS Code somewhere in your page usually inside Head   element. &lt;/li&gt;  &lt;li&gt;Insert Code as described in the following Typical usage&lt;/li&gt;  &lt;li&gt;And the most technically important :)&amp;nbsp; Give me some Digg/Dzone love   or a link back attribution.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt; &lt;b&gt;CSS Code&lt;/b&gt;&lt;br /&gt; The following CSS code will show a typical Blog Bar as seen in the footer  below. &lt;br /&gt; &lt;code&gt; &amp;lt;&lt;b class="Kw"&gt;style&lt;/b&gt; type=&lt;b class="qs"&gt;&amp;quot;&lt;b class="Kw"&gt;text&lt;/b&gt;/css&amp;quot;&lt;/b&gt;&amp;gt;&lt;br /&gt;&lt;b class="Cm"&gt;/* container */&lt;/b&gt;&lt;br /&gt;div.my-blog-bar{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;position&lt;/b&gt;:&lt;b class="Kw"&gt;relative&lt;/b&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;b class="Cm"&gt;/* inner div */&lt;/b&gt;&lt;br /&gt;div.mbb-inner{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;border&lt;/b&gt;:silver 1px solid;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;padding&lt;/b&gt;:4px 12px 8px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;margin&lt;/b&gt;:0 78px 0 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;position&lt;/b&gt;:&lt;b class="Kw"&gt;relative&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;overflow&lt;/b&gt;:hidden;&lt;br /&gt;}&lt;br /&gt;&lt;b class="Cm"&gt;/* bar title */&lt;/b&gt;&lt;br /&gt;div.mbb-inner h2{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;float&lt;/b&gt;:&lt;b class="Kw"&gt;left&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;font&lt;/b&gt;-&lt;b class="Kw"&gt;size&lt;/b&gt;:12px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;margin&lt;/b&gt;:0 4px 0 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;line&lt;/b&gt;-&lt;b class="Kw"&gt;height&lt;/b&gt;:1.4em;&lt;br /&gt;}&lt;br /&gt;&lt;b class="Cm"&gt;/* ul &lt;b class="Kw"&gt;list&lt;/b&gt; */&lt;/b&gt;&lt;br /&gt;div.mbb-inner ul{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;float&lt;/b&gt;:&lt;b class="Kw"&gt;left&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;padding&lt;/b&gt;:0 0 0 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;margin&lt;/b&gt;:0 0 0 0;&lt;br /&gt;}&lt;br /&gt;div.mbb-inner li{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;margin&lt;/b&gt;:0 0 0 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;line&lt;/b&gt;-&lt;b class="Kw"&gt;height&lt;/b&gt;:1.4em;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;list&lt;/b&gt;-&lt;b class="Kw"&gt;style&lt;/b&gt;-type:none;&lt;br /&gt;}&lt;br /&gt;/** post link **/&lt;br /&gt;div.mbb-inner li a{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;color&lt;/b&gt;:navy;&lt;br /&gt;}&lt;br /&gt;/** author name and date **/&lt;br /&gt;span.mbb-by{&lt;br /&gt;  &lt;b class="Kw"&gt;color&lt;/b&gt;:gray;&lt;br /&gt;}&lt;br /&gt;/** excerpt and blog url **/&lt;br /&gt;.mbb-content{ }&lt;br /&gt;.mbb-url{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;color&lt;/b&gt;:green;&lt;br /&gt;}&lt;br /&gt;/** powered by google **/&lt;br /&gt;div.mbb-branding{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;margin&lt;/b&gt;-&lt;b class="Kw"&gt;top&lt;/b&gt;:0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;position&lt;/b&gt;:absolute;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;right&lt;/b&gt;:0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;top&lt;/b&gt;:0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;width&lt;/b&gt;:75px;&lt;br /&gt;}&lt;br /&gt;div.mbb-branding-&lt;b class="Kw"&gt;text&lt;/b&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;color&lt;/b&gt;:gray;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;font&lt;/b&gt;-&lt;b class="Kw"&gt;size&lt;/b&gt;:10px;&lt;br /&gt;}&lt;br /&gt;a.mbb-branding-link img{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;border&lt;/b&gt;-&lt;b class="Kw"&gt;width&lt;/b&gt;:0;&lt;br /&gt;}&lt;br /&gt;&amp;lt;/&lt;b class="Kw"&gt;style&lt;/b&gt;&amp;gt; &lt;/code&gt; &lt;br /&gt;&lt;br /&gt;  &lt;b&gt;Typical Usage&lt;br /&gt; &lt;/b&gt;To show a horizontal blog bar.. place this div where you like, set options attribute and they get auto. loaded!&lt;br /&gt; You will only need to include the 2 JavaScript's (jQuery and my plugin) once;  even if you have more than one div. &lt;br /&gt; You can defer Javascript downloading in the browser by placing the JavaScript's  by the end of your page.&amp;nbsp; &lt;br /&gt; Options must be separated by a comma, but a trailing comma is fatal.&lt;br /&gt; &lt;code&gt;&lt;b class="Cm"&gt;&amp;lt;!--Inlcude once in your page--&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; src=&lt;b class="qs"&gt;&amp;quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&amp;quot;&lt;/b&gt; type=&lt;b class="qs"&gt;&amp;quot;text/javascript&amp;quot;&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; src=&lt;b class="qs"&gt;&amp;quot;jquery.googleblogbar-1.0.min.js&amp;quot;&lt;/b&gt; type=&lt;b class="qs"&gt;&amp;quot;text/javascript&amp;quot;&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;b class="Cm"&gt;&amp;lt;!-- Add as many as you need... div with class=&lt;b class="qs"&gt;&amp;quot;my-blog-bar&amp;quot;&lt;/b&gt; --&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b class="Cm"&gt;&amp;lt;!--  Show Results Restricted to &lt;b class="qs"&gt;&amp;quot;moretechtips.net&amp;quot;&lt;/b&gt; --&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; class=&lt;b class="qs"&gt;&amp;quot;my-blog-bar&amp;quot;&lt;/b&gt; options=&lt;b class="qs"&gt;&amp;quot;{title:&lt;b class="qs"&gt;&amp;#39;More Tech Tips!&amp;#39;&lt;/b&gt; , blogURL:&lt;b class="qs"&gt;&amp;#39;moretechtips.net&amp;#39;&lt;/b&gt;}&amp;quot;&lt;/b&gt;&amp;gt;loading..&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; style=&lt;b class="qs"&gt;&amp;quot;clear:both&amp;quot;&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;b class="Cm"&gt;&amp;lt;!--  or leave it to Default options --&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; class=&lt;b class="qs"&gt;&amp;quot;my-blog-bar&amp;quot;&lt;/b&gt;&amp;gt;loading..&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; style=&lt;b class="qs"&gt;&amp;quot;clear:both&amp;quot;&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;/code&gt; &lt;br /&gt; &lt;/p&gt; &lt;p&gt; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Custom Usage&lt;/b&gt;&lt;br /&gt; Load plugin content by javascript call.. &lt;code&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; src=&lt;b class="qs"&gt;&amp;quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&amp;quot;&lt;/b&gt; type=&lt;b class="qs"&gt;&amp;quot;text/javascript&amp;quot;&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; src=&lt;b class="qs"&gt;&amp;quot;jquery.googleblogbar-1.0.min.js&amp;quot;&lt;/b&gt; type=&lt;b class="qs"&gt;&amp;quot;text/javascript&amp;quot;&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;&amp;quot;text/javascript&amp;quot;&lt;/b&gt;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;$(document).ready(function(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;b class="qs"&gt;&amp;#39;div.some-other-class&amp;#39;&lt;/b&gt;).myBlogBar({&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;key:&lt;b class="qs"&gt;&amp;#39;YOUR-KEY&amp;#39;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,title:&lt;b class="qs"&gt;&amp;#39;Blogsphere&amp;#39;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,q:&lt;b class="qs"&gt;&amp;#39;Google&amp;#39;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,hl:&lt;b class="qs"&gt;&amp;#39;en&amp;#39;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}); &lt;br /&gt;});&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; class=&lt;b class="qs"&gt;&amp;quot;some-other-class&amp;quot;&lt;/b&gt;&amp;gt;loading...&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;/code&gt; &amp;nbsp;&lt;/p&gt; &lt;p&gt; &lt;br&gt; Check &lt;a href="http://code.google.com/p/jquery-ed-google-blog-bar/"&gt;Project  page&lt;/a&gt; for detailed documentation; Follow project changes, request  features or submit bugs :(&lt;br /&gt;&lt;br /&gt;If you liked the plugin, Would you please vote for it on &lt;a href="http://plugins.jquery.com/project/MyBlogBar"&gt;plugin page&lt;/a&gt; at jQuery site.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-6571444316543411783?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7uzu6hVFSOMNjHfLmREc0fvesOE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7uzu6hVFSOMNjHfLmREc0fvesOE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7uzu6hVFSOMNjHfLmREc0fvesOE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7uzu6hVFSOMNjHfLmREc0fvesOE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=jyqGPoVZjao:htUQTUtaynE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=jyqGPoVZjao:htUQTUtaynE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=jyqGPoVZjao:htUQTUtaynE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=jyqGPoVZjao:htUQTUtaynE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=jyqGPoVZjao:htUQTUtaynE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=jyqGPoVZjao:htUQTUtaynE:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=jyqGPoVZjao:htUQTUtaynE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=jyqGPoVZjao:htUQTUtaynE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/jyqGPoVZjao" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2009/06/rebuilding-google-blog-bar-jquery-ed.html#comment-form" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/6571444316543411783?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/6571444316543411783?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/jyqGPoVZjao/rebuilding-google-blog-bar-jquery-ed.html" title="Rebuilding The Google Blog Bar; jQuery-ed Version" /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">9</thr:total><feedburner:origLink>http://www.moretechtips.net/2009/06/rebuilding-google-blog-bar-jquery-ed.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEFQXk8fyp7ImA9WxNRFUk.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-7469863617358790145</id><published>2009-06-18T18:30:00.006Z</published><updated>2009-09-10T02:10:10.777Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-10T02:10:10.777Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="RESTful" /><category scheme="http://www.blogger.com/atom/ns#" term="JSON" /><category scheme="http://www.blogger.com/atom/ns#" term="AJAX" /><category scheme="http://www.blogger.com/atom/ns#" term="Google AJAX APIs" /><category scheme="http://www.blogger.com/atom/ns#" term="Tech Tips" /><title>RESTful Tip: Setting Site Restriction in AJAX Search API</title><content type="html">&lt;img style="float:right; margin:0 0 10px 10px;width: 320px; height: 248px;border:silver 1px solid" src="http://4.bp.blogspot.com/_3JiqFA24tHU/SjrQPqRt7UI/AAAAAAAAAZA/4vVVva_BAEg/s320/AJAX-Search-API.jpg" border="0" alt="Google AJAX Search API" title="Google AJAX Search API" id="BLOGGER_PHOTO_ID_5348816474921102658" /&gt;The &lt;a href="http://code.google.com/apis/ajaxsearch/documentation"&gt;Google AJAX Search API&lt;/a&gt; provides simple web objects that perform inline searches over a number of Google services (Web Search, Local Search, Video Search, Blog Search, News Search, Book Search, Image Search, and Patent Search).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;It is an old news that&lt;/span&gt;: The API exposes a raw RESTful interface that returns JSON encoded results so it would be easily processed by most languages and runtimes. &lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="post-more"&gt;&lt;span style="font-weight:bold;"&gt;Although&lt;/span&gt; API JavaScript objects allow you to &lt;a href="http://code.google.com/apis/ajaxsearch/documentation/#SiteRestrict"&gt;set site restrictions&lt;/a&gt;, On RESTful Interface nothing was said on how to do so using the &lt;a href="http://code.google.com/apis/ajaxsearch/documentation/reference.html#_intro_fonje"&gt;Standard URL Arguments&lt;/a&gt;..! &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Enough intro.. How to fix that?&lt;/span&gt;&lt;br /&gt;You would normally create HTTP request and send the Standard URL Arguments. Particularly the search expression 'q' can be something like 'Google'. &lt;br /&gt;What you need to do is to change it to &lt;br /&gt;'Google &lt;b&gt;site:moretechtips.net&lt;/b&gt;' in case you are doing a web search, &lt;br /&gt;and &lt;br /&gt;'Google &lt;b&gt;blogurl:moretechtips.net&lt;/b&gt;' in case of a Blog Search.. &lt;br /&gt;and &lt;br /&gt;'Google &lt;b&gt;source:bbc&lt;/b&gt;' in case of a news Search.. &lt;br /&gt;&lt;br /&gt;Check my &lt;a href="http://www.moretechtips.net/2009/06/rebuilding-google-blog-bar-jquery-ed.html"&gt;4KB jQuery plugin using RESTful Interface of AJAX Search API&lt;/a&gt; to replace the 118KB Google Blog Bar!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-7469863617358790145?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Q4U6_JgD0iPN_lQQ4i-0YKHoSmg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q4U6_JgD0iPN_lQQ4i-0YKHoSmg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Q4U6_JgD0iPN_lQQ4i-0YKHoSmg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q4U6_JgD0iPN_lQQ4i-0YKHoSmg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=D-i6U_kL46I:VctpxfUZ0mU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=D-i6U_kL46I:VctpxfUZ0mU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=D-i6U_kL46I:VctpxfUZ0mU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=D-i6U_kL46I:VctpxfUZ0mU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=D-i6U_kL46I:VctpxfUZ0mU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=D-i6U_kL46I:VctpxfUZ0mU:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=D-i6U_kL46I:VctpxfUZ0mU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=D-i6U_kL46I:VctpxfUZ0mU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/D-i6U_kL46I" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2009/06/restful-tip-setting-site-restriction-in.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/7469863617358790145?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/7469863617358790145?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/D-i6U_kL46I/restful-tip-setting-site-restriction-in.html" title="RESTful Tip: Setting Site Restriction in AJAX Search API" /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_3JiqFA24tHU/SjrQPqRt7UI/AAAAAAAAAZA/4vVVva_BAEg/s72-c/AJAX-Search-API.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.moretechtips.net/2009/06/restful-tip-setting-site-restriction-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MDSXY-eip7ImA9WxNRGUo.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-4633512340267790616</id><published>2009-05-15T00:27:00.023Z</published><updated>2009-09-15T00:44:38.852Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-15T00:44:38.852Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="Blogger/Blogspot" /><category scheme="http://www.blogger.com/atom/ns#" term="RESTful" /><category scheme="http://www.blogger.com/atom/ns#" term="AJAX" /><category scheme="http://www.blogger.com/atom/ns#" term="Google AJAX APIs" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="Tech Tips" /><title>Google AJAX APIs =&gt; Related Posts Widget Powered by Google</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3JiqFA24tHU/Sg4b3H2hUrI/AAAAAAAAAXo/bsOfcpR8ZTY/s1600-h/Related-Posts-Widget-Powered-by-Google.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float:right; cursor:pointer; width:326px; height:301px;" src="http://2.bp.blogspot.com/_3JiqFA24tHU/Sg4b3H2hUrI/AAAAAAAAAXo/bsOfcpR8ZTY/s400/Related-Posts-Widget-Powered-by-Google.jpg" alt="Related Posts Widget Powered by Google" title="This how the Related Posts Widget should look like" id="BLOGGER_PHOTO_ID_5336233242295095986" border="0" /&gt;&lt;/a&gt;Previously, I proposed a &lt;a href="http://www.moretechtips.net/2009/04/jquery-gdata-api-smarter-related-posts.html"&gt;related posts widget for Blogger&lt;/a&gt; based on &lt;a href="http://code.google.com/apis/gdata/docs/2.0/reference.html"&gt;Blogger Data API&lt;/a&gt; .&lt;br /&gt;
This time will do simple adjustments on 2 &lt;a href="http://code.google.com/apis/ajaxsearch/"&gt;Google AJAX Search API&lt;/a&gt; controls to work as related posts widgets. which should work on any blog as opposed to the previous method which was limited to Blogspot blogs only.&lt;br /&gt;
&lt;br /&gt;
What is the &lt;a href="http://code.google.com/apis/ajaxsearch/"&gt;Google AJAX Search API&lt;/a&gt;?&lt;br /&gt;
&lt;blockquote&gt;The Google AJAX Search API lets you put Google Search in your web pages with JavaScript. You can embed a simple, dynamic search box and display search results in your own web pages or &lt;span style="font-weight: bold;"&gt;use the results in innovative, programmatic ways :)&lt;/span&gt;&lt;br /&gt;
&lt;/blockquote&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div class="post-more"&gt;&lt;span style="font-weight: bold;"&gt;Google AJAX Search API Offers 2 handy search controls:&lt;/span&gt;&lt;br /&gt;
First take a look on both before we modify them..&lt;br /&gt;
&lt;br /&gt;
&lt;a style="font-weight: bold;" href="http://www.google.com/uds/samples/apidocs/helloworld.html"&gt;&lt;br /&gt;
&lt;img style="margin: 0pt 10px 10px 0pt; float: left; width: 198px; height: 128px;" src="http://code.google.com/apis/ajaxsearch/images/websearch.png" alt="Google AJAX Search API: Simple Search Box" border="0" /&gt;Simple Search Box&lt;/a&gt;&lt;br /&gt;
Integrate Web Search, News Search, and Blog Search into your web site, and easily format the results to fit your site's style. You can also display results from your Google Custom Search Engine.&lt;br /&gt;
&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;br /&gt;
&lt;a style="font-weight: bold;" href="http://www.google.com/uds/solutions/blogbar/index.html"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; width: 198px; height: 128px;" src="http://code.google.com/apis/ajaxsearch/images/blogbar.png" alt="Google AJAX Search API: Blog Bar" border="0" /&gt;Blog Bar&lt;/a&gt;&lt;br /&gt;
Put a dynamic Google Blog bar on your web pages. Just enter the searches you want to power the blog bar, and the AJAX Search API does the rest. We support two different form factors — a thin horizontal strip and a wider vertical bar — so it's easy to incorporate dynamic blog content into the layout of your site.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;span style="font-weight: bold;"&gt;Adjustments&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;:&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;I will extract tags of current post from anchor (A) elements with the attribute [ rel=tag ] , and use them to execute a blog search.&lt;/li&gt;
&lt;li&gt;Will also check that the current page is a post page by matching to a URL pattern.&lt;/li&gt;
&lt;li&gt;Using CSS: will hide the search form of the Simple Search Box, also the Paging links and Posts snippets, then will attach the "powered by Google" branding to the widget bottom.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;Advantages using Google AJAX Search API over Blogger Data API&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Very generic; You are not limited to blogspot blogs, You can use this on other blogging software such as  Wordpress, And if  you like you can show related posts from other blogs as well.&lt;/li&gt;
&lt;li&gt;Blogger Data API didn't support to search by all tags onetime. I had to aggregate each tag feed and calculate posts relevancy. This time we can query all search results once by ORing all tags.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;The Adjusted &lt;span style="font-weight: bold;"&gt;Simple Search Box&lt;/span&gt;&lt;br /&gt;
&lt;code&gt;&lt;b class="Cm"&gt;&amp;lt;!-- CSS Part --&amp;gt;&lt;/b&gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;style&lt;/b&gt; type=&lt;b class="qs"&gt;"text/css"&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;/* bold the section header */&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.gsc-title { font-weight : bold; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Hide Search box. You can leave the search box shown to check that Tags were extracted correctly */&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;form.gsc-search-box { display:none; } &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Hide and the paging box */&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;div.gsc-cursor-box { display:none; } &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Hide result sinppet! */&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.gs-snippet { display:none; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Hide result url if you are restricting it to your blog */&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.gs-visibleUrl {display:none; }&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;/style&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b class="Cm"&gt;&amp;lt;!-- Javascript Part --&amp;gt;&lt;/b&gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; src=&lt;b class="qs"&gt;"http://www.google.com/uds/jsapi?key=YOUR-KEY"&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b class="Cm"&gt;//&amp;lt;![CDATA[&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b class="Cm"&gt;// Load Search API Js v1&lt;/b&gt;&lt;br /&gt;
google.load(&lt;b class="qs"&gt;'search'&lt;/b&gt;, &lt;b class="qs"&gt;'1'&lt;/b&gt;);&lt;br /&gt;
&lt;br /&gt;
&lt;b class="Kw"&gt;function&lt;/b&gt; DummyClipSearchResult(result) {}&lt;br /&gt;
&lt;b class="Kw"&gt;function&lt;/b&gt; OnLoad() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt;(!isPost()) &lt;b class="Kw"&gt;return&lt;/b&gt;; &lt;b class="Cm"&gt;// If not a post page&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; tags = getTags();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt;(tags.length==0) &lt;b class="Kw"&gt;return&lt;/b&gt;; &lt;b class="Cm"&gt;// &lt;b class="Kw"&gt;If&lt;/b&gt; no tags found&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// Create a search control&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; searchControl = &lt;b class="Kw"&gt;new&lt;/b&gt; google.search.SearchControl();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// attaches the "powered by Google" branding into that element&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;google.search.Search.getBranding(document.getElementById(&lt;b class="qs"&gt;'branding'&lt;/b&gt;));&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// site restricted blog search&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; blogSearch = &lt;b class="Kw"&gt;new&lt;/b&gt; google.search.BlogSearch();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;blogSearch.setUserDefinedLabel(&lt;b class="qs"&gt;'Related Posts'&lt;/b&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;blogSearch.setSiteRestriction(&lt;b class="qs"&gt;'http://www.moretechtips.net'&lt;/b&gt;);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// Results are displayed as fully as possible within the object&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; options = &lt;b class="Kw"&gt;new&lt;/b&gt; google.search.SearcherOptions();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;options.setExpandMode(google.search.SearchControl.EXPAND_MODE_OPEN);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;searchControl.addSearcher(blogSearch,options); &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// tell the searcher to draw itself and tell it where to attach&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;searchControl.draw(document.getElementById(&lt;b class="qs"&gt;'searchcontrol'&lt;/b&gt;));&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// execute search on tags list by logically ORing&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;searchControl.execute(tags.join(&lt;b class="qs"&gt;' | '&lt;/b&gt;));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;b class="Cm"&gt;// extract tags from A elements that has attribute rel=tag&lt;/b&gt;&lt;br /&gt;
&lt;b class="Kw"&gt;function&lt;/b&gt; getTags() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; tags = [];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; a = document.getElementsByTagName(&lt;b class="qs"&gt;'a'&lt;/b&gt;); &lt;b class="Cm"&gt;// get all A elements&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;for&lt;/b&gt;(&lt;b class="Kw"&gt;var&lt;/b&gt; i=0; i&amp;lt;a.length; i++) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; rel = a[i].getAttribute(&lt;b class="qs"&gt;'rel'&lt;/b&gt;);  &lt;b class="Cm"&gt;// check rel=&lt;b class="qs"&gt;'tag'&lt;/b&gt; &lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt; (!rel || !a[i].firstChild) &lt;b class="Kw"&gt;continue&lt;/b&gt;; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; tag = a[i].firstChild.data;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt; (!tag) &lt;b class="Kw"&gt;continue&lt;/b&gt;; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tag= tag.replace(/\n/g,&lt;b class="qs"&gt;''&lt;/b&gt;).replace(/^\s\s*/,&lt;b class="qs"&gt;''&lt;/b&gt;).replace(/\s\s*$/,&lt;b class="qs"&gt;''&lt;/b&gt;); &lt;b class="Cm"&gt;//some cleaning&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;    &lt;b class="Kw"&gt;if&lt;/b&gt; (rel.toLowerCase()==&lt;b class="qs"&gt;'tag'&lt;/b&gt; &amp;amp;&amp;amp; tag) tags[tags.length] = tag;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;return&lt;/b&gt; tags;&lt;br /&gt;
}&lt;br /&gt;
&lt;b class="Cm"&gt;// &lt;b class="Kw"&gt;This&lt;/b&gt; fucntion check &lt;b class="Kw"&gt;if&lt;/b&gt; the current page is a post to execlude index &amp;amp; archive pages&lt;/b&gt;&lt;br /&gt;
&lt;b class="Cm"&gt;// It looks &lt;b class="Kw"&gt;for&lt;/b&gt; a blogspot post pattern like &lt;b class="qs"&gt;'/2009/01/post-title.html'&lt;/b&gt; &lt;/b&gt;&lt;br /&gt;
&lt;b class="Cm"&gt;// &lt;b class="Kw"&gt;If&lt;/b&gt; you'r on Wordpress Change line #4 to: &lt;b class="Kw"&gt;if&lt;/b&gt;(!p.match(/^\/\d{4}\/\d{2}\/\d{2}\/[\w\-\_]+\//)) &lt;b class="Kw"&gt;return&lt;/b&gt; &lt;b class="Kw"&gt;false&lt;/b&gt;;&lt;/b&gt;&lt;br /&gt;
&lt;b class="Kw"&gt;function&lt;/b&gt; isPost() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// fixed array of posts you might wanna execulde like &lt;b class="qs"&gt;'contact'&lt;/b&gt; post&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; x = [&lt;b class="qs"&gt;'/2009/01/contact.html'&lt;/b&gt;]; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; p = location.pathname;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt;(!p.match(/^\/\d{4}\/\d{2}\/[\w\-\_]+\.html/)) &lt;b class="Kw"&gt;return&lt;/b&gt; &lt;b class="Kw"&gt;false&lt;/b&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;for&lt;/b&gt;(&lt;b class="Kw"&gt;var&lt;/b&gt; i=0; i&amp;lt;=x.length; i++) &lt;b class="Kw"&gt;if&lt;/b&gt;(p==x[i]) &lt;b class="Kw"&gt;return&lt;/b&gt; &lt;b class="Kw"&gt;false&lt;/b&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;return&lt;/b&gt; &lt;b class="Kw"&gt;true&lt;/b&gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;b class="Cm"&gt;// setup on load call back&lt;/b&gt;&lt;br /&gt;
google.setOnLoadCallback(OnLoad, &lt;b class="Kw"&gt;true&lt;/b&gt;);&lt;br /&gt;
//]]&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b class="Cm"&gt;&amp;lt;!-- HTML Part : where widget is attached--&amp;gt;&lt;/b&gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; id=&lt;b class="qs"&gt;"searchcontrol"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; id=&lt;b class="qs"&gt;"branding"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
The Adjusted &lt;span style="font-weight: bold;"&gt;Blog Bar&lt;/span&gt;&lt;br /&gt;
&lt;code&gt;&amp;lt;!--&lt;br /&gt;
// The Following div element will end up holding the actual blogbar.&lt;br /&gt;
// You can place this anywhere on your page.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; id=&lt;b class="qs"&gt;"blogBar-bar"&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;span&lt;/b&gt; style=&lt;b class="qs"&gt;"color:#676767;font-size:11px;margin:10px;padding:4px;"&lt;/b&gt;&amp;gt;Loading...&amp;lt;&lt;b class="Kw"&gt;/span&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Ajax Search Api and Stylesheet&lt;br /&gt;
// Note: If you are already using the AJAX Search API, then do not include it or its stylesheet again&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; src=&lt;b class="qs"&gt;"http://www.google.com/uds/api?file=uds.js&amp;amp;v=1.0&amp;amp;source=uds-blbw&amp;amp;key=YOUR-KEY"&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;style&lt;/b&gt; type=&lt;b class="qs"&gt;"text/css"&lt;/b&gt;&amp;gt;&lt;br /&gt;
@import url(&lt;b class="qs"&gt;"http://www.google.com/uds/css/gsearch.css"&lt;/b&gt;);&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;/style&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b class="Cm"&gt;&amp;lt;!-- Blog Bar Code and Stylesheet --&amp;gt;&lt;/b&gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; src=&lt;b class="qs"&gt;"http://www.google.com/uds/solutions/blogbar/gsblogbar.js?mode=new"&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;style&lt;/b&gt; type=&lt;b class="qs"&gt;"text/css"&lt;/b&gt;&amp;gt;&lt;br /&gt;
@import url(&lt;b class="qs"&gt;"http://www.google.com/uds/solutions/blogbar/gsblogbar.css"&lt;/b&gt;);&lt;br /&gt;
&lt;br /&gt;
/* Customize the title [Related Posts] */&lt;br /&gt;
.horizontal_gsblb .titleBox_gsblb {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;display:block;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;float:left;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;font-size:100%;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;padding:4px 4px 0 0;&lt;br /&gt;
}&lt;br /&gt;
/* Hide the Tags list; You can undo this to check that Tags were extracted correctly */&lt;br /&gt;
.horizontal_gsblb div.statusBox_gsblb{ display:none; }&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;/style&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;b class="Kw"&gt;function&lt;/b&gt; LoadBlogBar() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt;(!isPost()) &lt;b class="Kw"&gt;return&lt;/b&gt;; &lt;b class="Cm"&gt;// If not a post page&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; tags = getTags();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt;(tags.length==0) &lt;b class="Kw"&gt;return&lt;/b&gt;; &lt;b class="Cm"&gt;// &lt;b class="Kw"&gt;If&lt;/b&gt; no tags found&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; blogBar;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; options = {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;largeResultSet : &lt;b class="Kw"&gt;false&lt;/b&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;title : &lt;b class="qs"&gt;'Related Posts'&lt;/b&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;horizontal : &lt;b class="Kw"&gt;true&lt;/b&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;orderBy : GSearch.ORDER_BY_DATE,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// restrict by you site&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;siteRestriction : &lt;b class="qs"&gt;'http://www.moretechtips.net'&lt;/b&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;autoExecuteList : {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;executeList : [tags.join(&lt;b class="qs"&gt;' | '&lt;/b&gt;)] &lt;b class="Cm"&gt;// execute search on tags list by logically ORing&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;blogBar = &lt;b class="Kw"&gt;new&lt;/b&gt; GSblogBar(document.getElementById(&lt;b class="qs"&gt;'blogBar-bar'&lt;/b&gt;), options);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;b class="Cm"&gt;// extract tags from A elements that has attribute rel=tag&lt;/b&gt;&lt;br /&gt;
&lt;b class="Kw"&gt;function&lt;/b&gt; getTags() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; tags = [];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; a = document.getElementsByTagName(&lt;b class="qs"&gt;'a'&lt;/b&gt;); &lt;b class="Cm"&gt;// get all A elements&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;for&lt;/b&gt;(&lt;b class="Kw"&gt;var&lt;/b&gt; i=0; i&amp;lt;a.length; i++) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; rel = a[i].getAttribute(&lt;b class="qs"&gt;'rel'&lt;/b&gt;);  &lt;b class="Cm"&gt;// check rel=&lt;b class="qs"&gt;'tag'&lt;/b&gt; &lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt; (!rel || !a[i].firstChild) &lt;b class="Kw"&gt;continue&lt;/b&gt;; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; tag = a[i].firstChild.data;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt; (!tag) &lt;b class="Kw"&gt;continue&lt;/b&gt;; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tag= tag.replace(/\n/g,&lt;b class="qs"&gt;''&lt;/b&gt;).replace(/^\s\s*/,&lt;b class="qs"&gt;''&lt;/b&gt;).replace(/\s\s*$/,&lt;b class="qs"&gt;''&lt;/b&gt;); &lt;b class="Cm"&gt;//some cleaning&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt; (rel.toLowerCase()==&lt;b class="qs"&gt;'tag'&lt;/b&gt; &amp;amp;&amp;amp; tag) tags[tags.length] = tag;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;return&lt;/b&gt; tags;&lt;br /&gt;
}&lt;br /&gt;
&lt;b class="Cm"&gt;// &lt;b class="Kw"&gt;This&lt;/b&gt; fucntion check &lt;b class="Kw"&gt;if&lt;/b&gt; the current page is a post to execlude index &amp;amp; archive pages&lt;/b&gt;&lt;br /&gt;
&lt;b class="Cm"&gt;// It looks &lt;b class="Kw"&gt;for&lt;/b&gt; a blogspot post pattern like &lt;b class="qs"&gt;'/2009/01/post-title.html'&lt;/b&gt; &lt;/b&gt;&lt;br /&gt;
&lt;b class="Cm"&gt;// &lt;b class="Kw"&gt;If&lt;/b&gt; you'r on Wordpress Change line #4 to: &lt;b class="Kw"&gt;if&lt;/b&gt;(!p.match(/^\/\d{4}\/\d{2}\/\d{2}\/[\w\-\_]+\//)) &lt;b class="Kw"&gt;return&lt;/b&gt; &lt;b class="Kw"&gt;false&lt;/b&gt;;&lt;/b&gt;&lt;br /&gt;
&lt;b class="Kw"&gt;function&lt;/b&gt; isPost() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// fixed array of posts you might wanna execulde like &lt;b class="qs"&gt;'contact'&lt;/b&gt; post&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; x = [&lt;b class="qs"&gt;'/2009/01/contact.html'&lt;/b&gt;]; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; p = location.pathname;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt;(!p.match(/^\/\d{4}\/\d{2}\/[\w\-\_]+\.html/)) &lt;b class="Kw"&gt;return&lt;/b&gt; &lt;b class="Kw"&gt;false&lt;/b&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;for&lt;/b&gt;(&lt;b class="Kw"&gt;var&lt;/b&gt; i=0; i&amp;lt;=x.length; i++) &lt;b class="Kw"&gt;if&lt;/b&gt;(p==x[i]) &lt;b class="Kw"&gt;return&lt;/b&gt; &lt;b class="Kw"&gt;false&lt;/b&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;return&lt;/b&gt; &lt;b class="Kw"&gt;true&lt;/b&gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;b class="Cm"&gt;// arrange &lt;b class="Kw"&gt;for&lt;/b&gt; &lt;b class="Kw"&gt;this&lt;/b&gt; &lt;b class="Kw"&gt;function&lt;/b&gt; to be called during body.onload&lt;/b&gt;&lt;br /&gt;
GSearch.setOnLoadCallback(LoadBlogBar);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;To implement this&lt;/span&gt; on your blog:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Make sure that your blog exists in &lt;a href="http://blogsearch.google.com/"&gt;Google Blog Search&lt;/a&gt; like &lt;a href="http://blogsearch.google.com/blogsearch?as_q=javascript&amp;amp;btnG=Search+Blogs&amp;amp;bl_url=moretechtips.net"&gt;My Blog&lt;/a&gt;, Note that you can see results from &lt;a href="http://blogsearch.google.com/blogsearch?as_q=javascript&amp;amp;btnG=Search+Blogs&amp;amp;bl_url=moretechtips.net"&gt;your blog only&lt;/a&gt;.&lt;br /&gt;
If you are not there then you are doing something wrong in your blog!&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/apis/ajaxsearch/signup.html"&gt;Sign-up for an AJAX Search API Key for your website&lt;/a&gt; You must have a Google Account to obtain a Google API key, and your API key is tied directly to your Google Account. You can generate multiple API keys for your account if you have multiple web sites.&lt;/li&gt;
&lt;li&gt;Replace my key with yours where you see [key=YOUR-KEY... ] at the included Js file of the Google API Loader JS.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;Of course you can have the controls display related posts from any blog by removing the site restriction.&lt;br /&gt;
Or you can set it to "&lt;a href="http://www.dzone.com/"&gt;dzone.com&lt;/a&gt;" to get fresh &lt;strong&gt;related &lt;/strong&gt;links from everywhere.&lt;br /&gt;
&lt;br /&gt;
AJAX Search API also offers search results as JSON if you wish to use it with a language other than JavaScript..&lt;/div&gt;&lt;br /&gt;
&lt;span style="color:maroon;font-weight:bold"&gt;Update&lt;/span&gt;&lt;br /&gt;
When I actually tried to use the blog bar on my site, I didn't like all these JavaScript/CSS files that I've to include.&lt;br /&gt;
And since I already use jQuery -and who doesn't- I decided to &lt;a href="http://www.moretechtips.net/2009/06/rebuilding-google-blog-bar-jquery-ed.html"&gt;&lt;b&gt;Rebuild the Google blog bar&lt;/b&gt;&lt;/a&gt; from scratch.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-4633512340267790616?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dwCT5Y_pw9lC7UpKqfH2Q7iPejw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dwCT5Y_pw9lC7UpKqfH2Q7iPejw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dwCT5Y_pw9lC7UpKqfH2Q7iPejw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dwCT5Y_pw9lC7UpKqfH2Q7iPejw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=-igXEcXq_oM:LYIA4Lq9Zac:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=-igXEcXq_oM:LYIA4Lq9Zac:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=-igXEcXq_oM:LYIA4Lq9Zac:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=-igXEcXq_oM:LYIA4Lq9Zac:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=-igXEcXq_oM:LYIA4Lq9Zac:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=-igXEcXq_oM:LYIA4Lq9Zac:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=-igXEcXq_oM:LYIA4Lq9Zac:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=-igXEcXq_oM:LYIA4Lq9Zac:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/-igXEcXq_oM" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2009/05/google-ajax-apis-related-posts-widget.html#comment-form" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/4633512340267790616?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/4633512340267790616?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/-igXEcXq_oM/google-ajax-apis-related-posts-widget.html" title="Google AJAX APIs =&gt; Related Posts Widget Powered by Google" /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_3JiqFA24tHU/Sg4b3H2hUrI/AAAAAAAAAXo/bsOfcpR8ZTY/s72-c/Related-Posts-Widget-Powered-by-Google.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://www.moretechtips.net/2009/05/google-ajax-apis-related-posts-widget.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEBRnw6cCp7ImA9WxNRFUk.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-4219991929236144030</id><published>2009-04-04T17:56:00.015Z</published><updated>2009-09-10T02:10:57.218Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-10T02:10:57.218Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="Blogger/Blogspot" /><category scheme="http://www.blogger.com/atom/ns#" term="RESTful" /><category scheme="http://www.blogger.com/atom/ns#" term="JSON" /><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>Code behind : A Smarter Related Posts widget for Blogger</title><content type="html">&lt;img style="margin: 0pt 0pt 10px 10px; float: right; width: 250px; height: 250px;" src="http://2.bp.blogspot.com/_3JiqFA24tHU/SdepmnomG_I/AAAAAAAAAU8/1ZVQzhmrLmM/s400/gdata-blogger-icon.png" alt="Blogger Data API" id="BLOGGER_PHOTO_ID_5320907965700905970" /&gt;On this post I gonna walk you through the code behind my new widget [&lt;a href="http://www.moretechtips.net/2009/04/jquery-gdata-api-smarter-related-posts.html"&gt;A Smarter Related Posts widget for Blogger&lt;/a&gt;].&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;color:#003366"&gt;If you just want to install the widget&lt;/span&gt; on your blog, go to &lt;a href="http://www.moretechtips.net/2009/04/jquery-gdata-api-smarter-related-posts.html"&gt;A Smarter Related Posts widget for Blogger&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;To see the widget in action&lt;/span&gt;, Scroll down to the end of this post. also hover on links to see relevancy score.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="post-more"&gt;&lt;a href="http://code.google.com/apis/gdata/"&gt;Google Data APIs &lt;/a&gt;provide a simple standard protocol for reading Blogger content in the form of feeds. and jQuery makes it very easy to work with.&lt;br /&gt;&lt;blockquote&gt;These REST-style APIs are based on the Atom Publishing Protocol (AtomPub), using the standard Atom syndication format to represent data and HTTP to handle communication. The Google Data API protocol also extends AtomPub for processing queries, authentication, batch requests, and providing alternate output formats (JSON, RSS).&lt;/blockquote&gt;Many Google services support the Google Data API protocol. This time I will work with the &lt;a href="http://code.google.com/apis/gdata/docs/2.0/reference.html"&gt;Blogger Data API&lt;/a&gt; to aggregate blog feeds in JSON format. And will also use jQuery to handle JSON feeds of each related tag to build the related posts widget.&lt;br /&gt;&lt;br /&gt;First go to &lt;a href="http://code.google.com/p/blogger-related-posts"&gt;Project page&lt;/a&gt; to download the JavaScript file.&lt;br /&gt;&lt;br /&gt;Now, I'll describe how that widget works in order of execution (which looks like the reverse order of functions definitions)&lt;br /&gt;&lt;br /&gt;1- you call the class and pass your options, Class constructor sets default options and use jQuery &lt;strong&gt;extend&lt;/strong&gt; method to overwrite it with user preferences.&lt;br /&gt;&lt;code class="short"&gt;&lt;b class="Kw"&gt;var&lt;/b&gt; op = { ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="qs"&gt;'blogURL'&lt;/b&gt;:&lt;b class="qs"&gt;''&lt;/b&gt;&lt;br /&gt;};&lt;br /&gt;op = $.extend({}, op, userOp);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;2- Check if user didn't specify a container selector then it create placeholder div by document.write to place it where script was called&lt;br /&gt;&lt;code class="short"&gt;&lt;b class="Kw"&gt;if&lt;/b&gt; (!op.containerSelector) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.write(&lt;b class="qs"&gt;'&amp;lt;div id="related-posts" /&amp;gt;'&lt;/b&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;op.containerSelector = &lt;b class="qs"&gt;'#related-posts'&lt;/b&gt;;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;3- Attach initialization function to on window-load event or on document-ready&lt;br /&gt;&lt;code class="short"&gt;&lt;b class="Kw"&gt;if&lt;/b&gt;(op.onLoad) $(window).load(initRelatedPosts);&lt;br /&gt;&lt;b class="Kw"&gt;else&lt;/b&gt; $(document).ready(initRelatedPosts);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;4- 'initRelatedPosts' is called on window-load or on document-ready and checks if user specified a container selector to append placeholder div to it.&lt;br /&gt;&lt;code&gt;&lt;b class="Kw"&gt;if&lt;/b&gt;(op.containerSelector != &lt;b class="qs"&gt;'#related-posts'&lt;/b&gt;){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; container = $(op.containerSelector);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt; (container.length!=1) &lt;b class="Kw"&gt;return&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;div = $(&lt;b class="qs"&gt;'&amp;lt;div id="related-posts"/&amp;gt;'&lt;/b&gt;).appendTo(container);&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;5- Find tags anchors in the body of current post if it wasn't preset by user. by selecting all links with attribute rel='tag'.&lt;br /&gt;&lt;code class="short"&gt;op.tags = [];&lt;br /&gt;$('a[rel="tag"]:lt(&lt;b class="qs"&gt;'+op.maxTags+'&lt;/b&gt;)').each(&lt;b class="Kw"&gt;function&lt;/b&gt; () {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; tag= $.trim($(&lt;b class="Kw"&gt;this&lt;/b&gt;).text().replace(/\n/g,&lt;b class="qs"&gt;''&lt;/b&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt;($.inArray(tag,op.tags)==-1) op.tags[op.tags.length]=tag;&lt;br /&gt;})&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;6- Append Recent Posts title or Related Posts title in H2 element.&lt;br /&gt;7- Appned Loading text if any.&lt;br /&gt;8- Append ul with CSS class of loading if user provided one.&lt;br /&gt;9- Get JSON feeds for recent posts &lt;br /&gt;&lt;code class="short"&gt;$.ajax({url:op.blogURL+&lt;b class="qs"&gt;'/feeds/posts/summary/'&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,data:{&lt;b class="qs"&gt;'max-results'&lt;/b&gt;:op.maxPostsPerTag,&lt;b class="qs"&gt;'alt'&lt;/b&gt;:&lt;b class="qs"&gt;'json-&lt;b class="Kw"&gt;in&lt;/b&gt;-script'&lt;/b&gt;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,success:tagLoaded&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,dataType:&lt;b class="qs"&gt;'jsonp'&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,cache:&lt;b class="Kw"&gt;true&lt;/b&gt; })&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;10- Or get JSON feeds for each tag. you can notice that it calls the summary feeds cause we don't need waste bandwidth on getting full feeds since all is needed is post title and URL.&lt;br /&gt;Query string contains variables like: Category=Tag, max-results=maxPostsPerTag. for more info on available parameters check &lt;a href="http://code.google.com/apis/gdata/docs/2.0/reference.html#Queries"&gt;protocol reference&lt;/a&gt;.&lt;br /&gt;&lt;code&gt;&lt;b class="Kw"&gt;for&lt;/b&gt;(&lt;b class="Kw"&gt;var&lt;/b&gt; t=0; t&amp;lt;op.tags.length;t++) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;$.ajax({url:op.blogURL+&lt;b class="qs"&gt;'/feeds/posts/summary/'&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,data:{&lt;b class="qs"&gt;'category'&lt;/b&gt;:op.tags[t],&lt;b class="qs"&gt;'max-results'&lt;/b&gt;:op.maxPostsPerTag,&lt;b class="qs"&gt;'alt'&lt;/b&gt;:&lt;b class="qs"&gt;'json-&lt;b class="Kw"&gt;in&lt;/b&gt;-script'&lt;/b&gt;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,success:tagLoaded&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,dataType:&lt;b class="qs"&gt;'jsonp'&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,cache:&lt;b class="Kw"&gt;true&lt;/b&gt; })&lt;/code&gt;&lt;br /&gt;After reading the reference you may ask yourself; we could pass all tags with 'or' and return all related posts one shot. But Blogger doesn't support this yet ): although it is in the API protocol reference! So I have to aggregate each tag feed and calculate score of each post based on number of common tags.&lt;br /&gt;&lt;br /&gt;11- 'tagLoaded' function is called on load of every JSON feed. Then it loops entries to add links to the list by calling addPost function.&lt;br /&gt;&lt;code&gt;&lt;b class="Kw"&gt;for&lt;/b&gt; (&lt;b class="Kw"&gt;var&lt;/b&gt; i=0; i&amp;lt;json.feed.entry.length; i++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; entry = json.feed.entry[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; url=&lt;b class="qs"&gt;''&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;for&lt;/b&gt; (&lt;b class="Kw"&gt;var&lt;/b&gt; k=0; k&amp;lt;entry.link.length; k++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt;(entry.link[k].rel==&lt;b class="qs"&gt;'alternate'&lt;/b&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;url = entry.link[k].href;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;break&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; title = entry.title.$t;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt;(location.href.toLowerCase()!= url.toLowerCase()) addPost(url,title);&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;and when all tags are loaded it remove loading text and loading class on ul.&lt;br /&gt;&lt;br /&gt;12- 'addPost' function loops links list to find if link doesn't exist to add it. otherwise if link was found in some position:&lt;br /&gt;- first increments link's score; Score is saved in an arbitrary attribute 'score' on each link.&lt;br /&gt;- Loop links above it and compare their scores. so if the above links have lower score then current link is inserted before them.&lt;br /&gt;&lt;code&gt;&lt;b class="Kw"&gt;var&lt;/b&gt; list = $(&lt;b class="qs"&gt;'li'&lt;/b&gt;,ul);&lt;br /&gt;&lt;b class="Kw"&gt;for&lt;/b&gt;(&lt;b class="Kw"&gt;var&lt;/b&gt; i=0; i&amp;lt;list.length; i++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; a= $(&lt;b class="qs"&gt;'a'&lt;/b&gt;, list.eq(i) );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; sc = getScore(a);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//Post exists ?&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt;(a.attr(&lt;b class="qs"&gt;'href'&lt;/b&gt;)==url) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//Yes : Then increment score&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setScore(a,++sc);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//Re-order : compare &lt;b class="Kw"&gt;with&lt;/b&gt; prevoius li items&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;for&lt;/b&gt;(&lt;b class="Kw"&gt;var&lt;/b&gt; j=i-1; j&amp;gt;=0; j--){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// find the item &lt;b class="Kw"&gt;with&lt;/b&gt; higher score than current&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; jA= $(&lt;b class="qs"&gt;'a'&lt;/b&gt;, list.eq(j) );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt; (getScore(jA)&amp;gt;sc) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// re-order &lt;b class="Kw"&gt;if&lt;/b&gt; only there are items &lt;b class="Kw"&gt;in&lt;/b&gt; the middle to appear before&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt;(i-j&amp;gt;1) list.eq(j).after(list.eq(i));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;return&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// &lt;b class="Kw"&gt;If&lt;/b&gt; no higher item then &lt;b class="Kw"&gt;this&lt;/b&gt; one should go first&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt;(i&amp;gt;0) list.eq(0).before(list.eq(i));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;return&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;b class="Cm"&gt;//Add &lt;b class="Kw"&gt;new&lt;/b&gt; post&lt;/b&gt;&lt;br /&gt;ul.append(&lt;b class="qs"&gt;'&amp;lt;li&amp;gt;&amp;lt;a href="'&lt;/b&gt;+url+&lt;b class="qs"&gt;'" title="'&lt;/b&gt;+(op.relevantTip? op.relevantTip.replace(&lt;b class="qs"&gt;'\d'&lt;/b&gt;,1):&lt;b class="qs"&gt;''&lt;/b&gt;)+&lt;b class="qs"&gt;'"&amp;gt;'&lt;/b&gt;+title+&lt;b class="qs"&gt;'&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;'&lt;/b&gt;);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;13- getScore function is used to get score from the arbitrary attribute 'score' on a link.&lt;br /&gt;14- setScore function is used to set score on a link. also sets relevancy tip if required, for example '5 relevant tags!'.&lt;br /&gt;And set link class based on relevancy if required to, for example 'related-post5'.&lt;br /&gt;&lt;br /&gt;that's it. Hope that article was helpful for you on working with jQuery manipulation and aggregation of Blogger JSON feeds.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-4219991929236144030?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mGL1Cn0rbLSMTNjLC-2GgFNIPN4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mGL1Cn0rbLSMTNjLC-2GgFNIPN4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mGL1Cn0rbLSMTNjLC-2GgFNIPN4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mGL1Cn0rbLSMTNjLC-2GgFNIPN4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=M-QqqdAaQkM:FqaEIc5XRe0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=M-QqqdAaQkM:FqaEIc5XRe0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=M-QqqdAaQkM:FqaEIc5XRe0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=M-QqqdAaQkM:FqaEIc5XRe0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=M-QqqdAaQkM:FqaEIc5XRe0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=M-QqqdAaQkM:FqaEIc5XRe0:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=M-QqqdAaQkM:FqaEIc5XRe0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=M-QqqdAaQkM:FqaEIc5XRe0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/M-QqqdAaQkM" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2009/04/code-behind-smarter-related-posts.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/4219991929236144030?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/4219991929236144030?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/M-QqqdAaQkM/code-behind-smarter-related-posts.html" title="Code behind : A Smarter Related Posts widget for Blogger" /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_3JiqFA24tHU/SdepmnomG_I/AAAAAAAAAU8/1ZVQzhmrLmM/s72-c/gdata-blogger-icon.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total><feedburner:origLink>http://www.moretechtips.net/2009/04/code-behind-smarter-related-posts.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEDR345fyp7ImA9WxNRFUk.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-5117765131156248456</id><published>2009-04-04T17:11:00.014Z</published><updated>2009-09-10T02:11:16.027Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-10T02:11:16.027Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="Blogger/Blogspot" /><category scheme="http://www.blogger.com/atom/ns#" term="RESTful" /><category scheme="http://www.blogger.com/atom/ns#" term="JSON" /><category scheme="http://www.blogger.com/atom/ns#" term="AJAX" /><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>jQuery + GData API = A Smarter Related Posts widget for Blogger</title><content type="html">&lt;img style="margin: 0pt 0pt 10px 10px; float: right; width: 250px; height: 250px;" src="http://2.bp.blogspot.com/_3JiqFA24tHU/SdepmnomG_I/AAAAAAAAAU8/1ZVQzhmrLmM/s400/gdata-blogger-icon.png" alt="Blogger Data API" id="BLOGGER_PHOTO_ID_5320907965700905970" /&gt;Displaying a related posts is a smart way for keeping your site visitors around. and you may have seen other Related Posts Widgets out there.. but this one will be Easier and Smarter.&lt;br /&gt;&lt;br /&gt;check features list:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Easier &lt;/strong&gt;: since All of the work is(has to be) done on the client side, You will not need to modify your template at all. widget will read post tags that blogger already display with each post.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Smarter &lt;/strong&gt;: Cause This widget will list the top related 5(or more) posts &lt;strong&gt;sorted by relevancy!&lt;/strong&gt;&lt;br /&gt;Top relevant posts are the posts that have more tags in common with the current post.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;More Optimized&lt;/strong&gt;: Will only use summary feeds instead of querying default feeds that return full contents!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;This widget also can work as a recent posts widget when there is no tags to aggregate.&lt;/li&gt;&lt;li&gt;Can be also used to get related posts from another blogspot blog. And in that case you don't have to run it on a blogspot!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A fixed list of tags can be used to aggregate.&lt;/li&gt;&lt;li&gt;It can display loading text or icon until widget is loaded.&lt;/li&gt;&lt;li&gt;Related posts list can be styled based on relevancy!&lt;/li&gt;&lt;li&gt;You can specify either to load widget on document ready or on window load.&lt;/li&gt;&lt;li&gt;Widget will be attached to container specified or it will be placed where you made the JavaScript call.&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;To see the widget in action&lt;/strong&gt;, Scroll down to the end of this post.  also hover on links to see relevancy tip.&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="post-more"&gt;&lt;strong&gt;This is the complete options table &lt;/strong&gt;&lt;br /&gt;Every variable is optional. exclude it to have default value.&lt;br /&gt;&lt;br /&gt;&lt;table class="SmallTable" style="border-collapse: collapse;" border="1" cellpadding="2" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Option&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Default value&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;blogURL&lt;/td&gt;&lt;td&gt;Other Blog URL or leave empty to aggregate yours&lt;/td&gt;&lt;td&gt;&lt;strong&gt;''&lt;/strong&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;maxTags&lt;/td&gt;&lt;td&gt;max tags to look for on the page&lt;/td&gt;&lt;td&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;maxPostsPerTag&lt;/td&gt;&lt;td&gt;max posts to be aggregated per tag&lt;/td&gt;&lt;td style="font-weight: bold;"&gt;5&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;maxPosts&lt;/td&gt;&lt;td&gt;Specify a max. to remove extra posts that are least relevant or set to &lt;strong&gt;0&lt;/strong&gt; to keep them.&lt;/td&gt;&lt;td style="font-weight: bold;"&gt;5&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;containerSelector&lt;/td&gt;&lt;td&gt;jQuery Selector to find a container to append widget at the end of it, Use &lt;strong&gt;'div.post-body'&lt;/strong&gt; to have widget appended at the end of your post body. or leave empty so widget is placed where you called it&lt;/td&gt;&lt;td style="font-weight: bold;"&gt;''&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;tags&lt;/td&gt;&lt;td&gt;don't specify any and tags are read from page content. or specify a fixed list to aggregate like &lt;strong&gt;['jQuery','JSON']&lt;/strong&gt;. also setting it to empty array&lt;strong&gt; [] &lt;/strong&gt; will make it work as recent widget all the time.&lt;/td&gt;&lt;td&gt;&lt;strong&gt;null &lt;/strong&gt;means not fixed&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt; &lt;td&gt;loadingText&lt;/td&gt;&lt;td&gt;Text to be displayed until widget is loaded. for example &lt;strong&gt;'loading..'&lt;/strong&gt; &lt;/td&gt;&lt;td&gt;&lt;strong&gt;''&lt;/strong&gt; means no loading text&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt; &lt;td&gt;loadingClass&lt;/td&gt;&lt;td&gt;CSS class will be set on list until widget is loaded which you can use to style the list with an AJAX icon on the background[&lt;a href="http://www.ajaxload.info"&gt;ajaxload.info&lt;/a&gt;]. for example &lt;strong&gt;'related-posts-loading'&lt;/strong&gt; &lt;/td&gt;&lt;td&gt;&lt;strong&gt;''&lt;/strong&gt; means no CSS class&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;relatedTitle&lt;/td&gt;&lt;td&gt;H2 Title to be used for related posts widget. To disable title output set this to empty.&lt;/td&gt;&lt;td&gt;&lt;strong&gt;'Related Posts&lt;/strong&gt;'&lt;/td&gt; &lt;/tr&gt;  &lt;tr&gt; &lt;td&gt;recentTitle&lt;/td&gt;&lt;td&gt;H2 Title to be used for recent posts widget when there are no tags on the page. Set this to empty and widget is canceled.&lt;/td&gt;&lt;td style="font-weight: bold;"&gt;'Recent Posts'&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;postScoreClass&lt;/td&gt;&lt;td&gt;A CSS class prefix to be used to style posts based on relevancy. If you set to&lt;strong&gt; 'related-link'&lt;/strong&gt; and maxTags=&lt;strong&gt;5&lt;/strong&gt; then related links can have classes like ('related-link1' to 'related-link5')&lt;/td&gt;&lt;td&gt;&lt;strong&gt;''&lt;/strong&gt; so feature is disabled&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td&gt;onLoad&lt;/td&gt;&lt;td&gt;&lt;strong&gt;true&lt;/strong&gt; would insert widget on window load and after all page content(like images) is loaded. or &lt;strong&gt;false&lt;/strong&gt; and widget is loaded after document is ready(before images)&lt;/td&gt;&lt;td style="font-weight: bold;"&gt;false&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td&gt;relevantTip&lt;/td&gt;&lt;td&gt;For demo purpose you can show each post relevancy as a tool tip. set to &lt;strong&gt;'\d relevant tags!'&lt;/strong&gt; and '\d' is replaced with number of tags in common.&lt;/td&gt;&lt;td style="font-weight: bold;"&gt;''&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;If you want to &lt;span style="font-weight:bold;color:#003366"&gt;understand code behind&lt;/span&gt; this widget, check [&lt;a href="http://www.moretechtips.net/2009/04/code-behind-smarter-related-posts.html"&gt;Code behind : A Smarter Related Posts widget for Blogger&lt;/a&gt;].&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Typical Usage #1&lt;/strong&gt;&lt;br /&gt;To display related links at the end of every post. copy this code into a new HTML/Javascript widget and place at the bottom of the post or at the footer in the page elements section.&lt;br /&gt;Widget uses jQuery v1.3.2, If you already included jQuery into your blog. no need to do it again.&lt;br /&gt;&lt;code&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; src=&lt;b class="qs"&gt;"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; src=&lt;b class="qs"&gt;"http://blogger-related-posts.googlecode.com/files/related-posts-widget-1.0.js"&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt;&amp;gt;&lt;br /&gt;relatedPostsWidget({&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="qs"&gt;'containerSelector'&lt;/b&gt;:&lt;b class="qs"&gt;'div.post-body'&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&lt;b class="qs"&gt;'loadingText'&lt;/b&gt;:&lt;b class="qs"&gt;'loading...'&lt;/b&gt;&lt;br /&gt;});&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;/code&gt;&lt;br /&gt;[containerSelector : 'div.post-body'] is the default container selector of your post body as output by blogger. which means find 'div' tag with class="post-body" if you unlikely modified it; find your new selector.&lt;br /&gt;&lt;span style="font-weight:bold;color:maroon"&gt;* Note that&lt;/span&gt;:&lt;br /&gt;- &lt;strike&gt;you should host widget javascript file on your own&lt;/strike&gt;, Google code has no problem hosting the project javascript files. &lt;br /&gt;- You may also try Fileden as it is only file hosting I know that would give you a direct-link (&lt;span style="font-weight:bold;"&gt;A Must&lt;/span&gt; for javascript to work) &lt;strike&gt;or you can just upload it to your Google pages&lt;/strike&gt;(phasing out).&lt;br /&gt;But keep the jQuery URL as is, since Google hosts jQuery(and others) very very well. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Typical Usage #2&lt;/strong&gt;&lt;br /&gt;To show related links at the side column. copy this code into a new HTML/Javascript widget and place at the side in the page elements section.&lt;br /&gt;Again, If you already included jQuery into your blog. no need to do it again.&lt;br /&gt;&lt;code&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; src=&lt;b class="qs"&gt;"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; src=&lt;b class="qs"&gt;"http://blogger-related-posts.googlecode.com/files/related-posts-widget-1.0.js"&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt;&amp;gt;&lt;br /&gt;relatedPostsWidget({&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="qs"&gt;'loadingText'&lt;/b&gt;:&lt;b class="qs"&gt;'loading...'&lt;/b&gt;&lt;br /&gt;});&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Style Widget with CSS&lt;/strong&gt;&lt;br /&gt;You wouldn't need any CSS unless you need extra customization.&lt;br /&gt;&lt;code&gt;&amp;lt;style type=&lt;b class="qs"&gt;"&lt;b class="Kw"&gt;text&lt;/b&gt;/css"&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* Widget Div */&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;#related-posts{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* Add your styles */&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* Widget H2 heading */&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;#related-posts h2{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* Add your styles */&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* Widget UL list */&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;#related-posts ul{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* Add your styles */&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* Widget loading &lt;b class="Kw"&gt;text&lt;/b&gt; */&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;#related-posts-loadingtext{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;color&lt;/b&gt;:green;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* Widget loading class set on UL until it is loaded */&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* you will need set the option: &lt;b class="qs"&gt;'loadingClass'&lt;/b&gt;:&lt;b class="qs"&gt;'related-posts-loading'&lt;/b&gt; */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.related-posts-loading {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* Ajax Icon as &lt;b class="Kw"&gt;background&lt;/b&gt; */&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;background&lt;/b&gt;:transparent url(Load.gif) no-repeat &lt;b class="Kw"&gt;right&lt;/b&gt; &lt;b class="Kw"&gt;top&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* Style links based on relevacny */&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* you will need set the option: &lt;b class="qs"&gt;'postScoreClass'&lt;/b&gt;:&lt;b class="qs"&gt;'related-post'&lt;/b&gt; */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.related-post1{ &lt;b class="Kw"&gt;font&lt;/b&gt;-&lt;b class="Kw"&gt;size&lt;/b&gt;:90%}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.related-post2{ &lt;b class="Kw"&gt;font&lt;/b&gt;-&lt;b class="Kw"&gt;size&lt;/b&gt;:90%}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.related-post3{ &lt;b class="Kw"&gt;font&lt;/b&gt;-&lt;b class="Kw"&gt;size&lt;/b&gt;:100%}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.related-post4{ &lt;b class="Kw"&gt;font&lt;/b&gt;-&lt;b class="Kw"&gt;size&lt;/b&gt;:110%}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.related-post5{ &lt;b class="Kw"&gt;font&lt;/b&gt;-&lt;b class="Kw"&gt;size&lt;/b&gt;:120%}&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Check &lt;a href="http://code.google.com/p/blogger-related-posts"&gt;Project page&lt;/a&gt; for more information.. to follow project changes or request features or submit bugs.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-5117765131156248456?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/B8y8ZDaJvcc637elKgOeIA3J2TU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/B8y8ZDaJvcc637elKgOeIA3J2TU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/B8y8ZDaJvcc637elKgOeIA3J2TU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/B8y8ZDaJvcc637elKgOeIA3J2TU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=p4iTdeXODKc:NGd9uViHflU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=p4iTdeXODKc:NGd9uViHflU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=p4iTdeXODKc:NGd9uViHflU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=p4iTdeXODKc:NGd9uViHflU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=p4iTdeXODKc:NGd9uViHflU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=p4iTdeXODKc:NGd9uViHflU:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=p4iTdeXODKc:NGd9uViHflU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=p4iTdeXODKc:NGd9uViHflU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/p4iTdeXODKc" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2009/04/jquery-gdata-api-smarter-related-posts.html#comment-form" title="35 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/5117765131156248456?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/5117765131156248456?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/p4iTdeXODKc/jquery-gdata-api-smarter-related-posts.html" title="jQuery + GData API = A Smarter Related Posts widget for Blogger" /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_3JiqFA24tHU/SdepmnomG_I/AAAAAAAAAU8/1ZVQzhmrLmM/s72-c/gdata-blogger-icon.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">35</thr:total><feedburner:origLink>http://www.moretechtips.net/2009/04/jquery-gdata-api-smarter-related-posts.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UDR3s9fSp7ImA9WxNUEE4.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-761955599719233992</id><published>2009-03-28T20:16:00.021Z</published><updated>2009-10-31T23:21:16.565Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-31T23:21:16.565Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="Social Bookmarking" /><category scheme="http://www.blogger.com/atom/ns#" term="Web 2.0" /><title>Standardizing Social Bookmarking Widgets</title><content type="html">This is a second post about Social bookmarking widgets.. Where I provide a better way to integrate them in your pages and also asking for your feedback on my proposed standardization specifications :)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Scroll down&lt;/b&gt; to the end of this post to see widgets in action..&lt;br /&gt;
&lt;br /&gt;
After I posted the previous [&lt;a href="http://www.moretechtips.net/2009/03/create-uniform-social-bookmarking.html" target="_blank"&gt;Creating Uniform Social Bookmarking Widgets&lt;/a&gt;], I faced some issues that are worth mentioning and polling too.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div class="post-more"&gt;a) &lt;span style="font-weight: bold;"&gt;First&lt;/span&gt;, you should know how some of those social widgets work using &lt;span style="font-weight: bold;"&gt;Iframes&lt;/span&gt; [Digg, Dzone, Reddit, Retweet]:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;You paste some JavaScript variables and include a remote JavaScript file.&lt;/li&gt;
&lt;li&gt;Browser loads that remote JavaScript file and run it.&lt;/li&gt;
&lt;li&gt;JavaScript file creates an Iframe that opens a remote web page inside it.&lt;/li&gt;
&lt;li&gt;That web page may load other HTML/JavaScript/CSS/Images to build the widget for you.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;Sounds creepy&lt;/span&gt;, right? So, As a Solution/hack I'll skip the first 2 steps and creates those Iframes with this simple function or you can easily do it on server-side.&lt;br /&gt;
&lt;br /&gt;
b) The remote JavaScript file, create the Iframe by &lt;span style="font-weight: bold;"&gt;document.write&lt;/span&gt; which is not the best thing to do. and on my previous post I also used document.write to create their HTML/Java script code. And that was ok for Firefox and Chrome but it caused troubles to IE &amp;amp; Opera known as &lt;span style="font-weight: bold;"&gt;delayed JavaScript execution&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
c) Another thing worth mention is that &lt;a href="http://www.propeller.com/help/api/widgets/" target="_blank"&gt;Propeller widget code&lt;/a&gt; is based on DOM manipulation. You place a HTML link to your URL that get manipulated by the remote JavaScript file to load another JavaScript &amp;amp; CSS file(s) and append some Div's &amp;amp; Form elements to build the widget. The good thing about this is: it gives you control on styling the widget as opposed to the Iframes method which you can't style HTML inside it.&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;So Iframe or JavaScript DOM manipulation?&lt;/span&gt;.. A Good way to answer that is to do a poll.. and as expected the crowd wisdom is correct, here are people votes:&lt;br /&gt;
&lt;b&gt;26 (66%)&lt;/b&gt; Yes, as Javascript &lt;br /&gt;
&lt;b&gt;07 (17%)&lt;/b&gt; I don't care!&lt;br /&gt;
&lt;b&gt;03 (07%)&lt;/b&gt; Yes, as Iframes &lt;br /&gt;
&lt;b&gt;03 (07%)&lt;/b&gt; Should stay as it is&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The Question that this is all about:&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-style: italic;"&gt;Should Social Bookmarking come up with a standard for widgets that comply with some kind of rules like the following or it is not worth mentioning&lt;/span&gt; ?&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;a) &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Specs of &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Iframes method (Digg,Dzone,Reddit,Retweet):&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Defined set of Sizes should be provided like 'Tall' and 'Wide' and should be easily customized [colors,borders,..] with the ability to work without images.&lt;/li&gt;
&lt;li&gt;Should Provide Iframe code instead of having extra round trips to load a remote JavaScript that isn't really needed.&lt;/li&gt;
&lt;li&gt;Parameters will be passed as query string without the need of any other JavaScript variables.&lt;/li&gt;
&lt;li&gt;Widget should be smart enough to allow you to bookmark when the link is new or vote otherwise.&lt;/li&gt;
&lt;li&gt;Optimize browser connections. why using many JS/CSS files inside the Iframe?&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;If it had to be JS, Then JS should...&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;b) &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Specs of &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;JavaScript DOM manipulation method (Propeller)&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;No use of document.write (Yahoo Buzz : out of the game)&lt;/li&gt;
&lt;li&gt;Can be included at the end of the document or at the head . Then it appends its content to some container referred by some selector.&lt;/li&gt;
&lt;li&gt;Parameters could be passed as JavaScript variables or as query string.&lt;/li&gt;
&lt;li&gt;Content elements should be defined with classes so we can style it.&lt;/li&gt;
&lt;li&gt;They all use some JS library. Then they should make different versions that work with the most popular ones. So If it is jQuery library, you would include jQuery once in document head. &lt;span style="font-weight: bold;"&gt;fortunately &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Propeller&lt;/span&gt; doesn't load jQuery again if it is already included in you page.&lt;/li&gt;
&lt;li&gt;One JS file only. No need to load other JS/CSS&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;Here is the &lt;span style="font-weight: bold;"&gt;JavaScript function&lt;/span&gt; that will display the widgets of both methods.&lt;br /&gt;
Widgets of method #1 are added as Iframes.&lt;br /&gt;
For widgets of method #2 : some HTML is added and optional variables are set, then an external JavaScript file is loaded dynamically.&lt;br /&gt;
&lt;code&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;function&lt;/b&gt; standardSocialWidgets() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; Place = document.getElementById("SocialWidgetsPlace");&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt;(!Place) &lt;b class="Kw"&gt;return&lt;/b&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; title = document.title;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; titleE = encodeURIComponent(title);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; url = location.href;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; urlE = encodeURIComponent(url);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Social widgets : you can re order it or remove some, but watch for comma */&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* HTML : is html to be appended to div, Vars are widget JS variables, Js : widget remote JS to load  */&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; widgets = [&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;b class="qs"&gt;'name'&lt;/b&gt;:&lt;b class="qs"&gt;'Dzone'&lt;/b&gt;,&lt;b class="qs"&gt;'html'&lt;/b&gt;:&lt;b class="qs"&gt;'&amp;lt;iframe src="http://widgets.dzone.com/links/widgets/zoneit.html?t=1&amp;amp;url='&lt;/b&gt;+urlE+&lt;b class="qs"&gt;'&amp;amp;title='&lt;/b&gt;+titleE+&lt;b class="qs"&gt;'" scrolling="no" frameborder="0"&amp;gt;&amp;lt;/iframe&amp;gt;'&lt;/b&gt;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,{&lt;b class="qs"&gt;'name'&lt;/b&gt;:&lt;b class="qs"&gt;'Reddit'&lt;/b&gt;,&lt;b class="qs"&gt;'html'&lt;/b&gt;:&lt;b class="qs"&gt;'&amp;lt;iframe src="http://www.reddit.com/button_content?t=2&amp;amp;width=52&amp;amp;url='&lt;/b&gt;+urlE+&lt;b class="qs"&gt;'&amp;amp;title='&lt;/b&gt;+titleE+&lt;b class="qs"&gt;'&amp;amp;bgcolor=FFF&amp;amp;newwindow=1" scrolling="no" frameborder="0"&amp;gt;&amp;lt;/iframe&amp;gt;'&lt;/b&gt;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,{&lt;b class="qs"&gt;'name'&lt;/b&gt;:&lt;b class="qs"&gt;'Digg'&lt;/b&gt;,&lt;b class="qs"&gt;'html'&lt;/b&gt;:&lt;b class="qs"&gt;'&amp;lt;iframe src="http://digg.com/tools/diggthis.php?u='&lt;/b&gt;+urlE+&lt;b class="qs"&gt;'&amp;amp;t='&lt;/b&gt;+titleE+&lt;b class="qs"&gt;'&amp;amp;w=&lt;b class="Kw"&gt;new&lt;/b&gt;&amp;amp;k=%23ffffff" scrolling="no" frameborder="0"&amp;gt;&amp;lt;/iframe&amp;gt;'&lt;/b&gt;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,{&lt;b class="qs"&gt;'name'&lt;/b&gt;:&lt;b class="qs"&gt;'Retweet'&lt;/b&gt;,&lt;b class="qs"&gt;'html'&lt;/b&gt;:&lt;b class="qs"&gt;'&amp;lt;iframe src="http://api.tweetmeme.com/widget.js?url='&lt;/b&gt;+urlE+&lt;b class="qs"&gt;'&amp;amp;style=normal" scrolling="no" frameborder="0"&amp;gt;&amp;lt;/iframe&amp;gt;'&lt;/b&gt;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,{&lt;b class="qs"&gt;'name'&lt;/b&gt;:&lt;b class="qs"&gt;'Propeller'&lt;/b&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  &lt;b class="qs"&gt;'html'&lt;/b&gt;:&lt;b class="qs"&gt;'&amp;lt;a &lt;b class="Kw"&gt;class&lt;/b&gt;="propeller-story" title="'&lt;/b&gt;+title+&lt;b class="qs"&gt;'" href="'&lt;/b&gt;+url+&lt;b class="qs"&gt;'"&amp;gt;'&lt;/b&gt;+title+&lt;b class="qs"&gt;'&amp;lt;/a&amp;gt;'&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  ,&lt;b class="qs"&gt;'vars'&lt;/b&gt;: {&lt;b class="qs"&gt;'propellerVoteWidgetFormat'&lt;/b&gt;:&lt;b class="qs"&gt;'medium'&lt;/b&gt;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  ,&lt;b class="qs"&gt;'js'&lt;/b&gt;:&lt;b class="qs"&gt;'http://propeller.com/public/js/vote.js'&lt;/b&gt;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;for&lt;/b&gt;(&lt;b class="Kw"&gt;var&lt;/b&gt; i=0; i&amp;lt;widgets.length; i++) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; clss = &lt;b class="qs"&gt;'SocialWidget'&lt;/b&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt;(i==0) clss = &lt;b class="qs"&gt;'FirstSocialWidget'&lt;/b&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;else&lt;/b&gt; &lt;b class="Kw"&gt;if&lt;/b&gt;(i==widgets.length-1) clss = &lt;b class="qs"&gt;'LastSocialWidget'&lt;/b&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// Append HTML&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Place.innerHTML=Place.innerHTML + &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="qs"&gt;'&amp;lt;div &lt;b class="Kw"&gt;class&lt;/b&gt;="'&lt;/b&gt;+widgets[i].name+&lt;b class="qs"&gt;'Widget '&lt;/b&gt;+clss+&lt;b class="qs"&gt;'"&amp;gt;'&lt;/b&gt;+ widgets[i].html +&lt;b class="qs"&gt;'&amp;lt;/div&amp;gt;'&lt;/b&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// Set optional Vars &lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt;(widgets[i].vars) &lt;b class="Kw"&gt;for&lt;/b&gt;(k &lt;b class="Kw"&gt;in&lt;/b&gt; widgets[i].vars) window[k]=widgets[i].vars[k];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// load optional Js file and attach to head &lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt;(widgets[i].js) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; head = document.getElementsByTagName("head")[0];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; js = document.createElement("script");&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;js.src = widgets[i].js;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;head.appendChild(js);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// Call &amp;gt;function on load , so it would load last &lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;window.onload = &lt;b class="Kw"&gt;function&lt;/b&gt;(){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;standardSocialWidgets();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// Or!! Call function on document ready if you using jQuery ,Who does not ?&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;$(document).ready(&lt;b class="Kw"&gt;function&lt;/b&gt;(){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;standardSocialWidgets();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;})&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;br /&gt;
This time I tested it on FF3.0.7, IE 7.0 and Chrome 0.4&lt;br /&gt;
&lt;br /&gt;
And CSS to style widgets&lt;br /&gt;
&lt;code&gt;&amp;lt;style type=&lt;b class="qs"&gt;"&lt;b class="Kw"&gt;text&lt;/b&gt;/css"&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* Style widgets place holder */&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;#SocialWidgetsPlace{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;margin&lt;/b&gt;:0 auto 0 auto;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;width&lt;/b&gt;:350px;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* Style Iframes */&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;#SocialWidgetsPlace iframe{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;width&lt;/b&gt;:52px;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;height&lt;/b&gt;:80px;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;overflow&lt;/b&gt;:hidden;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* Style widgets */&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.SocialWidget,.FirstSocialWidget,.LastSocialWidget{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;margin&lt;/b&gt;:0; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;padding&lt;/b&gt;:2px; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;float&lt;/b&gt;:&lt;b class="Kw"&gt;left&lt;/b&gt;; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;background&lt;/b&gt;-&lt;b class="Kw"&gt;color&lt;/b&gt;:white; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;width&lt;/b&gt;:56px; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;height&lt;/b&gt;:84px;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;border&lt;/b&gt;-&lt;b class="Kw"&gt;top&lt;/b&gt;:silver 1px solid; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;border&lt;/b&gt;-&lt;b class="Kw"&gt;bottom&lt;/b&gt;:gray 2px outset; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;border&lt;/b&gt;-&lt;b class="Kw"&gt;right&lt;/b&gt;:silver 1px dotted;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;text&lt;/b&gt;-&lt;b class="Kw"&gt;align&lt;/b&gt;:center; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;overflow&lt;/b&gt;:hidden;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.FirstSocialWidget{ &lt;b class="Kw"&gt;border&lt;/b&gt;-&lt;b class="Kw"&gt;left&lt;/b&gt;:silver 1px solid}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.LastSocialWidget{ &lt;b class="Kw"&gt;border&lt;/b&gt;-&lt;b class="Kw"&gt;right&lt;/b&gt;:silver 1px solid}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* Customize Propeller widget */&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.PropellerWidget .p-frame,.PropellerWidget form,.propeller-widget{ &lt;b class="Kw"&gt;width&lt;/b&gt;:52px !&lt;b class="Kw"&gt;important&lt;/b&gt;; &lt;b class="Kw"&gt;padding&lt;/b&gt;:0 !&lt;b class="Kw"&gt;important&lt;/b&gt;;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.PropellerWidget .p-header{ &lt;b class="Kw"&gt;display&lt;/b&gt;:none}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.PropellerWidget .p-action-vote{ &lt;b class="Kw"&gt;padding&lt;/b&gt;:1px !&lt;b class="Kw"&gt;important&lt;/b&gt;; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.DzoneWidget{}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.RedditWidget{}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.DiggWidget{}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.RetweetWidget{}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
And HTML of the place holder to be put where you want widgets to be inserted&lt;br /&gt;
&lt;code class="short"&gt;&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; id=&lt;b class="qs"&gt;'SocialWidgetsPlace'&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;b class="Cm"&gt;&amp;lt;!-- Clear Floating --&amp;gt;&lt;/b&gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; style=&lt;b class="qs"&gt;'clear:both'&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
That's it!&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/965058134986433841-761955599719233992?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/j4H8mEupk5DeZtinYrL0ioJCURg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/j4H8mEupk5DeZtinYrL0ioJCURg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/j4H8mEupk5DeZtinYrL0ioJCURg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/j4H8mEupk5DeZtinYrL0ioJCURg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=EDCclsV0qU8:HgyezLJZ9Do:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=EDCclsV0qU8:HgyezLJZ9Do:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=EDCclsV0qU8:HgyezLJZ9Do:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=EDCclsV0qU8:HgyezLJZ9Do:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=EDCclsV0qU8:HgyezLJZ9Do:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=EDCclsV0qU8:HgyezLJZ9Do:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=EDCclsV0qU8:HgyezLJZ9Do:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=EDCclsV0qU8:HgyezLJZ9Do:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/EDCclsV0qU8" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2009/03/standardizing-social-bookmarking.html#comment-form" title="15 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/761955599719233992?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/761955599719233992?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/EDCclsV0qU8/standardizing-social-bookmarking.html" title="Standardizing Social Bookmarking Widgets" /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">15</thr:total><feedburner:origLink>http://www.moretechtips.net/2009/03/standardizing-social-bookmarking.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQBRHsyeCp7ImA9WxNRF08.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-175229360838487366</id><published>2009-03-28T00:05:00.010Z</published><updated>2009-09-12T02:59:15.590Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-12T02:59:15.590Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="Social Bookmarking" /><category scheme="http://www.blogger.com/atom/ns#" term="Web 2.0" /><title>Create Uniform Social Bookmarking Widgets</title><content type="html">We all like social networks but no-network is perfect! each network gives us a different JavaScript code with different parameters to install a different looking widget on each article.. Now I need and will do something about it.&lt;br /&gt;
&lt;br /&gt;
To do something uniform: I'll have to pick one common style across those widgets.. The most popular style around is the 'Tall' one and it also looks like web 2.0.&lt;br /&gt;
&lt;p align="center"&gt;&lt;img style="width:367px;height:91px;" src="http://4.bp.blogspot.com/_3JiqFA24tHU/SdA55zGyhmI/AAAAAAAAAU0/RCTHYJTQXwI/s400/Social-Bookmarking-Widgets.jpg" border="0" title="this how [Uniform Social Bookmarking Widgets] would look like" id="BLOGGER_PHOTO_ID_5318814825058567778" /&gt;&lt;/p&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
I picked some social networks -like Dzone, Reddit, Digg, Propeller, Yahoo Buzz and Retweet- based on:&lt;br /&gt;
1- Has a 'Tall' widget&lt;br /&gt;
2- Popular&lt;br /&gt;
3- Smart enough to allow you to bookmark new links or vote on existing ones just by providing your URL not their permanent link.&lt;br /&gt;
&lt;br /&gt;
This script will take current page title and URL and create a list of those uniform widgets.&lt;br /&gt;
&lt;strong&gt;JavaScript&lt;/strong&gt; function to place at header or anywhere before calling it&lt;br /&gt;
&lt;code&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// Generate Social Widgets 27 Mar 2009&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;Author: Mike @ MoreTechTips.net&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;function&lt;/b&gt; generateSocialWidgets() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; title = document.title;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; url = location.href;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// Social widgets : you can re order    it or remove some, but watch for commas&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; widgets = [&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;b class="qs"&gt;'name'&lt;/b&gt;:&lt;b    class="qs"&gt;'Digg'&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,&lt;b class="qs"&gt;'js'&lt;/b&gt;:&lt;b    class="qs"&gt;'&amp;lt;script type="text/javascript"&amp;gt;'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'digg_url="'&lt;/b&gt;+url+&lt;b class="qs"&gt;'";'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'digg_title="'&lt;/b&gt;+title+&lt;b class="qs"&gt;'";'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'digg_bgcolor="#ffffff";'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'&amp;lt;\/script&amp;gt;'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'&amp;lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&amp;gt;&amp;lt;\/script&amp;gt;'&lt;/b&gt;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,{&lt;b class="qs"&gt;'name'&lt;/b&gt;:&lt;b    class="qs"&gt;'Dzone'&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,&lt;b class="qs"&gt;'js'&lt;/b&gt;:&lt;b class="qs"&gt;'&amp;lt;script type="text/javascript"&amp;gt;'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'&lt;b class="Kw"&gt;var&lt;/b&gt; dzone_url="'&lt;/b&gt;+url+&lt;b class="qs"&gt;'";'&lt;/b&gt;+&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'&lt;b class="Kw"&gt;var&lt;/b&gt; dzone_title="'&lt;/b&gt;+title+&lt;b class="qs"&gt;'";'&lt;/b&gt;+&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'&lt;b class="Kw"&gt;var&lt;/b&gt; dzone_style="1";'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'&amp;lt;\/script&amp;gt;'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'&amp;lt;script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"&amp;gt;&amp;lt;\/script&amp;gt;'&lt;/b&gt;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,{&lt;b class="qs"&gt;'name'&lt;/b&gt;:&lt;b    class="qs"&gt;'Propeller'&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,&lt;b class="qs"&gt;'js'&lt;/b&gt;:&lt;b    class="qs"&gt;'&amp;lt;a &lt;b class="Kw"&gt;class&lt;/b&gt;="propeller-story"'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;' title="'&lt;/b&gt;+title+&lt;b class="qs"&gt;'"'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;' href="'&lt;/b&gt;+url+&lt;b class="qs"&gt;'"&amp;gt;'&lt;/b&gt;+title+&lt;b class="qs"&gt;'&amp;lt;/a&amp;gt;'&lt;/b&gt;+&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'&amp;lt;script type="text/javascript"&amp;gt;'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'propellerVoteWidgetFormat="medium";'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'&amp;lt;\/script&amp;gt;'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'&amp;lt;script type="text/javascript" src="http://propeller.com/&lt;b class="Kw"&gt;public&lt;/b&gt;/js/vote.js"&amp;gt;&amp;lt;\/script&amp;gt;'&lt;/b&gt;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,{&lt;b class="qs"&gt;'name'&lt;/b&gt;:&lt;b    class="qs"&gt;'Reddit'&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,&lt;b class="qs"&gt;'js'&lt;/b&gt;:&lt;b    class="qs"&gt;'&amp;lt;script type="text/javascript"&amp;gt;'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'reddit_url="'&lt;/b&gt;+url+&lt;b class="qs"&gt;'";'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'reddit_title="'&lt;/b&gt;+title+&lt;b class="qs"&gt;'";'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'reddit_bgcolor="FFFBDC";'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'reddit_bordercolor="EAD5A1";'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'reddit_newwindow="1";'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'&amp;lt;\/script&amp;gt;'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'&amp;lt;script type="text/javascript" src="http://www.reddit.com/button.js?t=2"&amp;gt;&amp;lt;\/script&amp;gt;'&lt;/b&gt;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,{&lt;b class="qs"&gt;'name'&lt;/b&gt;:&lt;b    class="qs"&gt;'Yahoo'&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,&lt;b class="qs"&gt;'js'&lt;/b&gt;:&lt;b    class="qs"&gt;'&amp;lt;script type="text/javascript"&amp;gt;'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'yahooBuzzArticleHeadline="'&lt;/b&gt;+title+&lt;b class="qs"&gt;'";'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'yahooBuzzArticleId="'&lt;/b&gt;+url+&lt;b class="qs"&gt;'";'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'yahooBuzzArticleType="text";'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'&amp;lt;\/script&amp;gt;'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'&amp;lt;script type="text/javascript" src="http://d.yimg.com/ds/badge2.js"    badgetype="square"&amp;gt;&amp;lt;\/script&amp;gt;'&lt;/b&gt;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,{&lt;b class="qs"&gt;'name'&lt;/b&gt;:&lt;b    class="qs"&gt;'Retweet'&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,&lt;b class="qs"&gt;'js'&lt;/b&gt;:&lt;b    class="qs"&gt;'&amp;lt;script type="text/javascript"&amp;gt;'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'tweetmeme_url="'&lt;/b&gt;+url+&lt;b class="qs"&gt;'";'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'&amp;lt;\/script&amp;gt;'&lt;/b&gt; +&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b    class="qs"&gt;'&amp;lt;script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"&amp;gt;&amp;lt;\/script&amp;gt;'&lt;/b&gt;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;for&lt;/b&gt;(&lt;b class="Kw"&gt;var&lt;/b&gt;i=0; i&amp;lt;widgets.length; i++) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; clss= &lt;b class="qs"&gt;'SocialWidget'&lt;/b&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt;(i==0)clss = &lt;b class="qs"&gt;'FirstSocialWidget'&lt;/b&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;else&lt;/b&gt; &lt;b class="Kw"&gt;    if&lt;/b&gt;(i==widgets.length-1) clss = &lt;b class="qs"&gt;'LastSocialWidget'&lt;/b&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.write(&lt;b class="qs"&gt;'&amp;lt;div    &lt;b class="Kw"&gt;class&lt;/b&gt;="'&lt;/b&gt;+widgets[i].name+&lt;b class="qs"&gt;'Widget '&lt;/b&gt;+clss+&lt;b        class="qs"&gt;'"&amp;gt;'&lt;/b&gt;+widgets[i].js+&lt;b class="qs"&gt;'&amp;lt;/div&amp;gt;'&lt;/b&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;CSS&lt;/strong&gt; to style the created div's and widgets inside of it&lt;br /&gt;
&lt;code&gt;&amp;lt;style type=&lt;b class="qs"&gt;"&lt;b class="Kw"&gt;text&lt;/b&gt;/css"&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;#SocialWidgetsPlace {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;margin&lt;/b&gt;:0 auto 0 auto;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;width&lt;/b&gt;:350px&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.SocialWidget,.FirstSocialWidget,.LastSocialWidget{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;margin&lt;/b&gt;:0px;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;padding&lt;/b&gt;:1px;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;float&lt;/b&gt;:&lt;b class="Kw"&gt;left&lt;/b&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;background&lt;/b&gt;-&lt;b class="Kw"&gt;color&lt;/b&gt;:white;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;width&lt;/b&gt;:54px;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;height&lt;/b&gt;:82px;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;border&lt;/b&gt;-&lt;b class="Kw"&gt;top&lt;/b&gt;:silver 1px solid;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;border&lt;/b&gt;-&lt;b class="Kw"&gt;bottom&lt;/b&gt;:gray 2px outset;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;border&lt;/b&gt;-&lt;b class="Kw"&gt;right&lt;/b&gt;:silver 1px dotted;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;text&lt;/b&gt;-&lt;b class="Kw"&gt;align&lt;/b&gt;:center;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;overflow&lt;/b&gt;:hidden;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.FirstSocialWidget{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;border&lt;/b&gt;-&lt;b class="Kw"&gt;left&lt;/b&gt;:silver 1px solid;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.LastSocialWidget{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;border&lt;/b&gt;-&lt;b class="Kw"&gt;right&lt;/b&gt;:silver 1px solid;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.PropellerWidget .p-frame{ &lt;b class="Kw"&gt;width&lt;/b&gt;:52px}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.PropellerWidget .p-header{ &lt;b class="Kw"&gt;display&lt;/b&gt;:none}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.PropellerWidget .p-action-vote{ &lt;b class="Kw"&gt;padding&lt;/b&gt;:1px !&lt;b class="Kw"&gt;important&lt;/b&gt;; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.DzoneWidget{}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.RedditWidget{}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.DiggWidget{}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.RetweetWidget{}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.YahooWidget{}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/code&gt;&lt;br /&gt;
As you can see, you can give different styles for first &amp; last widgets or a certain network widget.&lt;br /&gt;
&lt;br /&gt;
Finally, place this &lt;strong&gt;JavaScript&lt;/strong&gt; function call where you would like to show the widgets&lt;br /&gt;
&lt;code class="short"&gt;&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; id=&lt;b class="qs"&gt;"SocialWidgetsPlace"&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;script&lt;/b&gt; type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;generateSocialWidgets()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;/script&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; style=&lt;b class="qs"&gt;'clear:both'&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Note that bookmarking-only buttons are still fine, To generate them like the ones I have on the right side. check [&lt;a target="_blank" href="http://www.moretechtips.net/2008/11/add-top-20-social-bookmarks-to-your.html"&gt;Add Top 20 Social Bookmarks To Your Page &lt;/a&gt;]. &lt;br /&gt;
The Advantage of widgets is that it simplifies voting process for the user. instead of going back to social network site and vote, you give him a fully functional button at the end of the article.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight:bold;color:maroon"&gt;Important Update!&lt;/span&gt;: I fixed this code in another post [&lt;a href="http://www.moretechtips.net/2009/03/standardizing-social-bookmarking.html"&gt;Standardizing Social Bookmarking Widgets&lt;/a&gt;], cause IE &amp; Opera had troubles with it known as delayed JavaScript execution..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-175229360838487366?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8J4Bag-f4EU6_0cKC-gqXhzemW8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8J4Bag-f4EU6_0cKC-gqXhzemW8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8J4Bag-f4EU6_0cKC-gqXhzemW8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8J4Bag-f4EU6_0cKC-gqXhzemW8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=3WPAFCxAvW0:S-Tlx_cSaCM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=3WPAFCxAvW0:S-Tlx_cSaCM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=3WPAFCxAvW0:S-Tlx_cSaCM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=3WPAFCxAvW0:S-Tlx_cSaCM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=3WPAFCxAvW0:S-Tlx_cSaCM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=3WPAFCxAvW0:S-Tlx_cSaCM:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=3WPAFCxAvW0:S-Tlx_cSaCM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=3WPAFCxAvW0:S-Tlx_cSaCM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/3WPAFCxAvW0" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2009/03/create-uniform-social-bookmarking.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/175229360838487366?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/175229360838487366?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/3WPAFCxAvW0/create-uniform-social-bookmarking.html" title="Create Uniform Social Bookmarking Widgets" /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_3JiqFA24tHU/SdA55zGyhmI/AAAAAAAAAU0/RCTHYJTQXwI/s72-c/Social-Bookmarking-Widgets.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total><feedburner:origLink>http://www.moretechtips.net/2009/03/create-uniform-social-bookmarking.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUEQ3g6fip7ImA9WxNRF08.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-6905737469707937617</id><published>2009-03-14T15:06:00.005Z</published><updated>2009-09-12T02:56:42.616Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-12T02:56:42.616Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="Blogger/Blogspot" /><category scheme="http://www.blogger.com/atom/ns#" term="CSS" /><category scheme="http://www.blogger.com/atom/ns#" term="Regular expressions" /><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>jQuery Manipulation: Clear tags are getting cloudy!</title><content type="html">&lt;img style="margin:0pt 0pt 10px 10px; float:right; width:130px;height:158px;" src="http://1.bp.blogspot.com/_3JiqFA24tHU/SbwBnhs03kI/AAAAAAAAATE/0UpwgM8feFA/s200/tag-cloud.jpg" alt="Tag-Cloud" title="Tag-Cloud" /&gt;for those who want or can only use JavaScript to convert regular tags list into a Tag-Cloud. jQuery and regular expressions are here to help.&lt;br /&gt;
Why Tag-Cloud? It is better looking and more meaningful.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color:maroon"&gt;Update:&lt;/span&gt;&lt;br /&gt;
Since Aug. 25, 2009: blogger now offers a built-in &lt;a href="http://buzz.blogger.com/2009/08/partly-cloudy-chance-of-labels.html"&gt;Tag-cloud&lt;/a&gt;. So you won't need this code for that job. still, jQuery manipulation is cool :)&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;Check demo :&lt;/span&gt;&lt;br /&gt;
click &lt;span style="font-style: italic; font-weight: bold;"&gt;Reset&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;to see tags original output.&lt;br /&gt;
click &lt;span style="font-style: italic; font-weight: bold;"&gt;Get Cloudy 1&lt;/span&gt; to convert it to Tag-Cloud without frequencies.&lt;br /&gt;
or click &lt;span style="font-style: italic; font-weight: bold;"&gt;Get Cloudy 2&lt;/span&gt; to convert it to Tag-Cloud with frequencies.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="post-more"&gt;&lt;div class="widget Label" id="Label100"&gt;&lt;h2&gt;Tags  &lt;a href="javascript:callTagsCloudy(false)"&gt;Get Cloudy 1&lt;/a&gt; |  &lt;a href="javascript:callTagsCloudy(true)"&gt;Get Cloudy 2&lt;/a&gt; |  &lt;a href="javascript:resetTagsCloudy()"&gt;Reset&lt;/a&gt;&lt;/h2&gt;&lt;div class='widget-content'&gt;&lt;ul&gt;&lt;li&gt;&lt;a href='http://www.moretechtips.net/search/label/ADO.Net'&gt;ADO.Net&lt;/a&gt;(7)&lt;/li&gt;
&lt;li&gt;&lt;a href='http://www.moretechtips.net/search/label/AJAX'&gt;AJAX&lt;/a&gt;(2)&lt;/li&gt;
&lt;li&gt;&lt;a href='http://www.moretechtips.net/search/label/ASP'&gt;ASP&lt;/a&gt;(11)&lt;/li&gt;
&lt;li&gt;&lt;a href='http://www.moretechtips.net/search/label/ASP.Net'&gt;ASP.Net&lt;/a&gt;(15)&lt;/li&gt;
&lt;li&gt;&lt;a href='http://www.moretechtips.net/search/label/DAL'&gt;DAL&lt;/a&gt;(7)&lt;/li&gt;
&lt;li&gt;&lt;a href='http://www.moretechtips.net/search/label/IIS'&gt;IIS&lt;/a&gt;(6)&lt;/li&gt;
&lt;li&gt;&lt;a href='http://www.moretechtips.net/search/label/javascript'&gt;javascript&lt;/a&gt;(5)&lt;/li&gt;
&lt;li&gt;&lt;a href='http://www.moretechtips.net/search/label/jQuery'&gt;jQuery&lt;/a&gt;(3)&lt;/li&gt;
&lt;li&gt;&lt;a href='http://www.moretechtips.net/search/label/OOP'&gt;OOP&lt;/a&gt;(5)&lt;/li&gt;
&lt;li&gt;&lt;a href='http://www.moretechtips.net/search/label/Paging'&gt;Paging&lt;/a&gt;(9)&lt;/li&gt;
&lt;li&gt;&lt;a href='http://www.moretechtips.net/search/label/performance'&gt;performance&lt;/a&gt;(7)&lt;/li&gt;
&lt;li&gt;&lt;a href='http://www.moretechtips.net/search/label/Regular%20expressions'&gt;Regular expressions&lt;/a&gt;(3)&lt;/li&gt;
&lt;li&gt;&lt;a href='http://www.moretechtips.net/search/label/SEO'&gt;SEO&lt;/a&gt;(4)&lt;/li&gt;
&lt;li&gt;&lt;a href='http://www.moretechtips.net/search/label/SQL%20Server'&gt;SQL Server&lt;/a&gt;(6)&lt;/li&gt;
&lt;li&gt;&lt;a href='http://www.moretechtips.net/search/label/Unicode'&gt;Unicode&lt;/a&gt;(4)&lt;/li&gt;
&lt;li&gt;&lt;a href='http://www.moretechtips.net/search/label/VB.Net'&gt;VB.Net&lt;/a&gt; (7)&lt;/li&gt;
&lt;li&gt;&lt;a href='http://www.moretechtips.net/search/label/XML'&gt;XML&lt;/a&gt; (3)&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
Code uses jQuery to manipulate and style those LI tags according to their frequencies, and regular expressions to extract the frequency contained in &lt;span&gt;parentheses ()&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
Here is &lt;span style="font-weight: bold;"&gt;JavaScript code&lt;/span&gt;&lt;br /&gt;
&lt;code&gt;&amp;lt;script src=&lt;b class="qs"&gt;'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js'&lt;/b&gt; type=&lt;b class="qs"&gt;'text/javascript'&lt;/b&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&lt;b class="qs"&gt;'text/javascript'&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;function&lt;/b&gt; getTagsCloudy(placeHolderID,scale,percentClassPrefix,keepFreq,overwriteCSS){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; list = $(&lt;b class="qs"&gt;'#'&lt;/b&gt;+placeHolderID+&lt;b class="qs"&gt;' li'&lt;/b&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// overwrite CSS&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.css(overwriteCSS);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; max=0, min=0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//First pass : calc max and min &lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.each(&lt;b class="Kw"&gt;function&lt;/b&gt; (i) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//extract and parse frequency &lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;freq = getTagFrequency($(&lt;b class="Kw"&gt;this&lt;/b&gt;));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//Calc max and min&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt; (freq&amp;gt;max) max= freq;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt; (freq&amp;lt;min || min==0) min= freq;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//Second pass : calc percent&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.each(&lt;b class="Kw"&gt;function&lt;/b&gt; (i) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//extract and parse frequency &lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;freq = getTagFrequency($(&lt;b class="Kw"&gt;this&lt;/b&gt;));&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// Remove tags frequency ? &lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt; (!keepFreq) $(&lt;b class="Kw"&gt;this&lt;/b&gt;).html($(&lt;b class="Kw"&gt;this&lt;/b&gt;).html().replace(/\n/g,&lt;b class="qs"&gt;''&lt;/b&gt;).replace(/\(\s*\d+\s*\)/g, &lt;b class="qs"&gt;''&lt;/b&gt;) );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//Calc percentage &lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; percent = Math.ceil( ((freq-min+1)/(max-min+1)) * scale ); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;b class="Kw"&gt;this&lt;/b&gt;).attr(&lt;b class="qs"&gt;'&lt;b class="Kw"&gt;class&lt;/b&gt;'&lt;/b&gt;,percentClassPrefix+percent);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;function&lt;/b&gt; getTagFrequency(x) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; matchs= x.text().replace(/\n/g,&lt;b class="qs"&gt;''&lt;/b&gt;).match(/\s*\d+\s*/g);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt; (!matchs) &lt;b class="Kw"&gt;return&lt;/b&gt; 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; freq = parseInt(matchs[matchs.length -1]);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;return&lt;/b&gt; freq&amp;gt;0? freq : 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// Calling it on document ready&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;$(document).ready(&lt;b class="Kw"&gt;function&lt;/b&gt;(){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;getTagsCloudy(&lt;b class="qs"&gt;'Label12'&lt;/b&gt;,10,&lt;b class="qs"&gt;'cloud-percent'&lt;/b&gt;,&lt;b class="Kw"&gt;false&lt;/b&gt;,{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="qs"&gt;'border'&lt;/b&gt;:&lt;b class="qs"&gt;'none 0'&lt;/b&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="qs"&gt;'padding'&lt;/b&gt;:&lt;b class="qs"&gt;'2px 2px 1px 1px'&lt;/b&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="qs"&gt;'margin'&lt;/b&gt;:&lt;b class="qs"&gt;'0 0 0 0'&lt;/b&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="qs"&gt;'list-style-type'&lt;/b&gt;:&lt;b class="qs"&gt;'none'&lt;/b&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="qs"&gt;'&lt;b class="Kw"&gt;float&lt;/b&gt;'&lt;/b&gt;:&lt;b class="qs"&gt;'left'&lt;/b&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="qs"&gt;'display'&lt;/b&gt;:&lt;b class="qs"&gt;'inline'&lt;/b&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="qs"&gt;'white-space'&lt;/b&gt;:&lt;b class="qs"&gt;'nowrap'&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;br /&gt;
you pass to the function :&lt;br /&gt;
1- The place holder ID of container div/widget.&lt;br /&gt;
2- Scale;  for example 10 : then you need to make CSS classes from 1 to 10.&lt;br /&gt;
3- percentClassPrefix: like 'cloud-percent', then you need to prefix CSS Classes names with 'cloud-percent'&lt;br /&gt;
4- keepFreq : true  to keep the frequencies or false to remove it.&lt;br /&gt;
5- overwriteCSS: Options/associative array to overwrite styles set or inherited on regular tags list. How to figure that out, use &lt;a href="http://getfirebug.com/" target="_blank"&gt;Firbug&lt;/a&gt;. Bottom line you want to remove list bullets and extra margins or padding or border and add some floating.&lt;br /&gt;
&lt;br /&gt;
Here is &lt;span style="font-weight: bold;"&gt;CSS code&lt;/span&gt;&lt;br /&gt;
&lt;code&gt;&amp;lt;style title=&lt;b class="qs"&gt;"text/css"&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* If you use 10 scale, then you need classes from 1-10 */&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;li.cloud-percent1 { &lt;b class="Kw"&gt;font-size&lt;/b&gt;:70% } &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;li.cloud-percent2 { &lt;b class="Kw"&gt;font-size&lt;/b&gt;:80% } &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;li.cloud-percent3 { &lt;b class="Kw"&gt;font-size&lt;/b&gt;:80% } &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;li.cloud-percent4 { &lt;b class="Kw"&gt;font-size&lt;/b&gt;:90% } &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;li.cloud-percent5 { &lt;b class="Kw"&gt;font-size&lt;/b&gt;:100% } &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* you can bold higher frequency tags or color them  */&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;li.cloud-percent6 { &lt;b class="Kw"&gt;font-size&lt;/b&gt;:110%; &lt;b class="Kw"&gt;font-weight&lt;/b&gt;:100;} &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;li.cloud-percent6 { &lt;b class="Kw"&gt;font-size&lt;/b&gt;:110%; &lt;b class="Kw"&gt;font-weight&lt;/b&gt;:100;} &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;li.cloud-percent7 { &lt;b class="Kw"&gt;font-size&lt;/b&gt;:120%; &lt;b class="Kw"&gt;font-weight&lt;/b&gt;:200;} &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;li.cloud-percent8 { &lt;b class="Kw"&gt;font-size&lt;/b&gt;:130%; &lt;b class="Kw"&gt;font-weight&lt;/b&gt;:300;} &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;li.cloud-percent9 { &lt;b class="Kw"&gt;font-size&lt;/b&gt;:140%; &lt;b class="Kw"&gt;font-weight&lt;/b&gt;:400;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;li.cloud-percent10{ &lt;b class="Kw"&gt;font-size&lt;/b&gt;:150%; &lt;b class="Kw"&gt;font-weight&lt;/b&gt;:500;} &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;/* neded To make container div expand with the content layout changes */&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;.Label div {&lt;b class="Kw"&gt;Overflow&lt;/b&gt;:Auto}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;/code&gt;&lt;br /&gt;
If you use 10 scale, then you need classes from 1-10,  and as you see you can control how they are styled.&lt;br /&gt;
You can bold higher frequency tags or color them, you can even hide minimum frequency tags by setting [display:none;] on the first class.&lt;br /&gt;
&lt;br /&gt;
And the &lt;span style="font-weight: bold;"&gt;HTML code of Tags/Labels&lt;/span&gt;:&lt;br /&gt;
See how they were originally output by Blogspot. And you don't need to change it.&lt;br /&gt;
Tags list should look like it.. which is the default output of Blogger..&lt;br /&gt;
&lt;code&gt;&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; class=&lt;b class="qs"&gt;"widget Label"&lt;/b&gt; id=&lt;b class="qs"&gt;"Label100"&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;h2&lt;/b&gt;&amp;gt;Tags&amp;lt;&lt;b class="Kw"&gt;/h2&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; class=&lt;b class="qs"&gt;'widget-content'&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;ul&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;li&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;a&lt;/b&gt; href=&lt;b class="qs"&gt;'http://www.moretechtips.net/search/label/ADO.Net'&lt;/b&gt;&amp;gt;ADO.Net&amp;lt;&lt;b class="Kw"&gt;/a&lt;/b&gt;&amp;gt;(7)&amp;lt;&lt;b class="Kw"&gt;/li&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;li&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;a&lt;/b&gt; href=&lt;b class="qs"&gt;'http://www.moretechtips.net/search/label/AJAX'&lt;/b&gt;&amp;gt;AJAX&amp;lt;&lt;b class="Kw"&gt;/a&lt;/b&gt;&amp;gt;(2)&amp;lt;&lt;b class="Kw"&gt;/li&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;li&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;a&lt;/b&gt; href=&lt;b class="qs"&gt;'http://www.moretechtips.net/search/label/ASP'&lt;/b&gt;&amp;gt;ASP&amp;lt;&lt;b class="Kw"&gt;/a&lt;/b&gt;&amp;gt;(11)&amp;lt;&lt;b class="Kw"&gt;/li&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;li&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;a&lt;/b&gt; href=&lt;b class="qs"&gt;'http://www.moretechtips.net/search/label/ASP.Net'&lt;/b&gt;&amp;gt;ASP.Net&amp;lt;&lt;b class="Kw"&gt;/a&lt;/b&gt;&amp;gt;(15)&amp;lt;&lt;b class="Kw"&gt;/li&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;li&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;a&lt;/b&gt; href=&lt;b class="qs"&gt;'http://www.moretechtips.net/search/label/DAL'&lt;/b&gt;&amp;gt;DAL&amp;lt;&lt;b class="Kw"&gt;/a&lt;/b&gt;&amp;gt;(7)&amp;lt;&lt;b class="Kw"&gt;/li&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;li&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;a&lt;/b&gt; href=&lt;b class="qs"&gt;'http://www.moretechtips.net/search/label/IIS'&lt;/b&gt;&amp;gt;IIS&amp;lt;&lt;b class="Kw"&gt;/a&lt;/b&gt;&amp;gt;(6)&amp;lt;&lt;b class="Kw"&gt;/li&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;li&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;a&lt;/b&gt; href=&lt;b class="qs"&gt;'http://www.moretechtips.net/search/label/javascript'&lt;/b&gt;&amp;gt;javascript&amp;lt;&lt;b class="Kw"&gt;/a&lt;/b&gt;&amp;gt;(5)&amp;lt;&lt;b class="Kw"&gt;/li&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;li&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;a&lt;/b&gt; href=&lt;b class="qs"&gt;'http://www.moretechtips.net/search/label/jQuery'&lt;/b&gt;&amp;gt;jQuery&amp;lt;&lt;b class="Kw"&gt;/a&lt;/b&gt;&amp;gt;(3)&amp;lt;&lt;b class="Kw"&gt;/li&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;li&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;a&lt;/b&gt; href=&lt;b class="qs"&gt;'http://www.moretechtips.net/search/label/OOP'&lt;/b&gt;&amp;gt;OOP&amp;lt;&lt;b class="Kw"&gt;/a&lt;/b&gt;&amp;gt;(5)&amp;lt;&lt;b class="Kw"&gt;/li&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;li&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;a&lt;/b&gt; href=&lt;b class="qs"&gt;'http://www.moretechtips.net/search/label/Paging'&lt;/b&gt;&amp;gt;Paging&amp;lt;&lt;b class="Kw"&gt;/a&lt;/b&gt;&amp;gt;(9)&amp;lt;&lt;b class="Kw"&gt;/li&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;li&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;a&lt;/b&gt; href=&lt;b class="qs"&gt;'http://www.moretechtips.net/search/label/performance'&lt;/b&gt;&amp;gt;performance&amp;lt;&lt;b class="Kw"&gt;/a&lt;/b&gt;&amp;gt;(7)&amp;lt;&lt;b class="Kw"&gt;/li&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;li&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;a&lt;/b&gt; href=&lt;b class="qs"&gt;'http://www.moretechtips.net/search/label/Regular%20expressions'&lt;/b&gt;&amp;gt;Regular expressions&amp;lt;&lt;b class="Kw"&gt;/a&lt;/b&gt;&amp;gt;(3)&amp;lt;&lt;b class="Kw"&gt;/li&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;li&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;a&lt;/b&gt; href=&lt;b class="qs"&gt;'http://www.moretechtips.net/search/label/SEO'&lt;/b&gt;&amp;gt;SEO&amp;lt;&lt;b class="Kw"&gt;/a&lt;/b&gt;&amp;gt;(4)&amp;lt;&lt;b class="Kw"&gt;/li&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;li&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;a&lt;/b&gt; href=&lt;b class="qs"&gt;'http://www.moretechtips.net/search/label/SQL%20Server'&lt;/b&gt;&amp;gt;SQL Server&amp;lt;&lt;b class="Kw"&gt;/a&lt;/b&gt;&amp;gt;(6)&amp;lt;&lt;b class="Kw"&gt;/li&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;li&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;a&lt;/b&gt; href=&lt;b class="qs"&gt;'http://www.moretechtips.net/search/label/Unicode'&lt;/b&gt;&amp;gt;Unicode&amp;lt;&lt;b class="Kw"&gt;/a&lt;/b&gt;&amp;gt;(4)&amp;lt;&lt;b class="Kw"&gt;/li&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;li&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;a&lt;/b&gt; href=&lt;b class="qs"&gt;'http://www.moretechtips.net/search/label/VB.Net'&lt;/b&gt;&amp;gt;VB.Net&amp;lt;&lt;b class="Kw"&gt;/a&lt;/b&gt;&amp;gt; (7)&amp;lt;&lt;b class="Kw"&gt;/li&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;li&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;a&lt;/b&gt; href=&lt;b class="qs"&gt;'http://www.moretechtips.net/search/label/XML'&lt;/b&gt;&amp;gt;XML&amp;lt;&lt;b class="Kw"&gt;/a&lt;/b&gt;&amp;gt; (3)&amp;lt;&lt;b class="Kw"&gt;/li&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;/ul&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;/div&lt;/b&gt;&amp;gt;&lt;/code&gt;&lt;br /&gt;
In Other words : &amp;lt;li&amp;gt; &amp;lt;a href="some link"&amp;gt; Label name &amp;lt;/a&amp;gt; (5) &amp;lt;/li&amp;gt; . Of Course extra line-breaks or spaces are ignored.&lt;br /&gt;
&lt;br /&gt;
that's it..! let it get cloudy..&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-6905737469707937617?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Tw75Tt6CV7mcsj0bwrQWaxH76m0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Tw75Tt6CV7mcsj0bwrQWaxH76m0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Tw75Tt6CV7mcsj0bwrQWaxH76m0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Tw75Tt6CV7mcsj0bwrQWaxH76m0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=3BvN3idUsn8:3jwVHS-veZk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=3BvN3idUsn8:3jwVHS-veZk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=3BvN3idUsn8:3jwVHS-veZk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=3BvN3idUsn8:3jwVHS-veZk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=3BvN3idUsn8:3jwVHS-veZk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=3BvN3idUsn8:3jwVHS-veZk:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=3BvN3idUsn8:3jwVHS-veZk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=3BvN3idUsn8:3jwVHS-veZk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/3BvN3idUsn8" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2009/03/jquery-manipulation-clear-tags-are.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/6905737469707937617?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/6905737469707937617?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/3BvN3idUsn8/jquery-manipulation-clear-tags-are.html" title="jQuery Manipulation: Clear tags are getting cloudy!" /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_3JiqFA24tHU/SbwBnhs03kI/AAAAAAAAATE/0UpwgM8feFA/s72-c/tag-cloud.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://www.moretechtips.net/2009/03/jquery-manipulation-clear-tags-are.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMGQX85cSp7ImA9WxNRF08.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-4818964706450024256</id><published>2009-03-13T13:34:00.016Z</published><updated>2009-09-12T03:00:20.129Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-12T03:00:20.129Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Blogger/Blogspot" /><category scheme="http://www.blogger.com/atom/ns#" term="Tech Tips" /><title>Blogspot experience; How to simplify template changing</title><content type="html">&lt;a target="_blank" href="http://www.eblogtemplates.com/iwork-blogger-template/"&gt;&lt;img style="border: 1px solid gray; margin: 0pt 0pt 10px 10px; float: right; width: 250px; height: 188px;" src="http://3.bp.blogspot.com/_3JiqFA24tHU/SbqYWAKW7AI/AAAAAAAAASw/7N1BzO2rUpc/s320/Templates.jpg" alt="Template by eblogtemplates.com" title="Template by eblogtemplates.com" border="0" /&gt;&lt;/a&gt;I had a recent experience with changing my blogger template.. Now it is time to share some tricks to simplify things with next one trying to change it.. cause you should do it especially if you are still working with those 800x600 built-in blogger templates.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
To start editing your template: go to Layout &gt; Edit HTML &gt; check '&lt;label for="expandWidgets"&gt;Expand Widget Templates&lt;/label&gt;'.&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Backup your original template..&lt;br /&gt;
&lt;/span&gt;And Page elements content (HTML/JavaScript).. Cause you'll need it!&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Look for a template that inspires you&lt;/span&gt;&lt;br /&gt;
you can try &lt;a target="_blank" href="http://www.eblogtemplates.com/"&gt;eblogtemplates.com&lt;/a&gt; or just &lt;a target="_blank" href="http://www.google.com/search?hl=en&amp;amp;q=Free+blogspot+templates"&gt;google it&lt;/a&gt;.. you should know that most users are using 1024x768 screens or bigger..&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Try it first on a temporary blog..&lt;/span&gt;&lt;br /&gt;
It is easy to create another free blog on blogspot and try the new template on it first.. and when satisfied copy the full template back to your original blog&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Use Text Editor to simplify editing template code&lt;/span&gt;&lt;br /&gt;
It is better to edit template file in external Apps like &lt;a target="_blank" href="http://www.emeditor.com/"&gt;EMEditor&lt;/a&gt;, &lt;a target="_blank" href="http://notepad-plus.sourceforge.net/uk/site.htm"&gt;Notepad++&lt;/a&gt;  instead of editing inside the browser text area. With syntax coloring and code folding.. your job will be much easier&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Use Ads blocker or comment Adsense code while you still editing&lt;/span&gt;&lt;br /&gt;
cause refershing pages frequently can get you banned [&lt;a target="_blank" href="http://www.hundredtips.com/100-google-adsense-tips.html"&gt;100 AdSense Tips&lt;/a&gt;]&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Change widget IDs in the new templates &lt;/span&gt;&lt;br /&gt;
New templates will come with some widgets your already have and some new.. You should set the Old widgets IDs in the new template by the their IDs in the old template.&lt;br /&gt;
If you get errors you might need to set the new widgets IDs with higher numbers [&lt;a target="_blank" href="http://bloggertinker.blogspot.com/2009/02/how-to-fix-bx-xxxx-error-when-uploading.html"&gt;How to fix bx-XXXX Errors&lt;/a&gt;]&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(102, 51, 0);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(102, 102, 102);"&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Remove extra widgets &lt;/span&gt;&lt;br /&gt;
Templates authors might put their adsense code in the templates for demo purpose.. and other extra widgets.. remove it!&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Some parts are missing ?&lt;/span&gt;&lt;br /&gt;
You might find some parts missing.. specially the new Blogspot features like the inline comment form..  To fix it : [&lt;a target="_blank" href="http://www.bloggerbuster.com/2008/06/how-to-add-comment-form-beneath-your.html"&gt;How to add a comment form beneath your blog posts&lt;/a&gt;].&lt;br /&gt;
Other missing parts... check your original template code for missing part.&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Don't depend on Blogger Monetize options&lt;/span&gt;&lt;br /&gt;
Sometimes it shows Ads with dimensions that aren't suitable to the place holder.. Create your Ad units and get Ad code and place it yourself in HTML/JavaScript widgets.&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;You are not done yet&lt;/span&gt;&lt;br /&gt;
Add your special logo and customize colors of the template so it would stand out..&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Under construction message&lt;/span&gt;&lt;br /&gt;
finally, While you changing the template at your real blog you might want to give users an under construction message until you done. Cause you might get unexpected errors or un-comment those adsense codes we commented before. Code below will create a big black layer over your page.&lt;br /&gt;
&lt;code class="short"&gt;&lt;b class="Cm"&gt;&amp;lt;!-- place it right after &amp;lt;&lt;b class="Kw"&gt;div&lt;/b&gt; id=&lt;b class="qs"&gt;'outer-wrapper'&lt;/b&gt;&amp;gt; --&amp;gt;&lt;/b&gt;&lt;br /&gt;
&lt;b class="Cm"&gt;&amp;lt;!-- Message will be removed by double-clicking it --&amp;gt;&lt;/b&gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;h1&lt;/b&gt; ondblclick=&lt;b class="qs"&gt;'this.style.display=&amp;amp;quot;none&amp;amp;quot;'&lt;/b&gt;&lt;br /&gt;
style=&lt;b class="qs"&gt;'margin:0; top:0; left:0; z-index:5; position:absolute; width:100%; height:1000%; padding:30px; background-color:black; color:white; text-align:center'&lt;/b&gt;&amp;gt;&lt;br /&gt;
Few design changes,&amp;lt;&lt;b class="Kw"&gt;br&lt;/b&gt;/&amp;gt;please check back in 10 minutes&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;/h1&lt;/b&gt;&amp;gt;&lt;span style="font-family:Georgia,serif;"&gt;&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;I hope I encouraged you to start changing your template..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-4818964706450024256?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NxyRgMS74gVuJY_X3TC_3GuQ-n4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NxyRgMS74gVuJY_X3TC_3GuQ-n4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NxyRgMS74gVuJY_X3TC_3GuQ-n4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NxyRgMS74gVuJY_X3TC_3GuQ-n4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=PkFnY5bzsT0:LvAQy1tEZ_U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=PkFnY5bzsT0:LvAQy1tEZ_U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=PkFnY5bzsT0:LvAQy1tEZ_U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=PkFnY5bzsT0:LvAQy1tEZ_U:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=PkFnY5bzsT0:LvAQy1tEZ_U:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=PkFnY5bzsT0:LvAQy1tEZ_U:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=PkFnY5bzsT0:LvAQy1tEZ_U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=PkFnY5bzsT0:LvAQy1tEZ_U:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/PkFnY5bzsT0" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2009/03/blogspot-experience-how-to-simplify.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/4818964706450024256?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/4818964706450024256?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/PkFnY5bzsT0/blogspot-experience-how-to-simplify.html" title="Blogspot experience; How to simplify template changing" /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_3JiqFA24tHU/SbqYWAKW7AI/AAAAAAAAASw/7N1BzO2rUpc/s72-c/Templates.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.moretechtips.net/2009/03/blogspot-experience-how-to-simplify.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMARn4-fSp7ImA9WxNRF08.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-6896190951129692912</id><published>2009-03-12T23:44:00.011Z</published><updated>2009-09-12T03:00:47.055Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-12T03:00:47.055Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Blogger/Blogspot" /><category scheme="http://www.blogger.com/atom/ns#" term="SEO" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>Blogger SEO Tip: Use Post Labels as Meta Keywords</title><content type="html">&lt;img style="float:left; margin:0 10px 10px 0;width: 320px; height: 246px;" src="http://3.bp.blogspot.com/_3JiqFA24tHU/SbnVWeI2k2I/AAAAAAAAASI/CbR5xISvvvs/s320/SEO.gif" alt="SEO" title="SEO" /&gt;Meta keywords are very important to do better SEO for your blog..  And you should know that &lt;strong&gt;Search engines look for different description and keywords for each page of your site&lt;/strong&gt;.  If you put the same thing across all pages of your site, search engines may regard this as spam.&lt;br /&gt;
&lt;br /&gt;
I saw lots of examples on how to add meta title/description based on the post title for Blogger/Blogspot. but I couldn't find one for using labels/Tags as meta keywords for each post.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
After searching I found [&lt;a target="_blank" href="http://widget-based.blogspot.com/2006/11/changing-blogger-title-tag.html"&gt;Changing the Blogger Title Tag&lt;/a&gt;] which describes how to use the post title as the header. &lt;span style="font-weight: bold;"&gt;although&lt;/span&gt; now that could be done by less code like this&lt;br /&gt;
&lt;code class="short"&gt;&lt;b class="Cm"&gt;&amp;lt;!-- Post/Archive Page --&amp;gt;&lt;/b&gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;b:if&lt;/b&gt; cond=&lt;b class="qs"&gt;'data:blog.pageType != &amp;amp;quot;index&amp;amp;quot;'&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;title&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;data:blog.pageName&lt;/b&gt;/&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/title&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;b class="Cm"&gt;&amp;lt;!-- Index Page --&amp;gt;&lt;/b&gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;b:else&lt;/b&gt;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;title&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;data:blog.pageTitle&lt;/b&gt;/&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/title&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;/b:if&lt;/b&gt;&amp;gt;&lt;/code&gt;&lt;br /&gt;
So instead of using "data:blog.pageTitle" you use "data:blog.pageName" for post &amp; archive pages. Otherwise, for pages like index/label pages "data:blog.pageTitle" will do the job.&lt;br /&gt;
&lt;br /&gt;
But as far as I see at the very brief Blogger documentation. &lt;span style="font-weight: bold;"&gt;This is the only way to use labels as meta keywords..&lt;/span&gt;&lt;br /&gt;
Enough talking.. Here is the code to do it.. which you should place instead of the Head tag..!&lt;br /&gt;
The Code is commented and it also outputs the Title and Meta Description tags(using Post title) for your convenience..&lt;br /&gt;
&lt;code&gt;&lt;b class="Cm"&gt;&amp;lt;!--::::::::::: Block1: Output post meta keywords --&amp;gt;&lt;/b&gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;b:if&lt;/b&gt; cond=&lt;b class="qs"&gt;'data:blog.pageType == &amp;amp;quot;item&amp;amp;quot;'&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;b:section&lt;/b&gt; id=&lt;b class="qs"&gt;'meta1'&lt;/b&gt; showaddelement=&lt;b class="qs"&gt;'no'&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;&amp;lt;!-- widget must be a of Type = &lt;b class="qs"&gt;'blog'&lt;/b&gt; to have posts data exposed, and must have a unique id --&amp;gt;&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;&amp;lt;!-- Empty Includables(functions) to output nothing, You must keep them ): --&amp;gt;&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;b:widget&lt;/b&gt; id=&lt;b class="qs"&gt;'Blog2'&lt;/b&gt; locked=&lt;b class="qs"&gt;'no'&lt;/b&gt; type=&lt;b class="qs"&gt;'Blog'&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;b:includable&lt;/b&gt; id=&lt;b class="qs"&gt;'nextprev'&lt;/b&gt;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;b:includable&lt;/b&gt; id=&lt;b class="qs"&gt;'backlinks'&lt;/b&gt; var=&lt;b class="qs"&gt;'post'&lt;/b&gt;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;b:includable&lt;/b&gt; id=&lt;b class="qs"&gt;'post'&lt;/b&gt; var=&lt;b class="qs"&gt;'post'&lt;/b&gt; /&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;b:includable&lt;/b&gt; id=&lt;b class="qs"&gt;'status-message'&lt;/b&gt;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;b:includable&lt;/b&gt; id=&lt;b class="qs"&gt;'comment-form'&lt;/b&gt; var=&lt;b class="qs"&gt;'post'&lt;/b&gt;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;b:includable&lt;/b&gt; id=&lt;b class="qs"&gt;'backlinkDeleteIcon'&lt;/b&gt; var=&lt;b class="qs"&gt;'backlink'&lt;/b&gt;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;b:includable&lt;/b&gt; id=&lt;b class="qs"&gt;'postQuickEdit'&lt;/b&gt; var=&lt;b class="qs"&gt;'post'&lt;/b&gt;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;b:includable&lt;/b&gt; id=&lt;b class="qs"&gt;'commentDeleteIcon'&lt;/b&gt; var=&lt;b class="qs"&gt;'comment'&lt;/b&gt;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;b:includable&lt;/b&gt; id=&lt;b class="qs"&gt;'feedLinks'&lt;/b&gt;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;b:includable&lt;/b&gt; id=&lt;b class="qs"&gt;'feedLinksBody'&lt;/b&gt; var=&lt;b class="qs"&gt;'links'&lt;/b&gt;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;b:includable&lt;/b&gt; id=&lt;b class="qs"&gt;'comments'&lt;/b&gt; var=&lt;b class="qs"&gt;'post'&lt;/b&gt;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;b:includable&lt;/b&gt; id=&lt;b class="qs"&gt;'main'&lt;/b&gt; var=&lt;b class="qs"&gt;'top'&lt;/b&gt;&amp;gt;&lt;b class="Cm"&gt;&amp;lt;!-- Main Function of Any widget comes with ID &lt;b class="qs"&gt;'main'&lt;/b&gt; --&amp;gt;&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;&amp;lt;!-- Loop Page Posts (only 1 in a post page )--&amp;gt;&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;b:loop&lt;/b&gt; values=&lt;b class="qs"&gt;'data:posts'&lt;/b&gt; var=&lt;b class="qs"&gt;'post'&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;b:if&lt;/b&gt; cond=&lt;b class="qs"&gt;'data:post.labels'&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;&amp;lt;!-- If the post has labels, make Meta keywords by looping lables --&amp;gt;&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;lt;meta name=&amp;amp;quot;keywords&amp;amp;quot; content=&amp;amp;quot;&amp;lt;&lt;b class="Kw"&gt;b:loop&lt;/b&gt; values=&lt;b class="qs"&gt;'data:post.labels'&lt;/b&gt; var=&lt;b class="qs"&gt;'label'&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;data:label.name&lt;/b&gt;/&amp;gt;&amp;lt;&lt;b class="Kw"&gt;b:if&lt;/b&gt; cond=&lt;b class="qs"&gt;'data:label.isLast != &amp;amp;quot;true&amp;amp;quot;'&lt;/b&gt;&amp;gt;,&amp;lt;&lt;b class="Kw"&gt;/b:if&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/b:loop&lt;/b&gt;&amp;gt;&amp;amp;quot; /&amp;amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;/b:if&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;/b:loop&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;/b:includable&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;/b:widget&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;/b:section&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;/b:if&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;b class="Cm"&gt;&amp;lt;!--::::::::::: Block1 END --&amp;gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;head&lt;/b&gt;&amp;gt; &lt;b class="Cm"&gt;&amp;lt;!-- THE HEAD --&amp;gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b class="Cm"&gt;&amp;lt;!-- must include(called) here to output other head sub elements --&amp;gt;&lt;/b&gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;b:include&lt;/b&gt; data=&lt;b class="qs"&gt;'blog'&lt;/b&gt; name=&lt;b class="qs"&gt;'all-head-content'&lt;/b&gt;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b class="Cm"&gt;&amp;lt;!--::::::::::: Block2: Output Index Title,keywords,decription and Post Title,description  --&amp;gt;&lt;/b&gt;&lt;br /&gt;
&lt;b class="Cm"&gt;&amp;lt;!-- Post/Archive Page --&amp;gt;&lt;/b&gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;b:if&lt;/b&gt; cond=&lt;b class="qs"&gt;'data:blog.pageType != &amp;amp;quot;index&amp;amp;quot;'&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;title&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;data:blog.pageName&lt;/b&gt;/&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/title&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;meta&lt;/b&gt; name=&lt;b class="qs"&gt;'description'&lt;/b&gt; expr:content=&lt;b class="qs"&gt;'data:blog.pageName'&lt;/b&gt; /&amp;gt;&lt;br /&gt;
&lt;b class="Cm"&gt;&amp;lt;!-- Index Page --&amp;gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;b:else&lt;/b&gt;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;title&lt;/b&gt;&amp;gt;&amp;lt;&lt;b class="Kw"&gt;data:blog.pageTitle&lt;/b&gt;/&amp;gt;&amp;lt;&lt;b class="Kw"&gt;/title&lt;/b&gt;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;meta&lt;/b&gt; name=&lt;b class="qs"&gt;'keywords'&lt;/b&gt; content=&lt;b class="qs"&gt;'your,blog,keywords!!'&lt;/b&gt; /&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b class="Kw"&gt;meta&lt;/b&gt; name=&lt;b class="qs"&gt;'description'&lt;/b&gt; content=&lt;b class="qs"&gt;'your blog description!!'&lt;/b&gt; /&amp;gt;&lt;br /&gt;
&amp;lt;&lt;b class="Kw"&gt;/b:if&lt;/b&gt;&amp;gt;&lt;br /&gt;
&lt;b class="Cm"&gt;&amp;lt;!--::::::::::: Block2 END --&amp;gt;&lt;/b&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Some Issues&lt;/span&gt; you should be aware of ):&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;1-&lt;/span&gt; XHTML validation will give your warnings about these issues :&lt;ul&gt;&lt;li&gt;Meta Keywords tag Appears before the Head tag.&lt;br /&gt;
Why we have to put that code before the head tag? you have to ask ):&lt;br /&gt;
well.. You can't place a widget outside of a section, you can't place a section inside head tag. and Post lables must be called inside of 'Blog' widget.&lt;/li&gt;
&lt;li&gt;Meta Keywords will be surrounded with Div tags which should not appear there.&lt;br /&gt;
why? Cause Widget and sections Tags are auto.  converted to div tags by Blogger..!&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;2- &lt;/span&gt;Some Meta tags analyzers will warn you that they don't see meta keywords (Cause it was outside of the head).. But Most search engines would be able to find your meta keywords..&lt;br /&gt;
As you can see &lt;span style="font-weight: bold;"&gt;that's why I'm separating the code&lt;/span&gt; into 2 blocks: &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;
first one &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;outside &lt;/span&gt;the Head tag to output Post Meta keywrds.&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Second one&lt;/span&gt; &lt;span style="color: rgb(0, 102, 0);"&gt;inside &lt;/span&gt;the Head Tag to output Title and meta description of all pages and meta keywords for index page;  without the need of a widget.  And in case an engine didn't like those meta keywords, you still have the title and description where they should be.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;3- &lt;/span&gt;After Adding that code , you will get errors when trying to do anything in the 'Page elements' and clicking save. the Only solution is cut Block1 from the template &amp;amp; save, do what you need in 'page elements' &amp;amp; save. paste Block1 back in the template.&lt;br /&gt;
It is the only way, until Blogspot pay attention to the issue!&lt;br /&gt;
&lt;span&gt;&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;To edit your Blogspot template&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Go to Layout &gt; Edit HTML &gt; Check 'Expand Widget Templates', and don't forget to save a backup before you do anything..&lt;/li&gt;
&lt;li&gt;Don't forget to remove those comments.&lt;/li&gt;
&lt;li&gt;Replace those Static Blog meta tags content with real ones.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;span style="font-weight:bold;color:maroon"&gt;Update #1&lt;/span&gt;&lt;br /&gt;
I've adjusted the code to show a title in archive page that is different than index page title. as requested by &lt;a href="http://www.blogger.com/profile/05282934181860574423"&gt;Silver Bullet&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight:bold;color:maroon"&gt;Update #2&lt;/span&gt;&lt;br /&gt;
I corrected the code to show different title in label pages. It's considered as an  'index' page but it has a different title. So, we should give it a different title! thanks to &lt;a href="http://teknoneta.blogspot.com"&gt;GunGz&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-6896190951129692912?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KJLnxteHomDztHQKDtoaJUvuQoA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KJLnxteHomDztHQKDtoaJUvuQoA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KJLnxteHomDztHQKDtoaJUvuQoA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KJLnxteHomDztHQKDtoaJUvuQoA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=Q4YeFuJTGb8:3R7MtNmpHZI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=Q4YeFuJTGb8:3R7MtNmpHZI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=Q4YeFuJTGb8:3R7MtNmpHZI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=Q4YeFuJTGb8:3R7MtNmpHZI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=Q4YeFuJTGb8:3R7MtNmpHZI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=Q4YeFuJTGb8:3R7MtNmpHZI:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=Q4YeFuJTGb8:3R7MtNmpHZI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=Q4YeFuJTGb8:3R7MtNmpHZI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/Q4YeFuJTGb8" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2009/03/blogger-seo-tip-use-post-labels-as-meta.html#comment-form" title="108 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/6896190951129692912?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/6896190951129692912?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/Q4YeFuJTGb8/blogger-seo-tip-use-post-labels-as-meta.html" title="Blogger SEO Tip: Use Post Labels as Meta Keywords" /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_3JiqFA24tHU/SbnVWeI2k2I/AAAAAAAAASI/CbR5xISvvvs/s72-c/SEO.gif" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">108</thr:total><feedburner:origLink>http://www.moretechtips.net/2009/03/blogger-seo-tip-use-post-labels-as-meta.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIMQHg8fyp7ImA9WxVbFEg.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-962326859005238145</id><published>2009-02-13T21:47:00.026Z</published><updated>2009-03-30T23:09:41.677Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-30T23:09:41.677Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="CSS" /><category scheme="http://www.blogger.com/atom/ns#" term="Regular expressions" /><category scheme="http://www.blogger.com/atom/ns#" term="Web 2.0" /><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>jQuery Fun: Greeting Your Site Referrals</title><content type="html">&lt;div id="WelcomePlaceHolder"&gt;&lt;/div&gt;This is a complete javascript example to detect your site visitors referrer and  greeting them with a message based on their referrer url.&lt;br /&gt;For example, when a dzone user clicks on your link from dzone site, they get a message to remind them to vote up your site.&lt;br /&gt;&lt;br /&gt;If you didn't see the message already, &lt;a href="javascript:void(0)" onclick="DetectReferrer(true)"&gt;click here&lt;/a&gt; to see a greeting box..&lt;br /&gt;Or Try pressing 'enter' on the Browser address bar to see the no-referrer message.&lt;br /&gt;Or &lt;a href="http://www.google.com/search?q=jQuery+Fun%3A+Greeting+Your+Site+Referrals"&gt;click here&lt;/a&gt; to google this post title then click on my site link to get referred back here and see the googler message.&lt;br /&gt;&lt;br /&gt;The code consists of few CSS to style the message box and uses &lt;a target="_blank" href="http://jquery.com/"&gt;jQuery&lt;/a&gt; to show up the message box and array of regular expressions to define each referrer URL pattern and the corresponded message.&lt;br /&gt;&lt;code&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;jQuery Fun: Greeting Your Site Referrals&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;style type=&lt;b class="qs"&gt;"text/css"&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Style your Message Div */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;#WelcomePlaceHolder{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Keep hidden until called by javascript */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;display:none;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Border:silver 2px solid;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width:240px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;height:125px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* some space for BG image */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;padding:2px 2px 2px 100px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;background:url('http://www.01gif.com/base/les_gifs_personnage_humains/hommes/hommes002.gif') no-repeat left center;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-size:25px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;color:#333333;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin:5px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Style Close Button */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;A.CloseButton {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-size:11px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-weight:bolder;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;color:black;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;border:silver 2px solid;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;text-decoration:none;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float:right;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;padding:2px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;A.CloseButton:hover {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;border:gray 2px outset;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;text-decoration:none;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;script type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"&lt;/b&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&lt;b class="Cm"&gt;//Add urls regular expressions and your message(any HTML Code) to the array&lt;/b&gt;&lt;br /&gt;&lt;b class="Kw"&gt;var&lt;/b&gt; msgs = [&lt;br /&gt;&lt;b class="Cm"&gt;//&lt;b class="Kw"&gt;null&lt;/b&gt; url : to show a message &lt;b class="Kw"&gt;for&lt;/b&gt; direct traffic (no referer, some one who remember your site url!)&lt;/b&gt;&lt;br /&gt;{&lt;b class="qs"&gt;'url'&lt;/b&gt;:&lt;b class="Kw"&gt;null&lt;/b&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="qs"&gt;'msg'&lt;/b&gt;:&lt;b class="qs"&gt;'I am glad you remember my site URL, enjoy your stay'&lt;/b&gt;}&lt;br /&gt;&lt;b class="Cm"&gt;//My url! : show message &lt;b class="Kw"&gt;for&lt;/b&gt; referrals from your own site or &lt;b class="Kw"&gt;null&lt;/b&gt; so you &lt;b class="Kw"&gt;do&lt;/b&gt; not annoy them&lt;/b&gt;&lt;br /&gt;,{&lt;b class="qs"&gt;'url'&lt;/b&gt;:/^http:\/\/(\w+\.)?moretechtips\.net/,  &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="qs"&gt;'msg'&lt;/b&gt;:&lt;b class="Kw"&gt;null&lt;/b&gt;}&lt;br /&gt;&lt;b class="Cm"&gt;//Other urls&lt;/b&gt;&lt;br /&gt;,{&lt;b class="qs"&gt;'url'&lt;/b&gt;:/^http:\/\/(\w+\.)?google\.com/,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="qs"&gt;'msg'&lt;/b&gt;:&lt;b class="qs"&gt;'Welcome googler, Hope you will find what you looking &lt;b class="Kw"&gt;for&lt;/b&gt;'&lt;/b&gt;}&lt;br /&gt;,{&lt;b class="qs"&gt;'url'&lt;/b&gt;:/^http:\/\/(\w+\.)?dzone\.com/,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="qs"&gt;'msg'&lt;/b&gt;:&lt;b class="qs"&gt;'Welcome fellow dzone reader, &lt;b class="Kw"&gt;if&lt;/b&gt; you like it please vote it up'&lt;/b&gt;}&lt;br /&gt;,{&lt;b class="qs"&gt;'url'&lt;/b&gt;:/^http:\/\/(\w+\.)?digg\.com/,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="qs"&gt;'msg'&lt;/b&gt;:&lt;b class="qs"&gt;'Welcome digger, &lt;b class="Kw"&gt;if&lt;/b&gt; you like it please digg it'&lt;/b&gt;}&lt;br /&gt;,{&lt;b class="qs"&gt;'url'&lt;/b&gt;:/^http:\/\/(\w+\.)?propeller\.com/,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="qs"&gt;'msg'&lt;/b&gt;:&lt;b class="qs"&gt;'Welcome propeller user, hope you will like it here'&lt;/b&gt;}&lt;br /&gt;&lt;b class="Cm"&gt;//generic pattern: to show generic message &lt;b class="Kw"&gt;for&lt;/b&gt; referrers that you did not specify one &lt;b class="Kw"&gt;for&lt;/b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b class="Cm"&gt;//You must keep it at the end of the list as it will match any non empty referrer&lt;/b&gt;&lt;br /&gt;,{&lt;b class="qs"&gt;'url'&lt;/b&gt;:/^http:\/\//,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="qs"&gt;'msg'&lt;/b&gt;:&lt;b class="qs"&gt;'Hello their.. Hope you will find what you looking for'&lt;/b&gt;}&lt;br /&gt;];&lt;br /&gt;&lt;b class="Kw"&gt;function&lt;/b&gt; DetectReferrer(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; div = $(&lt;b class="qs"&gt;'#WelcomePlaceHolder'&lt;/b&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//if Div was not placed means , not to show message&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt; (!div.length) &lt;b class="Kw"&gt;return&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; ref = document.referrer.toLowerCase();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; msg = findMatch(ref);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// if not &lt;b class="Kw"&gt;null&lt;/b&gt; msg found&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt;(msg) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//Add Close Button and Show up message&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;div.html( '&amp;lt;a href="javascript:void(0)" class="CloseButton"&amp;gt;X&amp;lt;/a&amp;gt;' + msg).show(&lt;b class="qs"&gt;'slow'&lt;/b&gt;,&lt;b class="Kw"&gt;function&lt;/b&gt;(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//Hide On click close Button&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;b class="qs"&gt;'.CloseButton'&lt;/b&gt;,div).click(&lt;b class="Kw"&gt;function&lt;/b&gt;(){ div.hide() })&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;}&lt;br /&gt;&lt;b class="Kw"&gt;function&lt;/b&gt; findMatch(ref) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;for&lt;/b&gt;(&lt;b class="Kw"&gt;var&lt;/b&gt; i=0; i&amp;lt;msgs.length; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt;( ( ref==&lt;b class="qs"&gt;''&lt;/b&gt; &amp;amp;&amp;amp; msgs[i].url==&lt;b class="Kw"&gt;null&lt;/b&gt;) || (ref&amp;gt;&lt;b class="qs"&gt;''&lt;/b&gt; &amp;amp;&amp;amp; ref.match(msgs[i].url) ) )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;return&lt;/b&gt; msgs[i].msg;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;return&lt;/b&gt; &lt;b class="Kw"&gt;null&lt;/b&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;b class="Cm"&gt;// Call the Referrer Detector &lt;b class="Kw"&gt;function&lt;/b&gt; on document ready&lt;/b&gt;&lt;br /&gt;$(DetectReferrer);&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;div id=&lt;b class="qs"&gt;"WelcomePlaceHolder"&lt;/b&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Note that patterns array includes 4 type of patterns (in lowercase):&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Null Pattern, to add a message for direct traffic visitors (no-referrer)&lt;/li&gt;&lt;li&gt;Your Site Pattern, to match when people referred by your site links. and i kept the message 'null' so i don't annoy the visitors.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Generic pattern to match any referrer you didn't specify a message for, and it &lt;span style="font-weight: bold;"&gt;must&lt;/span&gt; come at the end of the array as it will match any non-empty referrer url.&lt;/li&gt;&lt;li&gt;The rest are Sites Patterns.&lt;br /&gt;for example [/^http:\/\/(\w+\.)?google\.com/] will match referrer urls that:&lt;br&gt; [^] Start with&lt;br /&gt; [http:\/\/] means 'http://'&lt;br /&gt; [(\w+\.)?] Any -optional- sub domain &lt;br/&gt;[google\.com] match 'google.com'&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Also note that, you should put the place holder div (ID='WelcomePlaceHolder') where the message should appear, and if you didn't put it there no message will come up.&lt;br /&gt;&lt;br /&gt;If you need to review regular expressions, check this good reference [&lt;a href="http://www.w3schools.com/jsref/jsref_obj_regexp.asp" target="_blank"&gt;RegExp Object Reference&lt;/a&gt;]&lt;br /&gt;&lt;!-- ckey="502B934A" --&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-962326859005238145?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/h5lJn5Eg5-lDYoDeYbzBkZkoC-U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/h5lJn5Eg5-lDYoDeYbzBkZkoC-U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/h5lJn5Eg5-lDYoDeYbzBkZkoC-U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/h5lJn5Eg5-lDYoDeYbzBkZkoC-U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=IR5_aAeYyuA:KjA6iwUMYRo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=IR5_aAeYyuA:KjA6iwUMYRo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=IR5_aAeYyuA:KjA6iwUMYRo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=IR5_aAeYyuA:KjA6iwUMYRo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=IR5_aAeYyuA:KjA6iwUMYRo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=IR5_aAeYyuA:KjA6iwUMYRo:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=IR5_aAeYyuA:KjA6iwUMYRo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=IR5_aAeYyuA:KjA6iwUMYRo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/IR5_aAeYyuA" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2009/02/jquery-fun-greeting-your-site-referrals.html#comment-form" title="14 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/962326859005238145?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/962326859005238145?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/IR5_aAeYyuA/jquery-fun-greeting-your-site-referrals.html" title="jQuery Fun: Greeting Your Site Referrals" /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">14</thr:total><feedburner:origLink>http://www.moretechtips.net/2009/02/jquery-fun-greeting-your-site-referrals.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IGRX89eyp7ImA9WxJUFEk.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-6305467033989079686</id><published>2009-01-30T21:18:00.033Z</published><updated>2009-07-13T01:45:24.163Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-13T01:45:24.163Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="AJAX" /><category scheme="http://www.blogger.com/atom/ns#" term="DAL" /><category scheme="http://www.blogger.com/atom/ns#" term="Paging" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.Net" /><category scheme="http://www.blogger.com/atom/ns#" term="OOP" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML" /><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>jQuery &amp; Ajax Fun: Implementing a Paging Listbox</title><content type="html">Many times in web forms we need to provide a listbox with lots of elements, A good solution is to filter and page these elements to speedup page loading and optimize DB/Network usage..&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;color:maroon"&gt;Update!&lt;/span&gt; &lt;span style="color:#333"&gt;I've rewritten the code as jQuery plugin, made few enhancements and provided a complete sample code in VB.Net and C#. check-out the &lt;a href="http://www.moretechtips.net/2009/07/paging-listbox-another-jquery-plugin.html"&gt;new plugin of Paging Listbox&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is a complete implementation of a paging listbox using jQuery on client side and ASP.Net on server side. and should look like this..&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:hand;width: 238px; height: 140px;" src="http://3.bp.blogspot.com/_3JiqFA24tHU/SYODNgx_RxI/AAAAAAAAAMg/gCiESresqkw/s320/Paging-ListBox.jpg" border="0" alt="Paging Listbox" id="BLOGGER_PHOTO_ID_5297221854878975762" /&gt;&lt;br /&gt;The form web page, which also contains the JavaScript class to build the select box, of course don't forget to download the &lt;a target="_blank" href="http://jquery.com/"&gt;jQuery&lt;/a&gt; library.&lt;br /&gt;&lt;code&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;jQuery &amp;amp; Ajax Fun: Implementing a Paging Listbox&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;script type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt; src=&lt;b class="qs"&gt;"JS/jquery-1.3.min.js"&lt;/b&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt;&amp;gt;&lt;br /&gt;&lt;b class="Kw"&gt;function&lt;/b&gt; AjaxListBox() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;this&lt;/b&gt;.source = &lt;b class="qs"&gt;''&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;this&lt;/b&gt;.divID= &lt;b class="qs"&gt;''&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;this&lt;/b&gt;.keyID= &lt;b class="qs"&gt;''&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;this&lt;/b&gt;.buttonID= &lt;b class="qs"&gt;''&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;this&lt;/b&gt;.lastKey= &lt;b class="qs"&gt;''&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;this&lt;/b&gt;.startup= &lt;b class="Kw"&gt;true&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;this&lt;/b&gt;.minWidth=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;this&lt;/b&gt;.position = {&lt;b class="qs"&gt;'top'&lt;/b&gt;:0,&lt;b class="qs"&gt;'left'&lt;/b&gt;:0};&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; self = &lt;b class="Kw"&gt;this&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;this&lt;/b&gt;.init= &lt;b class="Kw"&gt;function&lt;/b&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(document).ready(&lt;b class="Kw"&gt;function&lt;/b&gt;(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//calc position and min-width &lt;b class="Kw"&gt;for&lt;/b&gt; listbox&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.minWidth = $(&lt;b class="qs"&gt;'#'&lt;/b&gt;+self.keyID).width()+ $(&lt;b class="qs"&gt;'#'&lt;/b&gt;+self.buttonID).width()+4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.position = $(&lt;b class="qs"&gt;'#'&lt;/b&gt;+self.keyID).position();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.position.top= self.position.top + $(&lt;b class="qs"&gt;'#'&lt;/b&gt;+self.keyID).height()+2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// Position and hide div &lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;b class="qs"&gt;'#'&lt;/b&gt;+self.divID).css({&lt;b class="qs"&gt;'display'&lt;/b&gt;:&lt;b class="qs"&gt;'none'&lt;/b&gt;,&lt;b class="qs"&gt;'border'&lt;/b&gt;:&lt;b class="qs"&gt;'gray 1px solid'&lt;/b&gt;,&lt;b class="qs"&gt;'position'&lt;/b&gt;:&lt;b class="qs"&gt;'absolute'&lt;/b&gt;,&lt;b class="qs"&gt;'z-index'&lt;/b&gt;:5,&lt;b class="qs"&gt;'top'&lt;/b&gt;:self.position.top,&lt;b class="qs"&gt;'left'&lt;/b&gt;:self.position.left});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// bind onclick handler &lt;b class="Kw"&gt;for&lt;/b&gt; &lt;b class="qs"&gt;'toggle'&lt;/b&gt; button&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;b class="qs"&gt;'#'&lt;/b&gt;+self.buttonID).bind(&lt;b class="qs"&gt;'click'&lt;/b&gt;,&lt;b class="Kw"&gt;null&lt;/b&gt;,self.toggle);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// bind onkeydown handler &lt;b class="Kw"&gt;for&lt;/b&gt; &lt;b class="qs"&gt;'Key'&lt;/b&gt; textinput and call find &lt;b class="Kw"&gt;function&lt;/b&gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;b class="qs"&gt;'#'&lt;/b&gt;+self.keyID).bind(&lt;b class="qs"&gt;'keydown'&lt;/b&gt;,&lt;b class="Kw"&gt;null&lt;/b&gt;,self.keydown);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//load list&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.load();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;this&lt;/b&gt;.load= &lt;b class="Kw"&gt;function&lt;/b&gt;(key,pi) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt;(key==&lt;b class="Kw"&gt;null&lt;/b&gt; ||key==&lt;b class="qs"&gt;'undefined'&lt;/b&gt;) key=&lt;b class="qs"&gt;''&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt;(pi==&lt;b class="Kw"&gt;null&lt;/b&gt; ||pi==&lt;b class="qs"&gt;'undefined'&lt;/b&gt;) pi=&lt;b class="qs"&gt;''&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//Save key to use when move through pages&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;this&lt;/b&gt;.lastKey= key; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;b class="qs"&gt;'#'&lt;/b&gt;+&lt;b class="Kw"&gt;this&lt;/b&gt;.divID).html(&lt;b class="qs"&gt;'please wait..'&lt;/b&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$.get(&lt;b class="Kw"&gt;this&lt;/b&gt;.source,{&lt;b class="qs"&gt;'key'&lt;/b&gt;:key,&lt;b class="qs"&gt;'pi'&lt;/b&gt;: pi},&lt;b class="Kw"&gt;this&lt;/b&gt;.loaded,&lt;b class="qs"&gt;'html'&lt;/b&gt; );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;this&lt;/b&gt;.loaded = &lt;b class="Kw"&gt;function&lt;/b&gt;(data,txtStatus) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//Set Inner html &lt;b class="Kw"&gt;with&lt;/b&gt; response of Ajax request&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;b class="qs"&gt;'#'&lt;/b&gt;+self.divID).html(data);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;b class="qs"&gt;'#'&lt;/b&gt;+self.divID+&lt;b class="qs"&gt;' &amp;gt; select'&lt;/b&gt;).css({&lt;b class="qs"&gt;'border-width'&lt;/b&gt;:&lt;b class="qs"&gt;'0'&lt;/b&gt;});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//Add handler &lt;b class="Kw"&gt;for&lt;/b&gt; onchange to reload when another page is requested&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;b class="qs"&gt;'#'&lt;/b&gt;+self.divID+&lt;b class="qs"&gt;' &amp;gt; select'&lt;/b&gt;).bind(&lt;b class="qs"&gt;'change'&lt;/b&gt;,&lt;b class="Kw"&gt;null&lt;/b&gt;,self.change);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//Add handler &lt;b class="Kw"&gt;for&lt;/b&gt; onblur to hide box&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;b class="qs"&gt;'#'&lt;/b&gt;+self.divID+&lt;b class="qs"&gt;' &amp;gt; select'&lt;/b&gt;).bind(&lt;b class="qs"&gt;'blur'&lt;/b&gt;,&lt;b class="Kw"&gt;null&lt;/b&gt;,self.hide);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt; (self.startup) self.startup=&lt;b class="Kw"&gt;false&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;else&lt;/b&gt; self.show();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;this&lt;/b&gt;.change = &lt;b class="Kw"&gt;function&lt;/b&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//Get Value of Select Box&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; v = $(&lt;b class="qs"&gt;'#'&lt;/b&gt;+self.divID+&lt;b class="qs"&gt;' &amp;gt; select'&lt;/b&gt;).val();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//To &lt;b class="Kw"&gt;do&lt;/b&gt; paging the value must be like &lt;b class="qs"&gt;'pi=2'&lt;/b&gt; which means go to page 2&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt; (/^pi=\d+$/i.test(v)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; pi= v.replace(/pi=/i,&lt;b class="qs"&gt;''&lt;/b&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.load(self.lastKey,pi);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;this&lt;/b&gt;.toggle = &lt;b class="Kw"&gt;function&lt;/b&gt;(e) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt; ($(&lt;b class="qs"&gt;'#'&lt;/b&gt;+self.divID).css(&lt;b class="qs"&gt;'display'&lt;/b&gt;)==&lt;b class="qs"&gt;'none'&lt;/b&gt;) self.show();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;else&lt;/b&gt;  self.hide();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;this&lt;/b&gt;.show = &lt;b class="Kw"&gt;function&lt;/b&gt;(e){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;b class="qs"&gt;'#'&lt;/b&gt;+self.divID).show();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//Insure width is more than min-width&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; w = $(&lt;b class="qs"&gt;'#'&lt;/b&gt;+self.divID+&lt;b class="qs"&gt;' &amp;gt; select'&lt;/b&gt;).width();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt; (w&amp;gt;0 &amp;amp;&amp;amp; w&amp;lt;self.minWidth) $(&lt;b class="qs"&gt;'#'&lt;/b&gt;+self.divID+&lt;b class="qs"&gt;' &amp;gt; select'&lt;/b&gt;).width(self.minWidth);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;this&lt;/b&gt;.hide = &lt;b class="Kw"&gt;function&lt;/b&gt;(e){ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;b class="qs"&gt;'#'&lt;/b&gt;+self.divID).hide();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;this&lt;/b&gt;.find = &lt;b class="Kw"&gt;function&lt;/b&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//text to search &lt;b class="Kw"&gt;for&lt;/b&gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.load($(&lt;b class="qs"&gt;'#'&lt;/b&gt;+self.keyID).val());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;this&lt;/b&gt;.keydown = &lt;b class="Kw"&gt;function&lt;/b&gt;(e) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;// &lt;b class="Kw"&gt;this&lt;/b&gt; will &lt;b class="Kw"&gt;catch&lt;/b&gt; pressing enter and call find &lt;b class="Kw"&gt;function&lt;/b&gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;var&lt;/b&gt; intKey = e.keyCode;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;if&lt;/b&gt;(intKey == 13) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.find();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;//and prevent submitting the form that contain &lt;b class="Kw"&gt;this&lt;/b&gt; input box&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;return&lt;/b&gt; &lt;b class="Kw"&gt;false&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;style type=&lt;b class="qs"&gt;"text/css"&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;* {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font:12px arial &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.AjaxListBoxKey {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;border:gray 1px solid;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width:120px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.AjaxListBoxKeyBTN{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;border:silver 1px solid;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;background-color:#333333;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;color:white;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;padding:.5px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font:12px arial;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;form id=&lt;b class="qs"&gt;"form1"&lt;/b&gt; action=&lt;b class="qs"&gt;""&lt;/b&gt; method=&lt;b class="qs"&gt;"post"&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Select Product&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;input id=&lt;b class="qs"&gt;"key"&lt;/b&gt; name=&lt;b class="qs"&gt;"key"&lt;/b&gt; type=&lt;b class="qs"&gt;"text"&lt;/b&gt; class=&lt;b class="qs"&gt;"AjaxListBoxKey"&lt;/b&gt; /&amp;gt;&amp;lt;input type=&lt;b class="qs"&gt;"button"&lt;/b&gt; id=&lt;b class="qs"&gt;"find"&lt;/b&gt; class=&lt;b class="qs"&gt;"AjaxListBoxKeyBTN"&lt;/b&gt; value=&lt;b class="qs"&gt;"&amp;amp;#9660;"&lt;/b&gt; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div id=&lt;b class="qs"&gt;"box"&lt;/b&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;script type=&lt;b class="qs"&gt;"text/javascript"&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var box = &lt;b class="Kw"&gt;new&lt;/b&gt; AjaxListBox();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;box.source = &lt;b class="qs"&gt;"listbox.aspx"&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;box.divID = &lt;b class="qs"&gt;"box"&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;box.keyID = &lt;b class="qs"&gt;"key"&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;box.buttonID= &lt;b class="qs"&gt;"find"&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;box.init();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/form&amp;gt; &lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The server side page(whatever the language is!) is requested to handle query string parameters (pi: PageIndex, key: Search keyword) and response with just a list box(no other tags!) that contains the matched elements at the requested page index, plus 2 extra elements to go to previous and next pages indexes with value like 'pi=3' which means go to page 3. Of course you can select the PageSize and listbox size that works for you.&lt;br /&gt;&lt;br /&gt;Here is server side page "listbox.aspx"&lt;br /&gt;&lt;code&gt;&amp;lt;%@ Page Language=&lt;b class="qs"&gt;"VB"&lt;/b&gt; %&amp;gt;&lt;br /&gt;&amp;lt;script runat=&lt;b class="qs"&gt;"server"&lt;/b&gt; language=&lt;b class="qs"&gt;"VB"&lt;/b&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Protected&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; Page_Load(&lt;b class="Kw"&gt;ByVal&lt;/b&gt; sender &lt;b class="Kw"&gt;As&lt;/b&gt; Object, &lt;b class="Kw"&gt;ByVal&lt;/b&gt; e &lt;b class="Kw"&gt;As&lt;/b&gt; System.EventArgs) Handles Me.Load&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; key &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;String&lt;/b&gt; = Request.QueryString(&lt;b class="qs"&gt;"key"&lt;/b&gt;) &amp;amp; &lt;b class="qs"&gt;""&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; PageIndex &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt; = 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Try&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PageIndex = &lt;b class="Kw"&gt;Integer&lt;/b&gt;.Parse(Request.QueryString(&lt;b class="qs"&gt;"PI"&lt;/b&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Catch&lt;/b&gt; ex &lt;b class="Kw"&gt;As&lt;/b&gt; Exception&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PageIndex = 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Try&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; ps &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; Products&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ps.PageSize = 5&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ps.PageIndex = PageIndex&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ps.SelectItems(Product.ProductStatus.Active, key)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Response.Write(ps.PagingBox(&lt;b class="qs"&gt;"ProductID"&lt;/b&gt;, 0, , , 5))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ps = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;On Listbox.aspx I'm using my favorite[&lt;a target="_blank" href="http://www.moretechtips.net/2008/12/traditional-yet-powerful-data-access.html"&gt;Traditional yet Powerful : Data Access Layer for ASP.Net&lt;/a&gt;] to access the products Table after adding the following function to the collection class to build the listbox.&lt;br /&gt;&lt;code&gt;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Function&lt;/b&gt; PagingBox(&lt;b class="Kw"&gt;ByVal&lt;/b&gt; FieldID &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;String&lt;/b&gt;, &lt;b class="Kw"&gt;ByVal&lt;/b&gt; SelectedID &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;, &lt;b class="Kw"&gt;Optional&lt;/b&gt; &lt;b class="Kw"&gt;ByVal&lt;/b&gt; FieldClass &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;String&lt;/b&gt; = &lt;b class="qs"&gt;""&lt;/b&gt;, &lt;b class="Kw"&gt;Optional&lt;/b&gt; &lt;b class="Kw"&gt;ByVal&lt;/b&gt; Onchange &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;String&lt;/b&gt; = &lt;b class="qs"&gt;""&lt;/b&gt;, &lt;b class="Kw"&gt;Optional&lt;/b&gt; &lt;b class="Kw"&gt;ByVal&lt;/b&gt; size &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt; = 0) &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;String&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; ret &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; StringBuilder(&lt;b class="qs"&gt;"&amp;lt;&lt;b class="Kw"&gt;select&lt;/b&gt; name="&lt;/b&gt;&lt;b class="qs"&gt;""&lt;/b&gt; &amp;amp; FieldID &amp;amp; &lt;b class="qs"&gt;""&lt;/b&gt;&lt;b class="qs"&gt;" id="&lt;/b&gt;&lt;b class="qs"&gt;""&lt;/b&gt; &amp;amp; FieldID &amp;amp; &lt;b class="qs"&gt;""&lt;/b&gt;&lt;b class="qs"&gt;""&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; FieldClass &amp;gt; &lt;b class="qs"&gt;""&lt;/b&gt; &lt;b class="Kw"&gt;Then&lt;/b&gt; ret.Append(&lt;b class="qs"&gt;" FieldClass="&lt;/b&gt;&lt;b class="qs"&gt;""&lt;/b&gt; &amp;amp; FieldClass &amp;amp; &lt;b class="qs"&gt;""&lt;/b&gt;&lt;b class="qs"&gt;""&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; Onchange &amp;gt; &lt;b class="qs"&gt;""&lt;/b&gt; &lt;b class="Kw"&gt;Then&lt;/b&gt; ret.Append(&lt;b class="qs"&gt;" Onchange="&lt;/b&gt;&lt;b class="qs"&gt;""&lt;/b&gt; &amp;amp; Onchange &amp;amp; &lt;b class="qs"&gt;""&lt;/b&gt;&lt;b class="qs"&gt;""&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; size &amp;gt; 0 &lt;b class="Kw"&gt;Then&lt;/b&gt; ret.Append(&lt;b class="qs"&gt;" size="&lt;/b&gt;&lt;b class="qs"&gt;""&lt;/b&gt; &amp;amp; size + 2 &amp;amp; &lt;b class="qs"&gt;""&lt;/b&gt;&lt;b class="qs"&gt;""&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret.Append(&lt;b class="qs"&gt;"&amp;gt;"&lt;/b&gt;)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; Me.Count = 0 &lt;b class="Kw"&gt;Then&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret.Append(&lt;b class="qs"&gt;"&amp;lt;&lt;b class="Kw"&gt;option&lt;/b&gt; value="&lt;/b&gt;&lt;b class="qs"&gt;""&lt;/b&gt;&lt;b class="qs"&gt;"&amp;gt;-- No Results! --&amp;lt;/&lt;b class="Kw"&gt;option&lt;/b&gt;&amp;gt;"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;If&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; PageIndex &amp;gt; 1 &lt;b class="Kw"&gt;Then&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret.Append(&lt;b class="qs"&gt;"&amp;lt;&lt;b class="Kw"&gt;option&lt;/b&gt; value="&lt;/b&gt;&lt;b class="qs"&gt;"pi="&lt;/b&gt; &amp;amp; (PageIndex - 1) &amp;amp; &lt;b class="qs"&gt;""&lt;/b&gt;&lt;b class="qs"&gt;"&amp;gt;"&lt;/b&gt; &amp;amp; _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &lt;b class="qs"&gt;"-- to Page "&lt;/b&gt; &amp;amp; (PageIndex - 1) &amp;amp; &lt;b class="qs"&gt;" of "&lt;/b&gt; &amp;amp; PageCount &amp;amp; &lt;b class="qs"&gt;" --&amp;lt;/&lt;b class="Kw"&gt;option&lt;/b&gt;&amp;gt;"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;If&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;For&lt;/b&gt; i &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt; = 0 To Me.Count - 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; P &lt;b class="Kw"&gt;As&lt;/b&gt; Product = Item(i)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret.Append(&lt;b class="qs"&gt;"&amp;lt;&lt;b class="Kw"&gt;option&lt;/b&gt; value="&lt;/b&gt;&lt;b class="qs"&gt;""&lt;/b&gt; &amp;amp; P.ID &amp;amp; &lt;b class="qs"&gt;""&lt;/b&gt;&lt;b class="qs"&gt;""&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; P.ID = SelectedID &lt;b class="Kw"&gt;Then&lt;/b&gt; ret.Append(&lt;b class="qs"&gt;" selected"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret.Append(&lt;b class="qs"&gt;"&amp;gt;"&lt;/b&gt; &amp;amp; P.Name &amp;amp; &lt;b class="qs"&gt;"&amp;lt;/&lt;b class="Kw"&gt;option&lt;/b&gt;&amp;gt;"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Next&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; PageIndex &amp;lt; PageCount &lt;b class="Kw"&gt;And&lt;/b&gt; PageIndex &amp;gt; 0 &lt;b class="Kw"&gt;Then&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret.Append(&lt;b class="qs"&gt;"&amp;lt;&lt;b class="Kw"&gt;option&lt;/b&gt; value="&lt;/b&gt;&lt;b class="qs"&gt;"pi="&lt;/b&gt; &amp;amp; (PageIndex + 1) &amp;amp; &lt;b class="qs"&gt;""&lt;/b&gt;&lt;b class="qs"&gt;"&amp;gt;"&lt;/b&gt; &amp;amp; _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &lt;b class="qs"&gt;"-- to Page "&lt;/b&gt; &amp;amp; (PageIndex + 1) &amp;amp; &lt;b class="qs"&gt;" of "&lt;/b&gt; &amp;amp; PageCount &amp;amp; &lt;b class="qs"&gt;" --&amp;lt;/&lt;b class="Kw"&gt;option&lt;/b&gt;&amp;gt;"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;If&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret.Append(&lt;b class="qs"&gt;"&amp;lt;/&lt;b class="Kw"&gt;select&lt;/b&gt;&amp;gt;"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Return&lt;/b&gt; ret.ToString&lt;br /&gt;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Function&lt;/b&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Many greetings to jQuery folks..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-6305467033989079686?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IWkMaA8z46DZpAwD2IK05kU27mw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IWkMaA8z46DZpAwD2IK05kU27mw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IWkMaA8z46DZpAwD2IK05kU27mw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IWkMaA8z46DZpAwD2IK05kU27mw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=g-BxI6VTkgE:YZ-cR5l2gVE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=g-BxI6VTkgE:YZ-cR5l2gVE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=g-BxI6VTkgE:YZ-cR5l2gVE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=g-BxI6VTkgE:YZ-cR5l2gVE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=g-BxI6VTkgE:YZ-cR5l2gVE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=g-BxI6VTkgE:YZ-cR5l2gVE:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=g-BxI6VTkgE:YZ-cR5l2gVE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=g-BxI6VTkgE:YZ-cR5l2gVE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/g-BxI6VTkgE" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2009/01/jquery-ajax-fun-implementing-paging.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/6305467033989079686?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/6305467033989079686?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/g-BxI6VTkgE/jquery-ajax-fun-implementing-paging.html" title="jQuery &amp; Ajax Fun: Implementing a Paging Listbox" /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_3JiqFA24tHU/SYODNgx_RxI/AAAAAAAAAMg/gCiESresqkw/s72-c/Paging-ListBox.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://www.moretechtips.net/2009/01/jquery-ajax-fun-implementing-paging.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4CRn4yeip7ImA9WxVWEUo.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-5667995950453370082</id><published>2009-01-17T08:37:00.012Z</published><updated>2009-02-21T00:42:47.092Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-21T00:42:47.092Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="VB.Net" /><category scheme="http://www.blogger.com/atom/ns#" term="DAL" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.Net" /><category scheme="http://www.blogger.com/atom/ns#" term="OOP" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><category scheme="http://www.blogger.com/atom/ns#" term="ADO.Net" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="Unicode" /><title>Creating Data Access Layer for A Multi-Language ASP.Net Application</title><content type="html">After i posted [&lt;a href="http://www.moretechtips.net/2008/12/traditional-yet-powerful-data-access.html"&gt;Traditional yet Powerful : Data Access Layer for ASP.Net&lt;/a&gt;].. it is time to extend it to support a multi-language ASP.Net Application.. &lt;br /&gt;&lt;br /&gt;To support many languages.. Products table should be split into 2 tables. one for basic information and the other for language-dependent fields. here is the SQL Create script:&lt;br /&gt;&lt;code&gt;&lt;b class="Kw"&gt;CREATE&lt;/b&gt; &lt;b class="Kw"&gt;TABLE&lt;/b&gt; [dbo].[Products](&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;[ID] [&lt;b class="Kw"&gt;int&lt;/b&gt;]  &lt;b class="Kw"&gt;PRIMARY&lt;/b&gt; &lt;b class="Kw"&gt;KEY&lt;/b&gt; &lt;b class="Kw"&gt;IDENTITY&lt;/b&gt;(1,1) &lt;b class="Kw"&gt;NOT&lt;/b&gt; &lt;b class="Kw"&gt;NULL&lt;/b&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Status] [&lt;b class="Kw"&gt;tinyint&lt;/b&gt;] &lt;b class="Kw"&gt;NOT&lt;/b&gt; &lt;b class="Kw"&gt;NULL&lt;/b&gt; &lt;b class="Kw"&gt;DEFAULT&lt;/b&gt; (0),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Price] [&lt;b class="Kw"&gt;decimal&lt;/b&gt;](18,0) &lt;b class="Kw"&gt;NOT&lt;/b&gt; &lt;b class="Kw"&gt;NULL&lt;/b&gt; &lt;b class="Kw"&gt;DEFAULT&lt;/b&gt; (0),&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;&lt;b class="Kw"&gt;CREATE&lt;/b&gt; &lt;b class="Kw"&gt;TABLE&lt;/b&gt; [dbo].[ProductsDetails](&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;[ID] [&lt;b class="Kw"&gt;int&lt;/b&gt;] &lt;b class="Kw"&gt;NOT&lt;/b&gt; &lt;b class="Kw"&gt;NULL&lt;/b&gt; &lt;b class="Kw"&gt;DEFAULT&lt;/b&gt; (0),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Lang] [&lt;b class="Kw"&gt;varchar&lt;/b&gt;](2) &lt;b class="Kw"&gt;NOT&lt;/b&gt; &lt;b class="Kw"&gt;NULL&lt;/b&gt; &lt;b class="Kw"&gt;DEFAULT&lt;/b&gt; (&lt;b class="qs"&gt;''&lt;/b&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Name] [&lt;b class="Kw"&gt;nvarchar&lt;/b&gt;](50) &lt;b class="Kw"&gt;NOT&lt;/b&gt; &lt;b class="Kw"&gt;NULL&lt;/b&gt; &lt;b class="Kw"&gt;DEFAULT&lt;/b&gt; (&lt;b class="qs"&gt;''&lt;/b&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Description] [&lt;b class="Kw"&gt;nvarchar&lt;/b&gt;](500) &lt;b class="Kw"&gt;NOT&lt;/b&gt; &lt;b class="Kw"&gt;NULL&lt;/b&gt; &lt;b class="Kw"&gt;DEFAULT&lt;/b&gt; (&lt;b class="qs"&gt;''&lt;/b&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;CONSTRAINT&lt;/b&gt; [PK_ProductsDetails] &lt;b class="Kw"&gt;PRIMARY&lt;/b&gt; &lt;b class="Kw"&gt;KEY&lt;/b&gt; &lt;b class="Kw"&gt;CLUSTERED&lt;/b&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[ID] &lt;b class="Kw"&gt;ASC&lt;/b&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Lang] &lt;b class="Kw"&gt;ASC&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&lt;br /&gt;)&lt;/code&gt;&lt;br /&gt;You should notice that multi-language text fields are now saved in nvarchar instead of varchar to support Unicode.&lt;br /&gt;&lt;br /&gt;Now, DAL classes need few changes and adding another 2 classes&lt;br /&gt;The Entity Class for Products&lt;br /&gt;&lt;code&gt;&lt;b class="Kw"&gt;Imports&lt;/b&gt; System.Data&lt;br /&gt;&lt;b class="Kw"&gt;Imports&lt;/b&gt; System.Data.Common&lt;br /&gt;&lt;b class="Kw"&gt;Imports&lt;/b&gt; Microsoft.VisualBasic&lt;br /&gt;&lt;br /&gt;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Class&lt;/b&gt; Product&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Enum&lt;/b&gt; ProductStatus&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;None = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Active = 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Inactive = 2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Enum&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; ID &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; Price &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Decimal&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; Status &lt;b class="Kw"&gt;As&lt;/b&gt; ProductStatus&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;Detail Collection of this product&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; Details &lt;b class="Kw"&gt;As&lt;/b&gt; ProductsDetails&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt; &lt;b class="Kw"&gt;if&lt;/b&gt; GetLang=&lt;b class="Kw"&gt;Nothing&lt;/b&gt; (&lt;b class="Kw"&gt;default&lt;/b&gt;) no Detail Records &lt;b class="Kw"&gt;is&lt;/b&gt; queried &lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &lt;b class="Kw"&gt;if&lt;/b&gt; GetLang=&lt;b class="qs"&gt;"EN"&lt;/b&gt; &lt;b class="Kw"&gt;then&lt;/b&gt; Detail(EN) &lt;b class="Kw"&gt;is&lt;/b&gt; queried &lt;b class="Kw"&gt;and&lt;/b&gt; added to the details Collection &lt;b class="Kw"&gt;and&lt;/b&gt; you can refer to it by .Detail &lt;b class="Kw"&gt;property&lt;/b&gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &lt;b class="Kw"&gt;if&lt;/b&gt; GetLang=&lt;b class="qs"&gt;""&lt;/b&gt; &lt;b class="Kw"&gt;then&lt;/b&gt; All Details records are queried &lt;b class="Kw"&gt;and&lt;/b&gt; add to details collection &lt;b class="Kw"&gt;and&lt;/b&gt; you can refer to &lt;b class="Kw"&gt;each&lt;/b&gt; of them by .Detail(Lang) &lt;b class="Kw"&gt;property&lt;/b&gt; &lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; GetLang &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;String&lt;/b&gt; = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt;(&lt;b class="Kw"&gt;Optional&lt;/b&gt; &lt;b class="Kw"&gt;ByVal&lt;/b&gt; ProductID &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt; = 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SelectItem(ProductID)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt;(&lt;b class="Kw"&gt;ByVal&lt;/b&gt; ProductLang &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;String&lt;/b&gt;, &lt;b class="Kw"&gt;Optional&lt;/b&gt; &lt;b class="Kw"&gt;ByVal&lt;/b&gt; ProductID &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt; = 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GetLang = ProductLang&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SelectItem(ProductID)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;Initialize Product Fields&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; Initialize()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Price = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Status = ProductStatus.Active&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; Details &lt;b class="Kw"&gt;Is&lt;/b&gt; &lt;b class="Kw"&gt;Nothing&lt;/b&gt; &lt;b class="Kw"&gt;Then&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Details = &lt;b class="Kw"&gt;New&lt;/b&gt; ProductsDetails&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Else&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Details.Clear()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;If&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;&lt;b class="Kw"&gt;Return&lt;/b&gt; a Detail Object based &lt;b class="Kw"&gt;on&lt;/b&gt; Lang param. &lt;b class="Kw"&gt;If&lt;/b&gt; Lang was not specified &lt;b class="Kw"&gt;return&lt;/b&gt; first Detail Object found&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; ReadOnly &lt;b class="Kw"&gt;Property&lt;/b&gt; Detail(&lt;b class="Kw"&gt;Optional&lt;/b&gt; &lt;b class="Kw"&gt;ByVal&lt;/b&gt; Lang &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;String&lt;/b&gt; = &lt;b class="qs"&gt;""&lt;/b&gt;) &lt;b class="Kw"&gt;As&lt;/b&gt; ProductDetail&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Get&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; Details.Count = 0 &lt;b class="Kw"&gt;Then&lt;/b&gt; &lt;b class="Kw"&gt;Return&lt;/b&gt; &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; Lang = &lt;b class="qs"&gt;""&lt;/b&gt; &lt;b class="Kw"&gt;Then&lt;/b&gt; &lt;b class="Kw"&gt;Return&lt;/b&gt; Details(0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;For&lt;/b&gt; i &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt; = 0 To Details.Count - 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; Details(i).Lang.ToUpper = Lang.ToUpper &lt;b class="Kw"&gt;Then&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Return&lt;/b&gt; Details(i)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;If&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Next&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Return&lt;/b&gt; &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Get&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Property&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Friend&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; Populate(&lt;b class="Kw"&gt;ByRef&lt;/b&gt; dr &lt;b class="Kw"&gt;As&lt;/b&gt; DbDataReader)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Populate(CType(dr, Object))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Friend&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; Populate(&lt;b class="Kw"&gt;ByRef&lt;/b&gt; dr &lt;b class="Kw"&gt;As&lt;/b&gt; DataRow)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Populate(CType(dr, Object))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Private&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; Populate(&lt;b class="Kw"&gt;ByRef&lt;/b&gt; dr &lt;b class="Kw"&gt;As&lt;/b&gt; Object)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID = &lt;b class="Kw"&gt;CInt&lt;/b&gt;(dr(&lt;b class="qs"&gt;"ID"&lt;/b&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Price = &lt;b class="Kw"&gt;CDec&lt;/b&gt;(dr(&lt;b class="qs"&gt;"Price"&lt;/b&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Status = &lt;b class="Kw"&gt;CByte&lt;/b&gt;(dr(&lt;b class="qs"&gt;"Status"&lt;/b&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;&lt;b class="Kw"&gt;Select&lt;/b&gt; Product by ID&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; SelectItem(&lt;b class="Kw"&gt;ByVal&lt;/b&gt; ProductID &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Call&lt;/b&gt; Initialize()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; ProductID = 0 &lt;b class="Kw"&gt;Then&lt;/b&gt; &lt;b class="Kw"&gt;Exit&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; cmd &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; GenericCommand(&lt;b class="qs"&gt;"SQLConn"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; rdr &lt;b class="Kw"&gt;As&lt;/b&gt; DbDataReader&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;'&lt;b class="Kw"&gt;Select&lt;/b&gt; Query&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.CommandText = &lt;b class="qs"&gt;"&lt;b class="Kw"&gt;Select&lt;/b&gt; Top 1 Products.* "&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; GetLang &amp;gt; &lt;b class="qs"&gt;""&lt;/b&gt; &lt;b class="Kw"&gt;Then&lt;/b&gt; cmd.CommandText += &lt;b class="qs"&gt;",Lang,Name,Description"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;'from&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.CommandText += &lt;b class="qs"&gt;" from Products"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; GetLang &amp;gt; &lt;b class="qs"&gt;""&lt;/b&gt; &lt;b class="Kw"&gt;Then&lt;/b&gt; cmd.CommandText += &lt;b class="qs"&gt;",ProductsDetails"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;'where&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.CommandText += &lt;b class="qs"&gt;" Where Products.ID=@ID"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; GetLang &amp;gt; &lt;b class="qs"&gt;""&lt;/b&gt; &lt;b class="Kw"&gt;Then&lt;/b&gt; cmd.CommandText += &lt;b class="qs"&gt;" &lt;b class="Kw"&gt;and&lt;/b&gt; ProductsDetails.ID=Products.ID &lt;b class="Kw"&gt;and&lt;/b&gt; Lang=@Lang"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@ID"&lt;/b&gt;, ProductID)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; GetLang &amp;gt; &lt;b class="qs"&gt;""&lt;/b&gt; &lt;b class="Kw"&gt;Then&lt;/b&gt; cmd.AddParam(&lt;b class="qs"&gt;"@Lang"&lt;/b&gt;, GetLang)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rdr = cmd.ExecuteReader()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; rdr.Read() &lt;b class="Kw"&gt;Then&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Populate(rdr)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; GetLang &amp;gt; &lt;b class="qs"&gt;""&lt;/b&gt; &lt;b class="Kw"&gt;Then&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;'' Add Detail&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; det &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; ProductDetail&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;det.Populate(rdr)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Details.Add(det)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;det = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;If&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;If&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rdr.Close()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rdr = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; GetLang = &lt;b class="qs"&gt;""&lt;/b&gt; &lt;b class="Kw"&gt;And&lt;/b&gt; GetLang IsNot &lt;b class="Kw"&gt;Nothing&lt;/b&gt; &lt;b class="Kw"&gt;And&lt;/b&gt; ID &amp;gt; 0 &lt;b class="Kw"&gt;Then&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Details.SelectItems(ID)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;If&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;Insert &lt;b class="Kw"&gt;new&lt;/b&gt; Product &lt;b class="Kw"&gt;and&lt;/b&gt; &lt;b class="Kw"&gt;get&lt;/b&gt; &lt;b class="Kw"&gt;new&lt;/b&gt; ID&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; InsertItem()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; ID &amp;lt;&amp;gt; 0 &lt;b class="Kw"&gt;Then&lt;/b&gt; &lt;b class="Kw"&gt;Exit&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; cmd &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; GenericCommand(&lt;b class="qs"&gt;"SQLConn"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.CommandText = &lt;b class="qs"&gt;"Insert Into Products (Price,Status) Values (@Price,@Status)"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@Price"&lt;/b&gt;, Price)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@Status"&lt;/b&gt;, Status)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID = &lt;b class="Kw"&gt;CInt&lt;/b&gt;(cmd.ExecuteIdentity())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;'Insert Details &lt;b class="Kw"&gt;if&lt;/b&gt; any&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;For&lt;/b&gt; i &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt; = 0 To Details.Count - 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;'first: &lt;b class="Kw"&gt;set&lt;/b&gt; &lt;b class="Kw"&gt;new&lt;/b&gt; ID &lt;b class="Kw"&gt;on&lt;/b&gt; details objects&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Details(i).ID = ID&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Details(i).UpdateOrInsertItem()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Next&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;Update Product&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; UpdateItem()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; ID = 0 &lt;b class="Kw"&gt;Then&lt;/b&gt; &lt;b class="Kw"&gt;Exit&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; cmd &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; GenericCommand(&lt;b class="qs"&gt;"SQLConn"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.CommandText = &lt;b class="qs"&gt;"Update Products &lt;b class="Kw"&gt;set&lt;/b&gt; Price=@Price,Status=@Status where ID=@ID"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@Price"&lt;/b&gt;, Price)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@Status"&lt;/b&gt;, Status)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@ID"&lt;/b&gt;, ID)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.ExecuteNonQuery()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;'Update Details &lt;b class="Kw"&gt;if&lt;/b&gt; any&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;For&lt;/b&gt; i &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt; = 0 To Details.Count - 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Details(i).UpdateOrInsertItem()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Next&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;Delete This product&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Sub&lt;/b&gt; DeleteItem()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; ID = 0 &lt;b class="Kw"&gt;Then&lt;/b&gt; &lt;b class="Kw"&gt;Exit&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; cmd &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; GenericCommand(&lt;b class="qs"&gt;"SQLConn"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.CommandText = &lt;b class="qs"&gt;"DELETE FROM Products WHERE ID=@ID"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;'will assume that you &lt;b class="Kw"&gt;set&lt;/b&gt; relationship between the 2 tables with 'cascade delete' to delete Details records when product &lt;b class="Kw"&gt;is&lt;/b&gt; deleted&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;' &lt;b class="Kw"&gt;or&lt;/b&gt; delete them by adding another query &lt;b class="qs"&gt;"DELETE FROM ProductsDetails WHERE ID=@ID"&lt;/b&gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@ID"&lt;/b&gt;, ID)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.ExecuteNonQuery()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Call&lt;/b&gt; Initialize()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Protected&lt;/b&gt; &lt;b class="Kw"&gt;Overrides&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; Finalize()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Details = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MyBase.Finalize()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Class&lt;/b&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The Entity Class for Products Details&lt;br /&gt;&lt;code&gt;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Class&lt;/b&gt; ProductDetail&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; ID &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; Lang &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;String&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; Name &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;String&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; Description &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;String&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt;()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Initialize()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt;(&lt;b class="Kw"&gt;ByVal&lt;/b&gt; ProductID &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;, &lt;b class="Kw"&gt;ByVal&lt;/b&gt; ProductLang &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;String&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SelectItem(ProductID, ProductLang)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;Initialize Fields&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; Initialize()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Lang = &lt;b class="qs"&gt;""&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Name = &lt;b class="qs"&gt;""&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Description = &lt;b class="qs"&gt;""&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;&lt;b class="Kw"&gt;Select&lt;/b&gt; Details by ID &lt;b class="Kw"&gt;and&lt;/b&gt; Lang&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; SelectItem(&lt;b class="Kw"&gt;ByVal&lt;/b&gt; ProductID &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;, &lt;b class="Kw"&gt;ByVal&lt;/b&gt; ProductLang &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;String&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Call&lt;/b&gt; Initialize()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; ProductID = 0 &lt;b class="Kw"&gt;Or&lt;/b&gt; ProductLang = &lt;b class="qs"&gt;""&lt;/b&gt; &lt;b class="Kw"&gt;Then&lt;/b&gt; &lt;b class="Kw"&gt;Exit&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; cmd &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; GenericCommand(&lt;b class="qs"&gt;"SQLConn"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; rdr &lt;b class="Kw"&gt;As&lt;/b&gt; DbDataReader&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.CommandText = &lt;b class="qs"&gt;"&lt;b class="Kw"&gt;Select&lt;/b&gt; Top 1 * from ProductsDetails Where ID=@ID &lt;b class="Kw"&gt;and&lt;/b&gt; Lang=@Lang"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@ID"&lt;/b&gt;, ProductID)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@Lang"&lt;/b&gt;, ProductLang)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rdr = cmd.ExecuteReader()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; rdr.Read() &lt;b class="Kw"&gt;Then&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Populate(rdr)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;If&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rdr.Close()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rdr = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Friend&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; Populate(&lt;b class="Kw"&gt;ByRef&lt;/b&gt; dr &lt;b class="Kw"&gt;As&lt;/b&gt; DbDataReader)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Populate(CType(dr, Object))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Friend&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; Populate(&lt;b class="Kw"&gt;ByRef&lt;/b&gt; dr &lt;b class="Kw"&gt;As&lt;/b&gt; DataRow)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Populate(CType(dr, Object))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Private&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; Populate(&lt;b class="Kw"&gt;ByRef&lt;/b&gt; dr &lt;b class="Kw"&gt;As&lt;/b&gt; Object)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID = &lt;b class="Kw"&gt;CInt&lt;/b&gt;(dr(&lt;b class="qs"&gt;"ID"&lt;/b&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Lang = dr(&lt;b class="qs"&gt;"Lang"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Name = dr(&lt;b class="qs"&gt;"Name"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Description = dr(&lt;b class="qs"&gt;"Description"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;Update Detail &lt;b class="Kw"&gt;or&lt;/b&gt; Insert Detail &lt;b class="Kw"&gt;if&lt;/b&gt; not there&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; UpdateOrInsertItem()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; ID = 0 &lt;b class="Kw"&gt;Or&lt;/b&gt; Lang = &lt;b class="qs"&gt;""&lt;/b&gt; &lt;b class="Kw"&gt;Then&lt;/b&gt; &lt;b class="Kw"&gt;Exit&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; cmd &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; GenericCommand(&lt;b class="qs"&gt;"SQLConn"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.CommandText = &lt;b class="qs"&gt;"Update ProductsDetails &lt;b class="Kw"&gt;set&lt;/b&gt; Name=@Name,Description=@Description where ID=@ID &lt;b class="Kw"&gt;and&lt;/b&gt; Lang=@Lang"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@Name"&lt;/b&gt;, Name)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@Description"&lt;/b&gt;, Description)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@ID"&lt;/b&gt;, ID)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@Lang"&lt;/b&gt;, Lang)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;'Try to update&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; cmd.ExecuteNonQuery() = 0 &lt;b class="Kw"&gt;Then&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;'&lt;b class="Kw"&gt;if&lt;/b&gt; affected rows=0 cause Detail record &lt;b class="Kw"&gt;is&lt;/b&gt; not there , &lt;b class="Kw"&gt;then&lt;/b&gt; Insert:&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.CommandText = &lt;b class="qs"&gt;"Insert Into ProductsDetails (ID,Lang,Name,Description) Values (@ID,@Lang,@Name,@Description)"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.ExecuteNonQuery()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;If&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;Delete This Detail&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Sub&lt;/b&gt; DeleteItem()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; ID = 0 &lt;b class="Kw"&gt;Or&lt;/b&gt; Lang = &lt;b class="qs"&gt;""&lt;/b&gt; &lt;b class="Kw"&gt;Then&lt;/b&gt; &lt;b class="Kw"&gt;Exit&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; cmd &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; GenericCommand(&lt;b class="qs"&gt;"SQLConn"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.CommandText = &lt;b class="qs"&gt;"DELETE FROM ProductsDetails WHERE ID=@ID &lt;b class="Kw"&gt;and&lt;/b&gt; Lang=@Lang"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@ID"&lt;/b&gt;, ID)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@Lang"&lt;/b&gt;, Lang)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.ExecuteNonQuery()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Call&lt;/b&gt; Initialize()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Class&lt;/b&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;and The Entity Collection Class for Products&lt;br /&gt;&lt;code&gt;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Class&lt;/b&gt; Products&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Inherits&lt;/b&gt; CollectionBase&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;PageSize=0 means no paging&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; PageSize &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;PageIndex=0 means no paging&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; PageIndex &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Private&lt;/b&gt; mPageCount &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;To &lt;b class="Kw"&gt;Get&lt;/b&gt; Top records &lt;b class="Kw"&gt;if&lt;/b&gt; larger than 0&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; TopRecords &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; GetLang &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;String&lt;/b&gt; = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt;(&lt;b class="Kw"&gt;Optional&lt;/b&gt; &lt;b class="Kw"&gt;ByVal&lt;/b&gt; Lang &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;String&lt;/b&gt; = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Call&lt;/b&gt; Initialize()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PageSize = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PageIndex = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TopRecords = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GetLang = Lang&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;Initialize collection&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; Initialize()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mPageCount = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List.Clear()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; ReadOnly &lt;b class="Kw"&gt;Property&lt;/b&gt; PageCount() &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Get&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Return&lt;/b&gt; mPageCount&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Get&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Property&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;Gets &lt;b class="Kw"&gt;or&lt;/b&gt; sets the element at the specified zero-based index&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Default&lt;/b&gt; &lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Property&lt;/b&gt; Item(&lt;b class="Kw"&gt;ByVal&lt;/b&gt; Index &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;) &lt;b class="Kw"&gt;As&lt;/b&gt; Product&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Get&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Return&lt;/b&gt; List.Item(Index)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Get&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Set&lt;/b&gt;(&lt;b class="Kw"&gt;ByVal&lt;/b&gt; value &lt;b class="Kw"&gt;As&lt;/b&gt; Product)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List.Item(Index) = value&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Set&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Property&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;Adds an object to the &lt;b class="Kw"&gt;end&lt;/b&gt; of the Collection&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Function&lt;/b&gt; Add(&lt;b class="Kw"&gt;ByVal&lt;/b&gt; Obj &lt;b class="Kw"&gt;As&lt;/b&gt; Product) &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Return&lt;/b&gt; List.Add(Obj)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Function&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;&lt;b class="Kw"&gt;Select&lt;/b&gt; Products by Status, More Search Params can be added..&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; SelectItems(&lt;b class="Kw"&gt;Optional&lt;/b&gt; &lt;b class="Kw"&gt;ByVal&lt;/b&gt; Status &lt;b class="Kw"&gt;As&lt;/b&gt; Product.ProductStatus = Product.ProductStatus.None)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Call&lt;/b&gt; Initialize()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; Top &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;String&lt;/b&gt; = &lt;b class="qs"&gt;""&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; TopRecords &amp;gt; 0 &lt;b class="Kw"&gt;Then&lt;/b&gt; Top = &lt;b class="qs"&gt;" TOP "&lt;/b&gt; &amp;amp; TopRecords &amp;amp; &lt;b class="qs"&gt;" "&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; PageSize &amp;gt; 0 &lt;b class="Kw"&gt;And&lt;/b&gt; PageIndex &amp;gt; 0 &lt;b class="Kw"&gt;Then&lt;/b&gt; Top = &lt;b class="qs"&gt;" TOP "&lt;/b&gt; &amp;amp; (PageIndex * PageSize) &amp;amp; &lt;b class="qs"&gt;" "&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; Cmd &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; GenericCommand(&lt;b class="qs"&gt;"SQLConn"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.PageSize = PageSize&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.PageIndex = PageIndex&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;'Count Query&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.CountCommandText = &lt;b class="qs"&gt;"&lt;b class="Kw"&gt;SELECT&lt;/b&gt; COUNT(*) from Products"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;'&lt;b class="Kw"&gt;Select&lt;/b&gt; Query&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.CommandText = &lt;b class="qs"&gt;"&lt;b class="Kw"&gt;SELECT&lt;/b&gt; "&lt;/b&gt; &amp;amp; Top &amp;amp; &lt;b class="qs"&gt;" Products.* "&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; GetLang &amp;gt; &lt;b class="qs"&gt;""&lt;/b&gt; &lt;b class="Kw"&gt;Then&lt;/b&gt; Cmd.CommandText += &lt;b class="qs"&gt;",Lang,Name,Description"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.CommandText += &lt;b class="qs"&gt;" from Products"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;'Detials Table ?&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; GetLang &amp;gt; &lt;b class="qs"&gt;""&lt;/b&gt; &lt;b class="Kw"&gt;Then&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.CountCommandText += &lt;b class="qs"&gt;",ProductsDetails"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.CommandText += &lt;b class="qs"&gt;",ProductsDetails"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;If&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;'Where&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.CountCommandText += &lt;b class="qs"&gt;" Where 0=0"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.CommandText += &lt;b class="qs"&gt;" Where 0=0"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;'Tables inner join ?&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; GetLang &amp;gt; &lt;b class="qs"&gt;""&lt;/b&gt; &lt;b class="Kw"&gt;Then&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.CountCommandText += &lt;b class="qs"&gt;" &lt;b class="Kw"&gt;and&lt;/b&gt; ProductsDetails.ID=Products.ID &lt;b class="Kw"&gt;and&lt;/b&gt; Lang=@Lang"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.CommandText += &lt;b class="qs"&gt;" &lt;b class="Kw"&gt;and&lt;/b&gt; ProductsDetails.ID=Products.ID &lt;b class="Kw"&gt;and&lt;/b&gt; Lang=@Lang"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.AddParam(&lt;b class="qs"&gt;"@Lang"&lt;/b&gt;, GetLang)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;If&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;'Status?&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; Status &amp;gt; 0 &lt;b class="Kw"&gt;Then&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.CountCommandText += &lt;b class="qs"&gt;" &lt;b class="Kw"&gt;and&lt;/b&gt; Status=@Status"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.CommandText += &lt;b class="qs"&gt;" &lt;b class="Kw"&gt;and&lt;/b&gt; Status=@Status"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.AddParam(&lt;b class="qs"&gt;"@Status"&lt;/b&gt;, Status)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;If&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; DT &lt;b class="Kw"&gt;As&lt;/b&gt; DataTable = Cmd.ExecuteDataTable(&lt;b class="qs"&gt;"Products"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mPageCount = Cmd.PageCount&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; p &lt;b class="Kw"&gt;As&lt;/b&gt; Product&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;For&lt;/b&gt; &lt;b class="Kw"&gt;Each&lt;/b&gt; row &lt;b class="Kw"&gt;As&lt;/b&gt; DataRow &lt;b class="Kw"&gt;In&lt;/b&gt; DT.Rows&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p = &lt;b class="Kw"&gt;New&lt;/b&gt; Product()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p.Populate(row)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; GetLang &amp;gt; &lt;b class="qs"&gt;""&lt;/b&gt; &lt;b class="Kw"&gt;Then&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p.Details = &lt;b class="Kw"&gt;New&lt;/b&gt; ProductsDetails&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; d &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; ProductDetail&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;d.Populate(row)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p.Details.Add(d)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;d = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;If&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Add(p)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Next&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DT = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Protected&lt;/b&gt; &lt;b class="Kw"&gt;Overrides&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; Finalize()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MyBase.Finalize()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Class&lt;/b&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;and The Entity Collection Class for ProductsDetails&lt;br /&gt;&lt;code&gt;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Class&lt;/b&gt; ProductsDetails&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Inherits&lt;/b&gt; CollectionBase&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;PageSize=0 means no paging&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; PageSize &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;PageIndex=0 means no paging&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; PageIndex &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Private&lt;/b&gt; mPageCount &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;To &lt;b class="Kw"&gt;Get&lt;/b&gt; Top records &lt;b class="Kw"&gt;if&lt;/b&gt; larger than 0&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; TopRecords &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt;()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Call&lt;/b&gt; Initialize()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PageSize = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PageIndex = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TopRecords = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;Initialize collection&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; Initialize()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mPageCount = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List.Clear()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; ReadOnly &lt;b class="Kw"&gt;Property&lt;/b&gt; PageCount() &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Get&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Return&lt;/b&gt; mPageCount&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Get&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Property&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;Gets &lt;b class="Kw"&gt;or&lt;/b&gt; sets the element at the specified zero-based index&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Default&lt;/b&gt; &lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Property&lt;/b&gt; Item(&lt;b class="Kw"&gt;ByVal&lt;/b&gt; Index &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;) &lt;b class="Kw"&gt;As&lt;/b&gt; ProductDetail&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Get&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Return&lt;/b&gt; List.Item(Index)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Get&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Set&lt;/b&gt;(&lt;b class="Kw"&gt;ByVal&lt;/b&gt; value &lt;b class="Kw"&gt;As&lt;/b&gt; ProductDetail)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List.Item(Index) = value&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Set&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Property&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;Adds an object to the &lt;b class="Kw"&gt;end&lt;/b&gt; of the Collection&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Function&lt;/b&gt; Add(&lt;b class="Kw"&gt;ByVal&lt;/b&gt; Obj &lt;b class="Kw"&gt;As&lt;/b&gt; ProductDetail) &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Return&lt;/b&gt; List.Add(Obj)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Function&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;&lt;b class="Kw"&gt;Select&lt;/b&gt; Products Details by ID &lt;b class="Kw"&gt;or&lt;/b&gt; Lang&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; SelectItems(&lt;b class="Kw"&gt;Optional&lt;/b&gt; &lt;b class="Kw"&gt;ByVal&lt;/b&gt; ID &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt; = 0, &lt;b class="Kw"&gt;Optional&lt;/b&gt; &lt;b class="Kw"&gt;ByVal&lt;/b&gt; Lang &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;String&lt;/b&gt; = &lt;b class="qs"&gt;""&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Call&lt;/b&gt; Initialize()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; Tbl &lt;b class="Kw"&gt;As&lt;/b&gt; DataTable&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; Top &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;String&lt;/b&gt; = &lt;b class="qs"&gt;""&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; TopRecords &amp;gt; 0 &lt;b class="Kw"&gt;Then&lt;/b&gt; Top = &lt;b class="qs"&gt;" TOP "&lt;/b&gt; &amp;amp; TopRecords &amp;amp; &lt;b class="qs"&gt;" "&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; PageSize &amp;gt; 0 &lt;b class="Kw"&gt;And&lt;/b&gt; PageIndex &amp;gt; 0 &lt;b class="Kw"&gt;Then&lt;/b&gt; Top = &lt;b class="qs"&gt;" TOP "&lt;/b&gt; &amp;amp; (PageIndex * PageSize) &amp;amp; &lt;b class="qs"&gt;" "&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; Cmd &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; GenericCommand(&lt;b class="qs"&gt;"SQLConn"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.PageSize = PageSize&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.PageIndex = PageIndex&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.CountCommandText = &lt;b class="qs"&gt;"&lt;b class="Kw"&gt;SELECT&lt;/b&gt; COUNT(*) FROM ProductsDetails where 0=0"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.CommandText = &lt;b class="qs"&gt;"&lt;b class="Kw"&gt;SELECT&lt;/b&gt; "&lt;/b&gt; &amp;amp; Top &amp;amp; &lt;b class="qs"&gt;" * FROM ProductsDetails where 0=0"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; ID &amp;gt; 0 &lt;b class="Kw"&gt;Then&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.CountCommandText += &lt;b class="qs"&gt;" &lt;b class="Kw"&gt;and&lt;/b&gt; ID=@ID"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.CommandText += &lt;b class="qs"&gt;" &lt;b class="Kw"&gt;and&lt;/b&gt; ID=@ID"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.AddParam(&lt;b class="qs"&gt;"@ID"&lt;/b&gt;, ID)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;If&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; Lang &amp;gt; &lt;b class="qs"&gt;""&lt;/b&gt; &lt;b class="Kw"&gt;Then&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.CountCommandText += &lt;b class="qs"&gt;" &lt;b class="Kw"&gt;and&lt;/b&gt; Lang=@Lang"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.CommandText += &lt;b class="qs"&gt;" where Lang=@Lang"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.AddParam(&lt;b class="qs"&gt;"@Lang"&lt;/b&gt;, Lang)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;If&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Tbl = Cmd.ExecuteDataTable(&lt;b class="qs"&gt;"ProductsDetails"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mPageCount = Cmd.PageCount&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; d &lt;b class="Kw"&gt;As&lt;/b&gt; ProductDetail&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;For&lt;/b&gt; &lt;b class="Kw"&gt;Each&lt;/b&gt; Row &lt;b class="Kw"&gt;As&lt;/b&gt; DataRow &lt;b class="Kw"&gt;In&lt;/b&gt; Tbl.Rows&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;d = &lt;b class="Kw"&gt;New&lt;/b&gt; ProductDetail()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;d.Populate(Row)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Add(d)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;d = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Next&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Tbl = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Protected&lt;/b&gt; &lt;b class="Kw"&gt;Overrides&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; Finalize()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MyBase.Finalize()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Class&lt;/b&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;A sample of usage to select a product and one Language detail:&lt;br /&gt;&lt;code&gt;&lt;b class="Kw"&gt;Dim&lt;/b&gt; P &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; Product(&lt;b class="qs"&gt;"EN"&lt;/b&gt;, 100)&lt;br /&gt;Response.Write(&lt;b class="qs"&gt;"ID="&lt;/b&gt; &amp;amp; P.ID)&lt;br /&gt;Response.Write(&lt;b class="qs"&gt;"Status="&lt;/b&gt; &amp;amp; P.Status)&lt;br /&gt;Response.Write(&lt;b class="qs"&gt;"Lang="&lt;/b&gt; &amp;amp; P.Detail.Lang)&lt;br /&gt;Response.Write(&lt;b class="qs"&gt;"Name="&lt;/b&gt; &amp;amp; P.Detail.Name)&lt;br /&gt;Response.Write(&lt;b class="qs"&gt;"Description="&lt;/b&gt; &amp;amp; P.Detail.Description)&lt;br /&gt;P = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;A sample to select a product and all Language details:&lt;br /&gt;&lt;code&gt;&lt;b class="Kw"&gt;Dim&lt;/b&gt; P &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; Product(&lt;b class="qs"&gt;""&lt;/b&gt;, 100)&lt;br /&gt;Response.Write(&lt;b class="qs"&gt;"ID="&lt;/b&gt; &amp;amp; P.ID)&lt;br /&gt;Response.Write(&lt;b class="qs"&gt;"Status="&lt;/b&gt; &amp;amp; P.Status)&lt;br /&gt;Response.Write(&lt;b class="qs"&gt;"Name="&lt;/b&gt; &amp;amp; P.Detail(&lt;b class="qs"&gt;"EN"&lt;/b&gt;).Name)&lt;br /&gt;Response.Write(&lt;b class="qs"&gt;"Name="&lt;/b&gt; &amp;amp; P.Detail(&lt;b class="qs"&gt;"RU"&lt;/b&gt;).Name)&lt;br /&gt;P = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;A sample to insert new product&lt;br /&gt;&lt;code&gt;&lt;b class="Kw"&gt;Dim&lt;/b&gt; p &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; Product&lt;br /&gt;p.Price = 1000&lt;br /&gt;&lt;br /&gt;&lt;b class="Kw"&gt;Dim&lt;/b&gt; pd &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; ProductDetail&lt;br /&gt;pd.Lang = &lt;b class="qs"&gt;"EN"&lt;/b&gt;&lt;br /&gt;pd.Name = &lt;b class="qs"&gt;"Product 1"&lt;/b&gt;&lt;br /&gt;p.Details.Add(pd)&lt;br /&gt;&lt;br /&gt;pd = &lt;b class="Kw"&gt;New&lt;/b&gt; ProductDetail&lt;br /&gt;pd.Lang = &lt;b class="qs"&gt;"RU"&lt;/b&gt;&lt;br /&gt;pd.Name = &lt;b class="qs"&gt;"Продукт 1"&lt;/b&gt;&lt;br /&gt;p.Details.Add(pd)&lt;br /&gt;&lt;br /&gt;p.InsertItem()&lt;br /&gt;&lt;br /&gt;Response.Write(&lt;b class="qs"&gt;"id="&lt;/b&gt; &amp;amp; p.ID)&lt;br /&gt;p = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;pd = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And a Sample of usage to select list of products and one language detail with paging&lt;br /&gt;&lt;code&gt;&lt;b class="Kw"&gt;Dim&lt;/b&gt; Ps &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; Products(&lt;b class="qs"&gt;"RU"&lt;/b&gt;)&lt;br /&gt;Ps.PageSize = 10&lt;br /&gt;Ps.PageIndex = 2&lt;br /&gt;Ps.SelectItems()&lt;br /&gt;&lt;b class="Kw"&gt;For&lt;/b&gt; i &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt; = 0 To Ps.Count - 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; p &lt;b class="Kw"&gt;As&lt;/b&gt; Product = Ps(i)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Response.Write(&lt;b class="qs"&gt;"ID="&lt;/b&gt; &amp;amp; p.ID)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Response.Write(&lt;b class="qs"&gt;"Name="&lt;/b&gt; &amp;amp; p.Detail.Name)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Response.Write(&lt;b class="qs"&gt;"&amp;lt;hr&amp;gt;"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;p = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&lt;b class="Kw"&gt;Next&lt;/b&gt;&lt;br /&gt;WriteLn(&lt;b class="qs"&gt;"PageCount="&lt;/b&gt; &amp;amp; Ps.PageCount)&lt;br /&gt;Ps = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;As Before, DAL uses a very helpful generic Command class to [&lt;a href="http://www.moretechtips.net/2008/10/writing-generic-data-access-code-in.html"&gt;Write Less &amp; Generic Data Access Code in ADO.NET 2.0&lt;/a&gt;].&lt;br /&gt;&lt;br /&gt;That is it! Hope that was helpful, Also if you have a better approach to this design pattern I would be glad to hear your ideas..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-5667995950453370082?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/klrUPdqjOQB8eQMGkv43zhK53S8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/klrUPdqjOQB8eQMGkv43zhK53S8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/klrUPdqjOQB8eQMGkv43zhK53S8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/klrUPdqjOQB8eQMGkv43zhK53S8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=Q-3SXphn4AQ:DKQfW-ZvmNk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=Q-3SXphn4AQ:DKQfW-ZvmNk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=Q-3SXphn4AQ:DKQfW-ZvmNk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=Q-3SXphn4AQ:DKQfW-ZvmNk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=Q-3SXphn4AQ:DKQfW-ZvmNk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=Q-3SXphn4AQ:DKQfW-ZvmNk:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=Q-3SXphn4AQ:DKQfW-ZvmNk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=Q-3SXphn4AQ:DKQfW-ZvmNk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/Q-3SXphn4AQ" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2009/01/creating-data-access-layer-for-multi.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/5667995950453370082?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/5667995950453370082?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/Q-3SXphn4AQ/creating-data-access-layer-for-multi.html" title="Creating Data Access Layer for A Multi-Language ASP.Net Application" /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.moretechtips.net/2009/01/creating-data-access-layer-for-multi.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QBRXo5fyp7ImA9WxNRFks.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-7451049255379177806</id><published>2009-01-01T01:01:00.008Z</published><updated>2009-09-11T11:42:34.427Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-11T11:42:34.427Z</app:edited><title>Contact</title><content type="html">Use the following form to contact me, and I'll reply to you asap..&lt;br /&gt;
&lt;br /&gt;
Need a free SEO advice or have technical question.. shoot.&lt;br /&gt;
&lt;br /&gt;
&lt;script type="text/javascript"&gt; id = 17011; &lt;/script&gt;&lt;br /&gt;
&lt;script type="text/javascript" src="http://kontactr.com/wp.js"&gt;&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
If the contact form is not working with you.. send your email to: mike [at] moretechtips.net&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-7451049255379177806?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GVSX1CfLG6i_WSVnFgYd-pGoByw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GVSX1CfLG6i_WSVnFgYd-pGoByw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GVSX1CfLG6i_WSVnFgYd-pGoByw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GVSX1CfLG6i_WSVnFgYd-pGoByw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=QcYq4HR1z4g:CUR9cJJzcs4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=QcYq4HR1z4g:CUR9cJJzcs4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=QcYq4HR1z4g:CUR9cJJzcs4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=QcYq4HR1z4g:CUR9cJJzcs4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=QcYq4HR1z4g:CUR9cJJzcs4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=QcYq4HR1z4g:CUR9cJJzcs4:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=QcYq4HR1z4g:CUR9cJJzcs4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=QcYq4HR1z4g:CUR9cJJzcs4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/QcYq4HR1z4g" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/7451049255379177806?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/7451049255379177806?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/QcYq4HR1z4g/contact.html" title="Contact" /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><feedburner:origLink>http://www.moretechtips.net/2009/01/contact.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4BRXs7eSp7ImA9WxVWEUo.&quot;"><id>tag:blogger.com,1999:blog-965058134986433841.post-8387586341483199781</id><published>2008-12-12T00:22:00.004Z</published><updated>2009-02-21T00:42:34.501Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-21T00:42:34.501Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="VB.Net" /><category scheme="http://www.blogger.com/atom/ns#" term="DAL" /><category scheme="http://www.blogger.com/atom/ns#" term="Paging" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.Net" /><category scheme="http://www.blogger.com/atom/ns#" term="OOP" /><category scheme="http://www.blogger.com/atom/ns#" term="ADO.Net" /><title>Traditional yet Powerful : Data Access Layer for ASP.Net</title><content type="html">Since I posted [&lt;a href="http://www.moretechtips.net/2008/11/data-access-layer-for-classic-asp.html"&gt;Data Access Layer for Classic ASP&lt;/a&gt;], I've been trying to find time to post the ASP.Net version too..&lt;br /&gt;&lt;br /&gt;This is a complete example of creating Data Access Layer(DAL) using the traditional yet powerful "Object to Relational mapping model" or "Custom Entity Classes" that support Paging too..&lt;br /&gt;&lt;br /&gt;Many people talk about using the Datasets method for creating a DAL as in [&lt;a href="http://msdn.microsoft.com/en-us/library/aa581778.aspx"&gt;Tutorial 1: Creating a Data Access Layer&lt;/a&gt;] and how it is fast to generate. &lt;br /&gt;but for me the Traditional 'Object to Relational mapping' model seems more simpler to work with and to extend, and about the slow creation time issue: as a developer you know that creating these classes for the 2nd time things gets more faster, most of its code is cut+paste-friendly and there are software that would generate it for you too..  &lt;br /&gt;They would also say that datasets method is data-source independent (no DBMS), not just database independent, well my proposed DAL is surely database independent and what are the chances that your application will move away from a DBMS? well,ZERO. and still those classes can encapsulate anything you want, even if data is saved in csv files.&lt;br /&gt;&lt;br /&gt;The 'Object to Relational mapping' model consists of :&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Entity Class&lt;/span&gt; - represents a single record or row from a database resultset.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Entity Collection Class&lt;/span&gt; - contains a collection of entity objects or a tabular list of data from a resultset.&lt;br /&gt;&lt;br /&gt;Add to that, DAL uses a very helpful generic Command class i posted before to [&lt;a href="http://www.moretechtips.net/2008/10/writing-generic-data-access-code-in.html"&gt;Write Less &amp;amp; Generic Data Access Code in ADO.NET 2.0&lt;/a&gt;].&lt;br /&gt;&lt;br /&gt;As an example of DAL, we'll use a simple Table of 'Products', here is the SQL Create script:&lt;br /&gt;&lt;code&gt;CREATE TABLE [Products] (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;[ID] [&lt;b class="Kw"&gt;int&lt;/b&gt;] &lt;b class="Kw"&gt;PRIMARY&lt;/b&gt; &lt;b class="Kw"&gt;KEY&lt;/b&gt; &lt;b class="Kw"&gt;IDENTITY&lt;/b&gt;(1, 1),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Name] [&lt;b class="Kw"&gt;varchar&lt;/b&gt;] (50) &lt;b class="Kw"&gt;NOT&lt;/b&gt; &lt;b class="Kw"&gt;NULL&lt;/b&gt; &lt;b class="Kw"&gt;DEFAULT&lt;/b&gt; (''),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Description] [&lt;b class="Kw"&gt;varchar&lt;/b&gt;] (500) &lt;b class="Kw"&gt;NOT&lt;/b&gt; &lt;b class="Kw"&gt;NULL&lt;/b&gt; &lt;b class="Kw"&gt;DEFAULT&lt;/b&gt; (''),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Status] [&lt;b class="Kw"&gt;tinyint&lt;/b&gt;] &lt;b class="Kw"&gt;NOT&lt;/b&gt; &lt;b class="Kw"&gt;NULL&lt;/b&gt; &lt;b class="Kw"&gt;DEFAULT&lt;/b&gt; (0),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Price] [&lt;b class="Kw"&gt;decimal&lt;/b&gt;](18, 0) &lt;b class="Kw"&gt;NOT&lt;/b&gt; &lt;b class="Kw"&gt;NULL&lt;/b&gt; &lt;b class="Kw"&gt;DEFAULT&lt;/b&gt; (0)&lt;br /&gt;)&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The Entity Class&lt;br /&gt;&lt;code&gt;&lt;b class="Kw"&gt;Imports&lt;/b&gt; System.Data&lt;br /&gt;&lt;b class="Kw"&gt;Imports&lt;/b&gt; System.Data.Common&lt;br /&gt;&lt;b class="Kw"&gt;Imports&lt;/b&gt; Microsoft.VisualBasic&lt;br /&gt;&lt;br /&gt;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Class&lt;/b&gt; Product&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;'' Table Fields&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; ID &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; Name &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;String&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; Description &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;String&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; Price &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Decimal&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; Status &lt;b class="Kw"&gt;As&lt;/b&gt; ProductStatus&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Enum&lt;/b&gt; ProductStatus&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;None = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Active = 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Inactive = 2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Enum&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt;(&lt;b class="Kw"&gt;Optional&lt;/b&gt; &lt;b class="Kw"&gt;ByVal&lt;/b&gt; ProductID &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt; = 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SelectItem(ProductID)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;Initialize Product Fields&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; Initialize()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Name = &lt;b class="qs"&gt;""&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Description = &lt;b class="qs"&gt;""&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Price = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Status = ProductStatus.Active&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Friend&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; Populate(&lt;b class="Kw"&gt;ByRef&lt;/b&gt; dr &lt;b class="Kw"&gt;As&lt;/b&gt; DbDataReader)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Populate(CType(dr, Object))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Friend&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; Populate(&lt;b class="Kw"&gt;ByRef&lt;/b&gt; dr &lt;b class="Kw"&gt;As&lt;/b&gt; DataRow)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Populate(CType(dr, Object))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Private&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; Populate(&lt;b class="Kw"&gt;ByRef&lt;/b&gt; dr &lt;b class="Kw"&gt;As&lt;/b&gt; Object)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID = &lt;b class="Kw"&gt;CInt&lt;/b&gt;(dr(&lt;b class="qs"&gt;"ID"&lt;/b&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Name = dr(&lt;b class="qs"&gt;"Name"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Description = dr(&lt;b class="qs"&gt;"Description"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Price = &lt;b class="Kw"&gt;CDec&lt;/b&gt;(dr(&lt;b class="qs"&gt;"Price"&lt;/b&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Status = &lt;b class="Kw"&gt;CByte&lt;/b&gt;(dr(&lt;b class="qs"&gt;"Status"&lt;/b&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;&lt;b class="Kw"&gt;Select&lt;/b&gt; Product by ID&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; SelectItem(&lt;b class="Kw"&gt;ByVal&lt;/b&gt; ProductID &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Call&lt;/b&gt; Initialize()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; ProductID = 0 &lt;b class="Kw"&gt;Then&lt;/b&gt; &lt;b class="Kw"&gt;Exit&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; cmd &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; GenericCommand(&lt;b class="qs"&gt;"SQLConn"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; rdr &lt;b class="Kw"&gt;As&lt;/b&gt; DbDataReader&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.CommandText = &lt;b class="qs"&gt;"&lt;b class="Kw"&gt;Select&lt;/b&gt; Top 1 * from Products Where ID=@ID"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@ID"&lt;/b&gt;, ProductID)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rdr = cmd.ExecuteReader()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; rdr.Read() &lt;b class="Kw"&gt;Then&lt;/b&gt; Populate(rdr)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rdr.Close()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rdr = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;Insert &lt;b class="Kw"&gt;new&lt;/b&gt; Product &lt;b class="Kw"&gt;and&lt;/b&gt; &lt;b class="Kw"&gt;get&lt;/b&gt; &lt;b class="Kw"&gt;new&lt;/b&gt; Identity&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; InsertItem()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; ID &amp;lt;&amp;gt; 0 &lt;b class="Kw"&gt;Then&lt;/b&gt; &lt;b class="Kw"&gt;Exit&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; cmd &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; GenericCommand(&lt;b class="qs"&gt;"SQLConn"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.CommandText = &lt;b class="qs"&gt;"Insert Into Products (Name,Description,Price,Status) Values (@Name,@Description,@Price,@Status)"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@Name"&lt;/b&gt;, Name)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@Description"&lt;/b&gt;, Description)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@Price"&lt;/b&gt;, Price)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@Status"&lt;/b&gt;, Status)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID = &lt;b class="Kw"&gt;CInt&lt;/b&gt;(cmd.ExecuteIdentity())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;Update Product&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; UpdateItem()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; ID = 0 &lt;b class="Kw"&gt;Then&lt;/b&gt; &lt;b class="Kw"&gt;Exit&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; cmd &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; GenericCommand(&lt;b class="qs"&gt;"SQLConn"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.CommandText = &lt;b class="qs"&gt;"Update Products &lt;b class="Kw"&gt;set&lt;/b&gt; Name=@Name,Description=@Description,Price=@Price,Status=@Status where ID=@ID"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@Name"&lt;/b&gt;, Name)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@Description"&lt;/b&gt;, Description)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@Price"&lt;/b&gt;, Price)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@Status"&lt;/b&gt;, Status)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@ID"&lt;/b&gt;, ID)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.ExecuteNonQuery()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;Delete This product&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Sub&lt;/b&gt; DeleteItem()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; ID = 0 &lt;b class="Kw"&gt;Then&lt;/b&gt; &lt;b class="Kw"&gt;Exit&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; cmd &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; GenericCommand(&lt;b class="qs"&gt;"SQLConn"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.CommandText = &lt;b class="qs"&gt;"DELETE FROM Products WHERE ID=@ID"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.AddParam(&lt;b class="qs"&gt;"@ID"&lt;/b&gt;, ID)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.ExecuteNonQuery()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Call&lt;/b&gt; Initialize()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Class&lt;/b&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;and The Entity Collection Class&lt;br /&gt;&lt;code&gt;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Class&lt;/b&gt; Products&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Inherits&lt;/b&gt; CollectionBase&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;PageSize=0 means no paging&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; PageSize &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;PageIndex=0 means no paging&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; PageIndex &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Private&lt;/b&gt; mPageCount &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;To &lt;b class="Kw"&gt;Get&lt;/b&gt; Top records &lt;b class="Kw"&gt;if&lt;/b&gt; larger than 0&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; TopRecords &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt;()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Call&lt;/b&gt; Initialize()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PageSize = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PageIndex = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TopRecords = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;clear collection&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; Initialize()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mPageCount = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List.Clear()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;Gets &lt;b class="Kw"&gt;or&lt;/b&gt; sets the element at the specified zero-based index&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Default&lt;/b&gt; &lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Property&lt;/b&gt; Item(&lt;b class="Kw"&gt;ByVal&lt;/b&gt; Index &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;) &lt;b class="Kw"&gt;As&lt;/b&gt; Product&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Get&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Return&lt;/b&gt; List.Item(Index)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Get&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Set&lt;/b&gt;(&lt;b class="Kw"&gt;ByVal&lt;/b&gt; value &lt;b class="Kw"&gt;As&lt;/b&gt; Product)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List.Item(Index) = value&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Set&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Property&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;Adds an object to the &lt;b class="Kw"&gt;end&lt;/b&gt; of the Collection&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Function&lt;/b&gt; Add(&lt;b class="Kw"&gt;ByVal&lt;/b&gt; Obj &lt;b class="Kw"&gt;As&lt;/b&gt; Product) &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Return&lt;/b&gt; List.Add(Obj)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Function&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Cm"&gt;''' &amp;lt;summary&amp;gt;&lt;b class="Kw"&gt;Select&lt;/b&gt; Products by Status, More Search Params can be added..&amp;lt;/summary&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; SelectItems(&lt;b class="Kw"&gt;Optional&lt;/b&gt; &lt;b class="Kw"&gt;ByVal&lt;/b&gt; Status &lt;b class="Kw"&gt;As&lt;/b&gt; Product.ProductStatus = Product.ProductStatus.None)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Call&lt;/b&gt; Initialize()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; Tbl &lt;b class="Kw"&gt;As&lt;/b&gt; DataTable&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; Top &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;String&lt;/b&gt; = &lt;b class="qs"&gt;""&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; TopRecords &amp;gt; 0 &lt;b class="Kw"&gt;Then&lt;/b&gt; Top = &lt;b class="qs"&gt;"TOP "&lt;/b&gt; &amp;amp; TopRecords&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; PageSize &amp;gt; 0 &lt;b class="Kw"&gt;And&lt;/b&gt; PageIndex &amp;gt; 0 &lt;b class="Kw"&gt;Then&lt;/b&gt; Top = &lt;b class="qs"&gt;"TOP "&lt;/b&gt; &amp;amp; (PageIndex * PageSize)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; Cmd &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; GenericCommand(&lt;b class="qs"&gt;"SQLConn"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.PageSize = PageSize&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.PageIndex = PageIndex&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.CountCommandText = &lt;b class="qs"&gt;"&lt;b class="Kw"&gt;SELECT&lt;/b&gt; COUNT(*) FROM Products"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.CommandText = &lt;b class="qs"&gt;"&lt;b class="Kw"&gt;SELECT&lt;/b&gt; "&lt;/b&gt; &amp;amp; Top &amp;amp; &lt;b class="qs"&gt;" * FROM Products"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;If&lt;/b&gt; Status &amp;gt; 0 &lt;b class="Kw"&gt;Then&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.CountCommandText += &lt;b class="qs"&gt;" where Status=@Status"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.CommandText += &lt;b class="qs"&gt;" where Status=@Status"&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd.AddParam(&lt;b class="qs"&gt;"@Status"&lt;/b&gt;, Status)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;If&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Tbl = Cmd.ExecuteDataTable(&lt;b class="qs"&gt;"Products"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mPageCount = Cmd.PageCount&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; p &lt;b class="Kw"&gt;As&lt;/b&gt; Product&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;For&lt;/b&gt; &lt;b class="Kw"&gt;Each&lt;/b&gt; Row &lt;b class="Kw"&gt;As&lt;/b&gt; DataRow &lt;b class="Kw"&gt;In&lt;/b&gt; Tbl.Rows&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p = &lt;b class="Kw"&gt;New&lt;/b&gt; Product&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p.Populate(Row)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Add(p)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Next&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Tbl = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cmd = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Public&lt;/b&gt; ReadOnly &lt;b class="Kw"&gt;Property&lt;/b&gt; PageCount() &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Get&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Return&lt;/b&gt; mPageCount&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Get&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Property&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Protected&lt;/b&gt; &lt;b class="Kw"&gt;Overrides&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt; Finalize()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MyBase.Finalize()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Sub&lt;/b&gt;&lt;br /&gt;&lt;b class="Kw"&gt;End&lt;/b&gt; &lt;b class="Kw"&gt;Class&lt;/b&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;A Sample of usage to insert a product:&lt;br /&gt;&lt;code&gt;&lt;b class="Kw"&gt;Dim&lt;/b&gt; p &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; Product&lt;br /&gt;p.Name = &lt;b class="qs"&gt;"Product1"&lt;/b&gt;&lt;br /&gt;p.Status = Product.ProductStatus.Active&lt;br /&gt;p.InsertItem()&lt;br /&gt;Response.Write(p.ID &amp;amp; &lt;b class="qs"&gt;":"&lt;/b&gt; &amp;amp; p.Name)&lt;br /&gt;p = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And a Sample of usage to select list of products with paging&lt;br /&gt;&lt;code&gt;&lt;b class="Kw"&gt;Dim&lt;/b&gt; ps &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;New&lt;/b&gt; Products&lt;br /&gt;ps.PageSize = 10&lt;br /&gt;ps.PageIndex = 2&lt;br /&gt;ps.SelectItems(Product.ProductStatus.Active)&lt;br /&gt;&lt;b class="Kw"&gt;For&lt;/b&gt; i &lt;b class="Kw"&gt;As&lt;/b&gt; &lt;b class="Kw"&gt;Integer&lt;/b&gt; = 0 To ps.Count - 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b class="Kw"&gt;Dim&lt;/b&gt; p &lt;b class="Kw"&gt;As&lt;/b&gt; Product = ps(i)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Response.Write(p.ID &amp;amp; &lt;b class="qs"&gt;":"&lt;/b&gt; &amp;amp; p.Name &amp;amp; &lt;b class="qs"&gt;"&amp;lt;br&amp;gt;"&lt;/b&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;p = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;br /&gt;&lt;b class="Kw"&gt;Next&lt;/b&gt;&lt;br /&gt;Response.Write(&lt;b class="qs"&gt;"PageCount: "&lt;/b&gt; &amp;amp; ps.PageCount)&lt;br /&gt;ps = &lt;b class="Kw"&gt;Nothing&lt;/b&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Also note that the paging method used in the collection class is DataSet paging method&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;, to read more about paging methods comparison and tweaking: please check [&lt;a href="http://www.moretechtips.net/2008/09/paging-in-asp-and-aspnet.html"&gt;Paging in ASP and ASP.Net&lt;/a&gt;].&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/965058134986433841-8387586341483199781?l=www.moretechtips.net'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QafSbSFynQfBsG-MU4baqXNq2NA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QafSbSFynQfBsG-MU4baqXNq2NA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QafSbSFynQfBsG-MU4baqXNq2NA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QafSbSFynQfBsG-MU4baqXNq2NA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=Uq4wwNbBw2k:GeAhXmisA3A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=Uq4wwNbBw2k:GeAhXmisA3A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=Uq4wwNbBw2k:GeAhXmisA3A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=Uq4wwNbBw2k:GeAhXmisA3A:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?i=Uq4wwNbBw2k:GeAhXmisA3A:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=Uq4wwNbBw2k:GeAhXmisA3A:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=Uq4wwNbBw2k:GeAhXmisA3A:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/MoreTechTips?a=Uq4wwNbBw2k:GeAhXmisA3A:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/MoreTechTips?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/MoreTechTips/~4/Uq4wwNbBw2k" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.moretechtips.net/2008/12/traditional-yet-powerful-data-access.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/8387586341483199781?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/965058134986433841/posts/default/8387586341483199781?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MoreTechTips/~3/Uq4wwNbBw2k/traditional-yet-powerful-data-access.html" title="Traditional yet Powerful : Data Access Layer for ASP.Net" /><author><name>Mike</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="03051074036354743133" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.moretechtips.net/2008/12/traditional-yet-powerful-data-access.html</feedburner:origLink></entry></feed>
