Phân tích XHTML của widget Label và tùy chỉnh

Bài viết này mình sẽ phân tích từng thành phần của widget Label và đưa ra một số ứng dụng phát triển từ code mặc định của nó.

Widget Label sẽ có dạng như sau trong template của bạn
<b:widget id='Label1' locked='false' title='Category List' type='Label'>
  <b:includable id='main'>
    <b:if cond='data:title'>
      <h2><data:title/></h2>
    </b:if>
    <div expr:class='&quot;widget-content &quot; + data:display + &quot;-label-widget-content&quot;'>
      <b:if cond='data:display == &quot;list&quot;'>
        <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>
              <b:if cond='data:showFreqNumbers'>
                <span dir='ltr'>(<data:label.count/>)</span>
              </b:if>
            </li>
          </b:loop>
        </ul>
      <b:else/>
        <b:loop values='data:labels' var='label'>
          <span expr:class='&quot;label-size label-size-&quot; + data:label.cssSize'>
            <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>
            <b:if cond='data:showFreqNumbers'>
              <span class='label-count' dir='ltr'>(<data:label.count/>)</span>
            </b:if>
          </span>
        </b:loop>
      </b:if>
      <b:include name='quickedit'/>
    </div>
  </b:includable>
</b:widget>

Và mình sẽ tách từng phần của đoạn XHTML trên ra để nói về công dụng của widget này để bạn có thể tùy biến nó đơn giản hơn

Tiêu đề của widget

<b:if cond='data:title'>
  <h2><data:title/></h2>
</b:if>
Tiêu đề của Label được nằm trong thẻ h2 và được nằm trong thẻ điều kiện chỉ hiển thị nếu bạn không để tiêu đề trống khi cài đặt widget trong layout(Bố cục)

Điều kiện hiển thị dạng List và Cloud

Đoạn code bên dưới có tác dụng tách 2 loại hiển thị của Label dạng List và Cloud
<b:if cond='data:display == &quot;list&quot;'>
  <!-- Đoạn code hiển thị dạng `list` -->
<b:else/>
  <!-- Đoạn code hiển thị dạng `cloud` -->
</b:if>
Đoạn code hiển thị dạng List
<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>
      <b:if cond='data:showFreqNumbers'>
        <span dir='ltr'>(<data:label.count/>)</span>
      </b:if>
    </li>
  </b:loop>
</ul>
Đoạn code hiển thị dạng cloud
<b:loop values='data:labels' var='label'>
  <span expr:class='&quot;label-size label-size-&quot; + data:label.cssSize'>
    <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>
    <b:if cond='data:showFreqNumbers'>
      <span class='label-count' dir='ltr'>(<data:label.count/>)</span>
    </b:if>
  </span>
</b:loop>
Phân tích từng thành phần dữ liệu trong 2 đoạn code trên
Dữ liệuThông TinHiển Thị/ Ảnh Minh Họa
data:displayYếu tố này để ta lựa chọn các dạng hiển thị cho labelslist, cloud
data:blog.url[?]
data:label.urlYếu tố này giúp hiển thị url của từng nhãn.http://tên blog.blogspot.com/search/label/-/tên Label
data:label.nameYếu tố này giúp hiển thị tên của từng nhãn.
data:blog.languageDirection[?]
data:showFreqNumbersLựa chọn hiển thị các nhãn theo số lượng hay không.true, false
data:label.countYếu tố này hiển thị số bài viết trên một nhãn.
data:label.cssSizeYếu tố này giúp cho hiển thị các nhãn theo số cấp dựa theo số lượng bài viết trên các nhãn. Đối với lựa chọn hiển thị dạng cloud có thể điều chỉnh kích thước qua CSS.

Công cụ chỉnh sửa nhanh

Đoạn code bên dưới chính là biểu tượng chỉnh sửa nhanhcủa widget
<b:include name='quickedit'/>

Chỉnh sửa và tùy biến widget Label

Như đã phân tích từng thành phần phía trên, bây giờ ta đã có thể tùy biến theo ý mình. Và sau đây là một ví dụ cụ thể khi bạn để Label hiển thị dạng List, mình sẽ chỉnh sửa đoạn code hiển thị dạng list. Bạn có thể thực hành trên blog demo để hiểu rõ hơn vấn đề
                  <ul>
                      <b:loop values='data:labels' var='label'>
                        <li>
                          <b:if cond='data:blog.url == data:label.url'>
                            <span class='namex' expr:dir='data:blog.languageDirection'>
                              <data:label.name/>
                            </span>
                            <b:else/>
                            <b:if cond='data:showFreqNumbers'>
                              <a expr:dir='data:blog.languageDirection' expr:href='data:label.url + &quot;?&amp;max-results=6&quot;' expr:title='data:label.name'>
                                <span class='countxx'><data:label.count/></span>
                                <data:label.name/>
                              </a>
                              <b:else/>
                              <a expr:dir='data:blog.languageDirection' expr:href='data:label.url + &quot;?&amp;max-results=6&quot;'>
                                <data:label.name/>
                              </a>
                            </b:if>
                          </b:if>
                        </li>
                      </b:loop>
                    </ul>
Như bạn thấy mình đã chỉnh sửa toàn bộ đoạn code được tô màu đỏ. HTML xuất ra khi ta chưa sửa (mặc định) như sau:
<a dir="ltr" href="http://tên blog.blogspot.com/search/label/Tên label">Tên label</a><span dir="ltr">(2)</span>
Và sau khi ta sửa lại HTML sẽ xuất ra như sau:
<a dir="ltr" href="http://tên blog.blogspot.com/search/label/Tên label?&amp;max-results=6" title="Tên nhãn">
<span class="countxx">2</span>
Tên label
</a>
*2 là ví dụ về số bài viết của label
Vậy mình đã đưa dữ liệu đếm số bài viết (data:label.count) lên trước tên nhãn (data:label.name) và thêm vào thẻ span chứa nó class="countxx" (ta có thể thêm style cho số đếm bài viết qua class này). Ngoài ra mình còn thêm title cho link của Label bằng đoạn code expr:title='data:label.name', vậy khi ta rê chuột đến link label sẽ hiển thị title là tên của nhãn đó.
Ở phía trên mình đã nhắc đến việc thêm class="countxx" cho thẻ span chứa số đếm bài viết của 1 label. Vậy ta sẽ thêm đoạn CSS sau vào để tạo style cho nó
.countxx {
display: block;
float: left;
margin-right: 3px;
padding: 0 2px 0 2px;
min-width: 20px;
font-size: 9px;
text-align: center;
background-color: #0671A1;
color: white;
border-radius: 2px;
}
Thực hiện xong các bước trên Label của bạn sẽ hiển thị như sau
Bạn có thể xem demo trực tiếp trên blog này bằng cách click vào Chuyên Mục bên thanh sidebar phải của blog này và một ví dụ nữa khi bạn click vào mục Tips trên khung ribbon
Chúc các bạn thành công!
Tham khảo tài liệu từ DTE :]
17 Comments
Comments

17 comments

6/11/13
Cho em hỏi một chút ngoài lề nhé anh, tại sao khi em thêm mô tả vào tùy chỉnh tìm kiếm thì bị lỗi nhãn, nó lung tung cả lên.

Còn xóa đi thì không việc gì, em đang tức chết vì cái này à
6/11/13
Bạn có demo hoặc chụp lại ảnh màn hình không? Như vậy mình mới hình dung ra được lỗi bạn đang gặp phải
6/11/13
anh có yhú ko?
6/11/13
https://lh3.googleusercontent.com/-suHk4yHxkL0/UnpeEpmkXOI/AAAAAAAAAO0/RAZ-J6uU0oU/w346-h195/Untitled-1.jpg

trước đây, còn lỗi thì anh sang blog em đi, tùm lum lun khi thêm mô tả à
6/11/13
Hình nhỏ quá chẳng thấy gì cả @@
6/11/13
Trình của anh ngày càng Pro rồi, hôm nay thấy giao diện bên anh sáng mà mượt hơn ấy, em thấy anh nên tối ưu phần seo URL và phần mô tả thân thiện tí nữa sẻ có nhiều độc giả hơn ấy.
6/11/13
đấy là khi bt, còn anh sang blog em đi, lỗi tùn lum , em đng để đó
7/11/13
Về phần seo có lẽ hôm nào mình phải bỏ 1 buổi ra để vọc mới được. Giờ là con số 0 tròn trĩnh @@
7/11/13
Blog của bạn là?
Cho mình hỏi.. đoạn code chia cột của nó là đoạn nào hả bạn
15/11/13
Bạn chèn đoạn mã sau trước ]]></b:skin>
.Label li{float:left;width:50%}
Sau đó tìm trong template đoạn mã của widget label (Ctrl + F với từ khóa id='Label1') và trong đoạn mã có duy nhất một thẻ đóng </ul>, bạn chèn ngay sau nó đoạn mã sau
<div style="clear:both"/>
bạn ơi chia sẻ cho mình biết tại sao khi mình post bài bằng email (có sẵn hình trong bài viết) thì khi mở trang chủ blog lên thì không thấy có hình ở góc bài viết trên trang chủ vậy ?
Ý bạn là hình ảnh thumbnai của bài viết ở ngoài trang chủ? Nếu vậy thường auto read more họ chỉ lấy ảnh khi bạn 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ậy có cách nào để chỉnh sửa lại autoreadmore không bạn ? vì lúc trước 1 người bạn cho mình 1 template mà khi mình post bài bằng email thì xem trên trang chủ có thể hiện hình thumbain, nhưng bây giờ cái template này thì nó lại không hiển thị ảnh thumbain
Theo mình thấy thì bạn nên viết bài trực tiếp trên blogspot, hiện tại cũng đã hỗ trợ viết bài trên các điện thoại thông minh mà. Hơn nữa hình ảnh mình tự post lên không phụ thuộc từ website người khác, nhỡ họ đổi link thì hình ảnh trên blog bạn sẽ không hiển thị nữa
bạn ơi cho hỏi sao cái blog của mình bây giờ vào bố cục(layout) lại không thấy gì cả ? mấy mục khác nhấn zô vẫn bình thường ? tại sao vậy bạn ?
15/1/14
Bạn đưa hình ảnh lên cho mình xem mới rõ được

Cảm ơn bạn đã ghé thăm Troll VL !
» Tạm thời ngăn không cho comment với chế độ ẩn danh vì có một số bạn không có thành ý cố tình spam. Mong các bạn thông cảm!
» Bạn nên viết bằng Tiếng Việt có dấu để mọi người dễ đọc, dễ bình luận
» Để liên hệ,góp ý và đóng góp bài viết bạn click vào đây
Sử dụng các thẻ sau cho comments
» Chèn nội dung vào blockquote <b rel="quote">Nội dung blockquote</b>
» Chèn nội dung vào note <em rel="note">Nội dung note</em>
» Chèn code vào khung pre <i rel="pre">Nội dung code</i>
» Chèn hình ảnh <i rel="image">Link hình ảnh</i>
» Chèn video từ youtube [youtube]link video[/youtube]
» Chèn link <i rel="anchor">Link</i>

Insert Emoticons
:cuoi
:hihi
:thank
:haha
:meu
:cry
:oaoa
1cuoi
:D
@@
:p
:o
:vi
:ko
:ca
:why
:xin
:lanh
:im
:aoi
:ado
:mda
:tat
0:khoa
a:ab
k:ac
q:ad
w:ae
e:af
l:ag
g:ah
8:ai
9:aj
9:ag
:9a
*Phải có khoảng trống trước các code mới hiển thị mặt cười


Mã Hóa Code Tạo và xem trước comments Cancel Reply
-->