Bạn đang xem chuyên mục "Design"

Thiết kế Blogger Template từ A tới Z (Phần 4) - Cách thức hoạt động của một Widget

Phần 3 tìm hiểu về Blogger XML trước đây mình có nói mình sẽ mỗ sẽ một widget của Blogger ra để các bạn hiểu được nó chạy như thế nào. Thế đây bài viết này mình sẽ giới thiệu đến các bạn cách thức hoạt động của một widget, và đây có lẽ là thứ cuối cùng bạn cần biết để tự mình viết ra một template theo ý muốn.

Cách thức hoạt động của một Widget

Đối với bài viết này thì nếu ai đã có hiểu biết về lập trình thì việc này cực kì dễ dàng, nhưng những ai chưa biết hoặc rành lắm cũng có thể yên tâm vì nó hoàn toàn không gọi là quá cao siêu cả. Ok tiến công vào việc chính của chúng ta thôi.

Cách thức hoạt động của một Widget

Để đơn giản hóa vấn đề hoạt động của một widget, mình xin giới thiệu sơ về ngắn gọn cách thức của một ngôn chạy như sau. Đơn giản ở đây chỉ có 2 điều bạn cần biết, điều đầu tiên đối với bất kì một chương trình được viết bằng bất cứ ngôn ngữ lập trình nào, khi bắt đầu chạy, nó sẽ tìm đến một hàm được ngôn ngữ đó quy định trước, thông thường nhất thì hàm đó có tên là "main", điều thứ hai bất kì ngon ngữ lập trình nào cũng chạy theo thứ tự từ trên xuống dưới, từ trái qua phải.

Cũng tương tự như vậy, nếu như một thẻ includable nó tương tự với hàm thì đây widget nó tương tự như một chương trình nhỏ vậy. Khi bắt đầu chạy nó cũng bắt đầu từ id="main" và cũng chạy theo thứ tự từ trên xuống dưới và từ trái sang phải vậy.

Rồi bây giờ mình sẽ lụm cái hàm main của cái widget Blog vào đây để chú thích một vài chỗ nhé, đây là widget bự nhất trong đám widget của Blogger rồi nên chắc giải quyết xong cái này thì không phải nói đến những cái khác nữa.
<b:includable id='main' var='top'>
  <b:if cond='data:mobile == &quot;false&quot;'> <!-- điều kiện không phải là điện thoại xem blog -->

    <!-- posts -->
    <div class='blog-posts hfeed'> <!-- tạo thẻ div một cách bình thường -->

      <b:include data='top' name='status-message'/> <!-- gọi hàm includable status-message bạn có thể vào hàm này xem thử có những gì trong đó -->

      <data:defaultAdStart/> <!-- chú thích nếu blog bạn có đăng ký google adsense -->
      <b:loop values='data:posts' var='post'> <!-- vòng lặp để lấy dữ liệu bài viết -->
        <b:if cond='data:post.isDateStart'> <!-- Cái này là cái tùy chọn nào đó mà mình không chắc nữa -->
          <b:if cond='data:post.isFirstPost == &quot;false&quot;'>
            &lt;/div&gt;&lt;/div&gt; <!-- Họ phải chuyển mã HTML sang đây là vì Blogger không cho phép chỉ có thẻ mở, hoặc chỉ có thẻ đóng, do đó phải lừa đảo nó -->
          </b:if>
        </b:if>
        <b:if cond='data:post.isDateStart'> <!-- Cái này là cái tùy chọn nào đó mà mình không chắc nữa, nhưng nó sẽ tạo ra cái thẻ div có class la date-outer -->
          &lt;div class=&quot;date-outer&quot;&gt;
        </b:if>
        <b:if cond='data:post.dateHeader'> <!-- Nếu bạn kích hoạt tùy chọn hiển thị ngày đăng bài, cái tùy chọn đầu tiên trong widget Blog ấy-->
          <h2 class='date-header'><span><data:post.dateHeader/></span></h2>
        </b:if>
        <b:if cond='data:post.isDateStart'> <!-- Cái này cũng không chắc -->
          &lt;div class=&quot;date-posts&quot;&gt;
        </b:if>
        <div class='post-outer'>
        <b:include data='post' name='post'/> <!-- Gọi hàm includable có id là post -->
        <b:if cond='data:blog.pageType == &quot;static_page&quot;'> <!-- Nếu là trang tĩnh -->
          <b:include data='post' name='comment_picker'/> <!-- Gọi hàm includable comment_picker, hàm này có nhiệm vụ chọn ra hệ thống nhận xét mà chúng ta có thể tùy chỉnh bên trong trang tổng quan -->
        </b:if>
        <b:if cond='data:blog.pageType == &quot;item&quot;'> <!-- Nếu là trang bài viết -->

          <b:include data='post' name='comment_picker'/>
        </b:if>
        </div>
        <b:if cond='data:post.includeAd'> <!-- Nếu bạn có adsense và kích hoạt nó -->
          <b:if cond='data:post.isFirstPost'>
            <data:defaultAdEnd/>
          <b:else/>
            <data:adEnd/>
          </b:if>
          <div class='inline-ad'>
            <data:adCode/>
          </div>
          <data:adStart/>
        </b:if>
      </b:loop>
      <b:if cond='data:numPosts != 0'>
        &lt;/div&gt;&lt;/div&gt;
      </b:if>
      <data:adEnd/>
    </div>

    <!-- navigation -->
    <b:include name='nextprev'/> <!-- Gọi hàm nextprev, hàm này lấy ra thanh điều hướng ở cuối trang, trang mới hơn, cũ hơn, trang chủ -->

    <!-- feed links -->
    <b:include name='feedLinks'/> <!-- Gọi hàm feedLinks lấy ra địa chỉ tới rss/atom của bài viết cũng như nhận xét -->

    <b:if cond='data:top.showStars'> <!-- Tùy chọn này đã bỏ đi trong widget Blog nhưng nó vẫn còn vương vấn code ở đây, tùy chọn kích hoạt chấm điểm bài viết mặc định trong Blogger -->
      <script src='//www.google.com/jsapi' type='text/javascript'/>
      <script type='text/javascript'>
        google.load(&quot;annotations&quot;, &quot;1&quot;, {&quot;locale&quot;: &quot;<data:top.languageCode/>&quot;});
        function initialize() {
          google.annotations.setApplicationId(<data:top.blogspotReviews/>);
          google.annotations.createAll();
          google.annotations.fetch();
        }
        google.setOnLoadCallback(initialize);
      </script>
    </b:if>

  <b:else/>
    <b:include name='mobile-main'/> <!-- Nếu người dùng xem bằng điển thoại lại tiếp tục chuyển qua hàm main được viết riêng cho điện thoại -->
  </b:if>

  <b:if cond='data:top.showDummy'> <!-- Mình đoán không lầm đây là đoạn mã khi chúng ta xem trước bài viết trong khi viết bài, cái ngăn cản chúng ta không thể click chọn vào bài viết là đây -->
    <data:top.dummyBootstrap/>
  </b:if>

</b:includable>
xem kĩ các chú thích trên mình nghĩ không còn gì đê giải thích nữa rồi. Nhớ là nếu muốn hiểu hết thì cứ lần theo mấy hàm includable và mần theo thứ tự code là bạn sẽ hiểu được toàn bộ Blogger Template đó thôi.

Kết bài

Như vậy là kết thúc phần 4 - cách thức hoạt động của một widget trong Blogger, đối với mình thì nó tương đối dễ và đơn giản để hiểu, nhưng nếu bạn có bất kì thắc mắc nào thì nên để lại nhận xét nhé để mình có thể hướng dẫn thêm hoặc chăm chút lại bài viết để các bạn dễ hiểu hơn. Mình sẽ có gắng ra tiếp các thủ thuật Blogger về mọi thứ để giúp bạn tự hoàn thiện hoặc thiết kế giao diện cho blog của mình.

Thiết kế Blogger Template từ A tới Z (Phần 3) - Tìm hiểu Blogger XML

Thật ra cái này mình đắn đo suy nghĩ không biết phải làm tiếp phần 3 như thế nào, tại vì đầu tiên là hầu hết những cái đáng lý ra có trong serial này thì đã có bài hướng dẫn hết rồi. Cái thứ 2 là cái dụ thẻ "b:template-skin" mình thấy nên bỏ qua, vì các tên biến và phần css chúng ta tạo phải bắt buộc đặt đúng theo tên đó. Thế nên thì bài viết này thực sự là tổng hợp lại những bài đó, mình sẽ có đoạn mô tả kèm theo link đến các bài viết mà các bạn cần tham khảo nhé.

Thiết kế Blogger Template từ A tới Z (Phần 3) - Tìm hiểu Blogger XML

Thế chúng ta bắt tay vào tìm hiểu thôi.

Tìm hiểu và sử dụng data trong Blogger

Bên trong một Blogger Template bất kì bạn có thể thấy rất nhiều các thẻ có dạng như sau
<data:tên_data/>
hoặc
<tên_thẻ expr:tên_thuộc_tính="data:tên_data">
thế chúng là gì, chúng có những loại dữ liệu nào, sử dụng ở đâu và được sử dụng ra sao. Để trả lời cho 2 câu hỏi này mời các bạn tham khảo qua 2 bài viết sau đây
nên tham khảo theo thứ tự cái trên trước nhé. Đây là toàn bộ những thẻ data mà Google cung cấp ở website của họ, nhưng vẫn còn thiểu khá nhiều các loại data khác, mà minh cũng không nhớ để thêm vào nữa.

Tìm hiểu và sử dụng thẻ includable

Tương tự như với data trong Blogger, thì cái này bạn sẽ được thấy rất nhiều đặc biệt là trong widget Blog,
<b:includable id='Tên' var='Giá_Trị'>....</b:includable>
cái này nó tương tự như là "hàm" nếu bạn học CNTT thì bạn sẽ hiểu.

Chúng ta tạo ra thẻ này là để dễ dàng chỉnh sửa hoặc sử dụng lại một đoạn HTML hoặc Blogger XML nào đó mà không cần phải lặp lại đống code  đó, đơn giản ở đây bạn chỉ cần gọi tên thẻ includable là nó tự động xuất ra cho bạn những đoạn mã mà bạn đặt bên trong đó.

Để hiểu rỡ hơn về các sử dụng cũng như nó là gì mời các bạn đọc qua bài viết sau
mình sẽ cập nhật lại bài viết trên để dễ hiểu hơn, vì cũng vừa đọc lại nó hơi lung tung.

Tìm hiểu và sử dụng thẻ điều kiện if trong Blogger
Các thẻ điều kiện là thứ có trong hầu hết các ngôn ngữ lập trình, nó giúp chúng ta có thể thực hiện một số việc nhất định theo đúng điều kiện mà ta áp đặt cho nó, để hiểu rõ cái này các bạn hãy tham khảo qua bài này
cái này bạn cũng phải nắm về thẻ data.

Tìm hiểu và sử dụng loop trong Blogger

Loop là gì, là một dạng vòng lặp được sử dụng trong Blogger XML. Nó có công dụng lặp theo thứ tự dữ liệu mà nó được gán vào lấy ra toàn bộ nội dung của loại dữ liệu đó, bạn có thể tìm hiểu các loại dữ liệu ở trong bài thẻ data mà mình đã nói ở trên. Sau đây là địa chỉ để các bạn tham khảo các sử dụng vòng lặp:
ngoài ra để kiểm soát được số lần lặp hoặc thực hiện công việc ở lần lặp thứ mấy thì các bạn có thể tham khảo qua bài viết sau
bài đó mình hướng dẫn thêm một thuộc tính và kết hợp thẻ if để thực hiện.

Kết lại

Hầu hết những cái mà chúng ta quan tâm trong phần 3 này về Blogger XML đều có liên quan đến thẻ data, do đó cái quan trọng nhất là nắm được các thể data của từng widget nhé. Bài tiếp theo mình sẽ mổ sẽ widget Blogger ra để hướng dẫn các bạn hiểu rõ hơn về các khái niệm và cách sử dụng về toàn bộ những thứ này.

Xem tiếp phần 4: Cách thức hoạt động của widget

Thiết kế Blogger Template từ A tới Z (Phần 2) - Tìm hiểu thẻ b:skin

Tại phần trước chúng ta đã cùng tìm hiểu về những thông tin cơ bản của Blogger Template cũng như cấu trúc template mặc định của nó. Như đã nói ở phần trước kể từ phần này và các phần sau mình sẽ giới thiệu chi tiết hơn về các thông tin tóm gọn mà mình đã nói ở đó.

Thiết kế Blogger Template từ A tới Z (Phần 2)

Đối với bài này thì mình sẽ giới thiệu cơ bản về các tạo giá trị để sử dụng ở thẻ "b:skin". Ok để bắt đầu thì mình sẽ mang ra lại cấu trúc Blogger Template ở phần trước như sau cho tiện giải thích.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html>
<html b:version='2' class='v2' expr:dir='data:blog.languageDirection' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'>  <!-- xóa 2 thuộc tính quyết định v2 để trờ về v1 -->

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <b:include data='blog' name='all-head-content'/>
    <title><data:blog.pageTitle/></title>
    <b:skin><![CDATA[   ]]></b:skin>
    <b:template-skin><![CDATA[   ]]></b:template-skin>  <!-- Chỉ có ở v2 -->
</head>

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

</html>
phần trước mình có giới thiệu thế này, nhưng bạn nào có thử bỏ vào thử cái giao diện sẽ chỉ thấy toàn trang trắng, và cái widget Blog nó hoàn toàn không phát sinh ra code gì cả, nếu bạn chưa thử thì bạn có thể làm và kiểm tra thử tại trang chủ trang blog của bạn.

Lý do tại sao vậy, mình cũng gặp khó khăn về việc này ở lần chế template đầu tiên, Blogger Template yêu cầu phải có tối thiểu một thẻ "b:section" để hoạt động, thì ở đây chúng ta đã có "b:section" rồi, và chúng ta đã lưu được Template rồi, thế nhưng sao widget Blog nó không hoạt động? Vấn đề này thì mình cũng mất một khoảng thời gian khá dài để tìm hiểu, cuối cùng mình phát hiện ra vấn đề thế này.

Nếu bạn muốn widget blog hoạt động thì trong Blogger Template của bạn phải có tối thiểu một "b:section" cho phép người dùng thêm widget vào, có nghĩa là "showaddedlement='yes'", bạn nào tới đây mà không hiểu thì chắc là chưa đọc bài viết mà mình đã để cập ở phần trước về section và widget. Bạn có thể xem lại ở đây
bạn kéo xuống dưới khoảng giữa bài sẽ thấy. Có thể mình sẽ tách và xóa bài đó ra sau nhưng tạm thời như thế đã nhé.

Vậy cách khắc phục ở đây là gì, theo mình thì sửa section chứa widget Blog có thể thêm widget mới vào nó là không nên, nên giải pháp của mình ở đây là tạo thêm một section nữa ví dụ như "sidebar" chẳng hạn. Bây giờ bạn chèn đoạn mà nãy xuống dưới "b:section" chứa widget Blog và thử kiểm tra lại blog của bạn xem mình có nói đúng không nhé.
<b:section class='sidebar' id='sidebar' showaddelement='yes'/>
nói chung vấn đề không hiện đã được giải quyết chúng ta tiếp tục thôi.

Cùng tìm hiểu về thẻ b:kin và b:template-skin

Sau khi giải quyết vấn đề thành công chúng ta quay lại với thẻ "b:skin" thôi. Đầu tiên "b:skin" và "b:template-skin" sẽ được chuyển thành thẻ "style" khi nó hiển thị với người dùng. Ở đây mình nhắc lại câu hỏi ở phần trước nhé, vậy sao không sử dụng thẻ style luôn chứ xài 2 thằng đó làm gì?

Đây là điều đặc biệt của 2 thằng nó: Khi thiết kế một Blogger Template bình thường thì bạn có bao giờ phát chán việc khi bạn sử dụng một màu sắc hoặc font chữ cho nhiều đối tượng, khi chỉnh sửa lại bạn phải tìm và thay đổi từng cái một, và tìm đến từng cái để sửa nhiều khi cũng chã nhớ hết vị trí.

Chính ví thế thì Blogger đã giúp bạn làm điều này một cách dễ dàng hơn với việc tạo ra một giá trị để sử dụng đi sử dụng lại nó cho nhiều đối tượng trong css.

Cú pháp khai báo giá trị (Variable)

Cú pháp khai báo của nó như sau
<Variable name="ten.bien" description="Phần mô tả của biến" type="kiểu giá trị" default="giá trị mặc định" value="giá trị hiện tại"/>
Phần thẻ này các bạn đặt ở sau <b:skin><![CDATA[ nhé, tiếp đến là chú thích những thuộc tính của thẻ trên:
  • name: Tên của biến để gọi ra để sử dụng, thông thường ta viết liền hoặc ngăn nhau bằng dấu "."
  • description: Phần mô tả cho biến (Nó sẽ hiện trong phần cài đặt nâng cao nếu nằm trong Group)
  • type: kiểu giá trị để sử dụng hiện tại phổ biến nhất là "color" và "font" và nó có tác động đến phần hiển thị ở cài đặt nâng cao, tiếp theo có những kiểu khác như "string" kiểu ký tự, "url" kiểu url, "length" là độ dài, cuối cùng là "automatic" kiểu tự động, nhưng những cái này không ảnh hướng gì nhiều, nó chỉ quy định cho giá trị ở phần "default" và "value"
  • default: giá trị mặc định
  • value: giá trị mà khi ta gọi biến ra, thì nó sẽ lấy ra cái này

Cách thức gọi biến

Tại bên trong phần css ví dụ mình có các đoạn khai báo như sau
<Variable name="mauden" description="Màu đen viết liền" type="color" default="#000" value="#000"/>
<Variable name="mau.trang" description="Màu đen" type="color" default="#fff" value="#fff"/>
<Variable name="font.chu" description="Font chữ" type="font" default="normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif" value="normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/>
<Variable name="doi.tuong" description="Tên đối tượng, bạn có thể sử dụng làm nhiều thứ khác nữa" type="string" default=".ten-doi-tuong" value=".ten-doi-tuong"/>
<Variable name="do.dai" description="dộ dài" type="color" default="10px" value="10px"/>
thì để sử dụng nó trong một css bất kì thì mình giọi như sau ví dụ
body {
  background-color: $(mau.trang); /* Nếu biến cách nhau bằng dấu "." thì sử dụng ngoặc */
}
$(doi.tuong) {
  background-color: $mauden; /* Biến được viết liền không cần ngoặc đơn */
  font: $(font.chu);
  width: $(do.dai);
}
đơn giản là thế thôi, nhưng lưu ý là giá trị  này chỉ có thể tạo và sử dụng trong thẻ "b:skin" thôi, và cái này nó sẽ không xuất hiện trong cài đặt nâng cao để người dung chỉnh sửa, cái này chỉ giúp chúng ta dễ tự chỉnh sửa trong code thôi.

Tạo group để chỉnh sửa trong phần cài đặt nâng cao

Để xuất hiện được để chỉnh sửa trong phần nâng cao, thì chúng ta phải gom nhóm nó lại. Tạo group là việc cũng khá là cần thiết vì nó dễ dàng hơn những cái liên quan để chỉnh sửa. Và có một lưu ý là chỉ có 2 kiểu giá trị là "color" và "font" là có thể mang vào để hiển thị trong cài đặt nâng cao thôi.

Cú pháp tạo group
<Group description="Page Text" selector="body">
  <Variable name="ten.bien" description="Phần mô tả của biến" type="kiểu giá trị" default="giá trị mặc định" value="giá trị hiện tại"/>
<Variable name="ten.bien2" description="Phần mô tả của biến 2" type="kiểu giá trị" default="giá trị mặc định" value="giá trị hiện tại"/>
</Group>
cái phần giá trị thì mình khỏi chú thích nhé, mình sẽ chú thích phần Group:
  • description: Phần mô tả cho Group đó, nó sẽ hiện tại phần menu của cài đặt nâng cao
  • selector: là tên "class" hoặc "id" của một đối tượng css (nếu người dùng chọn Group này trong phần cài đặt liên quan thì nó sẽ khoăn vùng cái đối tượng có tên đặt trong cái này, nếu không muốn nó quang vùng thì cứ để là body)
Group và Variable trong cài đặt nâng cao

mình cũng thêm một hình ảnh minh họa cho các bạn dễ hình dung.

Kết lại

Tới đây chúng ta tiếp tục tạm dừng, như vậy là mình đã hướng dẫn các bạn xong các bạn về toàn bộ những gì có trong phần thẻ "b:skin" mình biết cái này tương đối khó hình dung do đó nếu thắc mắc thì cứ hỏi nhé. Phần tiếp theo mình sẽ hướng dẫn qua "b:template-skin" bài đó sẽ ngắn gọn thôi.

P/S: Mình cũng muốn lắm một video để hướng dẫn cho dễ hơn, nhưng đang nghĩ cho kĩ xem sao đã.

Xem tiếp phần 3: Tìm hiểu về Blogger XML

Thiết kế Blogger Template từ A tới Z (Phần 1) - Cấu trúc cơ bản

Bài viết hướng dẫn về Blogger Template thì đi đâu cũng thấy, rất rất nhiều blog đều có hướng dẫn về cách thức tạo, nhưng đa phần là khó hiểu. Bản thân blog mình cũng có một bài viết "Hướng dẫn thiết kế Blogger Template đơn giản" nhưng mà ngẫm lại kĩ thì cũng không đúng với tiêu đề cho lắm. Bài đó hướng dẫn các bạn cách mà các bạn có một Blogger Template và chỉnh sửa nó.

Thiết kế Blogger Template từ A tới Z (Phần 1)

Dạo này cũng nhiều bạn (nhiều là khoảng 3 4 bạn :D) có nhắn tin qua mail cho mình nhờ mình viết bài viết hướng dẫn chi tiết và cụ thế hơn cách thiết kế Blogger Template hoàn chỉnh. Do đó thì bài viết này mình xin cố gắng hơn cái bài kia hướng dẫn các bạn tạo dựng "thiết kế" một Blogger Template hoàn thiện nhất có thể.

Vẫn lưu ý như  bài trước nhé, bạn không nắm HTML và CSS thì hoàn toàn sẽ không thế nắm bắt được. Vì mình không giải thích 2 đưa này mà mình hướng dẫn làm thế nào để tạo ra được một Blogger Template.

Tìm hiểu về Blogger Template

Blogger Template bây giờ sử dụng một ngôn ngữ lập trình đơn giản có tên là XML.Tính cho tới thời điểm hiện tại thì Blogger XML đang được chia ra làm 2 phiên bản, phiên bản "v1" là phiên bản thường được sử dụng nhất hiện nay, nếu trong template của bạn tại thẻ mở "html" ở đầu có thuộc tính sau b:version='2' và class='v2' thì có nghĩ là bạn đang ở phiên bản 2 còn lại nếu không có có nghĩa bạn đăng ở phiên bản 1.

Sự khác nhau giữa 2 phiên bản này thế nào?

Đây là câu hỏi mà chắc chưa ai từng giải thích cho các bạn, theo như nghiên cứu cá nhân của mình trong vòng một năm qua mình rút ra được như sau.

Đối với Blogger XML v1

Bạn được cung cấp những nhu cầu cơ bản cho việc thiết kế Blogger Template như phần css mặc định căn chỉnh những tiện ích (widget) có trên blog và bạn có thể thêm vào tùy chỉnh cho Template như "màu sắc" & "font chữ" của một đối tượng trong phần thiết lập năng cao của blog. Phần thiết lập năng cao bạn có thể tìm thấy tại "Mẫu » Tủy chỉnh".

Đối với Blogger XML v2

Tương tự như phiên bản một, nhưng có nhiều tính năng nâng cao hơn và phần css căn chỉnh cho các widget khác so với v1 (theo cảm nhận thì mình thích xài css của v1 hơn). Nhưng tính năng nâng cao hơn bạn có thể làm là, căn chỉnh "chiều rộng" cho đối tượng có trong phần thiết lập nâng cao. Ngoài ra thì bạn còn có thể tùy biến layout của cả template cho người dùng lựa chọn tại phần thiết lập nữa (nhưng cái này rất rất khó, và cần rất nhiều thời gian để thực hiện).

Cấu trúc cơ bản của Blogger Template

Sau đây là cấu trúc cơ bản của một Blogger template và lời giải thích sơ của mình tại bài viết hướng dẫn đầu của mình trong việc thiết kế Blogger Template
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html>
<html b:version='2' class='v2' expr:dir='data:blog.languageDirection' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'>  <!-- xóa 2 thuộc tính quyết định v2 để trờ về v1 -->

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <b:include data='blog' name='all-head-content'/>
    <title><data:blog.pageTitle/></title>
    <b:skin><![CDATA[   ]]></b:skin>
    <b:template-skin><![CDATA[   ]]></b:template-skin>  <!-- Chỉ có ở v2 -->
</head>

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

</html>
ở đây mình sẽ giải thích những thành phần cơ bản như sau, đầu tiên "<b:include data='blog' name='all-head-content'/>" theo mình thì bạn nên tham khảo qua bài viết trước đây của mình "Tạo và sử dụng thẻ includable trong Blogger" để hiểu includable và include là gì trước. Đây là lời gọi "hàm" giúp lấy ra toàn bộ thông tin mặc định mà Blogger cung cấp cho chúng, những mặc định Blogger đã giấu hàm imcludable đi nên bạn không có quyền thay tác động vào nó. Nhưng bạn vẫn có thể tự viết lại nó.

Tiếp theo 2 loại thẻ "b:skin" và "b:template-skin" là phần căn chỉnh css cho Blogger XML, nó sẽ tự động được chuyển qua thẻ "style" khi xuất hiện với người dùng. Thế tại sao không dùng thẻ "style" luôn, 2 thẻ này thêm vào chi vậy? Đây chính là cái đặc biệt bên trong 2 thẻ này, bạn có thể tạo ra một giải giá trị để áp dụng cho thẻ css, nhưng giá trị này có thể được người dùng sử dụng trong phần thiết lập nâng cáo mà mình đã nói ở gần đầu bài.

Thiết lập nâng cao

Tới "section" và "widget" mình đã có dịp giải thích về 2 đối tượng này ở bài "Hướng dẫn thiết kế template Blogger đơn giản" bạn hãy tham khảo qua để nắm cơ bản, mình sẽ giải thích chi tiết hơn từng widget ở các phần tiếp theo, nó nằm ở khoảng giữa bài viết nhé.

Kết lại

Tạm dừng tại đây nhé, đây là phần đầu tiên trong serial bài viết hướng dẫn thiết kế Blogger Template của mình, mình đã giới thiệu cơ bản cho các bạn biết về ngôn ngữ lập trình của Blogger là Blogger XML và cấu trúc cơ bản của nó. Trong phần sau ta sẽ tiếp tục tìm hiểu chi tiết hơn về những cái mà mình đã giải thích một cách tóm gọn ở trên, mời các bạn đón xem.

P/S: Các bạn có thể tham khảo trước các bài về Blogger XML của mình, đặc biệt là bài về data nhé, nếu các bạn hiểu thì mình tin chã cần tới những bài viết tiếp theo của mình nữa đâu :D

Xem tiếp phần 2: Tìm hiểu thẻ b:skin