Tìm hiểu mô hình, cơ cấu tổ chức của mẫu Blogger (Template) - Phần 2

Phần trước mình đã giới thiệu về mã nguồn của Blogger. Nhưng đó chỉ là dạng thu gọn, nội dung của các widget bị giấu đi. Ở bài này, mình sẽ nói chi tiết về nội dung của một Widget. Xét về bản chất thì nó khá giống những ngôn ngữ lập trình hướng cấu trúc (structured programming language), nó cũng cấu tạo bởi cái code block và có những hàm cơ bản như Loop và Condition.

I. Chuẩn bị 

Tại trang Edit HTML (?) bạn nhấn vào checkbox Expand Widget Templates

Lúc này thì trang Edit HTML sẽ tự tải lại. Và dễ dàng nhận ra, phần mã nguồn đã thay đổi, các dòng
<b:widget [các thuộc tính] />
trở thành
<b:widget [các thuộc tính]>
<b:includable>
...
</b:includable>
</b:widget>
Lưu ý là giữa 2 thẻ <b:widget> và </b:widget> có thể chứa nhiều nhóm <b:includable> và </b:includable>

Tìm hiểu mô hình, cơ cấu tổ chức của mẫu Blogger (Template) - Phần 1

Trước khi thiết kế một mẫu template, bạn cần hiểu biết về cơ bản cơ cấu tổ chức của mẫu Blogger template. Về cơ bản, cấu trúc của bất kỳ các mẫu là không hoàn toàn giống nhau. Nhưng, với những hiểu biết cơ bản bạn có thể hiểu rõ được các cơ chế của mẫu blog hiện có, thiết kế được mẫu blog và có thể làm thay đổi cơ cấu tổ chức của blog.

Một vài phần cấu trúc của mẫu blog mà bạn có thể thấy hầu hết trong các blog: headers, footers, và phần bài viết. Nhưng có một số phần tạm gọi là các sections blocks hoặc containers không hiển thị trên màn hình nhưng nó là các HTML-wise quan trọng được xây dựng để mẫu blog làm việc theo đúng chức năng.
Chúng ta xem hình ở dưới, một mẫu cơ bản container bao gồm các khối như dưới: 
image

Tạo nhiều chuyên mục cho bài viết ở trang chủ Blogger - Đã fix lỗi

Mình có tham khảo qua vài bài viết nói về vấn đề này. Trong đó có 2 bài đáng chú ý của voquocan và namkna, mạn phép được và chỉnh sửa lại chút xíu. cách của bác này không tự đặt số lượng bài cho từng box được nếu như bạn muốn bài viết hiển thị nhiều hơn 7 bài. hoặc không tự đặt được độ dài tiêu đề hay độ dài nội dung bài viết. Mình sẽ fix lại những cái này để bạn có thể sử dụng linh hoạt hơn cho blog của bạn.




1. Chèn đoạn css sau phía trên thẻ ]]></b:skin>
.boxhome{width:700px}
.boxhome ul {margin:0; padding:0}
.box1{overflow:hidden;}
.box1-left{width:380px; float:left; height:400px; border-right:1px solid #777; padding:10px}
.box1-left h2 {margin-bottom:5px}
.box1-left img{margin-bottom:5px;  height:250px; width:380px}
.box1-right{height:49px; width:279px; float:right; padding: 10px; line-height:23px; border-bottom:1px solid #777; }
.box2-right:hover, .box1-right:hover {background:#999}
.box2-right:hover a , .box1-right:hover a {color: #fff; text-shadow:1px 1px 3px #000}
.box1-right img {float:left; height:49px; width:72px; margin-right:10px}
.box2{margin-top:10px; overflow:hidden}
.box2-left{width:380px; float:left; height:140px; padding:10px; border-right:1px solid #777; }
.box2-left a{font-weight:bold;}
.box2-left img{margin-right:5px;  height:100px; width:160px;float:left}
.box2-right{height:29px; width:289px; float:right;  border-bottom:1px solid #777; padding:5px; line-height:15px;}
.box2-right img {float:left; height:29px; width:48px; margin-right:5px}
.box1-left-info, .box2-left-info{ text-align:justify;}
.box1 img, .box2 img {box-shadow: 1px 1px 2px 1px #666;}
.menu{overflow: hidden; width: 100%; border-bottom:1px solid #777; background:#eee;}
.menu li{float: left; list-style: none;}
.menu a{padding: 5px 5px 5px 25px; float: left; text-decoration: none; position: relative;}
.menu li:first-child a{padding-left: 15px; background:#888; color:#eee}
.menu li:first-child a::after{border-left-color: #888;}
.menu li:first-child a:hover{background:#444; color:#fff}
.menu li:first-child a:hover::after { border-left-color: #444;}
.menu a:hover{background: #aaa;}
.menu a::after, .menu a::before{content: ""; position: absolute; top: 50%; margin-top: -1.5em; border-top: 1.5em solid transparent; border-bottom: 1.5em solid transparent; border-left: 1em solid; right: -1em;}
.menu a::after{z-index: 2; border-left-color: #eee;}
.menu a::before{border-left-color: #bbb; right: -1.1em; z-index: 1; }
.menu a:hover::after{ border-left-color: #aaa;}
Lưu ý:
Mặc định box này được đặt trong class boxhome có chiều rộng 700px. Bạn cần thay đổi chiều rộng này lại cho phù hợp với mẫu template trên blog của bạn.
Ở bước 1 mình đánh dấu các đoạn code màu đỏ là chiều rộng của các thành phần bạn thay đổi lại cho phù hợp với blog của bạn.
Nếu có chổ nào không hiểu bạn để lại comments bên dưới mình sẽ trả lời trong thời gian sớm nhất có thể.
2. Chèn đoạn code sau phía trên thẻ </head>
<b:if cond='data:blog.url == data:blog.homepageUrl'>     
<script type='text/javascript'>
var imgr=["https://lh3.googleusercontent.com/-IBkOgk0LW6c/TqulPrgd6RI/AAAAAAAAAmg/VHnAiJCR4jc/s800/no_img.jpg"],
summary_post_box1 = 300,
summary_title_box1 = 0,
summary_post_box2 = 280,
summary_title_box2 = 0;
</script>
<script src='http://rumfyblog.googlecode.com/files/post_homepage_fix.js' type='text/javascript'/>
<style type='text/css'>
        .main.section {display:none}
</style>
</b:if>
imgr: link ảnh thumbnail mặc đinh cho những bài viết không có ảnh.
summary_post_box1, summary_post_box2: độ dài nội dung bài viết ở Box1 và Box2. (Box1 và Box2 sẽ nói ở dưới)
summary_title_box1, summary_title_box2: Độ dài tiêu đề bài viết ở Box1 và Box2 tương ứng. Nếu bạn muốn cắt tiêu đề của bạn ngắn gọn lại cho phù hợp với giao diện blog của bạn, còn không muốn sử dụng chức năng này thì để là 0;


3. Dùng từ khóa blog1 tìm đoạn code tương tự như sau: (những đoạn màu đỏ có thể khác nhau tùy blog)
<b:section class='mainpost' id='mainpost' showaddelement='no'>
<b:widget id='Blog1' locked='true' title='Bài đăng trên Blog' type='Blog'/>
</b:section>
Chèn đoạn code sau phía trên đoạn code vừa tìm được.
<b:if cond='data:blog.url == data:blog.homepageUrl'><div class='boxhome'>
<div class='box1'>                                           
<script src='/feeds/posts/default?max-results=7&amp;orderby=published&amp;alt=json-in-script&amp;callback=box1'/>    
<div style='clear:both;'/>      
</div>
<div class='box2'>      
<ul class='menu'>
    <li><a href='http://template.voquocan.com/'>Blogger Template</a></li>
    <li><a href='http://template.voquocan.com/p/magazine-template.html'>Magazine Template</a></li>
    <li><a href='http://template.voquocan.com/p/shopping-template.html'>Shopping Template</a></li>
    <li><a href='http://template.voquocan.com/p/movie-template.html'>Movie Tempalte</a></li>
</ul>                                       
<script src='/feeds/posts/default/-/Label1?max-results=5&amp;orderby=published&amp;alt=json-in-script&amp;callback=box2'/> 
<div style='clear:both;'/> 
</div>
<div class='box2'>                
<ul class='menu'>
    <li><a href='http://www.voquocan.com/'>Thủ Thuật Blog</a></li>
    <li><a href='http://www.voquocan.com/search/label/Blogger?max-results=5'>Blogger</a></li>
    <li><a href='http://www.voquocan.com/search/label/css-html?max-results=5'>CSS - HTML</a></li>
    <li><a href='http://www.voquocan.com/search/label/Tổng Hợp?max-results=5'>Tổng Hợp</a></li>
</ul>                             
<script src='/feeds/posts/default/-/Label2?max-results=5&amp;orderby=published&amp;alt=json-in-script&amp;callback=box2'/> 
<div style='clear:both;'/> 
</div>
</div></b:if>
Trong đoạn code trên mình tạo 1 box lớn là Box1 (hiển thị các bài viết mới nhất) và 2 box con là Box2 cho 2 chuyên mục). Đề tạo thêm các chuyên mục bạn tạo thêm các mục box2 là được.

Đăng ký Google code để làm host lưu trữ file JS và CSS hoặc code bất kỳ

Khi làm blogger hẳn các bạn muốn có 1 chỗ lưu các file JS hoặc CSS để thuận tiện cho việc thiết kế. Host là gì thì chắc hẵn các bạn cũng đã từng nghe nói qua hay cũng đã biết rồi mình không nhắc lại ở đây. Điều mình nói ở đây là làm sao để tìm một host ổn định và miễn phí. Hiện nay có rất nhiều trang website cung cấp cho bạn host miễn phí tuy nhiên không phải hosting nào cũng tốt, cũng đảm bảo ổn định. Và bài viết này mình chia sẻ cùng các bạn cách để bạn có thể đăng ký và sử dụng Google code cho việc lưu trữ các file JS dùng trong web/blog của mình.

Đăng ký Google Code

Trước tiên hãy tạo một tài khoản tại Google, nếu đã có tài khoản thì bạn hãy đăng nhập vào và đi tới liên kết này: http://code.google.com/hosting/
 - Trang web load xong chọn Create a new project để bắt đầu.


Tạo thanh điều hướng Breadcrumbs có thứ bậc Label cho Blogger


Breadcrumbs là thanh điều hướng được sử dụng để hiển thị thứ bậc label trong một trang web/blog. Nó giúp cho người đọc biết được mình đang ở đâu trong trang web (đang đọc bài trong mục nào). Thông thường đặt ở đầu blog tốt hơn là ngay trên bài đăng hoặc tiêu đề chính của một trang bài viết. Trong Blogger không có thư mục con thực sự mà bạn có thể hiển thị một đường dẫn phân cấp, nhưng ta có thể sử dụng các Nhãn như là một thư mục con. Bài này sẽ hướng dẫn làm thế nào để hiển thị một hoặc nhiều label trong Breadcrumbs và cách làm cho chúng xuất hiện trong "Kết quả tìm kiếm" của Google bằng cách sử dụng kỹ thuật Microdata.

Ảnh minh họa


☼ Cách tiến hành:

1. Đăng nhập vào Blog

2. Vào Mẫu (Template)

3. Chọn Chỉnh sử HTML

4. Tìm đoạn: <div class='blog-posts hfeed'>


- Và thêm vào sau nó mã sau:
<b:if cond='data:blog.homepageUrl != data:blog.url'>
  <b:if cond='data:blog.pageType == &quot;static_page&quot;'>
    <div class='breadcrumbs' itemscope='itemscope' itemtype='http://data-vocabulary.org/Breadcrumb'>
      <a class='first' expr:href='data:blog.homepageUrl' itemprop='url'><span itemprop='title'>Home</span></a> 
      <a expr:href='data:blog.url'> <span itemprop='title'><data:blog.pageName/></span> </a>
    </div>
 <b:else/>
  <b:if cond='data:blog.pageType == &quot;item&quot;'>
    <b:loop values='data:posts' var='post'>
       <b:if cond='data:post.labels'>
         <div class='breadcrumbs' itemscope='itemscope' itemtype='http://data-vocabulary.org/Breadcrumb'>
           <a class='first' expr:href='data:blog.homepageUrl' itemprop='url'><span itemprop='title'>Home</span></a>
           <b:loop values='data:post.labels' var='label'>
            <b:if cond='data:label.isLast == &quot;true&quot;'>
             <a expr:href='data:label.url' itemprop='url'><span itemprop='title'><data:label.name/></span></a>
             </b:if>
           </b:loop>
          </div>
         <b:else/>
          <div class='breadcrumbs ' itemscope='itemscope' itemtype='http://data-vocabulary.org/Breadcrumb'>
           <a class='first' expr:href='data:blog.homepageUrl' itemprop='url'><span itemprop='title'>Home</span></a>
           <a href='#'><span> Unlabelled</span></a>
         </div>
       </b:if>
     </b:loop>
   <b:else/>
    <b:if cond='data:blog.pageType == &quot;archive&quot;'>
      <div class='breadcrumbs ' itemscope='itemscope' itemtype='http://data-vocabulary.org/Breadcrumb'>
       <a class='first' expr:href='data:blog.homepageUrl' itemprop='url'><span itemprop='title'>Home</span></a> 
       <a expr:href='data:blog.url'><span>Archives for <data:blog.pageName/></span></a>
      </div>
   <b:else/>
    <b:if cond='data:blog.pageType == &quot;index&quot;'>
      <b:if cond='data:blog.pageName == &quot;&quot;'>
      <b:else/>
       <div class='breadcrumbs' itemscope='itemscope' itemtype='http://data-vocabulary.org/Breadcrumb'>
        <a class='first' expr:href='data:blog.homepageUrl' itemprop='url'><span itemprop='title'>Home</span></a>
        <a expr:href='data:blog.url'><span itemprop='title'>Posts filed under <data:blog.pageName/></span></a>
       </div>
     </b:if>
    </b:if>
   </b:if>
  </b:if>
 </b:if>
</b:if>

- Nếu tìm thấy nhiều đoạn <div class='blog-posts hfeed'> mà bạn không biết thêm vào chỗ nào thì có thể  thay nó dưới code này: <b:includable id='main' var='top'>

5. Thêm CSS sau vào trước thẻ ]]></b:skin>
/* Breadcrumbs
---------------------------------------------------------*/
.breadcrumbs {
  background: url("https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi84wA9JJfPn2_ZuIAyue7IRcph22Y682yNAhWhFR6IbOtb_mRSVeuvS4cYzuSLV7Y5cERteP-wibTjnYZdXPRV1pPGmYG7_XcrXygl3_sMHp9bjnQ4F9VcMmk4rqQyLD5K2TJ6gZi1GTQ/s1600/breadcrumbs_bg.png") repeat scroll 0 0 transparent;
  list-style: none;
  margin-bottom: 10px;
}
.breadcrumbs  a {
  background-image: url("https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi84wA9JJfPn2_ZuIAyue7IRcph22Y682yNAhWhFR6IbOtb_mRSVeuvS4cYzuSLV7Y5cERteP-wibTjnYZdXPRV1pPGmYG7_XcrXygl3_sMHp9bjnQ4F9VcMmk4rqQyLD5K2TJ6gZi1GTQ/s1600/breadcrumbs_bg.png");
  background-position: 100% 0;
  background-repeat: no-repeat;
  color: #666666;
  display: inline-block;
  font-size: 12px;
  height: 29px;
  line-height: 29px;
  margin-right: -20px;
  padding: 0 25px;
  position: relative;
  text-decoration: none;
  vertical-align: top;
  z-index: 1;
}
.breadcrumbs  a:hover   {
  background-position: 100% -48px;
  color: #333;
}
.breadcrumbs .first , .breadcrumbs .first:hover {z-index: 30 !important;}
.breadcrumbs .first span {
  background-image: url("https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi84wA9JJfPn2_ZuIAyue7IRcph22Y682yNAhWhFR6IbOtb_mRSVeuvS4cYzuSLV7Y5cERteP-wibTjnYZdXPRV1pPGmYG7_XcrXygl3_sMHp9bjnQ4F9VcMmk4rqQyLD5K2TJ6gZi1GTQ/s1600/breadcrumbs_bg.png");
  display: inline-block;
  height: 29px;
  margin-left: -25px;
  padding-left: 12px;
  z-index: 12 !important;
}
.breadcrumbs a:nth-child(2) {z-index:29 !important;}
.breadcrumbs a span:hover {
  background-position: 0 -48px;
  color: #333;
}
6. Lưu lại là xong!

- và Bây giờ Breadcrumbs đã xuất hiện trong trang bài đăng, trang Label, trang Lưu Trữ cũng như các trang tĩnh.

Một số tùy chọn hiển thị một hoặc nhiều nhãn (label)


Đoạn mã trên chỉ cho thấy 1 Label, Trong trường hợp bài viết của bạn có gán nhiều nhãn mà bạn muốn hiển thị tất cả các nhãn trên thanh Breadcrumbs thì hãy bỏ dòng tô màu xanh trong Bước 4 và thêm CSS sau vào trước thẻ ]]></b:skin>
.breadcrumbs a:nth-child(3) {z-index:28 !important;}
.breadcrumbs a:nth-child(4) {z-index:27 !important;}
.breadcrumbs a:nth-child(5) {z-index:26 !important;}
.breadcrumbs a:nth-child(6) {z-index:25 !important;}
.breadcrumbs a:nth-child(7) {z-index:24 !important;}
.breadcrumbs a:nth-child(8) {z-index:23 !important;}
.breadcrumbs a:nth-child(9) {z-index:22 !important;}
.breadcrumbs a:nth-child(10) {z-index:21 !important;}
.breadcrumbs a:nth-child(11) {z-index:20 !important;}
.breadcrumbs a:nth-child(12) {z-index:19 !important;}
.breadcrumbs a:nth-child(13) {z-index:18 !important;}

Done! Hãy thưởng thức thành quả bạn đạt được nhé.

Xóa dòng chữ "Hiển thị các bài đăng có nhãn..." trong Blogger mà vẫn giữ lại thông báo khác

Trong Blogspot, mỗi khi ta bấm vào xem nhãn của bài viết thường xuất hiện thông báo "Hiển thị các bài đăng có nhãn...Hiển thị tất cả bài đăng" (Với blog dùng ngôn ngữ tiếng Anh là "Showing posts with label ... Show all posts") như bên dưới:

Dòng thông báo với blog sử dụng ngôn ngữ tiếng Việt


Dòng thông báo với blog sử dụng ngôn ngữ tiếng Anh


Nếu bạn muốn xóa dòng thông báo này,Hãy thực hiện theo các bước bên dưới:

1. Đăng nhập vào Blogger > Mẫu > Chỉnh sửa HTML. Sau đó bạn làm theo 1 trong 2 cách dưới đây

Cách 1 Chèn đọan CSS sau vào phía trên (hoặc trước) dòng ]]></b:skin>
.status-msg-wrap{
  display:none;
}

Cách 2 Nếu cách 1 không được bạn tìm đến đoạn code bên dưới rồi xoá nó đi:
  <b:if cond='data:navMessage'>
  <div class='status-msg-wrap' style='width:100%'>
    <div class='status-msg-body'>
      <data:navMessage/>
    </div>
    <div class='status-msg-border'>
      <div class='status-msg-bg'>
        <div class='status-msg-hidden'><data:navMessage/></div>
      </div>
    </div>
  </div>
  <div style='clear: both;'/>
  </b:if>
 > Xong!

Nhưng trong cả 2 cách này sẽ làm mất đi 1 thông báo mà bạn có thể cần đến, đó là thông báo link hỏng.


Khi bạn xem 1 bài viết đã bị xoá, hoặc link sai trong blog sẽ hiện ra 1 dòng thông báo để người đọc biết được link bài viết không hợp lệ. Để khắc phục điều này các bạn hãy làm như sau:

Thay toàn bộ đoạn code:
  <b:if cond='data:navMessage'>
  <div class='status-msg-wrap' style='width:100%'>
    <div class='status-msg-body'>
      <data:navMessage/>
    </div>
    <div class='status-msg-border'>
      <div class='status-msg-bg'>
        <div class='status-msg-hidden'><data:navMessage/></div>
      </div>
    </div>
  </div>
  <div style='clear: both;'/>
  </b:if>
Bằng đoạn code dưới đây:
  <b:if cond='data:navMessage'>
    <b:if cond='data:blog.pageType != &quot;index&quot;'>
      <b:if cond='data:blog.pageType != &quot;archive&quot;'>
  <div class='status-msg-wrap' style='width:100%'>
    <div class='status-msg-body'>
      <data:navMessage/>
    </div>
    <div class='status-msg-border'>
      <div class='status-msg-bg'>
        <div class='status-msg-hidden'><data:navMessage/></div>
      </div>
    </div>
  </div>
  <div style='clear: both;'/>
        </b:if>
      </b:if>
  </b:if>
Lưu lại là xong. Vấn đề của bạn đã được giải quyết.

Sửa lỗi ảnh quá lớn tràn ra ngoài khung bài viết trong Blogger (Resize ảnh)



Khi các bạn làm Blogger có thể sẽ gặp phải lỗi kích thước ảnh qua lớn và vượt ra ngoài phần khung hiển thị bài viết trong Blog. có 2 cách giải quyết vấn đề này tương đối đơn giản.

 - Cách 1: Blogger cũng hỗ trợ công cụ resize ảnh bằng cách bạn sẽ chọn kích thước cho từng ảnh khi bạn đăng bài viết của mình giống như hình dưới.


Cách 2: rất đơn giản chỉ bằng 1 đoạn CSS, nó sẽ tự động resize những ảnh nào có kích thước lớn hơn khung hiển thị bài viết, và bạn không phải mất công chỉnh từng ảnh một khi viết bài.

Bước 1: Truy cập vào Blogger:
- Truy cập vào Blogger Bảng điều khiển (Dashboard) > Bố cục (Layout) > Chỉnh sửa HTML (Edit HTML)
Bước 2: Tìm: ]]></b:skin> và đặt trước nó đoạn mã sau:
.post img { 
  max-width:500px; /* Chiều rộng lớn nhất của ảnh */
  max-height:400px; /* Chiều cao lớn nhất của ảnh */
}
Bạn có thể sửa lại giá trị của max-width và max-height cho phù hợp với blog của bạn. Còn nếu bạn muốn hình ảnh của bạn khi hiển thị ra có kích thước cố định là 500x400 thì các bạn để đoạn code sau
.post img { 
  width:500px; /* Chiều rộng của ảnh */
  height:400px; /* Chiều cao của ảnh */
}
Hoặc nếu bạn chỉ muốn resize cái ảnh nào có chiều rộng quá lớn thì chỉ cần để 1 giá trị là max-width hoặc width.
.post img { 
  max-width:500px; /* Chiều rộng lớn nhất của ảnh */
}
 hoặc
.post img { 
  width:500px; /* Chiều rộng của ảnh */
}
 Cái khác nhau giữa max-width và width ở đây là:
 - max-width thì chỉ resize những ảnh nào lớn hơn giá trị bạn chỉ định. (Khuyên dùng)
 - width là resize tất cả, kể cả ảnh nhỏ hơn giá trị bạn chỉ đinh, nó cũng sẽ phóng to ảnh nhỏ đó đến kích thước mà bạn muốn resize ảnh.
OK rôi, giờ chỉ cẩn lưu lại là xong.

Auto Readmore nâng cao cho Blogger và tùy biến hiển thị ảnh mặc định

Auto readmore là chủ đề đã quá quen thuộc với Blogger. Mặc dù Google đã hỗ trợ tính năng này cho Blogger, nhưng nó chưa thực sự thỏa mãn người dùng vì 1 lẽ: nó chỉ cắt nội dung chứ chưa thể tùy biến giao diện. Bởi vậy chúng ta thường nhờ vả tới các script auto readmore.

Script auto readmore vốn ban đầu được AnhVo ở VietWebGuide.com phát triển, sau đó tôi có cải tiến 1 chút ít (tiếc là bây giờ blog của AnhVo đã không còn hoạt động). Ở bài viết này, tôi muốn trình bày với các bạn 1 vài tùy biến nâng cao của script auto readmore mà tôi áp dụng cho Hỗn tạp Blog, đồng thời cố gắng hướng dẫn để các bạn có thể tự tùy biến script cho mục đích của riêng mình.

Script vẫn giữ nguyên ý tưởng cốt lõi, chỉ bổ sung thêm các tùy chọn cho sự hiển thị thêm đa dạng.

Trong script này, tôi bổ sung 3 điểm nâng cao sau:
  1. Thêm hình thumbnail mặc định khi bài viết không có hình ảnh
  2. Tùy chọn không auto readmore cho 1 số bài đầu tiên
  3. Tùy chọn auto readmore cho trang homepage và trang label
Dưới đây là code có thể áp dụng luôn cho blog của bạn:
<script type="text/javascript">
var summaryConf = {
    showImage: true,
    imgFloat: 'left',
    imgWidth: 120,
    imgHeight: 90,
    defaultThumb: 'https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgH0UUj2HrYF0HqixsTZLbRwotkpq-ZVj33f_ZrDv91rT5l6ONF4bl2rhrH1-TgpgfxZPIPxgEMMsF0w-J0Enw3gCoihitjuHn4miVYiDFWTxooNUPlMozda5lIovLXMC0cYRtxtzb5tyU/s1600/no-thumb.jpg',
    words: 65,
    wordsNoImg: 80,
    skip: 0,
    showHome: true,
    showLabel: true
};
</script>
<script type="text/javascript" src="http://rumfyblog.googlecode.com/files/summary.rm.test.js"></script>
Chèn đoạn code trên vào trước thẻ </head> là được. Các tham số tuỳ biến có ý nghĩa như sau:

showImage: bạn có muốn hiển thị thumbnail không? Nếu có để là true, nếu không để là false.

imgFloat: có 3 giá trị: 'left' - để thumbnail float về bên trái, 'right' - để thumbnail float về bên phải và 'no' - để thumbnail không có chế độ float. Lưu ý có dấu nháy bọc quanh giá trị nhé.

imgWidth và imgHeight: chỉ định kích thước của thumbnail.

defaultThumb: Link (đường dẫn) ảnh làm thumbnail mặc định trong trường hợp bài viết không có hình ảnh. Nếu bạn không muốn hiển thị ảnh thumbnail mặc định cho những bài viết không có ảnh thì bạn để giá trị của nó là none (defaultThumb: 'none')

words và wordsNoImg: số từ hiển thị trong trường hợp có ảnh thumbnail và không có ảnh.

skip: bỏ qua 1 số bài, không thực hiện auto readmore với chúng. Nếu khai báo số lượng là 0 thì coi như không bỏ qua bài nào (sẽ auto readmore với tất cả các bài).

showHome và showLabel: cho phép auto readmore ở trang chủ và trang label. Giá trị true là cho phép, false là không cho phép.

Sau đó, bạn tìm trong template của bạn đoạn (chú ý: thay tất cả những chỗ bạn tìm thấy):
<data:post.body/>
sửa thành:
<span expr:id='data:post.id'><data:post.body/></span>

<b:if cond='data:blog.pageType == "index"'>
    <script type='text/javascript'>summary("<data:post.id/>")</script>
<b:else/>
    <b:if cond='data:blog.pageType == "archive"'>
        <script type='text/javascript'>summary("<data:post.id/>")</script>
    </b:if>
</b:if>
Sau khi cài đặt, các bạn hãy thử nghiệm thay đổi giá trị của các tùy chọn trên cho phù hợp với blog của mình.

Auto readmore không sử dụng javascript cho Blogger

Blogger đã có readmore tuy nhiên nó khá thủ công, với blog đã có nhiều bài viết thì việc tạo readmore cho từng bài là rất vất vả và blogger thường tìm đến với auto readmore javascript. Auto readmore javascript thực ra chỉ hiển thị một phần bài viết qua hàm document.write, nội dung cả bài viết vẫn được trình duyệt tải về. Nhược điểm của nó là không thân thiện với các bộ máy tìm kiếm và các công cụ dịch trực tuyến, ngoài ra với bài viết dài nếu không dùng thêm readmore của Blogger thì sẽ gặp lỗi phân trang do Blogger tự ngắt trang. Thủ thuật auto readmore mình giới thiệu sau đây hoàn toàn mới, không sử dụng javascript mà dùng các câu lệnh do chính Blogger cung cấp. Nó sẽ cải thiện tốc độ blog của bạn khi duyệt các trang kiểu index, archive do chỉ tải về trích đoạn nội dung của bài viết.

Các bước thực hiện:

Bước 1: Thêm class post-thumbnail để hiển thị hình ảnh. Có 2 dạng hiển thị hình ảnh là bên trái hoặc bên phải.

1. Hiển thị hình ảnh bên trái: Thêm đoạn mã dưới đây vào trước thẻ ]]></b:skin>:
.post-thumbnail{float:left;margin-right:20px}
2. Hiển thị hình ảnh bên phải: Thêm đoạn mã dưới đây vào trước thẻ ]]></b:skin>:
.post-thumbnail{float:right;margin-left:20px}

Bước 2: Thêm đoạn mã auto readmore. Có 4 dạng auto readmore để lựa chọn.

1. Auto readmore với hình ảnh:

Thay thế <data:post.body/> bằng đoạn mã dưới đây:
<b:if cond='data:blog.pageType != &quot;item&quot;'>
 <b:if cond='data:blog.pageType != &quot;static_page&quot;'>
  <div>
   <b:if cond='data:post.thumbnailUrl'>
    <img class='post-thumbnail' expr:alt='data:post.title' expr:src='data:post.thumbnailUrl' width='72px' height='72px'/>
   </b:if>
   <data:post.snippet/>
  </div>
  <div class='jump-link'>
   <a expr:href='data:post.url' expr:title='data:post.title'><data:post.jumpText/></a>
  </div>
 <b:else/>
  <data:post.body/>
 </b:if>
<b:else/>
 <data:post.body/>
</b:if>

2. Auto readmore với hình ảnh và hiển thị ảnh mặc định cho bài viết không có ảnh:

Thay thế <data:post.body/> bằng đoạn mã dưới đây:
<b:if cond='data:blog.pageType != &quot;item&quot;'>
 <b:if cond='data:blog.pageType != &quot;static_page&quot;'>
  <div>
   <b:if cond='data:post.thumbnailUrl'>
    <img class='post-thumbnail' expr:alt='data:post.title' expr:src='data:post.thumbnailUrl' width='72px' height='72px'/>
   <b:else/>
    <img class='post-thumbnail' alt='no image' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4g09pL4orsvFoCVmsMSAd23ff_D9X3N7irYiRG337GqK0BggeHQM8FANzPWpdFuojcUX1KpCxDvfAM5_KU_k3LilLdHHRgUlHhPj8_CgYrHn7EWcNVRN6ATNdiBS-l16yXk_vlYd-lOT-/' width='72px' height='72px'/>
   </b:if>
   <data:post.snippet/>
  </div>
  <div class='jump-link'>
   <a expr:href='data:post.url' expr:title='data:post.title'><data:post.jumpText/></a>
  </div>
 <b:else/>
  <data:post.body/>
 </b:if>
<b:else/>
 <data:post.body/>
</b:if>

3. Auto readmore với hình ảnh. Không readmore với bài viết mới nhất:

Thay thế <data:post.body/> bằng đoạn mã dưới đây:
<b:if cond='data:blog.pageType != &quot;item&quot;'>
 <b:if cond='data:blog.pageType != &quot;static_page&quot;'>
  <b:if cond='data:blog.url == data:blog.homepageUrl'>
   <b:if cond='data:post.isFirstPost == &quot;true&quot;'>
    <data:post.body/>
     <b:if cond='data:post.hasJumpLink'>
      <div class='jump-link'>
       <a expr:href='data:post.url + &quot;#more&quot;' expr:title='data:post.title'><data:post.jumpText/></a> 
      </div>
     </b:if>
   <b:else/>
    <div>
     <b:if cond='data:post.thumbnailUrl'>
      <img class='post-thumbnail' expr:alt='data:post.title' expr:src='data:post.thumbnailUrl' width='72px' height='72px'/>
     </b:if>
     <data:post.snippet/>
    </div>
    <div class='jump-link'>
     <a expr:href='data:post.url' expr:title='data:post.title'><data:post.jumpText/></a>
    </div>
   </b:if>
  <b:else/>
   <div>
    <b:if cond='data:post.thumbnailUrl'>
     <img class='post-thumbnail' expr:alt='data:post.title' expr:src='data:post.thumbnailUrl' width='72px' height='72px'/>
    </b:if>
    <data:post.snippet/>
   </div>
   <div class='jump-link'>
    <a expr:href='data:post.url' expr:title='data:post.title'><data:post.jumpText/></a>
   </div>
  </b:if>
 <b:else/>
  <data:post.body/>
 </b:if>
<b:else/>
 <data:post.body/>
</b:if>

4. Auto readmore với hình ảnh và hiển thị ảnh mặc định cho bài viết không có ảnh. Không readmore với bài viết mới nhất:

Thay thế <data:post.body/> bằng đoạn mã dưới đây:
<b:if cond='data:blog.pageType != &quot;item&quot;'>
 <b:if cond='data:blog.pageType != &quot;static_page&quot;'>
  <b:if cond='data:blog.url == data:blog.homepageUrl'>
   <b:if cond='data:post.isFirstPost == &quot;true&quot;'>
    <data:post.body/>
     <b:if cond='data:post.hasJumpLink'>
      <div class='jump-link'>
       <a expr:href='data:post.url + &quot;#more&quot;' expr:title='data:post.title'><data:post.jumpText/></a> 
      </div>
     </b:if>
   <b:else/>
    <div>
     <b:if cond='data:post.thumbnailUrl'>
      <img class='post-thumbnail' expr:alt='data:post.title' expr:src='data:post.thumbnailUrl' width='72px' height='72px'/>
     <b:else/>
      <img class='post-thumbnail' alt='no image' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4g09pL4orsvFoCVmsMSAd23ff_D9X3N7irYiRG337GqK0BggeHQM8FANzPWpdFuojcUX1KpCxDvfAM5_KU_k3LilLdHHRgUlHhPj8_CgYrHn7EWcNVRN6ATNdiBS-l16yXk_vlYd-lOT-/' width='72px' height='72px'/>
     </b:if>
     <data:post.snippet/>
    </div>
    <div class='jump-link'>
     <a expr:href='data:post.url' expr:title='data:post.title'><data:post.jumpText/></a>
    </div>
   </b:if>
  <b:else/>
   <div>
    <b:if cond='data:post.thumbnailUrl'>
     <img class='post-thumbnail' expr:alt='data:post.title' expr:src='data:post.thumbnailUrl' width='72px' height='72px'/>
    <b:else/>
     <img class='post-thumbnail' alt='no image' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4g09pL4orsvFoCVmsMSAd23ff_D9X3N7irYiRG337GqK0BggeHQM8FANzPWpdFuojcUX1KpCxDvfAM5_KU_k3LilLdHHRgUlHhPj8_CgYrHn7EWcNVRN6ATNdiBS-l16yXk_vlYd-lOT-/' width='72px' height='72px'/>
    </b:if>
    <data:post.snippet/>
   </div>
   <div class='jump-link'>
    <a expr:href='data:post.url' expr:title='data:post.title'><data:post.jumpText/></a>
   </div>
  </b:if>
 <b:else/>
  <data:post.body/>
 </b:if>
<b:else/>
 <data:post.body/>
</b:if>

Việc hiển thị trích đoạn nội dung bài viết là thông qua thẻ <data:post.snippet/> của Blogger, đoạn trích dẫn của Blogger chỉ gồm 140 ký tự (Blogger vừa update, số lượng ký tự của thẻ <data:post.snippet/> ở widget Blog giờ đây ít hơn số lượng ký tự của thẻ <data:post.snippet/> ở widget PopularPosts), khá là ngắn và việc ngắt ký tự không chú ý tới ký tự trống nên có câu bị mất vài từ trở nên vô nghĩa.

Hình ảnh được lấy thông qua lệnh data:post.thumbnailUrl. Đây là đường dẫn ảnh thứ nhất trong bài viết đã được Blogger resize về kích thước 72x72 pixels. Cần chú ý là ảnh của bài viết phải được upload thông qua công cụ Chèn hình ảnh của Blogger, hoặc lấy địa chỉ ảnh từ Picasa và địa chỉ ảnh phải có s1600, s800...thì công cụ resize của Blogger mới hoạt động, khi đó ảnh mới xuất hiện. Thủ thuật trên đã thêm thuộc tính alt là tiêu đề bài viết cho hình ảnh, nó giúp tăng khả năng SEO cho blog của bạn.

Trước khi thực hiện thủ thuật auto readmore này bạn cần loại bỏ đoạn mã auto readmore javascript nếu đang dùng nhé.

 Hoặc các bạn có thể dùng theo cách này có ưu thế là căn đều 2 bên của văn bản nhìn xẽ đẹp hơn.
Bước 1. Đăng nhập Blogger, vào Design >> Edit HTML, chọn Expand Widget Templates.
Đặt đoạn code sau đây trước dòng  ]]></b:skin> .
.item-thumbnail {float:left;margin-right:15px;width:75px;height:70px}
.item-snippet {color: #999; font-family:Arial; font-size: 12px;text-align:justify}
.jump-link {float:right}
.jump-link a,.jump-link a:visited{background:#444343;margin-right:4px;padding:4px 8px;color:#FFF;text-shadow:1px 1px 1px #000;text-decoration:none;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}
.jump-link a:hover,.jump-link a:active{background:#006666;color:#FFF;text-decoration:none;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}
- Thay float:left; thành float:right; nếu muốn nó hiển thị bên phải

Bước 2. Tìm  <data:post.body/>  và thay nó bằng đoạn code bên dưới (Vẫn nhớ là thay tất cả những chỗ bạn tìm được nhé).
<b:if cond='data:blog.pageType != &quot;item&quot;'>
<b:if cond='data:blog.pageType != &quot;static_page&quot;'>
<div>
<b:if cond='data:post.thumbnailUrl'>
<img class='item-thumbnail' expr:alt='data:post.title' expr:src='data:post.thumbnailUrl'/>
<b:else/>
<img alt='no image' class='item-thumbnail' src='http://lh4.ggpht.com/_u7a1IFxc4WI/TTjruHJjcfI/AAAAAAAAAk0/i11Oj6i_bHY/no-image.png'/>
</b:if>
<div class='item-snippet'><data:post.snippet/></div>
</div>
<div class='jump-link'>
<a expr:href='data:post.url' expr:title='data:post.title'><data:post.jumpText/></a>
</div>
<span class='post-comment-link'>
<b:if cond='data:post.allowComments'>
<a class='comment-link' expr:href='data:post.addCommentUrl' expr:onclick='data:post.addCommentOnclick'><b:if cond='data:post.numComments == 1'>1 <data:top.commentLabel/><b:else/><data:post.numComments/> <data:top.commentLabelPlural/></b:if></a>
</b:if>
</span>
<b:else/>
<data:post.body/>
</b:if>
<b:else/>
<data:post.body/>
</b:if>
Xong. Giờ hãy vào blog của bạn để xem thành quả nhé. Chúc bạn thành công!