<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Học thiết kế web theo chuẩn.</title>
	<atom:link href="http://www.izwebz.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.izwebz.com</link>
	<description>Let&#039;s Do Together</description>
	<lastBuildDate>Fri, 03 Sep 2010 05:14:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>jQuery AJAX &#8211; Random Post</title>
		<link>http://www.izwebz.com/video-tutorials/jquery-ajax-random-post/</link>
		<comments>http://www.izwebz.com/video-tutorials/jquery-ajax-random-post/#comments</comments>
		<pubDate>Fri, 03 Sep 2010 05:11:47 +0000</pubDate>
		<dc:creator>Demon Warlock</dc:creator>
				<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://www.izwebz.com/?p=2590</guid>
		<description><![CDATA[Hôm nay tôi đang làm đến chương 6 của cuốn sách về jQuery và đang làm đến phần AJAX. Nhân tiện nhớ lại ngày trước có xem một theme WordPress sử dụng AJAX ở sidebar để load những bài post random mà không cần phải refresh lại. Đây cũng là một tính năng hay nếu [...]]]></description>
			<content:encoded><![CDATA[<p>Hôm nay tôi đang làm đến chương 6 của cuốn sách về jQuery và đang làm đến phần AJAX. Nhân tiện nhớ lại ngày trước có xem một theme WordPress sử dụng AJAX ở sidebar để load những bài post random mà không cần phải refresh lại. Đây cũng là một tính năng hay nếu bạn có thể thêm vào cho theme WordPress của bạn.</p>
<p><span id="more-2590"></span></p>
<p><strong>Thời lượng</strong>: 14:00</p>
<p><strong>Download định dạng .avi chất lượng cao</strong>: <a href="http://www.mediafire.com/?y0g2k0cu2b4bz8s" target="_blank"> MediaFire</a></p>
<p><strong>Dung lượng</strong>: 66MB</p>
<div class="tutorial-image">
<object width="580" height="480"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=14659052&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=14659052&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="580" height="480"></embed></object></p>
<div class="fullScreen"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.izwebz.com/video-tutorials/jquery-ajax-random-post/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Navigation giả Flash với jQuery</title>
		<link>http://www.izwebz.com/video-tutorials/navigation-gia-flash-voi-jquery/</link>
		<comments>http://www.izwebz.com/video-tutorials/navigation-gia-flash-voi-jquery/#comments</comments>
		<pubDate>Wed, 01 Sep 2010 14:06:30 +0000</pubDate>
		<dc:creator>Demon Warlock</dc:creator>
				<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://www.izwebz.com/?p=2577</guid>
		<description><![CDATA[Trước đây khi muốn tạo menu dạng như thế này, bạn phải sử dụng Flash mới làm được. Trong video này chúng ta sẽ sử dụng jQuery để giả hiệu ứng flash này. Nhưng cái hay của cách này là nó hoàn toàn tự động. Bởi vì nếu là dạng Flash, mỗi khi muốn thêm [...]]]></description>
			<content:encoded><![CDATA[<p>Trước đây khi muốn tạo menu dạng như thế này, bạn phải sử dụng Flash mới làm được. Trong video này chúng ta sẽ sử dụng jQuery để giả hiệu ứng flash này. Nhưng cái hay của cách này là nó hoàn toàn tự động. Bởi vì nếu là dạng Flash, mỗi khi muốn thêm một mục khác nữa vào Menu, bạn phải vào Photoshop design lại, rồi chỉnh sửa mã rất mất thời gian.  </p>
<p><span id="more-2577"></span></p>
<p>Trong video lần này chúng ta sẽ học một chút về jQuery như cách lưu đối tượng jQuery vào biến, cách di chuyển trong DOM, tạo phần tử mới trong DOM và chèn nó vào nơi mình muốn. Nếu bạn vẫn còn mới với jQuery, tôi khuyên bạn nên xem qua các chương sách về jQuery có ngay trên izwebz để hiểu thêm.</p>
<p><strong>Thời lượng</strong>: 20:00</p>
<p><strong>Download định dạng .avi chất lượng cao</strong>: <a href="http://www.mediafire.com/?w1jgpv1n5k25vxy" target="_blank"> MediaFire</a></p>
<p><strong>Dung lượng</strong>: 151MB</p>
<div id="view-demo">
<a href="http://www.izwebz.com/wp-content/uploads/demon/demo/jquery-nav/index.html" class="view-demo" target="_blank">Xem Demo</a><br />
<a href="http://www.izwebz.com/wp-content/uploads/demon/downloads/jquery-nav.rar" class="download">Download</a>
</div>
<div class="tutorial-image">
<object width="400" height="345"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=14607485&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=14607485&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="490" height="435"></embed></object>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.izwebz.com/video-tutorials/navigation-gia-flash-voi-jquery/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Chương 4 &#8211; Hiệu ứng</title>
		<link>http://www.izwebz.com/jquery/chuong-4-hieu-ung/</link>
		<comments>http://www.izwebz.com/jquery/chuong-4-hieu-ung/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 21:27:23 +0000</pubDate>
		<dc:creator>Demon Warlock</dc:creator>
				<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.izwebz.com/?p=2562</guid>
		<description><![CDATA[Các hiệu ứng động của jQuery sẽ làm cho trang web của bạn thêm phần sinh động. Jquery cho phép bạn ẩn hiện, trượt lên trượt xuống các thành phần của trang web. Bạn cũng có thể cho nó xảy ra cùng một lúc hoặc theo thứ tự định trước. Trong phần này chúng ta [...]]]></description>
			<content:encoded><![CDATA[<p>Các hiệu ứng động của jQuery sẽ làm cho trang web của bạn thêm phần sinh động. Jquery cho phép bạn ẩn hiện, trượt lên trượt xuống các thành phần của trang web. Bạn cũng có thể cho nó xảy ra cùng một lúc hoặc theo thứ tự định trước. Trong phần này chúng ta sẽ tìm hiểu các hiệu ứng jQuery và kết hợp chúng để tạo ra những hiệu ứng hay.</p>
<p><span id="more-2562"></span></p>
<h5>Thay đổi Inline CSS</h5>
<p>Trước khi chúng ta học những hiệu ứng jQuery, chúng ta cần xem lại một chút về CSS. Trong những chương trước đây chúng ta thay đổi giao diện của các thành phần trên trang bằng cách khai báo thuộc tính của class trong một stylesheet riêng biệt. Sau đó chúng ta thêm hoạc loại bỏ những class đó bằng jQuery. Về cơ bản thì cách này nên được sử dụng để thêm CSS vào HTML bởi vì nó tôn trọng quy luật tách riêng phần trình bày và cấu trúc. Tuy nhiên, đôi khi chúng ta muốn áp dụng style cho những thành phần chưa được, hoặc khó mà được, định dạng bằng stylesheet. Nhưng rất may mắn là jQuery có phương thức .css() để sử dụng cho những trường hợp này.</p>
<p>
Phương thức này hoạt động bằng cả hai cách lấy và đăt. Để lấy giá trị của một thuộc tính, chúng ta chỉ cần chuyển tên của thuộc tính đó thành một một chuỗi, dạng như <span class='post-span'>.css(&#8216;backgroundColor&#8217;)</span>. Jquery có thể hiểu được những thuộc tính kết hợp bởi nhiều từ và nối với nhau bằng dấu – như là trong CSS <span class='post-span'>(&#8216;background-color&#8217;)</span>, hoặc dạng viết hoa chữ cái đầu như là (&#8216;backgroundColor&#8217;). Để định dạng thuộc tính style, phương thức .css() có hai cách sử dụng. Cách thứ nhất chỉ nhận một cặp thuộc tính – giá trị. Cách thứ hai là nhận một tập hợp các cặp thuộc tính – giá trị.</p>
<pre class="brush: jscript;">.css('property','value')
.css({property1: 'value1', 'property-2': 'value2'}) </pre>
<p>Những người đã quen với JavaScript sẽ nhận ra đây là dạng đối tượng trực kiện JavaScript.</p>
<p><strong>Chú ý:</strong> <em>Các giá trị số không dùng dấu ngoặc kép trong khi giá trị chuỗi phải có dấu ngoặc kép. Tuy nhiên, khi sử dụng bản đồ ký hiệu, dấu ngoặc kép không bắt buộc cho những tên thuộc tính được viết dưới dạng in hoa chữ cái đầu.<br />
</em></p>
<p>Chúng ta sử dụng phương thức .css() cũng giống như cách chúng ta đã sử dụng <span class='post-span'>.addClass()</span>. Bằng cách gán nó cho một Selector sau đó thì Bind nó vào một sự kiện. Để minh hoạ, chúng ta sẽ sử dụng bộ nút thay đổi định dạng trong chương 3, nhưng với mã HTML khác.</p>
<pre class="brush: xml;">&lt;div id=&quot;switcher&quot;&gt;
        &lt;div class=&quot;label&quot;&gt;Cỡ chữ&lt;/div&gt;
        &lt;button id=&quot;switcher-default&quot;&gt;Mặc Định&lt;/button&gt;
        &lt;button id=&quot;switcher-large&quot;&gt;Lớn&lt;/button&gt;
        &lt;button id=&quot;switcher-small&quot;&gt;Nhỏ&lt;/button&gt;
    &lt;/div&gt;&lt;!--End #switcher--&gt;

    &lt;div class=&quot;speech&quot;&gt;
        &lt;p&gt;
        Pellentesque habitant morbi tristique senectus et netus et malesuada
        fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget,
        tempor sit amet, ante. Donec eu libero sit amet quam egestas semper.
        Aenean ultricies mi vitae est.
        &lt;/p&gt;
   &lt;/div&gt;&lt;!--End .speech--&gt;</pre>
<p>Với một chút định dạng CSS cơ bản chúng ta có được hình dưới đây.</p>
<div class="tutorial-image"><img src="http://www.izwebz.com/wp-content/uploads/demon/images/jquery/chapter-4/1.png" alt="chuong 4 - hieu ung" /></div>
<p>Xem <a href="http://www.izwebz.com/wp-content/uploads/demon/jquery/ch4/example_1.htm" target="_blank">Demo online</a>  – Example 1</p>
<p>Khác với bộ nút ở chương trước, trong chương này chúng ta sẽ sử dụng phần tử &lt;button&gt;. Khi người dùng nhấp chuột vào nút Lớn hoặc Nhỏ sẽ tăng hoặc giảm cỡ chữ trong thẻ &lt;div class=&#8217;speech&#8217;&gt;. Cuối cùng họ cũng có thể nhấn vào nút Mặc Định để trả cỡ chữ về giá trị ban đầu.</p>
<p>Nếu chúng ta chỉ muốn tăng cỡ chữ một lần với một giá trị đặt trước thì chúng ta vẫn có thể sử dụng phương thức <span class='post-span'>.addClass()</span>. Nhưng lần này chúng ta sẽ cho phép người dùng nhấp chuột nhiều lần vào nút, và mỗi lần nhấp cỡ chữ sẽ tăng hoặc giảm dần lên. Tất nhiên bạn cũng có thể tạo ra nhiều class và gán chúng cho mỗi lần nhấp chuột và sau đó chúng ta cho chạy vòng lặp qua từng class. Nhưng làm như thế nó thủ công quá và rất mất thời gian, cho nên cách lẹ hơn sẽ là lấy cỡ chữ của đoạn văn đó trước, sau đó thì tăng nó lên với giá trị mình muốn. Trong ví dụ này chúng ta sẽ cho tăng cỡ chữ lên 40% mỗi khi người dùng nhấp chuột.</p>
<p>Đoạn mã của chúng ta sẽ bắt đầu bằng <span class='post-span'>$(document).ready()</span> và bộ xử lý sự kiện <span class='post-span'>$(&#8216;#switcher-large&#8217;).click()</span></p>
<pre class="brush: jscript;">$(document).ready(function() {
$('#switcher-large').click(function() {
});
});</pre>
<p>
Để biết được cỡ chữ của đoạn văn đó là bao nhiêu rất đơn giản, jQuery có phương thức .css() cho phép bạn làm việc này. Tuy nhiên phương thức này lại trả về giá trị có thêm cái đuôi &#8216;px&#8217;, ví dụ là đoạn văn có kích thước chữ là 16px thì giá trị trả về sẽ là 16px. Cho nên chúng ta phải tìm cách cắt cái đuôi &#8216;px&#8217; đó đi và chỉ giữ lại phần giá trị số là 16. Một điểm nữa là khi chúng ta định sử dụng một đối tượng jQuery nhiều lần, bạn nên nhớ lại selector bằng cách lưu đối tượng đó vào một biến.</p>
<pre class="brush: jscript;">$(document).ready(function() {
var $speech = $('div.speech'); //lưu đối tượng jQuery vào biến $speech
$('#switcher-large').click(function() {
var num = parseFloat($speech.css('fontSize'), 10);
});
});</pre>
<p>
Ở dòng code thứ 2 chúng ta đã tạo ra một biến là <span class='post-span'>$speech</span> và lưu đối tượng jQuery vào đó. Bạn cũng nên lưu ý cách tôi đặt tên biến bắt đầu bằng dấu $, bởi vì trong javaScript bạn hoàn toàn có thể sử dụng dấu $ để đặt tên cho biến. Cho nên đây là cách để nhắc nhở chúng ta về sau là biến này đang chứa một đối tượng jQuery.</p>
<p>Trông bộ xử lý .<span class='post-span'>click()</span>, chúng ta sử dụng hàm <span class='post-span'>parseFloat()</span> để cắt đi phần đuôi &#8216;px&#8217; và chỉ giữ lại phần giá trị số. Hàm <span class='post-span'>parseFloat()</span> sẽ kiểm tra một chuối theo thứ tự từ trái qua cho đến khi nó gặp một ký tự không phải là dạng số. Chuỗi số sẽ được biến thành dạng số thập phân. Trong ví dụ này nó sẽ biến chuỗi &#8217;16&#8242; thành dạng số 16 (quá giỏi >:<) và tất nhiên nó cũng sẽ cắt phần đuôi 'px' đi bởi vì nó không phải là số. Còn trong trường hợp chuỗi đó bắt đầu bằng chữ thay vì là số, hàm .parseFloat() sẽ trả về một giá trị là NaN, là chữ viết tắt của <strong>Not A Number</strong> (không phải số). Hàm <span class='post-span'>parseFloat()</span> có argument thứ hai để đảm bảo rằng giá trị số trả về dưới dạng hàng chục chứ không phải các dạng khác.</p>
<p>Cuối cùng chúng ta chỉ cần nhân biến num với 1.4 (tăng 40%) và sau đó đặt kích cỡ chữ bằng cách kết hợp num với &#8216;px&#8217;</p>
<pre class="brush: jscript;">$(document).ready(function() {
var $speech = $('div.speech');
$('#switcher-large').click(function() {
var num = parseFloat($speech.css('fontSize'), 10 );
num *= 1.4;
$speech.css('fontSize', num + 'px');
});
});</pre>
<p>
<strong>Lưu ý:</strong> <em>Phương trình num *= 1.4 là dạng viết tắt phổ biến. Nó tương đương với num = num * 1.4. Nếu bạn thấy cách viết thường dễ hiểu hơn thì bạn cũng có thể sử dụng. Còn nếu không bạn cũng có thể dùng cách viết trên cho các phương trình khác như tính cộng num += 1.4, tính trừ num -= 1.4, tính chia num /= 1.4 và chia với số dư num %= 1.4.</em></p>
<div class="tutorial-image"><img src="http://www.izwebz.com/wp-content/uploads/demon/images/jquery/chapter-4/2.png" alt="chuong 4 - hieu ung" /></div>
<p>Xem <a href="http://www.izwebz.com/wp-content/uploads/demon/jquery/ch4/example_2.htm" target="_blank">Demo online</a>  – Example 2</p>
<p>
Bây giờ để nút Nhỏ Hơn có thể hoạt động, chúng ta sẽ chia num /= 1.4. Hơn nữa chúng ta sẽ kết hợp cả hai phép tính trên vào một bộ xử lý <span class='post-span'>.click()</span> cho tất cả các phần tử <span class='post-span'>&lt;button&gt;</span> nằm trong thẻ <span class='post-span'>&lt;div id=&#8217;switcher&#8217;&gt;</span>. Sau khi đã tìm ra được giá trị số, và dựa vào ID của nút nào được nhấn, chúng ta sẽ sử dụng phép nhân hoặc chia. Dưới đây là đoạn mã để làm việc này.</p>
<pre class="brush: jscript;">$(document).ready(function() {
var $speech = $('div.speech');
$('#switcher button').click(function() {
var num = parseFloat( $speech.css('fontSize'), 10 );
if (this.id == 'switcher-large') {
num *= 1.4;
} else if (this.id == 'switcher-small') {
num /= 1.4;
}
$speech.css('fontSize', num + 'px);
});
});</pre>
<p>
Nhớ lại ở chương 3 chúng ta có thể lấy thuộc tính id của một phần tử DOM bằng cách sử dụng từ khoá this, trong trường hợp này nó xuất hiện trong mệnh đề <span class='post-span'>if … else</span>. Làm như vậy thì nó hiệu quả hơn là phải tạo ra một đối tượng jQuery chỉ để kiểm tra giá trị của một thuộc tính.</p>
<p>Tiếp theo chúng ta cũng phải làm cho nút Mặc Định hoạt động để người dùng có thể trả về giá trị mặc định lúc ban đầu. Việc chúng ta cần làm là lưu kích thước font chữ của đoạn văn vào một biến ngay khi DOM sẵn sàng. Sau đó chúng ta có thể gọi lại giá trị này mỗi khi nút Mặc Định được nhấp. Chúng ta cũng có thể sử dụng thêm một mệnh đề else … if nữa, nhưng có lẽ mệnh đề Switch trong trường hợp này là hợp lý hơn.</p>
<pre class="brush: jscript;">$(document).ready(function() {
var $speech = $('div.speech');
var defaultSize = $speech.css('fontSize');
$('#switcher button').click(function() {
var num = parseFloat( $speech.css('fontSize'), 10 );
switch (this.id) {
case 'switcher-large':
num *= 1.4;
break;
case 'switcher-small':
num /= 1.4;
break;
default:
num = parseFloat(defaultSize, 10);
}
$speech.css('fontSize', num + 'px');
});
});</pre>
<p>Ở đoạn code trên chúng ta vẫn kiểm tra giá trị của this.id và thay đổi kích thước chữ dựa vào nó, nhưng nếu giá trị của nó không phải là <span class='post-span'>&#8216;switcher-large&#8217;</span> hoặc <span class='post-span'>&#8216;switcher-small&#8217;</span> thì nó sẽ mặc định là kích cỡ ban đầu.</p>
<p>Xem <a href="http://www.izwebz.com/wp-content/uploads/demon/jquery/ch4/example_3.htm" target="_blank">Demo online </a> – Example 3</p>
<h5>Ẩn hiện cơ bản</h5>
<p>Hai phương thức <span class='post-span'>.hide()</span> và <span class='post-span'>.show()</span>, khi không có tham số, có thể được coi là phương thức rút gọn của <span class='post-span'>.css(&#8216;display&#8217;,'string&#8217;)</span>, ở đó &#8216;string&#8217; là một giá trị bất kỳ. Hiệu ứng đạt được của hai phương thức này thì cũng đơn giản như tên gọi, có nghĩa là nó sẽ ẩn hoặc hiện một thành phần nào đó.</p>
<p>Phương thức <span class='post-span'>.hide()</span> sẽ làm cho thuộc tính inline style cho các phần tử phù hợp trở thành <span class='post-span'>display:none</span>. Nhưng cái hay của phương thức này là ở chỗ nó ghi nhớ giá trị thuộc tính của display  (thường là inline hoặc block) trước khi nó bị đổi thành none. Ngược lại, phương thức <span class='post-span'>.show()</span> lại trả về giá trị thuộc tính display ban đầu trước khi nó bị biến thành <span class='post-span'>display:none</span>.</p>
<p>Tính năng này của .show() và .hide() đặc biệt có ích khi bạn muốn ẩn một thành phần nào đó có thuộc tính display mặc định đã được khai báo trong stylesheet. Ví dụ, phần tử &lt;li&gt; có giá trị display mặc định là <span class='post-span'>display:block</span>, nhưng chúng ta lại muốn biến nó thành <span class='post-span'>display:inline</span> để sử dụng trong menu nằm ngang. May cho chúng ta là khi sử dụng phương thức .show() cho một thành phần bị ẩn như ở ví dụ này là những thẻ &lt;li&gt;. Nó sẽ không trả lại giá trị mặc định là <span class='post-span'>display:block</span>, bởi vì nếu như thế thì mỗi thẻ &lt;li&gt; lại xuất hiện trên một hàng thì hỏng hết. Thay vào đó, các phần tử sẽ được trả lại trạng thái trước là <span class='post-span'>display:inline</span>, như thế thì menu nằm ngang mới có thể hoạt động được.</p>
<p>Để minh hoạ cho tính năng trên, chúng ta sẽ thêm một đoạn văn bản thứ hai và một thẻ link “read more” vào sau đoạn văn thứ nhất.</p>
<pre class="brush: xml;">&lt;div id=&quot;switcher&quot;&gt;
        &lt;div class=&quot;label&quot;&gt;Cỡ chữ&lt;/div&gt;
        &lt;button id=&quot;switcher-default&quot;&gt;Mặc Định&lt;/button&gt;
        &lt;button id=&quot;switcher-large&quot;&gt;Lớn&lt;/button&gt;
        &lt;button id=&quot;switcher-small&quot;&gt;Nhỏ&lt;/button&gt;
    &lt;/div&gt;&lt;!--End #switcher--&gt;

    &lt;div class=&quot;speech&quot;&gt;
        &lt;p&gt;
        Pellentesque habitant morbi tristique senectus et netus et malesuada
        fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget,
        tempor sit amet, ante. Donec eu libero sit amet quam egestas semper.
        Aenean ultricies mi vitae est.
        &lt;/p&gt;
        &lt;p&gt;
        Pellentesque habitant morbi tristique senectus et netus et malesuada
        fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget,
        tempor sit amet, ante. Donec eu libero sit amet quam egestas semper.
        Aenean ultricies mi vitae est.
        &lt;/p&gt;

        &lt;a href=&quot;#&quot; class=&quot;more&quot;&gt;Read More&lt;/a&gt;</pre>
<p>
Khi DOM sẵn sàng thì đoạn văn thứ hai bị ẩn đi</p>
<pre class="brush: jscript;">$(document).ready(function() {
$('p:eq(1)').hide();
});</pre>
<div class="tutorial-image"><img src="http://www.izwebz.com/wp-content/uploads/demon/images/jquery/chapter-4/3.png" alt="chuong 4 - hieu ung" /></div>
<p>Xem <a href="http://www.izwebz.com/wp-content/uploads/demon/jquery/ch4/example_4.htm" target="_blank">Demo online</a>  – Example 4</p>
<p>Khi đường link Read More được click thì đoạn văn thứ 2 sẽ xuất hiện và chữ Read More sẽ bị ẩn đi</p>
<pre class="brush: jscript;">$(document).ready(function() {
          $('p:eq(1)').hide();
          $('a.more').click(function() { //Khi thẻ &lt;a class='more'&gt; được click
            $('p:eq(1)').show(); //cho hiển thị đoạn văn thứ 2
            $(this).hide(); //this ở đây là chỉ đối tượng jQuery a.more ẩn đi
            return false; // ngăn không cho đường link hoạt động như mặc định
          });
        });</pre>
<div class="tutorial-image"><img src="http://www.izwebz.com/wp-content/uploads/demon/images/jquery/chapter-4/4.png" alt="chuong 4 - hieu ung" /></div>
<p>Dòng mã mà bạn cần lưu ý ở trên là đoạn <span class='post-span'>return false</span>. Bởi vì mặc định của đường liên kết mỗi khi được nhấp là sẽ liên kết đến trang khác hoặc phần nào đó. Nhưng khi ta thêm dòng <span class='post-span'>return false</span>, nó sẽ giúp ngăn chặn mặc định của đường liên kết.</p>
<p>Hai phương thức .show() và .hide() ở trên tuy ngắn gọn và dễ sử dụng nhưng nó lại không được “mướt” cho lắm, cho nên ở phần tiếp theo chúng ta sẽ làm cho nó mướt hơn.</p>
<h5>Hiệu ứng và tốc độ</h5>
<p>Khi ta thêm tốc độ, hay nói chính xác hơn là khoảng thời gian, vào phương thức .show() hoặc .hide(), nó sẽ trở thành hiệu ứng động xảy ra trong một khoảng thời gian định trước. Ví dụ như phương thức .hide() làm giảm chiều cao, độ rộng và tính trong suốt của một phần tử cùng một lúc cho đến khi cả ba giá trị đều bằng không. Đến lúc đó thuộc tính của CSS là <span class='post-span'>display: none</span> sẽ được áp dụng. Mặt khác, phương thức .show() thì tăng chiều cao của một phần tử từ trên xuống dưới, chiều rộng từ trái qua phải và độ trong suốt từ 0 đến 1 cho đến khi phần tử đó hoàn toàn có thể được nhìn thấy.</p>
<h5>Tốc độ</h5>
<p>Với hiệu ứng jQuery, chúng ta có thể sử dụng ba tốc độ có sẵn là: &#8216;<span class='post-span'>slow&#8217;, &#8216;normal&#8217;</span> và <span class='post-span'>&#8216;fast&#8217;</span>. Sử dụng <span class='post-span'>.show(&#8216;slow&#8217;)</span> sẽ làm cho hiệu ứng Show diễn ra trong 0.6 giây, <span class='post-span'>.show(&#8216;normal&#8217;)</span> trong vòng 0.4 giây và <span class='post-span'>.show(&#8216;fast&#8217;)</span> là 0.2 giây. Nếu bạn muốn chính xác hơn nữa, bạn có thể sử dụng millisecond như: .show(850). Không giống như dạng chữ, khi dùng millisecond, số không cần phải bỏ trong dấu nháy.</p>
<p>Quay lại ví dụ ở trên, bây giờ chúng ta sẽ thêm tốc độ vào xem nó như thế nào.</p>
<pre class="brush: jscript;">$(document).ready(function() {
$('p:eq(1)').hide();
$('a.more').click(function() {
$('p:eq(1)').show('slow');
$(this).hide();
return false;
});
}); </pre>
<p>Xem <a href="http://www.izwebz.com/wp-content/uploads/demon/jquery/ch4/example_5.htm" target="_blank">Demo online</a>  – Example 5</p>
<h5>Fade in và Fade out</h5>
<p>Hai phương thức .show() và .hide() cũng đã đủ &#8216;độ mướt&#8217; rồi, nhưng có đôi khi bạn lại thấy &#8216;mướt&#8217; quá cũng không tốt. Cho nên jQuery cho chúng ta một số những hiệu ứng động có sẵn khác để thêm phần linh hoạt. Ví dụ khi bạn muốn cả đoạn văn xuất hiện từ từ bằng cách tăng dần độ trong suốt của nó, chúng ta có thể sử dụng <span class='post-span'>.fadeIn(&#8216;slow&#8217;)</span>:</p>
<pre class="brush: jscript;">$(document).ready(function() {
$('p:eq(1)').hide();
$('a.more').click(function() {
$('p:eq(1)').fadeIn('slow');
$(this).hide();
return false;
});
});</pre>
<p>Nếu muốn bạn cũng có thể thử với <span class='post-span'>.fadeOut(&#8216;slow&#8217;)</span> xem công dụng của nó như thế nào.</p>
<h5>Hiệu ứng đa hợp</h5>
<p>Đôi khi chúng ta muốn đảo trạng thái ẩn hiện một thành phần nào đó thay vì chỉ hiển thị nó một lần như chúng ta đã làm ở các bước trên. Đảo trạng thái có thể làm được bằng cách kiểm tra độ nhìn thấy của một tập hợp các thành phần trước, sau đó thì gán một phương thức phù hợp cho nó. Sử dụng lại hiệu ứng fade, chúng ta có thể sửa lại mã như sau:</p>
<pre class="brush: jscript;">$(document).ready(function() {
var $firstPara = $('p:eq(1)');
$firstPara.hide();
$('a.more').click(function() {
if ($firstPara.is(':hidden')) {
$firstPara.fadeIn('slow');
$(this).text('read less');
} else {
$firstPara.fadeOut('slow');
$(this).text('read more');
}
return false;
});
});</pre>
<p>Như chúng ta từng làm ở trên, chúng ta lưu selector vào một biến, trong ví dụ này là <span class='post-span'>$firstPara = $(&#8216;p:eq(1)&#8217;)</span>, để tránh phải lập lại việc lên xuống cây DOM. Chúng ta cũng không còn ẩn đi đường liên kết mà thay đổi chữ của nó.</p>
<p>Sử dụng mệnh đề <span class='post-span'>if … else</span> là hoàn toàn hợp lý để đảo trạng thái ẩn hiện của một phần tử. Nhưng với hiệu ứng đa hợp của jQuery, chúng ta không cần phải sử dụng dạng điều kiện này nữa. Jquery có một phương thức là <span class='post-span'>.toggle()</span>, hoạt động giống như <span class='post-span'>.show()</span> và <span class='post-span'>.hide()</span>, nó cũng có thể nhận hoặc không nhận tham số tốc độ. Một phương thức đa hợp nữa là <span class='post-span'>.slideToggle()</span>, nó được sử dụng để ẩn hoặc hiện một phần tử bằng cách từ từ tăng hoặc giảm độ cao của nó. Đoạn mã dưới đây chúng ta sẽ sử dụng phương thức <span class='post-span'>.slideToggle()</span>.</p>
<pre class="brush: jscript;">$(document).ready(function() {
var $firstPara = $('p:eq(1)');
$firstPara.hide();
$('a.more').click(function() {
$firstPara.slideToggle('slow');
var $link = $(this);
if ( $link.text() == &quot;read more&quot; ) {
$link.text('read less');
} else {
$link.text('read more');
}
return false;
});
}); </pre>
<p>Lần này từ khoá <span class='post-span'>$(this)</span> được dùng nhiều lần, cho nên chúng ta lưu nó lại vào một biến $link để đoạn mã hoạt động hiệu quả hơn và cũng dễ đọc hơn. Hơn nữa, mệnh đề điều kiện chỉ kiểm tra nội dung chữ của đường liên kết thay vì xem xem đoạn văn thứ 2 có hiện hay không. Bởi vì chúng ta chỉ sử dụng mệnh đề này để thay đổi chữ của nó.</p>
<h5>Tự tạo hiệu ứng động</h5>
<p>Ngoài những phương thức có sẵn, jQuery cung cấp thêm một phương thức rất mạnh nữa là <span class='post-span'>.animate()</span>. Nó cho phép chúng ta tự tạo ra những hiệu ứng động theo ý thích của mình. Phương thức <span class='post-span'>.animate()</span> có hai dạng. Dạng thứ nhất có thể nhận bốn đối số.</p>
<ul>
<li>1.Cặp thuộc tính và giá trị – giống như .css() mà chúng ta đã thảo luận ở trên.</li>
<li>
2.Tốc độ tuỳ chọn &#8211;  có thể là một trong những tốc độ có sẵn hoặc một số dưới dạng millisecond.</li>
<li>3.Kiểu di chuyển – sẽ được bàn kỹ hơn ở chương sau</li>
<li>
4.Một hàm gọi ngược sẽ được bàn ở phần dưới.</li>
</ul>
<p>Kết hợp lại thì bốn đối số trên sẽ có dạng công thức chung như sau</p>
<pre class="brush: jscript;">.animate({property1: 'value1', property2: 'value2'},
speed, easing, function() {
alert('đã tiến hành xong');
});</pre>
<p>Dạng thứ hai lấy vào 2 đối số, thuộc tính và tuỳ chọn.</p>
<pre class="brush: jscript;">.animate({properties}, {options})</pre>
<p>Khi chúng ta xuống dòng để dễ đọc hơn thì dạng thứ 2 nhìn như sau:</p>
<pre class="brush: jscript;">.animate({
	property1: 'value1',
	property2: 'value2'
	}, {
duration: 'value',
easing: 'value',
complete: function() {
alert('The animation is finished.');
},
queue: boolean,
step: callback
});</pre>
<p>Trước hết chúng ta sẽ sử dụng dạng thứ nhất của <span class='post-span'>.animate()</span>, sau đó chúng ta sẽ sử dụng dạng thứ 2 ở phần sau của chương này khi chúng ta bàn tới xếp hàng hiệu ứng.
</p>
<h5>Đảo trạng thái Fade</h5>
<p>Khi chúng ta nói về hiệu ứng đa hợp, bạn có thấy rằng không phải phương thức nào cũng có những phương thức đảo trạng thái đi kèm. Ví dụ phương thức <span class='post-span'>.slide()</span> thì có <span class='post-span'>.slideToggle()</span>, nhưng không có <span class='post-span'>.fadeToggle()</span> cho .fadeIn() và .fadeOut(). Nhưng chúng ta có thể dễ dàng sử dụng phương thức <span class='post-span'>.animate()</span> để tạo ra hiệu ứng đảo trạng thái fade. Ở đoạn mã dưới đây, chúng ta sẽ thay thế phương thức <span class='post-span'>.slideToggle()</span> với hiệu ứng động tự tạo.</p>
<pre class="brush: jscript;">$(document).ready(function() {
$('p:eq(1)').hide();
$('a.more').click(function() {
$('p:eq(1)').animate({opacity: 'toggle'}, 'slow');
var $link = $(this);
if ( $link.text() == &quot;read more&quot; ) {
$link.text('read less');
} else {
$link.text('read more');
}
return false;
});
});</pre>
<p>Xem ví dụ bạn sẽ thấy, phương thức .animate() cũng cho phép sử dụng những từ khoá như &#8216;show&#8217;, &#8216;hide&#8217; và &#8216;toggle&#8217;. Khi mà những phương thức rút gọn khác không phù hợp với tác vụ.</p>
<h5>
Hiệu ứng động đa thuộc tính</h5>
<p>Với phương thức <span class='post-span'>.animate()</span>, chúng ta có thể cùng một lúc sửa đổi bất cứ sự kết hợp nào của các thuộc tính. Ví dụ khi bạn muốn cùng một lúc tạo ra hai hiệu ứng trượt và mờ đi khi đảo trạng thái của đoạn văn thứ 2, chúng ta chỉ việc thêm cặp thuộc tính – giá trị chiều cao vào bản đồ thuộc tính <span class='post-span'>.animate()</span>.</p>
<pre class="brush: jscript;">$(document).ready(function() {
$('p:eq(1)').hide();
$('a.more').click(function() {
$('p:eq(1)').animate({
opacity: 'toggle',
height: 'toggle'
},
'slow');
var $link = $(this);
if ( $link.text() == &quot;read more&quot; ) {
$link.text('read less');
} else {
$link.text('read more');
}
return false;
});
});</pre>
<p>Hơn nữa, chúng ta không chỉ có những thuộc tính định dạng để sử dụng cho những phương thức rút gọn mà chúng ta còn có những thuộc tính khác như: <span class='post-span'>left, top, fontSize, margin, padding</span> và <span class='post-span'>borderWidth</span>. Hãy nhớ lại đoạn mã thay đổi kích thước chữ của đoạn văn ở trên. Chúng ta có thể tăng hoặc giảm kích thước bằng cách dùng .animate() thay cho .css().</p>
<pre class="brush: jscript;">$(document).ready(function() {
var $speech = $('div.speech');
var defaultSize = $speech.css('fontSize');
$('#switcher button').click(function() {
var num = parseFloat( $speech.css('fontSize'), 10 );
switch (this.id) {
case 'switcher-large':
num *= 1.4;
break;
case 'switcher-small':
num /= 1.4;
break;
default:
num = parseFloat(defaultSize, 10);
}
$speech.animate({fontSize: num + 'px'},
'slow');
});
});</pre>
<p>Những thuộc tính vừa nêu ở trên còn cho phép chúng ta tạo ra nhiều hiệu ứng phức tạp khác. Ví dụ chúng ta có thể di chuyển một thành phần từ trái sang phải của trang web và cùng một lúc tăng chiều cao của nó lên 20px và thay đổi độ dày của border lên thành 5px. Chúng ta sẽ thực nghiệm với thẻ <span class='post-span'>&lt;div id=&#8217;switcher&#8217;&gt;</span>. </p>
<p>Với những giao diện co giãn, chúng ta phải tính toán được khoảng cách mà hộp div sẽ di chuyển trước khi nó chạm vào đường biên bên phải của trang.Giả sử rằng độ rộng của đoạn văn bản là 100%, chúng ta có thể lấy độ rộng của đoạn văn bản trừ đi độ rộng của hộp Cỡ Chữ. Jquery có một phương thức là <span class='post-span'>.width()</span> có thể sử dụng được trong trường hợp này, tuy nhiên nó lại không tính được padding trái phải hoặc độ rộng đường viền. Với jQuery phiên bản 1.2.6, chúng ta có thêm phương thức <span class='post-span'>.outerWidth()</span>. Đây chính là phương thức chúng ta sẽ sử dụng để tránh phải tính thêm vào padding và border. Trong ví dụ này chúng ta sẽ bắt đầu hiệu ứng động khi mà người dùng nhấp chuột vào từ<strong> Cỡ Chữ</strong>, ở ngay phía trên hàng nút. Đoạn mã sẽ tương tự như sau</p>
<pre class="brush: jscript;">$(document).ready(function() {
$('div.label').click(function() {
var paraWidth = $('div.speech p').outerWidth();
var $switcher = $(this).parent();
var switcherWidth = $switcher.outerWidth();
$switcher.animate({left: paraWidth - switcherWidth,
height: '+=20px', borderWidth: '5px'}, 'slow');
});
}); </pre>
<p>Bạn nên chú ý đến thuộc tính height có dấu += trước giá trị pixel. Nó có nghĩa là giá trị tương đối. Nên thay vì nó làm cho hộp biến thành 20px, nó sẽ làm cho hộp to ra 20 px lớn hơn so với kích thước hiện tại. </p>
<p>Mặc dù đoạn mã trên làm cho thẻ div cao lên và border dày lên, nhưng nó không di chuyển sang bên tay phải như chúng ta muốn. Chúng ta phải thay đổi thuộc tính position của nó trong CSS.</p>
<h5>Định vị trí với CSS</h5>
<p>Khi bạn làm việc với <span class='post-span'>.animate()</span>, bạn nên nhớ đến tầm ảnh hưởng của CSS lên các thành phần chúng ta muốn sửa đổi. Ví dụ khi bạn điều chỉnh thuộc tính left như trên, nó sẽ không tạo ra thay đổi gì với các phần tử đó trừ khi những phần tử bạn muốn thay đổi có thuộc tính position là <span class='post-span'>relative</span> hoặc <span class='post-span'>absolute</span> trong CSS. Vị trí mặc định của CSS cho những thành phần Block-level là static, có nghĩa là tĩnh, điều đó nói lên lý do tại sao nó vẫn giữ nguyên vị trí khi bạn cố gắng di chuyển nó. Do vậy nếu bạn muốn nó được thay đổi, bạn phải sửa lại giá trị position của nó trong CSS.</p>
<pre class="brush: css;">#switcher {
position: relative;
}</pre>
<p>
Sau khi đã thay đổi thuộc tính position trong CSS, hộp nút của chúng ta đã di chuyển sang bên tay phải như hình</p>
<div class="tutorial-image"><img src="http://www.izwebz.com/wp-content/uploads/demon/images/jquery/chapter-4/5.png" alt="chuong 4 - hieu ung" /></div>
<p>Xem <a href="http://www.izwebz.com/wp-content/uploads/demon/jquery/ch4/example_6.htm" target="_blank">Demo online</a>  – Example 6</p>
<h5>Hiệu ứng đồng bộ và theo thứ tự</h5>
<p>Phương thức <span class='post-span'>.animate()</span> như chúng ta đã biết được sử dụng để tạo ra hiệu ứng đồng bộ cho một tập hợp các phần tử. Nhưng cũng có lúc chúng ta lại muốn các hiệu ứng xảy ra theo thứ tự hết cái này rồi mới đến cái kia.</p>
<h5>Làm việc với một tập hợp các phần tử đơn lẻ</h5>
<p>Khi bạn muốn áp dụng nhiều hiệu ứng cho cùng một tập hợp các phần tử, queuing dễ dàng được tạo ra bằng cách kết nối các hiệu ứng lại. Để minh hoạ cho việc này, chúng ta lại sẽ di chuyển hộp <strong>Cỡ Chữ</strong> sang bên tay phải và tăng chiều cao và đường biên của nó. Tuy nhiên lần này chúng ta sẽ cho 3 hiệu ứng đó xảy ra lần lượt theo thứ tự. Chúng ta chỉ cần đặt mỗi hiệu ứng trong một phương thức <span class='post-span'>.animate()</span> và sau đó thì kết nối chúng lại với nhau</p>
<pre class="brush: jscript;">$(document).ready(function() {
$('div.label').click(function() {
var paraWidth = $('div.speech p').outerWidth();
var $switcher = $(this).parent();
var switcherWidth = $switcher.outerWidth();
$switcher
.animate({left: paraWidth - switcherWidth},
'slow')
.animate({height: '+=20px'}, 'slow')
.animate({borderWidth: '5px'}, 'slow');
});
});</pre>
<p>Tất nhiên khi kết nối các phương thức lại, chúng ta có thể để cả ba phương thức <span class='post-span'>.animate()</span> trên cùng một dòng, nhưng vì như thế nó hơi khó đọc do vậy chúng ta để mỗi phương thức trên một dòng cho nó dễ đọc hơn.</p>
<p>Chúng ta có thể xếp hàng bất cứ phương thức jQuery nào bằng cách kết nối chúng với nhau. Ví dụ chúng ta cũng có thể kết nối các hiệu ứng cho thể &lt;div id=&#8217;switcher&#8217;&gt; với thứ tự sau:<br />
1.Làm giảm độ trong suốt của nó xuống .5 với .fadeTo().<br />
2.Di chuyển nó sang tay phải vơi .animte().<br />
3.Tăng lại độ trong suốt thành 1 với .fadeTo().<br />
4.Ẩn nó đi với .slideUp().<br />
5.Cho hiện lại nó với .slideDown().</p>
<p>Tất cả những gì chúng ta phải làm là kết nối những hiệu ứng trên với thứ tự tương tự trong đoạn mã của chúng ta.</p>
<pre class="brush: jscript;">$(document).ready(function() {
$('div.label').click(function() {
var paraWidth = $('div.speech p').outerWidth();
var $switcher = $(this).parent();
var switcherWidth = $switcher.outerWidth();
$switcher
.fadeTo('fast',0.5)
.animate({
'left': paraWidth - switcherWidth
}, 'slow')
.fadeTo('slow',1.0)
.slideUp('slow')
.slideDown('slow');
});
});</pre>
<p>Nhưng nếu bây giờ chúng ta muốn di chuyển thẻ &lt;div&gt; sang bên tay phải và cùng một lúc làm giảm độ trong suốt của nó đi một nửa thì sao? Nếu hai hiệu ứng này cùng xảy ra với cùng một tốc độ, thì chúng ta đơn giản chỉ cần kết hợp nó vào một phương thức .animate() là đủ. Nhưng trong ví dụ này, phương thức fade sử dụng tốc độ là &#8216;fast&#8217; trong khi đó di chuyển sang phải lại sử dụng tốc độ là &#8216;slow&#8217;. Đây chính là lúc chúng ta cần sử dụng đến dạng thứ 2 của phương thức .method().</p>
<pre class="brush: jscript;">$(document).ready(function() {
$('div.label').click(function() {
var paraWidth = $('div.speech p').outerWidth();
var $switcher = $(this).parent();
var switcherWidth = $switcher.outerWidth();
$switcher
.fadeTo('fast',0.5)
.animate({
'left': paraWidth - switcherWidth
}, {duration: 'slow', queue: false})
.fadeTo('slow',1.0)
.slideUp('slow')
.slideDown('slow');
});
});</pre>
<p>Đối số thứ 2 ở đây là một hoạ đồ tuỳ chọn, cho ta tuỳ biến <span class='post-span'>queue</span>. Nếu <span class='post-span'>queue</span> có giá trị là <span class='post-span'>false</span> sẽ làm cho hiệu ứng động xảy ra cùng một lúc với cái trước nó.</p>
<p>Điều cuối bạn cần biết về dãy hiệu ứng trên một tập hợp các phần tử đơn là queuing không tự động gắn lên những phương thức phi hiệu ứng khác như .css(). Ví dụ chúng ta muốn thay đổi màu nền của thẻ &lt;div id=&#8217;switcher&#8217;&gt; thành đỏ sau khi <span class='post-span'>.slideUp()</span> nhưng trước <span class='post-span'>.slideDown()</span>. Chúng ta có thể làm như sau:</p>
<pre class="brush: jscript;">$(document).ready(function() {
$('div.label').click(function() {
var paraWidth = $('div.speech p').outerWidth();
var $switcher = $(this).parent();
var switcherWidth = $switcher.outerWidth();
$switcher
.fadeTo('fast',0.5)
.animate({
'left': paraWidth - switcherWidth
}, 'slow')
.fadeTo('slow',1.0)
.slideUp('slow')
.css('backgroundColor','#f00')
.slideDown('slow');
});
});</pre>
<p>Tuy đoạn mã để thay đổi màu nền được đặt đúng thứ tự trong mã, nhưng nó lại thay đổi màu nền ngay khi bạn nhấp chuột.</p>
<p>Xem <a href="http://www.izwebz.com/wp-content/uploads/demon/jquery/ch4/example_7.htm" target="_blank">Demo Online</a> – Example 7</p>
<p>Có một cách mà bạn có thể thêm phương thức phi hiệu ứng vào dãy là bằng cách sử dụng phương thức <span class='post-span'>.queue()</span>. Đây sẽ là đoạn mã mà bạn có được.</p>
<pre class="brush: jscript;">$(document).ready(function() {
$('div.label').click(function() {
var paraWidth = $('div.speech p').outerWidth();
var $switcher = $(this).parent();
var switcherWidth = $switcher.outerWidth();
$switcher
.fadeTo('fast',0.5)
.animate({
'left': paraWidth - switcherWidth
}, 'slow')
.fadeTo('slow',1.0)
.slideUp('slow')
.queue(function() {
$switcher
.css('backgroundColor', '#f00')
.dequeue();
})
.slideDown('slow');
});
});</pre>
<p>Xem <a href="http://www.izwebz.com/wp-content/uploads/demon/jquery/ch4/example_8.htm" target="_blank">Demo Online</a> – Example 8</p>
<p>Ở đoạn mã trên, khi bạn cho phương thức <span class='post-span'>.queue()</span> một hàm hồi truy, nó sẽ thêm hàm đó vào dãy hiệu ứng của phần tử phù hợp. Ở trong hàm này, chúng ta đặt cho màu nền là màu đỏ và sau đó thì thêm vào phương thức hệ quả .dequeue(). Khi có sự xuất hiện của <span class='post-span'>.dequeue()</span>, nó cho phép dãy hiệu ứng tiếp tục nơi mà nó bị dừng lại và hoàn thành cả chuỗi hiệu ứng với dòng .slideDown(). Nếu chúng ta không sử dụng <span class='post-span'>.dequeue()</span>, thì hiệu ứng động đã dừng lại rồi.<br />
Chúng ta sẽ tìm hiểu thêm một cách khác để xếp hàng những phương thức phi hiệu ứng. Trong phần tới chúng ta sẽ tìm hiểu hiệu ứng với đa hợp phần tử.</p>
<h5>Làm việc với đa hợp phần tử</h5>
<p>Không giống như khi làm việc với nhóm phần tử đơn, khi chúng ta sử dụng hiệu ứng cho các nhóm khác nhau, chúng gần như xảy ra cùng một lúc. Để thấy những hiệu ứng xảy ra cùng một lúc diễn ra như thế nào, chúng ta sẽ di chuyển một đoạn văn xuống dưới đồng thời kéo đoạn văn khác lên. Đầu tiên chúng ta sẽ thêm vào hai thẻ &lt;p&gt; nữa.</p>
<pre class="brush: xml;">&lt;div id=&quot;wrapper&quot;&gt;
	&lt;div id=&quot;switcher&quot;&gt;
        &lt;div class=&quot;label&quot;&gt;Cỡ chữ&lt;/div&gt;
        &lt;button id=&quot;switcher-default&quot;&gt;Mặc Định&lt;/button&gt;
        &lt;button id=&quot;switcher-large&quot;&gt;Lớn&lt;/button&gt;
        &lt;button id=&quot;switcher-small&quot;&gt;Nhỏ&lt;/button&gt;
    &lt;/div&gt;&lt;!--End #switcher--&gt;

    &lt;div class=&quot;speech&quot;&gt;
        &lt;p&gt;
        Pellentesque habitant morbi tristique senectus et netus et malesuada
        fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget,
        tempor sit amet, ante. Donec eu libero sit amet quam egestas semper.
        Aenean ultricies mi vitae est.
        &lt;/p&gt;
        &lt;p&gt;
        Pellentesque habitant morbi tristique senectus et netus et malesuada
        fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget,
        tempor sit amet, ante. Donec eu libero sit amet quam egestas semper.
        Aenean ultricies mi vitae est.
        &lt;/p&gt;

        &lt;a href=&quot;#&quot; class=&quot;more&quot;&gt;Read More&lt;/a&gt;
		&lt;p&gt;
        Pellentesque habitant morbi tristique senectus et netus et malesuada
        fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget,
        tempor sit amet, ante. Donec eu libero sit amet quam egestas semper.
        Aenean ultricies mi vitae est.
        &lt;/p&gt;
		&lt;p&gt;
        Pellentesque habitant morbi tristique senectus et netus et malesuada
        fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget,
        tempor sit amet, ante. Donec eu libero sit amet quam egestas semper.
        Aenean ultricies mi vitae est.
        &lt;/p&gt;

    &lt;/div&gt;
&lt;/div&gt;</pre>
<p>Tiếp theo để cho dễ quan sát, chúng ta sẽ cho đoạn văn thứ 3 một đường viền 1 px và đoạn văn thứ 4 có màu nền xám. Chúng ta cũng sẽ ẩn đoạn văn thứ 4 khi DOM sãn sàng.</p>
<pre class="brush: jscript;">$(document).ready(function() {
$('p:eq(2)').css('border', '1px solid #333');
$('p:eq(3)').css('backgroundColor', '#ccc').hide();
});</pre>
<p>Cuối cùng chúng ta thêm phương thức .click() vào đoạn văn thứ 3 để khi nhấp chuột vào, thì đoạn văn thứ 3 sẽ chạy lên và ra khỏi tầm nhìn, trong khi đó đoạn văn thứ 4 sẽ chạy xuống và vào tầm nhìn.</p>
<pre class="brush: jscript;">$(document).ready(function() {
$('p:eq(2)')
.css('border', '1px solid #333')
.click(function() {
$(this).slideUp('slow')
.next().slideDown('slow');
});
$('p:eq(3)').css('backgroundColor', '#ccc').hide();
});</pre>
<div class="tutorial-image"><img src="http://www.izwebz.com/wp-content/uploads/demon/images/jquery/chapter-4/6.png" alt="chuong 4 - hieu ung" /></div>
<p>Kết quả bạn đã thấy hai hiệu ứng xảy ra gần như cùng một lúc. Đoạn văn thứ 3 chạy lên trên đồng thời đoạn văn thứ 4 đang bị ẩn cũng lò rò chạy lên trên.</p>
<h5>Hàm hồi truy</h5>
<p>Để có thể xếp hàng các hiệu ứng trên những phần tử khác nhau, jQuery cung cấp một hàm hồi truy cho mỗi phương thức hiệu ứng. Như chúng ta đã thấy với các bộ xử lý sự kiện và phương thức <span class='post-span'>.queue()</span>, hàm hồi truy chỉ đơn giản là đối số của một phương thức. Trong trường hợp hiệu ứng, chúng xuất hiện là đối số cuối cùng của phương thức. </p>
<p>Nếu chúng ta sử dụng  hàm hồi truy để xếp hàng hai hiệu ứng trượt, chúng ta có thể cho đoạn văn thứ 4 trượt xuống trước khi đoạn văn thư 3 trượt lên. Ở ví dụ dưới đây chúng ta sẽ xem xét cách thiết lập phương thức <span class='post-span'>.slideDown()</span> với hàm hồi truy.</p>
<pre class="brush: jscript;">$(document).ready(function() {
$('p:eq(2)')
.css('border', '1px solid #333')
.click(function() {
$(this).next().slideDown('slow',function() {
// đoạn mã này sẽ chạy sau khi đoan văn thứ 3 dừng lại
});
});
$('p:eq(3)').css('backgroundColor', '#ccc').hide();
}); </pre>
<p>Tuy nhiên chúng ta cũng cần phải thận trọng ở đây và phải biết chắc cái gì sẽ thực sự trượt lên. Ngữ cảnh cũng đã thay đổi với từ khoá $(this) bởi vì hàm hồi truy đang nằm trong phương thức <span class='post-span'>.slideDown()</span>. Khi <span class='post-span'>$(this)</span> được đặt trong hàm hồi truy thì nó không còn chỉ đoạn văn thứ 3 nữa như khi nó còn ở ngoài với phương thức <span class='post-span'>.click()</span>. Bởi vì phương thức <span class='post-span'>.slideDown()</span> được gán cho<br />
<span class='post-span'>$(this).next()</span>, tất cả những gì nằm trong phương thức này sẽ nhìn nhận <span class='post-span'>$(this)</span> là anh em họ của nó hoặc nói khác đi chính là đoạn văn thứ 4. Cho nên nếu chúng ta thêm <span class='post-span'>$(this).slideUp(&#8216;slow&#8217;)</span> vào trong hàm hồi truy, chúng ta sẽ kết thúc với việc cho ẩn đi đoạn văn mà chúng ta vừa cho hiện lên.</p>
<p>Một cách đơn giản để giữ <span class='post-span'>$(this)</span> không bị thay đổi là lưu nó ngay vào một biến trong phương thức .click() như sau: <span class='post-span'>var $thirdPara = $(this)</span>. Bây giờ biến <span class='post-span'>$thirdPara </span>chính là đoạn văn thứ 3, ở cả trong và ngoài hàm hồi truy. Đây là đoạn mã sử dụng biến vừa tạo của chúng ta.</p>
<pre class="brush: jscript;">$(document).ready(function() {
var $thirdPara = $('p:eq(2)');
$thirdPara
.css('border', '1px solid #333')
.click(function() {
$(this).next().slideDown('slow',function() {
$thirdPara.slideUp('slow');
});
});
$('p:eq(3)').css('backgroundColor', '#ccc').hide();
});</pre>
<p>Sử dụng biến <span class='post-span'>$thirdPara</span> ở trong hàm hồi truy <span class='post-span'>.slideDown()</span> phụ thuộc vào thuộc tính của <strong>Closures</strong>. Chúng ta sẽ bàn thêm về thuộc tính rất quan trọng nhưng hơi khó hiểu này trong phần sau.</p>
<p>Khi bạn cho chạy đoạn mã trên bạn sẽ thấy cả hai đoạn văn đều xuất hiện, khi đoạn văn thứ 4 đã trượt xuống hết thì đoạn văn thứ 3 mới bắt đầu trượt lên.</p>
<div class="tutorial-image"><img src="http://www.izwebz.com/wp-content/uploads/demon/images/jquery/chapter-4/7.png" alt="chuong 4 - hieu ung" /></div>
<p>Bây giờ bạn đã hiểu được hàm hồi truy, chúng ta có thể trở lại đoạn mã ở trên trong chương này. Đoạn mà chúng ta xếp hàng cho hiệu ứng đổi màu nền ở gần cuối của dãy hiệu ứng. Thay vì chúng ta sử dụng phương thức <span class='post-span'>.queue()</span> như trước đây, chúng ta có thể sử dụng hàm hồi truy để thay thế.</p>
<pre class="brush: jscript;">$(document).ready(function() {
$('div.label').click(function() {
var paraWidth = $('div.speech p').outerWidth();
var $switcher = $(this).parent();
var switcherWidth = $switcher.outerWidth();
$switcher
.fadeTo('slow',0.5)
.animate({
'left': paraWidth - switcherWidth
}, 'slow')
.fadeTo('slow',1.0)
.slideUp('slow', function() {
$switcher
.css('backgroundColor', '#f00');
})
.slideDown('slow');
});
});</pre>
<p>Khi cho chạy đoạn mã bạn sẽ thấy màu nền của thẻ &lt;div id=&#8217;switcher&#8217;&gt; đổi thành màu đỏ sau khi nó đã trượt lên và trước khi nó trượt xuống.</p>
<h5>Tóm lược</h5>
<p>Bằng cách sử dụng những phương thức hiệu ứng chúng ta vừa học ở chương này, chúng ta có thể tăng  hoặc giảm dần cỡ chữ bằng cách sử dụng .css() hoặc .animate(). Chúng ta cũng có thể áp dụng nhiều hiệu ứng để ẩn hoặc hiện một phần tử bất kỳ bằng nhiều cách và tạo hiệu ứng động cho nó xảy ra cùng một lúc hoặc theo thứ tự.</p>
<p>Ở 4 chương đầu này, tất cả những ví dụ của chúng ta đều là dạng sửa đổi những phần tử đã được viết mã HTML trước. Trong chương 5, chúng ta sẽ học cách sử dụng jQuery để tạo ra các phần tử mới và thêm chúng vào cây DOM bất cứ khi nào ta muốn.</p>
<h5>Download định dạng .pdf</h5>
<p>Bạn có thể <a href="http://www.mediafire.com/?6isxxcnzay6r9la" target="_blank">download định dạng .pdf</a> của chương này về đọc offline</p>
]]></content:encoded>
			<wfw:commentRss>http://www.izwebz.com/jquery/chuong-4-hieu-ung/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>W.E.B.S – 4 điều quan trọng để trở thành No1 Webmaster</title>
		<link>http://www.izwebz.com/design-usability/w-e-b-s-4-dieu-quan-trong-de-tro-thanh-no1-webmaster/</link>
		<comments>http://www.izwebz.com/design-usability/w-e-b-s-4-dieu-quan-trong-de-tro-thanh-no1-webmaster/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 05:08:41 +0000</pubDate>
		<dc:creator>Demon Warlock</dc:creator>
				<category><![CDATA[Phát triển Web]]></category>

		<guid isPermaLink="false">http://www.izwebz.com/?p=2554</guid>
		<description><![CDATA[Hi! Xin chào các bạn, chào mừng bạn đến với Izwebz chấm com. Mình là MrV2m. ^^~ Cướp intro của DW. E hèm! Chắc các bạn chưa biết mình là ai nhỉ? Mình xin tự giời thiệu, mình là một Webmaster. Nghe oai nhỉ? Nhưng mà con đường trở thành Websmaster thì cần có những [...]]]></description>
			<content:encoded><![CDATA[<p>Hi! Xin chào các bạn, chào mừng bạn đến với Izwebz chấm com. Mình là MrV2m. ^^~ Cướp intro của DW. E hèm! Chắc các bạn chưa biết mình là ai nhỉ? Mình xin tự giời thiệu, mình là một Webmaster. Nghe oai nhỉ? Nhưng mà con đường trở thành Websmaster thì cần có những gì? Bài viết này được đút kết từ kinh nghiệm 5 năm xương máu của mình sẽ giúp các bạn.</p>
<p><span id="more-2554"></span></p>
<p>Đọc tiêu đề chắc hẳn các bạn đã quá quen với cụm từ WEB rồi đúng hok? Nhưng mà tại sao ở đây lại có chữ S ở phía sau nữa. Hãy tìm hiểu xem cụm từ này là viết tắc của những từ nào nhá!</p>
<p><strong>W</strong> – Why?<br />
<strong>E</strong> – Energy<br />
<strong>B</strong> – Basic<br />
<strong>S</strong> – Smiles or Scrazy</p>
<p>Chắc chắn rằng bạn cũng đã nôm na hiểu nghĩa của những cụm từ trên rồi phải không? Nhưng mà mình cũng xin được giải thích thêm 1 chút về ý nghĩa của từng cụm từ.</p>
<p>- Đầu tiên đó là (W) Why? Nghĩa tiếng việt là tại sao? Tại sao bạn lại muốn trỏ thành Webmaster? Đó là câu hỏi mà bạn phải trả lời được khi mà bạn muốn trở thành một Webmaster đúng nghĩa. Và nếu rằng bạn hỏi tôi tại sao tôi muốn trở thành Webmaster? Thì tôi sẽ trả lời với bạn chỉ với 2 chử “đam mê”.</p>
<p>- (E) Energy đó là nghị lực. Bạn phải có đầy đủ tinh năng lực, sức mạnh, và tính kiên nhẫn để có thể trở thành Webmaster thực thụ. Vì chắc chắc các bạn biết đấy công việc của Webmaster  không phải là ngồi xem người khác (tạm gọi là S.Mod, Mod) làm việc, mà mình phải cùng họ làm việc, chỉ có như thế thì mới có thể xây dựng 1 website vững mạnh. Và để tìm hiểu xem tại sao nghị lực lại cần thiết thì chúng ta hãy tìm hiểu cụm từ thứ 3 (B)-Basic.</p>
<p>- (B) Basic với nghĩa tiếng việt ai trên 5 tuổi cũng biết (giờ 5 tuổi là mấy nhóc học Les’t Gâu hết rồi ^^~). Để làm rõ nghĩa của basic thì chúng ta hãy phân tích cụm từ Webmaster.  Webmaster gồm 2 từ ghép lại với nhau, và ở 2 lĩnh vực khác nhau, nhưng lại có mối quan hệ rất khăn khích đó là Web và Master.</p>
<p>+Web thì chắc các bạn cũng đã biết rồi hén. Web thì bao gồm rất nhiều thứ nào là HTML rồi CSS, Jquery cho tới PHP rồi lại MySQL, không kém quan trọng là Photoshop. Và là 1 Webmaster thì bạn không thể thiếu 1 trong các thứ trên, tuy nói thế không có nghĩa là bạn phải nhồi nhét hết tất cả vào đầu, mà chúng ta cầm phải biết mỗi thứ 1 ít, đủ để nắm vững những kiến thức căn bản. Và hãy chắc chắn rằng bạn cần phải có đủ Energy &#8211; nghị lực để mà có thể làm việc với chúng.</p>
<p>+Chà viết nãy giờ thì cũng chỉ mới 1 một phần thôi, sao mà làm Webmaster thì cần lắm thế, chưa nhiều lắm đâu bạn, khi mà bạn làm quen với Master thì nói mới là đủ cho một Webmaster. Master là ông chủ, là chùm của tất cả. Hay nói cách khác, master chính là người quản lý. Và người quản lý thì tất nhiên nhiệm vụ của họ là điều hoạt động của một tổ chức (ở đây có thể là forum hay một trang tin tức,…v.v). Để điều hành tốt tổ chức thì ông chùm cần phải biết quản lý và tôi khuyên các bạn nên biết chút ít về “Quản trị nhân sự”.</p>
<p>- Vẫn chưa hết đây các bạn, là Webmaster thì bạn cần thêm 1 ít kiến thức về Marketing nữa, vì sao? Đơn giản là vì bạn làm Web ko chỉ để mỗi ngày bạn tự vào Web rồi tự F5 được, làm Web ra thì phải có người xem. Để có được người xem thì bạn cần phải biết tiếp thị Web của mình. Con đường đơn giản nhất là tìm một cuốn sách mang tên “Marketing căn bản” về đọc.</p>
<p>- Bạn thấy hãi hùng chưa? Riêng mình thì đã quay mòng mòng rồi vì lần đầu ngồi viết điên cuồng như thế này đấy. Tới đây chắc rằng bạn đã bắt đầu choáng rồi nhỉ, nhưng mà không sao đâu, liều thuốc cuối sẽ giúp bạn trở thành 1 Webmaster hoàn thiện. Đó chính là Smile, hãy luôn cười lên, vì “Một nụ cười bằng mười thang thuốc bổ”. Tuy nói thế chứ uống thuốc bổ hoài cũng đâu tốt. Phải phải đúng lúc, đúng chổ nha các bạn. Đang ngồi trên xe bus mà cười thì chắc chắc Smiles thành Scrazy đó.</p>
<p>- Hi vọng rằng bài viết này sẽ giúp ít cho các bạn thật nhiều, Chúc các bạn mau mau “S” nhá! Gud bye!</p>
<p><strong>Thân! MrV2m.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.izwebz.com/design-usability/w-e-b-s-4-dieu-quan-trong-de-tro-thanh-no1-webmaster/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Đối diện với phê bình</title>
		<link>http://www.izwebz.com/design-usability/doi-dien-voi-phe-binh/</link>
		<comments>http://www.izwebz.com/design-usability/doi-dien-voi-phe-binh/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 04:08:54 +0000</pubDate>
		<dc:creator>Demon Warlock</dc:creator>
				<category><![CDATA[Phát triển Web]]></category>

		<guid isPermaLink="false">http://www.izwebz.com/?p=2548</guid>
		<description><![CDATA[Người xưa có nói “thuốc đắng dã tật, sự thật mất lòng”. Đó là một triết lý mà ai cũng biết, ai cũng hiểu. Nhưng để đón nhận những lời phê bình một cách hiệu quả nhất không phải là ai cũng làm được. Đặc biệt với những webmaster, blogger và các web designer, chúng [...]]]></description>
			<content:encoded><![CDATA[<p>Người xưa có nói “thuốc đắng dã tật, sự thật mất lòng”. Đó là một triết lý mà ai cũng biết, ai cũng hiểu. Nhưng để đón nhận những lời phê bình một cách hiệu quả nhất không phải là ai cũng làm được. Đặc biệt với những webmaster, blogger và các web designer, chúng ta luôn phải đón nhận nhiều lời phê bình gay gắt nhất từ người đọc và khách hàng.</p>
<p><span id="more-2548"></span></p>
<p>Tuy nhiên không phải lời phê bình nào cũng là vô lý mà ngược lại, trong đa số các trường hợp bạn lại học được rất nhiều từ những lời phê bình. Dưới đây là một số cách giúp bạn chuẩn bị tinh thần để đóng nhận những lời phê bình một cách có lợi nhất.</p>
<h5>Xem động cơ của người phê bình</h5>
<p>Có nhiều người có thói quen thích chê bất cứ cái gì và bất cứ người nào. Đối với họ chê một ai đó là niềm vui, chê để thỏa mãn cái tôi, để chọc tức người viết, để tỏ ra là mình hơn người. Đối với những lời phê bình như vậy, bạn cũng đừng quá bận tâm mà lao vào &#8220;khẩu chiến&#8221;. Chẳng có lợi gì cho bạn cả mà chỉ rước thêm bực mình. Chính vì thế mỗi khi ai đó chỉ trích bạn một cách tiêu cực, không có ý kiến xây dựng. Hãy ráng kiềm chế bản thân và bỏ qua coi như không biết. Họ sẽ chẳng còn gì để nói nữa.</p>
<h5>Lời phê bình thiếu tính xây dựng</h5>
<p>Đặc biệt trong thế giới mạng, tự do ngôn luận đã đạt tới mức tới hạn của nó. Bất cứ ai cũng có thể phê bình bạn mà không cần quan tâm bạn có bị tổn thương hay không. Cho nên khi một ai đó để lại comment cho một bài viết của bạn kiểu như: <em>&#8220;oài! chán như con gián&#8221;, &#8220;nhìn xấu tệ&#8221;, &#8220;cái này ai mà chẳng làm được&#8221;</em>. </p>
<p>Những lời phê bình như thế này không phải hoàn toàn vô ích, mà có thể bài viết đó của bạn chưa thực sự tốt, chưa hay hoặc không được đẹp. Hãy hỏi họ xem bạn có thể làm gì tốt hơn được, hỏi họ chỉ ra những chố mà họ thấy chưa tốt. Tất nhiên nếu họ thực sự muốn bạn tốt hơn, họ sẽ giải thích chi tiết hơn cho bạn. Còn với những ai không nói được thêm điều gì có tính xây dựng. Bạn cũng đừng bận tâm đến họ.</p>
<p>Cách tốt nhất trong trường hợp này là nói &#8220;<em>Uhm, tôi cũng đã cố gắng rồi, bạn có thể nói rõ hơn chỗ nào trong giao diện cần được thay đổi không?</em>&#8220;.</p>
<h5>Lời phê bình thực lòng và có ích</h5>
<p>Người ta thường nói &#8220;thuốc đắng dã tật, sự thật mất lòng&#8221;. Nếu ai đó chỉ ra cho bạn những chỗ còn hạn chế trong đoạn code bạn vừa viết. Thì họ đã thực sự giúp đỡ bạn rồi. Thà có bị chạm tự ái một chút nhưng giúp bạn tiến bộ hơn trong những lần sau, còn hơn là cứ mãi &#8220;u mê&#8221; trong cái tôi của mình. </p>
<p>Tất nhiên theo bản năng, ai cũng muốn &#8220;cãi lại&#8221; mấy câu để gỡ gạc. Nhưng nếu lời phê bình đó thực sự có lý, đừng ráng bao biện mà hãy dũng cảm nhận sai và sửa chữa.</p>
<p>Ví dụ ai đó cho bạn xem một bản thiết kế, bạn chỉ ra màu sắc và font chữ chưa đẹp. Họ lại nói &#8220;<em>màu này đẹp lắm rồi mà, cái font này ai cũng thích mỗi ông không thích!</em>&#8220;. Như thế chắc chắn những lần sau bạn cũng chẳng buồn nhận xét làm gì. Trong trường hợp này nên nói &#8220;Ờ ha! ông nói tôi mới để ý cái màu hơi chói thật, để tôi về đổi lại xem sao&#8221;. Còn khi về việc đổi hay không tùy thuộc vào bạn, nhưng như thế chúng ta vừa tránh làm mất lòng người phê bình vừa có thời gian xem xét lại giao diện của mình xem có đúng là màu sắc chưa đạt không.
</p>
<h5>Kết luận</h5>
<p>Để có thể nghe những lời “thật lòng” một cách cởi mở nhất không hề đơn giản và không phải một sớm một chiều mà có được. Cái này phải qua rèn luyện và tự kiềm chế cái tôi của mình. Nhưng nói cho cùng thì những lời phê bình dù có gay gắt đến đâu cũng có đôi ba phần có thực, cho nên hay biết lắng nghe và phân tích sẽ có lợi hơn cho chúng ta.</p>
<p>Nhưng nếu ngược lại bạn là người nhận xét, thì cũng mong bạn nghĩ là <em>“lời nói chẳng mất tiền mua, lựa lời mà nói cho vừa lòng nhau</em>”. Cách tốt nhất khi nhận xét ai đó là bằng cách xây dựng, chỉ ra chỗ chưa hợp lý và đưa ra giải pháp để khắc phục.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.izwebz.com/design-usability/doi-dien-voi-phe-binh/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Custom Widget &#8211; WordPress Tut</title>
		<link>http://www.izwebz.com/wordpress/custom-widget-wordpress-tut/</link>
		<comments>http://www.izwebz.com/wordpress/custom-widget-wordpress-tut/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 14:30:22 +0000</pubDate>
		<dc:creator>Demon Warlock</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.izwebz.com/?p=2526</guid>
		<description><![CDATA[Chào các thành viên Izwebz, mình là tanlevis(nickname). Nay mình muốn chia sẻ một chút kiến thức về WP. Bài này mình sẽ nói về cách tự tạo một Widget cho Theme. Cụ thể là mình sẽ làm 1 widget để thể hiện trạng thái nick yahoo đang online hay offline. Widget(wg – gọi tắt [...]]]></description>
			<content:encoded><![CDATA[<p>Chào các thành viên Izwebz, mình là tanlevis(nickname). Nay mình muốn chia sẻ một chút kiến thức về WP. Bài này mình sẽ nói về cách tự tạo một Widget cho Theme. Cụ thể là mình sẽ làm 1 widget để thể hiện trạng thái nick yahoo đang online hay offline.</p>
<p><span id="more-2526"></span></p>
<div class="tutorial-image"><img src="http://www.izwebz.com/wp-content/uploads/demon/images/custom_widget/widget.png" alt="custom Widget wordpress" /></div>
<p>Widget(wg – gọi tắt thế đi nha <img src='http://www.izwebz.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  gõ lại làm biếng quá <img src='http://www.izwebz.com/wp-includes/images/smilies/icon_neutral.gif' alt=':|' class='wp-smiley' /> ) trong WP luôn được chứa bởi sidebar. Mọi wg luôn được kế thừa từ lớp cha – WP_Widget. Vì vậy muốn có 1 wg mới ta phải tạo 1 class mới kế thừa WP_Widget như sau:</p>
<p>Mở file function.php trong thư mục theme mà bạn đang dung. Thêm vào những dòng code sau:</p>
<pre class="brush: php;">&lt;?php
/*
 * Tạo Yahoo status widget
 * */
class Yahoo_Status extends WP_Widget {

	//Khởi tạo contructor của 1 lớp
	function Yahoo_Status(){
		parent::WP_Widget('Yahoo_Status_Widget',
			'Yahoo Status',
			array('description' =&gt; 'Trạng thái nick yahoo.'));
	}
</pre>
<p>Hàm Yahoo_Status ở dòng 614 là 1 constructor của class Yahoo_Status, trong hàm này ta tiến hành khởi tạo những thông số cơ bản cho Yahoo_Status bằng cách gọi ngược lên constructor của cha nó (WP_Widget) với những thông số truyền vào như sau:</p>
<p><span class='post-span'>$id_base</span>: &#8216;Yahoo_Status_Widget&#8217;  – Id để xác định .<br />
<span class='post-span'>$name</span>: &#8216;Yahoo Status&#8217; –  Tên wg.<br />
<span class='post-span'>$widget_options = array(&#8216;description&#8217; => &#8216;Trạng thái nick yahoo.&#8217;)</span>  – Thông tin tóm tắt của wg.</p>
<p>Kế tiếp chúng ta bắt buộc phải overrides 3 phương thức của lớp cha (WP_Widget) để hiển thị, cập nhật được wg của chúng ta.<br />
Để hiển thị được wg lên sidebar trong Admin Panel, ta phải định nghĩa cho wg một bộ khung được quy định sẵn của WP như sau:</p>
<pre class="brush: php;">function widget( $args, $instance ) {
		extract($args);
		$title = apply_filters( 'widget_title',
			empty($instance['title']) ? '' : $instance['title'],
			$instance, $this-&gt;id_base);
		$text = apply_filters( 'widget_text',
			$instance['text'], $instance );
		echo $before_widget;
		if ( !empty( $title ) ) {
			echo $before_title . $title . $after_title; } ?&gt;
			&lt;ul class=&quot;nick_status&quot;&gt;
			&lt;?php $str = explode(&quot;,&quot;, $text);
				foreach ($str as $s) : ?&gt;
				  &lt;li&gt;
				  	&lt;a href=&quot;ymsgr:sendIM?&lt;?php echo trim($s);?&gt;&quot;&gt;
						&lt;img border=&quot;0&quot; src=&quot;http://presence.msg.yahoo.com/online?u=&lt;?php echo trim($s);?&gt;&amp;m=g&amp;t=1&amp;l=us&quot;&gt;
					&lt;/a&gt;
				  &lt;/li&gt;
			&lt;?php endforeach;
			?&gt;
			&lt;/ul&gt;
		&lt;?php
		echo $after_widget;
	}</pre>
<p><strong>Tham số cụ thể như sau: </strong><br />
<span class='post-span'>$args</span>: Mảng thông số dùng  để hiển thị như: before_title, after_title, before_widget, and after_widget.<br />
<span class='post-span'>$instance:</span> Những thực bên trong cấu hình nên wg như textbox, label, radio,  checkbox… vd: $instance[‘title’]: lấy thực thể có ID là title.</p>
<p>Dòng 630 – 642 mình dùng chuỗi text nhập vào từ textarea được ngăn cách bởi dấu “,” . Sau đó tách chuỗi ra thành từng phần tử của một mảng string bằng hàm explode(“,”, $text), sau đó dùng link tới yahoo server để nhận về trạng thái online hay offline.<br />
Tiếp theo để cập nhật được thông tin của wg ta phải overrides phương thức update như sau:</p>
<pre class="brush: php;">	function update( $new_instance, $old_instance ) {
		$instance = $old_instance;
		$instance['title'] = strip_tags($new_instance['title']);
		if ( current_user_can('unfiltered_html') )
			$instance['text'] =  $new_instance['text'];
		else
			$instance['text'] = stripslashes(
				wp_filter_post_kses( addslashes($new_instance['text']) )
			);
		return $instance;
	}</pre>
<p><strong>Tham số cụ thể như sau:</strong><br />
<span class='post-span'>$new_instance:</span> Những thông tin mới từ người dung nhập vào những fied có trên wg.<br />
<span class='post-span'>$old_instance</span>: Những thông tin hiện tại wg đang lưu.<br />
Phương thức cuối cùng là form: hiển thị những thông tin nhập vào.</p>
<pre class="brush: php;">
function form( $instance ) {
		$instance = wp_parse_args( (array) $instance,
			array( 'title' =&gt; '', 'text' =&gt; '' ) );
		$title = strip_tags($instance['title']);
		$text = format_to_edit($instance['text']);
?&gt;
		&lt;p&gt;
			&lt;label for=&quot;&lt;?php echo $this-&gt;get_field_id('title'); ?&gt;&quot;&gt;
				&lt;?php _e('Tiêu đề:'); ?&gt; &lt;/label&gt;
			&lt;input class=&quot;widefat&quot; id=&quot;&lt;?php echo $this-&gt;get_field_id('title'); ?&gt;&quot;
				name=&quot;&lt;?php echo $this-&gt;get_field_name('title'); ?&gt;&quot; type=&quot;text&quot;
				value=&quot;&lt;?php echo  esc_attr($title);?&gt;&quot; /&gt;
		&lt;/p&gt;
			&lt;label for=&quot;&lt;?php echo $this-&gt;get_field_id('text'); ?&gt;&quot;&gt;
				&lt;?php _e('Nick yahoo(cách nhau bởi dấu \'):'); ?&gt; &lt;/label&gt;
			&lt;textarea class=&quot;widefat&quot; rows=&quot;5&quot; cols=&quot;10&quot;
				id=&quot;&lt;?php echo $this-&gt;get_field_id('text'); ?&gt;&quot;
				name=&quot;&lt;?php echo $this-&gt;get_field_name('text'); ?&gt;&quot;&gt;
					&lt;?php echo $text;?&gt;
			&lt;/textarea&gt;
		&lt;p&gt;
			&lt;label for=&quot;&lt;?php echo $this-&gt;get_field_id('text'); ?&gt;&quot;&gt;
				&lt;?php _e('Ví dụ: tanvannguyen18, meocon17'); ?&gt;
			&lt;/label&gt;
		&lt;/p&gt;
&lt;?php
	}
}

register_widget('Yahoo_Status');
?&gt;</pre>
<p><strong>Tham số cụ thể như sau:</strong><br />
<span class='post-span'>$instance:</span> Những fied có trên wg.<br />
Bài này mình chỉ tạo đơn giản có 3 label, 1 input và 1 textarea, cách gán id và value mình đã minh họa cụ thể trong hình. Có j không hiểu mọi người cứ comment bên dưới nha.</p>
<p>Cuối cùng ta xài lệnh register_widget(&#8216;Yahoo_Status&#8217;); ngay bên dưới dấu kết thúc class Yahoo_Status để đăng ký với WP là ta có 1 wg mới, và vào lại Admin Panel để xem widget ta mới tạo.</p>
<p>Tới đây mình vừa hoàn thành 1 wg Yahoo_Status. Đây cũng là bài post đầu tiên của mình cho Izwebz, có gì mọi người đóng góp ý kiến để mình hoàn thiện hơn về những bài post sau. Cảm ơn mọi người đã đọc và chúc mọi người vui vẻ với Widget của mình.</p>
<h5>Download file</h5>
<p><a href="http://www.izwebz.com/wp-content/uploads/demon/images/custom_widget/function.rar" />Download file</a> mẫu functions.php ở đây</p>
<h5>Tham gia viết bài cho Izwebz</h5>
<p>Đây là bài viết đầu tiên của <b>Tanlevis</b> cho izwebz. Rất cảm ơn sự đóng góp của bạn. Nếu bạn có khả năng, hãy cùng tham gia viết bài để chia sẻ kiến thức với cộng đồng.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.izwebz.com/wordpress/custom-widget-wordpress-tut/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>PHP Căn Bản &#8211; Bài 10</title>
		<link>http://www.izwebz.com/video-tutorials/php-can-ban-bai-10/</link>
		<comments>http://www.izwebz.com/video-tutorials/php-can-ban-bai-10/#comments</comments>
		<pubDate>Sun, 22 Aug 2010 06:04:27 +0000</pubDate>
		<dc:creator>Clackken Smith</dc:creator>
				<category><![CDATA[Videos]]></category>
		<category><![CDATA[căn bản PHP]]></category>
		<category><![CDATA[clackken smith]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[PHP basic]]></category>

		<guid isPermaLink="false">http://www.izwebz.com/?p=2518</guid>
		<description><![CDATA[Trong phần này tôi sẽ tiếp tục chia sẻ thêm về cách để xử lý dữ liệu form dạng mảng, hay chính xác hơn mà multi-checkbox. Cũng như với mọi tiêu chí tôi sẵn sàng nhận những ý kiến đóng góp về ý kiến cho Video để ngày càng hoàn thiện hơn. Thời lượng: 39:25 [...]]]></description>
			<content:encoded><![CDATA[<p>Trong phần  này tôi sẽ tiếp tục chia sẻ thêm về cách để xử lý dữ liệu form dạng mảng, hay chính xác hơn mà multi-checkbox.
</p>
<p><span id="more-2518"></span></p>
<p>Cũng như với mọi tiêu chí tôi sẵn sàng nhận những ý kiến đóng góp về ý kiến cho Video để ngày càng hoàn thiện hơn.</p>
<p><strong>Thời lượng</strong>:  39:25</p>
<p><strong>Download định dạng .FLV chất lượng cao</strong>: <a href="http://www.mediafire.com/?4s5bq89stn723pa">phpbasic_10</a></p>
<h5>Đừng download bằng IDM Video online. Hãy dùng link mediafire phía trên</h5>
<div class="tutorial-image">
<img src="http://www.izwebz.com/wp-content/plugins/flash-video-player/default_video_player.gif" /></p>
<div class="fullScreen"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.izwebz.com/video-tutorials/php-can-ban-bai-10/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
<enclosure url="http://210.245.42.37/lotus/phpbasic_p10.flv" length="128332996" type="video/x-flv" />
		</item>
		<item>
		<title>Font-face cho CSS2</title>
		<link>http://www.izwebz.com/video-tutorials/font-face-cho-css2/</link>
		<comments>http://www.izwebz.com/video-tutorials/font-face-cho-css2/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 03:47:47 +0000</pubDate>
		<dc:creator>Clackken Smith</dc:creator>
				<category><![CDATA[Videos]]></category>
		<category><![CDATA[cơ bản css]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[css cơ bản]]></category>

		<guid isPermaLink="false">http://www.izwebz.com/?p=2504</guid>
		<description><![CDATA[Chào tất cả các bạn ! Hôm nay tôi &#8230; à không, cứ quen tay lại nhầm lẫn gõ lung tung lang tang. Tôi trân trọng giới thiệu một thành viên mới đến với Izwebz chúng ta, tôi chưa biết đây có phải là tuts đầu tiên của anh ta không ?, nhưng có vẻ [...]]]></description>
			<content:encoded><![CDATA[<p>Chào tất cả các bạn ! Hôm nay tôi &#8230; à không, cứ quen tay lại nhầm lẫn gõ lung tung lang tang. Tôi trân trọng giới thiệu một thành viên mới đến với Izwebz chúng ta, tôi chưa biết đây có phải là tuts đầu tiên của anh ta không ?, nhưng có vẻ rất chuyên nghiệp và không rung như tôi lúc đầu. Các bạn đón chào bạn  : MRV2M. Bộp bộp. Sau đây là phần giới thiệu của bạn MrV2M.</p>
<p><span id="more-2504"></span></p>
<p>Xin chào tất cả các bạn, mình là ma mới của izwebZ.com. Hôm nay mình sẽ giới thiệu với các bạn một module cực hay của CSS2 đó là font-face.</p>
<p>Font-face ra đời cùng với IE 5.0, và độc quyền sử dụng font OpenType (.eot). Nhưng khi các trình duyệt đời mới ra đời như FF 3, Safari 3.1, Opera và gần đây la Chrome thì font-face đã được sử dụng rộng rãi hơn với loại font đa dạng hơn như TrueType (.ttf), Web Open Font Format (WOFF)</p>
<p>Sau đây là bảng tương thích của trình duyệt và loại font:<br />
.EOT : Internet Explorer 5+<br />
.TTF: Firefox 3.5+, Opera 10.0+, Safari 3.1+<br />
.WOFF: Firefox 3.6+<br />
.OTF: Firefox 3.5+, Opera 10.0+, Safari 3.1+</p>
<p>Trong Tutorial thì tớ sẽ hướng dẫn các bạn<br />
1/ Sơ lược về font-face<br />
2/ Chuyển 1 template đồ họa từ PSD sang HTML và CSS 2<br />
3/ Sử dụng font-face cho FF 3.6<br />
4/ Sử dụng công cụ chuyển font ttf sang eot (TTF to EOT Font Converter) http://www.kirsle.net/wizards/ttf2eot.cgi<br />
5/ Sử dụng font-face cho IE 8</p>
<p><strong>Thời lượng</strong>: 50:17</p>
<p><strong>Download định dạng .FLV chất lượng cao</strong>: <a href="http://www.mediafire.com/?ady5dmi6jiz8cn2">Font-face<a/></p>
<div class="tutorial-image">
<img src="http://www.izwebz.com/wp-content/plugins/flash-video-player/default_video_player.gif" /></p>
<div class="fullScreen"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.izwebz.com/video-tutorials/font-face-cho-css2/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
<enclosure url="http://thethaohangnang.com/videoclip/tutorial/font-face.flv" length="113655128" type="video/x-flv" />
		</item>
		<item>
		<title>Công Bố Izwebz Donate</title>
		<link>http://www.izwebz.com/design-usability/cong-b%e1%bb%91-izwebz-donate/</link>
		<comments>http://www.izwebz.com/design-usability/cong-b%e1%bb%91-izwebz-donate/#comments</comments>
		<pubDate>Thu, 19 Aug 2010 07:06:33 +0000</pubDate>
		<dc:creator>Clackken Smith</dc:creator>
				<category><![CDATA[Phát triển Web]]></category>

		<guid isPermaLink="false">http://www.izwebz.com/?p=2496</guid>
		<description><![CDATA[Lời Cảm Ơn ! Chào các bạn, như đã biết trong thời gian qua, chúng ta đã tiến hành các phương thức ủng hộ để duy trì izwebz. Và chúng tôi đã nhận đựoc rất nhiều sự đóng góp từ các bạn, từ sinh viên cho đến những bạn đã đi làm. Người có ít, [...]]]></description>
			<content:encoded><![CDATA[<h5>Lời Cảm Ơn !</h5>
<p>Chào các bạn, như đã biết trong thời gian qua, chúng ta đã tiến hành các phương thức ủng hộ để duy trì izwebz. Và chúng tôi đã nhận đựoc rất nhiều sự đóng góp từ các bạn, từ sinh viên cho đến những bạn đã đi làm. Người có ít, người có nhiều, nhưng đều chung một mục đích là muốn izwebz.com tồn tại mãi mãi.</p>
<p><span id="more-2496"></span></p>
<p>Chúng tôi rất vui khi nhận được sự ủng hộ từ nhiều bạn sinh viên đang theo học các trường cả Nam và Bắc ủng hộ, mặc dù tài chính của các bạn eo hẹp nhưng tất cả các đóng góp của các bạn mang rất nhiều chân tình cho izwebz.</p>
<h5>1.Donate Paypal</h5>
<ul>
<ol><strong>Minh nguyễn  :  25$</strong></ol>
<ol><strong>Người giấu tên  :  10$</strong></ol>
<ol><strong>the tung tran  :  10$</strong></ol>
</ul>
<h5>2.Donate Tin Nhắn</h5>
<p>64 Tin nhắn. Số điện thoại của các bạn tôi không tiện nêu ra tại đây.</p>
<h5>3. Bấm Quảng Cáo</h5>
<p>Nguồn thu tổng hợp cuối tháng.</p>
<h5>4.Chi Trả</h5>
<p>Account Premium Mediafire: 9$/tháng</p>
<p>Các thông tin sẽ được cập nhật liên tục</p>
]]></content:encoded>
			<wfw:commentRss>http://www.izwebz.com/design-usability/cong-b%e1%bb%91-izwebz-donate/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Izwebz sẽ có một số thay đổi</title>
		<link>http://www.izwebz.com/uncategorized/izwebz-se-thay-do/</link>
		<comments>http://www.izwebz.com/uncategorized/izwebz-se-thay-do/#comments</comments>
		<pubDate>Thu, 19 Aug 2010 03:31:32 +0000</pubDate>
		<dc:creator>Demon Warlock</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.izwebz.com/?p=2489</guid>
		<description><![CDATA[Hello! xin chào các bạn, chào mừng các bạn đến với izwebz chấm com, tôi là Demon Warlock với Video Screencast tutorial! e hèm! ủa lộn, đang là tut viết có phải video tut đâu trời?!?! chắc tại lâu quá không quay lại cho nên hơi bị &#8230; cà cuống tí. Hà hà! thời gian [...]]]></description>
			<content:encoded><![CDATA[<p>Hello! xin chào các bạn, chào mừng các bạn đến với izwebz chấm com, tôi là Demon Warlock với Video Screencast tutorial! e hèm! ủa lộn, đang là tut viết có phải video tut đâu trời?!?! chắc tại lâu quá không quay lại cho nên hơi bị &#8230; cà cuống tí. </p>
<p><span id="more-2489"></span></p>
<p>Hà hà! thời gian vừa rồi tôi có chút chuyện gia đình, công việc và cả sức khỏe nữa cho nên bặt vô âm tín suốt từ đó cho đến này. Tuy không trực tiếp làm video như trước, nhưng tôi vẫn luôn giữ liên lạc với CS để bàn thảo các vấn đề quan trọng của izwebz. Cho đến hôm nay có thể nói là mọi việc cũng chưa tốt đẹp hơn nhiều, nhưng tôi nghĩ có thể dành ra thời gian cùng các bạn học tập rồi.</p>
<p>Hơi dài dòng mà chưa đi vào vấn đề chính nhỉ. Tại lâu quá không gặp đó mà <img src='http://www.izwebz.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<h5>1. Video sẽ được upload lên một server ngoài</h5>
<p>Trước đây khi lập ra trang web, tôi không tính đến khả năng là video của mình lại được xem nhiều như thế. Tôi nghĩ đơn giản là blog cá nhân nên lượng truy cập không cao. Ai dè từ khi có sự giúp đỡ của CS và sự ủng hộ của đông đảo nhóm người đọc, izwebz bây giờ đã vượt quá mục đích ban đầu của nó. Chính vì vậy gần đây công ty host có liên lạc với tôi và thông báo họ không host cho izwebz nữa bởi vì sử dụng quá nhiều tài nguyên máy chủ.</p>
<p>
Họ bắt chúng ta phải mua server riêng mà như thế thì lại quá đắt đỏ với tình trạng hiện tại. Chính vì thế tôi đã bàn với CS, sau này khi đã chuyển sang một host khác, video sẽ được upload lên các trang chia sẻ video trực tuyến như Youtube, Dailymotion, Vimeo &#8230; Tuy còn một vài khó khăn, nhưng chúng ta sẽ từng bước khắc phục.</p>
<h5>2. Izwebz có thể sẽ gặp nhiều lỗi</h5>
<p>Trong thời gian tới, chúng tôi sẽ tiến hành chuyển izwebz sang một host khác và trong thời gian này, các bạn có thể sẽ không truy cập izwebz được. Nhưng tôi nghĩ sẽ không mất nhiều thời gian đâu.</p>
<p>Trong quá trình chuyển đổi host, chắc chắn một số link hình, link video, link download sẽ bị &#8220;cu đơ&#8221;. Chúng tôi rất mong sự giúp đỡ của các bạn. Hãy thông báo ngay nếu bạn thấy những trục trặc trên trang web. Chúng tôi sẽ khắc phục càng sớm càng tốt.</p>
<h5>3. Cần các Mạnh Thường Quân</h5>
<p>Hiện tại tất cả các chi phí để duy trì trang web là do tôi tự chi trả. Như nói ở trên, tôi chỉ có ý định làm blog cá nhân, nhưng do izwebz phát triển vượt ra khỏi quy mô của nó. Cho nên chúng ta cần chung sức để duy trì trang web. Chúng tôi sẽ rất minh bạch trong những đóng góp của các bạn. Tôi và CS xin hứa, tất cả những đóng góp của các bạn sẽ được sử dụng đúng mục đích là duy trì trang web và chỉ duy trì trang web mà thôi.</p>
<p>Nếu có dư ra số tiền duy trì trang web như hosting và Domain, số còn lại sẽ được dùng làm tiền quỹ cho trang web như: nhuận bút viết tut, tổ chức offline, quảng cáo, in ấn v.v.</p>
<p>Chúng tôi cũng xin thay mặt tất cả các độc giả của izwebz cảm ơn những bạn đã đóng góp tiền cho izwebz trong thời gian vừa qua. CS sẽ giúp tôi nói chi tiết hơn đến các bạn cụ thể ai đã đóng góp và số tiền hiện có là bao nhiêu và đã dùng vào mục đích gì.</p>
<p>
Chúc các bạn một ngày vui vẻ, Demon Warlock đã quay trở lại và sẽ tiếp tục làm video và hoàn thiện phần jQuery.</p>
<p>Alright, ladies &#8230;. until next time. :p</p>
]]></content:encoded>
			<wfw:commentRss>http://www.izwebz.com/uncategorized/izwebz-se-thay-do/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
	</channel>
</rss>
