Page Number Navigation For Blogger

Blogger uses a pretty limited navigation features that only display “Older Posts” or “Newer Posts” link to let readers navigate and browse to other pages on homepage, archive, category and label pages.

However, it’s still possible to change and replace to the Page Number Navigation, as illustrated in figure by using a CSS and JavaScript hack wrote by Mohamed Rias and recenly js was updated by Abu Farhan.
Thanks to Mohamed Rias and Abu Farhan.

To add the “new” navigation link with Page Number Navigation to Blogger,
follow the guide below:
Login to Blogger account Dashboard.
Click on the Layout link for the blog that you want to modify (if you’re viewing the blog and logged in to Blogger or Google Account, just Click on Customize on the Next Blog toolbar).
Go to Edit HTML tab (there is no need to expand widget templates).
Search for the following line:

]]></b:skin>

Copy the following CSS code and paste or append the code above the line:

.showpageArea {padding: 0 2px;margin-bottom:10px;margin-top:10px;
}
.showpageArea a {border: 1px solid #505050;
color: #000000;font-weight:normal;
padding: 3px 6px !important;
padding: 1px 4px ;margin:0px 4px;
text-decoration: none;
}
.showpageArea a:hover {
font-size:11px;
border: 1px solid #333;
color: #000000;
background-color: #FFFFFF;
}
.showpageNum a {border: 1px solid #505050;
color: #000000;font-weight:normal;
padding: 3px 6px !important;
padding: 1px 4px ;margin:0px 4px;
text-decoration: none;
}
.showpageNum a:hover {
font-size:11px;
border: 1px solid #333;
color: #000000;
background-color: #FFFFFF;
}
.showpagePoint {font-size:11px;
padding: 2px 4px 2px 4px;
margin: 2px;
font-weight: bold;
border: 1px solid #333;
color: #fff;
background-color: #000000;
}
.showpage a:hover {font-size:11px;
border: 1px solid #333;
color: #000000;
background-color: #FFFFFF;
}
.showpageNum a:link,.showpage a:link {
font-size:11px;
padding: 2px 4px 2px 4px;
margin: 2px;
text-decoration: none;
border: 1px solid #0066cc;
color: #0066cc;
background-color: #FFFFFF;
}
.showpageNum a:hover {font-size:11px;
border: 1px solid #333;
color: #000000;
background-color: #FFFFFF;
}

Next, search for the following line of code in the template’s HTML code:

<b:section class=’main’ id=’main’ showaddelement=’no’>
<b:widget id=’Blog1′ locked=’true’ title=’Blog Posts’ type=’Blog’/>
</b:section>

Add and append the following JavaScript code right after the </b:section> line:

<script type=’text/javascript’>
var home_page_url = location.href;

var pageCount=7;
var displayPageNum=5;
var upPageWord =’Previous’;
var downPageWord =’Next’;

function showpageCount(json) {
var thisUrl = home_page_url;
var htmlMap = new Array();
var thisNum = 1;
var postNum=1;
var itemCount = 0;
var fFlag = 0;
var eFlag = 0;
var html= ”;
var upPageHtml =”;
var downPageHtml =”;

for(var i=0, post; post = json.feed.entry[i]; i++) {

var timestamp1 = post.published.$t.substring(0,19)+post.published.$t.substring(23,29);
timestamp = encodeURIComponent(timestamp1);

var title = post.title.$t;

if(title!=”){
if(itemCount==0 (itemCount % pageCount ==(pageCount-1))){
if(thisUrl.indexOf(timestamp)!=-1 ){
thisNum = postNum;
}

if(title!=”) postNum++;
htmlMap[htmlMap.length] = ‘/search?updated-max=’+timestamp+’&amp;max-results=’+pageCount;
}
}
itemCount++;

}

for(var p =0;p&lt; htmlMap.length;p++){
if(p&gt;=(thisNum-displayPageNum-1) &amp;&amp; p&lt;(thisNum+displayPageNum)){
if(fFlag ==0 &amp;&amp; p == thisNum-2){
if(thisNum==2){
upPageHtml = ‘&lt;span class=&quot;showpage&quot;&gt;&lt;a href=&quot;/&quot;&gt;’+ upPageWord +’&lt;/a&gt;&lt;/span&gt;’;
}else{
upPageHtml = ‘&lt;span class=&quot;showpage&quot;&gt;&lt;a href=&quot;’+htmlMap[p]+’&quot;&gt;’+ upPageWord +’&lt;/a&gt;&lt;/span&gt;’;
}

fFlag++;
}

if(p==(thisNum-1)){
html += ‘&lt;span class=&quot;showpagePoint&quot;&gt;’+thisNum+’&lt;/span&gt;’;
}else{
if(p==0){
html += ‘&lt;span class=&quot;showpageNum&quot;&gt;&lt;a href=&quot;/&quot;&gt;1&lt;/a&gt;&lt;/span&gt;’;

}else{
html += ‘&lt;span class=&quot;showpageNum&quot;&gt;&lt;a href=&quot;’+htmlMap[p]+’&quot;&gt;’+ (p+1) +’&lt;/a&gt;&lt;/span&gt;’;
}
}

if(eFlag ==0 &amp;&amp; p == thisNum){
downPageHtml = ‘&lt;span class=&quot;showpage&quot;&gt; &lt;a href=&quot;’+htmlMap[p]+’&quot;&gt;’+ downPageWord +’&lt;/a&gt;&lt;/span&gt;’;
eFlag++;
}
}
}

if(thisNum&gt;1){
html = ”+upPageHtml+’ ‘+html +’ ‘;
}

html = ‘&lt;div class=&quot;showpageArea&quot;&gt;&lt;span style=&quot;COLOR: #000;&quot; class=&quot;showpageOf&quot;&gt; Pages (‘+(postNum-1)+’)&lt;/span&gt;’+html;

if(thisNum&lt;(postNum-1)){
html += downPageHtml;
}

if(postNum==1) postNum++;
html += ‘&lt;/div&gt;’;

var pageArea = document.getElementsByName(&quot;pageArea&quot;);
var blogPager = document.getElementById(&quot;blog-pager&quot;);

if(postNum &lt;= 2){
html =”;
}

for(var p =0;p&lt; pageArea.length;p++){
pageArea[p].innerHTML = html;
}

if(pageArea&amp;&amp;pageArea.length&gt;0){
html =”;
}

if(blogPager){
blogPager.innerHTML = html;
}

}

function showpageCount2(json) {

var thisUrl = home_page_url;
var htmlMap = new Array();
var isLablePage = thisUrl.indexOf(&quot;/search/label/&quot;)!=-1;
var thisLable = isLablePage ? thisUrl.substr(thisUrl.indexOf(&quot;/search/label/&quot;)+14,thisUrl.length) : &quot;&quot;;
thisLable = thisLable.indexOf(&quot;?&quot;)!=-1 ? thisLable.substr(0,thisLable.indexOf(&quot;?&quot;)) : thisLable;
var thisNum = 1;
var postNum=1;
var itemCount = 0;
var fFlag = 0;
var eFlag = 0;
var html= ”;
var upPageHtml =”;
var downPageHtml =”;

var labelHtml = ‘&lt;span class=&quot;showpageNum&quot;&gt;&lt;a href=&quot;/search/label/’+thisLable+’?&amp;max-results=’+pageCount+’&quot;&gt;’;
var thisUrl = home_page_url;

for(var i=0, post; post = json.feed.entry[i]; i++) {

var timestamp1 = post.published.$t.substring(0,19)+post.published.$t.substring(23,29);
timestamp = encodeURIComponent(timestamp1);

var title = post.title.$t;

if(title!=”){
if(itemCount==0 (itemCount % pageCount ==(pageCount-1))){
if(thisUrl.indexOf(timestamp)!=-1 ){
thisNum = postNum;
}

if(title!=”) postNum++;
htmlMap[htmlMap.length] = ‘/search/label/’+thisLable+’?updated-max=’+timestamp+’&amp;max-results=’+pageCount;

}
}
itemCount++;
}

for(var p =0;p&lt; htmlMap.length;p++){
if(p&gt;=(thisNum-displayPageNum-1) &amp;&amp; p&lt;(thisNum+displayPageNum)){
if(fFlag ==0 &amp;&amp; p == thisNum-2){
if(thisNum==2){
upPageHtml = labelHtml + upPageWord +’&lt;/a&gt;&lt;/span&gt;’;
}else{
upPageHtml = ‘&lt;span class=&quot;showpage&quot;&gt;&lt;a href=&quot;’+htmlMap[p]+’&quot;&gt;’+ upPageWord +’&lt;/a&gt;&lt;/span&gt;’;
}

fFlag++;
}

if(p==(thisNum-1)){
html += ‘&lt;span class=&quot;showpagePoint&quot;&gt;’+thisNum+’&lt;/span&gt;’;
}else{
if(p==0){
html = labelHtml+’1&lt;/a&gt;&lt;/span&gt;’;
}else{
html += ‘&lt;span class=&quot;showpageNum&quot;&gt;&lt;a href=&quot;’+htmlMap[p]+’&quot;&gt;’+ (p+1) +’&lt;/a&gt;&lt;/span&gt;’;
}
}

if(eFlag ==0 &amp;&amp; p == thisNum){
downPageHtml = ‘&lt;span class=&quot;showpage&quot;&gt; &lt;a href=&quot;’+htmlMap[p]+’&quot;&gt;’+ downPageWord +’&lt;/a&gt;&lt;/span&gt;’;
eFlag++;
}
}
}

if(thisNum&gt;1){
if(!isLablePage){
html = ”+upPageHtml+’ ‘+html +’ ‘;
}else{
html = ”+upPageHtml+’ ‘+html +’ ‘;
}
}

html = ‘&lt;div class=&quot;showpageArea&quot;&gt;&lt;span style=&quot;COLOR: #000;&quot; class=&quot;showpageOf&quot;&gt; Pages (‘+(postNum-1)+’)&lt;/span&gt;’+html;

if(thisNum&lt;(postNum-1)){
html += downPageHtml;
}

if(postNum==1) postNum++;
html += ‘&lt;/div&gt;’;

var pageArea = document.getElementsByName(&quot;pageArea&quot;);
var blogPager = document.getElementById(&quot;blog-pager&quot;);

if(postNum &lt;= 2){
html =”;
}

for(var p =0;p&lt; pageArea.length;p++){
pageArea[p].innerHTML = html;
}

if(pageArea&amp;&amp;pageArea.length&gt;0){
html =”;
}

if(blogPager){
blogPager.innerHTML = html;
}

}

</script>

<script type=’text/javascript’>

var thisUrl = home_page_url;
if (thisUrl.indexOf(&quot;/search/label/&quot;)!=-1){
if (thisUrl.indexOf(&quot;?updated-max&quot;)!=-1){
var lblname1 = thisUrl.substring(thisUrl.indexOf(&quot;/search/label/&quot;)+14,thisUrl.indexOf(&quot;?updated-max&quot;));
}else{
var lblname1 = thisUrl.substring(thisUrl.indexOf(&quot;/search/label/&quot;)+14,thisUrl.indexOf(&quot;?&amp;max&quot;));
}
}

var home_page = &quot;/&quot;;
if (thisUrl.indexOf(&quot;?q=&quot;)==-1 &amp;&amp; thisUrl.indexOf(&quot;.html&quot;)==-1){
if (thisUrl.indexOf(&quot;/search/label/&quot;)==-1){
document.write(‘&lt;script src=&quot;’+home_page+’feeds/posts/summary?alt=json-in-script&amp;callback=showpageCount&amp;max-results=99999&quot; &gt;&lt;\/script&gt;’)
}else{document.write(‘&lt;script src=&quot;’+home_page+’feeds/posts/full/-/’+lblname1+’?alt=json-in-script&amp;callback=showpageCount2&amp;max-results=99999&quot; &gt;&lt;\/script&gt;’)
}
}
</script>

In the code above you can edit this line only :
var pageCount=7;
var displayPageNum=5;

1 : var pageCount=7;
The Pagecount represents number of posts to be shown in single page. Change the digit to show as many pages you want.

2 : var displayPageNum=5;
The digit represents number of pages to be listed.
Modification Step for Label :
Add Label Gadget (Layout –> page elements –> Add Gadget –> Select Labels)
From Layout –> Edit HTML . Don’t Forget to backup your template (Download Full Template)
Search this code

<a expr:dir=’data:blog.languageDirection’ expr:href=’data:label.url’><data:label.name/></a>

Change to this code

<script type=’text/javascript’>
var lblname = &quot;<data:label.name/>&quot;;
lblname2 = encodeURIComponent(lblname);
var feedlink = '/search/label/' + lblname2+'?&amp;max-results=7';
document.write('&lt;a href=&quot;' + feedlink + '&quot;&gt;'+lblname+'&lt;/a&gt;'); </script>

Click on Preview button to ensure that no code error been found. No effect on the navigation hack can be seen though.
Click on Save Template to save the change.

Show related posts below each blogger post

Its essential tactic to show related Posts in Blogger, to improve usage statics and page views. If a definite number of related articles are shown at the bottom of each posts, there is chance for the reader to click on those links and head over to the next page. Related posts widget on Blogger depends on how you name your post labels .

1. Open your Blogger template’s Layout and select Edit HTML .
2. Download full template for future use .
3. Click on expand widgets templates.
4. Press Cntrl+F and search for

</head>

and insert the following script above that line

<style>
#related-posts {
float : left;
width : 500px;
margin-top:10px;
margin-left : 0px;
margin-bottom:15px;
margin-bottom:10px;
}
#related-posts .widget {
list-style-type : none;
margin : 5px 0px 5px 0px;
padding : 0px;
}
#related-posts .widget h2, #related-posts h2 {
color : #333333;
font-size : 13px;
font-weight : bold;
margin : 3px 0px 3px 0px;
padding : 0px 0px 0px 0px;
}
#related-posts ul {
border : medium none;
margin : 0px;
padding : 0px;
}
#related-posts ul li {
display : block;
margin : 0px;
padding-top : 0px;
padding-right : 0px;
padding-bottom : 1px;
padding-left : 0px;
margin-bottom : 0px;
line-height : 2em;
}
</style>

<script type=’text/javascript’>
//<![CDATA[
var relatedTitles = new Array();
var relatedTitlesNum = 0;
var relatedUrls = new Array();
function related_results_labels(json) {
for (var i = 0; i < json.feed.entry.length; i++) {
var entry = json.feed.entry[i];
relatedTitles[relatedTitlesNum] = entry.title.$t;
for (var k = 0; k < entry.link.length; k++) {
if (entry.link[k].rel == ‘alternate’) {
relatedUrls[relatedTitlesNum] = entry.link[k].href;
relatedTitlesNum++;
break;
}
}
}
}
function removeRelatedDuplicates() {
var tmp = new Array(0);
var tmp2 = new Array(0);
for(var i = 0; i < relatedUrls.length; i++) {
if(!contains(tmp, relatedUrls[i])) {
tmp.length += 1;
tmp[tmp.length – 1] = relatedUrls[i];
tmp2.length += 1;
tmp2[tmp2.length – 1] = relatedTitles[i];
}
}
relatedTitles = tmp2;
relatedUrls = tmp;
}
function contains(a, e) {
for(var j = 0; j < a.length; j++) if (a[j]==e) return true;
return false;
}
function printRelatedLabels() {
var r = Math.floor((relatedTitles.length – 1) * Math.random());
var i = 0;
document.write(‘<ul>’);
while (i < relatedTitles.length && i < 20) {
document.write(‘<li><a href=”‘ + relatedUrls[r] + ‘”>’ + relatedTitles[r] + ‘</a></li>’);
if (r < relatedTitles.length – 1) {
r++;
} else {
r = 0;
}
i++;
}
document.write(‘</ul>’);
}
//]]>
</script>

5. Similar to step 4, find out section

<p><data:post.body/></p>

Anything you post under this line would appear at end of each posts.
6. Now paste the following code below that line.

<b:if cond=’data:blog.pageType == “item”‘>
<div id=”related-posts”>
<h2>Other Related Posts on <b:loop values=’data:post.labels’ var=’label’><data:label.name/><b:if cond=’data:label.isLast != &quot;true&quot;’>,</b:if><b:if cond=’data:blog.pageType == &quot;item&quot;’>
<script expr:src=’&quot;/feeds/posts/default/-/&quot; + data:label.name + &quot;?alt=json-in-script&amp;callback=related_results_labels&amp;max-results=5&quot;’ type=’text/javascript’/></b:if></b:loop> </h2>
<script type=’text/javascript’> removeRelatedDuplicates(); printRelatedLabels(); </script>
</div></b:if>

Now if everything went fine, your post pages would show related articles depending on the applied label. You can customize the color and font size of the widget by editing the bold elements in the CSS code.

#related-posts .widget h2, #related-posts h2 {
color : #333333;
font-size : 13px;
font-weight : normal;
margin : 5px 7px 0;
padding : 0 0 5px;
}

The default number of related posts are 5 as set on the code. You change it by editing max-results=5 in the JavaScript  code to a suitable value.

Limit number of posts displayed in label page blogger

By default, readers can only read the recent 20 posts on a Blogger blog label before clicking on “Older posts” to read the rest in case of this label with more than 20.
If you do not like to see them at the same time you can limit the number of posts for each label by reading the instructions below.


Log in your Dashboard blog, click Layout tab | Edit HTML and check the “Expand Widget Templates” box. Please backup your template before any change. Now, pay attention to the gadget labelIDs. If you have only one label on the blog layout, this is a keyword “id=’Label1′” for finding it out (Use Ctrl + F to show the search box):

<b:widget id=’Label1′ locked=’false’ title=’Label Title’ type=’Label’>
<b:includable id=’main’>
<b:if cond=’data:title’>
<h2><data:title/></h2>
</b:if>
<div class=’widget-content’>
<ul>
<b:loop values=’data:labels’ var=’label’>
<li>
<b:if cond=’data:blog.url == data:label.url’>
<span expr:dir=’data:blog.languageDirection’><data:label.name/></span>
<b:else/>
<a expr:dir=’data:blog.languageDirection’ expr:href=’data:label.url’><data:label.name/></a>
</b:if>
<span dir=’ltr’>(<data:label.count/>)</span>
</li>
</b:loop>
</ul>
<b:include name=’quickedit’/>
</div>
</b:includable>

When you have found, replace with code as below:

<b:widget id=’Label1′ locked=’false’ title=’Labels’ type=’Label’>
<b:includable id=’main’>
<b:if cond=’data:title’>
<h2><data:title/></h2>
</b:if>
<div class=’widget-content’>
<ul>
<b:loop values=’data:labels’ var=’label’>
<li>
<b:if cond=’data:blog.url == data:label.url’>
<span expr:dir=’data:blog.languageDirection’><data:label.name/></span>
<b:else/>
<a expr:dir=’data:blog.languageDirection’ expr:href=’data:label.url + “?max-results=10“‘><data:label.name/></a>
</b:if>
<span dir=’ltr’>(<data:label.count/>)</span>
</li>
</b:loop>
</ul>
<b:include name=’quickedit’/>
</div>
</b:includable>

Finally, save your template.

Automatic Thumbnail and Read More Function for Blogger

Read more function is used to cut our post on homepage, post will appear fully when we click read more link. It’s cut automatically and if we insert image, it appears thumbnail.
This is automatic read more function with thumbnail. We just need to set up our HTML code.

Follow steps:
1. Go to “Layout” click “Edit HTML”
2. Tick on “Expand Widget Templates”
3. Find this code

<data:post.body/>

4. Replace with this code below

<script type=’text/javascript’> summary_noimg = 430; summary_img = 340; img_thumb_height = 100; img_thumb_width = 120; </script> <script src=’http://kfile.110mb.com/summary-post.js&#8217; type=’text/javascript’/> <b:if cond=’data:blog.pageType != &quot;item&quot;’> <div expr:id=’&quot;summary&quot; + data:post.id’><data:post.body/></div> <script type=’text/javascript’>createSummaryAndThumb(&quot;summary<data:post.id/>&quot;);</script> <span class=’rmlink’ style=’float:right’><a expr:href=’data:post.url’>Read more</a></span> </b:if> <b:if cond=’data:blog.pageType == &quot;item&quot;’><data:post.body/></b:if>

5. Save / Check your blog

clarification code above:
summary_noimg = 430; is post cut height without image
summary_img = 340; is post cut height with image
img_thumb_height = 100; is thumbnail image height
img_thumb_width = 120; is thumbnail image width

How to post XML or HTML code on Blogger

Since my site is contains article about programming. I often post sample source code, XML and HTML scripts. My previous dilemma was, I can’t simply copy and paste the codes directly to blogger editor because it will translate all entities enclosed with greater & less than sign such as . The simplest way to do it is to encode the XML/HMTL code first using encoder tools which are available online.


Here’s a step-by-step procedure:

1. Go to http://centricle.com/tools/html-entities/

post XML or HTML code on Blogger

2. Copy and Paste your code on the textbox then click encode.

3. Copy the encoded code to your Blogger editor.