Chủ Nhật, 26 tháng 8, 2012

Cách thêm nút Tweet vào trong bài viết


Một trong những cách tốt nhất để cải thiện nguồn traffic và quảng bá cho blog của bạn đó chính là thêm nút Tweet (Twitter) vào trong mỗi bài viết.

Genesis Tweet Button

Hôm nay All 4 You Blog sẽ tiếp tục gửi đến các fan hâm mộ Genesis một thủ thuật Genesis vô cùng hữu ích: Cách thêm nút Tweet vào trong bài viết.

Bước 1. Thêm hàm chức năng:

Hãy chèn đoạn code sau vào trong tập tin functions.php của Genesis Child Theme của bạn:

1
2
3
4
5
6
7
/** Add Tweet Button on single posts **/
add_filter('the_content', 'tweet_button');
function tweet_button( $content ) {
    if ( is_page() )
        return $content;
    return '<a href="http://twitter.com/share" class="twitter-share-button" data-url="'. get_permalink() .'" data-count="vertical" data-via="studiopress">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>' . $content;
}

Lưu ý: Đoạn code trên cần phải được nằm trước ký tự ?> và sau dòng:

1
require_once(TEMPLATEPATH.'/lib/init.php');

Hãy chắc chắn rằng các bạn đã thay thế studiopress trong đoạn data-via="studiopress" bằng tên tài khoản Twitter của mình.

Bước 2: Làm đẹp cho nút Twitter:

Hãy chèn đoạn code sau vào trong tập tin style.css của Genesis Child Theme của bạn:

1
2
3
4
.twitter-share-button {
    float: left;
    margin: 0 10px 10px 0;
    }

Chúc các bạn thành công!


Thứ Năm, 23 tháng 8, 2012

Lazyload Jquery làm mượt ảnh và ảnh sẽ load nhanh hơn

Giới thiệu: Kéo tới đâu ảnh mới bắt đầu load tới đó, giảm thời gian tải ảnh. Mặc định blog khi load, sẽ load tất cả các ảnh và thành phần có trong blog. Điều này sẽ làm chậm blog nếu web, hay blog có nhiều ảnh. Nhưng với lazyload thì chỉ load những ảnh lọt trong tầm mắt người nhìn.

Ngoài ra, còn có thêm hiệu ứng tải ảnh kiểu "Fade in", khi hiện ảnh trông rất đẹp và chuyên nghiệp.

Lưu ý: Lazyload sẽ được load sau cùng, sau khi đã load hết các mã Java, js, HTML của website hay blog.


CÁCH THỰC HIỆN 

1. Đăng nhập Blogger Dashboard (Bảng điều khiển) 
2. Chọn: Design (Thiết kế) > Edit HTML (Chỉnh sữa HTML) 
3. Không cần đánh dấu chọn ô: Expand Widget Templates (Mở rộng mẫu tiện ích)

4. Chèn script

Bước 1: 
Tìm thẻ <head>

- Thêm vào dưới nó đoạn code sau:
  <script src='http://kenhdaihoc.com/blogger/jquery.min1.4.3.js' type='text/javascript'/>



Bước 2: Tìm thẻ đóng </head>

- Thêm vào trước nó đoạn code sau:

  <!-- Lazy load -->
<script type='text/javascript'>
//<![CDATA[

(function($) {

$.fn.lazyload = function(options) {
var settings = {
threshold : 0,
failurelimit : 0,
event : "scroll",
effect : "show",
container : window
};

if(options) {
$.extend(settings, options);
}

/* Fire one scroll event per scroll. Not one scroll event per image. */
var elements = this;
if ("scroll" == settings.event) {
$(settings.container).bind("scroll", function(event) {

var counter = 0;
elements.each(function() {
if ($.abovethetop(this, settings) ||
$.leftofbegin(this, settings)) {
/* Nothing. */
} else if (!$.belowthefold(this, settings) &&
!$.rightoffold(this, settings)) {
$(this).trigger("appear");
} else {
if (counter++ > settings.failurelimit) {
return false;
}
}
});
/* Remove image from array so it is not looped next time. */
var temp = $.grep(elements, function(element) {
return !element.loaded;
});
elements = $(temp);
});
}

this.each(function() {
var self = this;

/* Save original only if it is not defined in HTML. */
if (undefined == $(self).attr("original")) {
$(self).attr("original", $(self).attr("src"));
}

if ("scroll" != settings.event ||
undefined == $(self).attr("src") ||
settings.placeholder == $(self).attr("src") ||
($.abovethetop(self, settings) ||
$.leftofbegin(self, settings) ||
$.belowthefold(self, settings) ||
$.rightoffold(self, settings) )) {

if (settings.placeholder) {
$(self).attr("src", settings.placeholder);
} else {
$(self).removeAttr("src");
}
self.loaded = false;
} else {
self.loaded = true;
}

/* When appear is triggered load original image. */
$(self).one("appear", function() {
if (!this.loaded) {
$("<img />")
.bind("load", function() {
$(self)
.hide()
.attr("src", $(self).attr("original"))
[settings.effect](settings.effectspeed);
self.loaded = true;
})
.attr("src", $(self).attr("original"));
};
});

/* When wanted event is triggered load original image */
/* by triggering appear. */
if ("scroll" != settings.event) {
$(self).bind(settings.event, function(event) {
if (!self.loaded) {
$(self).trigger("appear");
}
});
}
});

/* Force initial check if images should appear. */
$(settings.container).trigger(settings.event);

return this;

};

/* Convenience methods in jQuery namespace. */
/* Use as $.belowthefold(element, {threshold : 100, container : window}) */

$.belowthefold = function(element, settings) {
if (settings.container === undefined || settings.container === window) {
var fold = $(window).height() + $(window).scrollTop();
} else {
var fold = $(settings.container).offset().top + $(settings.container).height();
}
return fold <= $(element).offset().top - settings.threshold;
};

$.rightoffold = function(element, settings) {
if (settings.container === undefined || settings.container === window) {
var fold = $(window).width() + $(window).scrollLeft();
} else {
var fold = $(settings.container).offset().left + $(settings.container).width();
}
return fold <= $(element).offset().left - settings.threshold;
};

$.abovethetop = function(element, settings) {
if (settings.container === undefined || settings.container === window) {
var fold = $(window).scrollTop();
} else {
var fold = $(settings.container).offset().top;
}
return fold >= $(element).offset().top + settings.threshold + $(element).height();
};

$.leftofbegin = function(element, settings) {
if (settings.container === undefined || settings.container === window) {
var fold = $(window).scrollLeft();
} else {
var fold = $(settings.container).offset().left;
}
return fold >= $(element).offset().left + settings.threshold + $(element).width();
};
/* Custom selectors for your convenience. */
/* Use as $("img:below-the-fold").something() */

$.extend($.expr[':'], {
"below-the-fold" : "$.belowthefold(a, {threshold : 0, container: window})",
"above-the-fold" : "!$.belowthefold(a, {threshold : 0, container: window})",
"right-of-fold" : "$.rightoffold(a, {threshold : 0, container: window})",
"left-of-fold" : "!$.rightoffold(a, {threshold : 0, container: window})"
});

})(jQuery);
//]]>
</script>


<script type="text/javascript" charset="utf-8">
$(function() {

$("img") // img là áp dụng với cả blog. Nếu chỉ muốn áp dụng cho một class nào đó thì thêm class đó vào trước img. Ví dụ: .post img, #content img, .comments img,…

.lazyload({
placeholder : "LINK_HÌNH", /*Hình thay thế khi ảnh chưa load xong*/
effect: "fadeIn" /* Hiệu ứng mờ khi ảnh xuất hiện. Có thể sử dụng các hiệu ứng khác như: slideUp, slideDown,…*/

});
});
</script>

* Các tính năng thêm. Thêm vào sau dòng: effect: "fadeIn"

  threshhold:100 /*Số pixel của ảnh được tải trước*/
container: $("class") /*Dùng cho class scroll được. Thay thành class bạn muốn áp dụng.
Ví dụ: #container, #scroll, .imagescroll,…*/



Bước 3: Save template. (Lưu mẫu)


Một số mẫu hình thay thế 

         

Thứ Hai, 20 tháng 8, 2012

Hướng dẫn sử dụng jQuery Lazyload


Lazy loader là một plugin của JQuery được viết bằng Javascript nó dùng để tải hình ảnh ở các trang web dài ảnh ở bên ngoài khung hình sẽ chỉ hiện ra khi người dùng kéo chuột đến. Sử dụng Lazyload ở các trang web dài sẽ giúp cho trang web load nhanh hơn, phần nội dung của trang web sẽ được load lên trước sau đó khi người dùng kéo chuột Lazyload mới load hình ảnh đó về cho bạn, ở trong một số trường hợp nó còn có tác dụng giảm tải cho Web Server.

Cách sử dụng:

Đầu tiên bạn phải download JQueryLazyload sau đó include chúng vào header của trang web

1<!-- Thư viện jQuery --><br><script type="text/javascript" src="js/jquery.min.js"></script><br><!-- jQuery Lazy Load --><br><script type="text/javascript" src="js/jquery.lazyload.pack.js"></script><br><script type="text/javascript"><br>  $(function() {<br>    $("img").lazyload(); // Đoạn code này sẽ áp dụng lazyload vào tất cả các thẻ img trên trang<br>  });<br></script><br>

Tùy biến

Lazyload cung cấp một số lựa chọn như load 1 phần của ảnh, dùng ảnh thay thế, gọi sự kiện, hiệu ứng khi xuất hiện ảnh, đặt thời gian tải ảnh... Bạn có thể xem thêm trại trang chủ của lazyload

Đoạn mã dưới đây sẽ tải trước 200px của ảnh trước khi ảnh xuất hiện

1$("img").lazyload({ threshold : 200 });<br>

Dùng ảnh thay thế

1$("img").lazyload({ placeholder : "img/grey.gif" });<br>

Ảnh thay thế đi cùng plugin ảnh gif 1x1px, bạn có thể thay bằng đường dẫn ảnh riêng của mình

Sử dụng hiệu ứng mờ khi xuất hiện

1$("img").lazyload({ <br>    placeholder : "img/grey.gif",<br>    effect : "fadeIn" <br>});<br>

Thứ Năm, 9 tháng 8, 2012

Google đưa cả nội dung Gmail vào kết quả tìm kiếm

Hãng dịch vụ Internet Mỹ bắt đầu thử nghiệm việc hiển thị cả những nội dung có trong hòm thư của người sử dụng lẫn vào kết quả tra cứu trên web.

Chẳng hạn, khi người dùng tra cứu tên một ca sĩ và nhân vật đó cũng từng liên hệ với họ qua e-mail, các nội dung trao đổi như thông điệp, ảnh, video... sẽ được cung cấp cùng với các đường dẫn trên web khác.

Amit Singhal, trưởng nhóm tìm kiếm của Google, chia sẻ với Telegraph rằng đây là một trong những bước đi đầu để công cụ tìm kiếm hiểu người dùng hơn cũng như giúp họ cá nhân hóa kết quả.

"Đôi khi, câu trả lời không nằm trên trang web công cộng mà lại ở đâu đó trong chính kho dữ liệu của bạn mà lâu rồi bạn đã quên. Một dịch vụ tìm kiếm phải thực hiện đúng chức năng tìm kiếm, do đó chúng tôi muốn mang đến cho bạn những thông tin hữu ích nhất", Singhal nhấn mạnh.

Google đã phát triển tính năng bảo mật để đảm bảo kết quả trong e-mail chỉ được hiển thị với riêng người sở hữu tài khoản đó mà không bị lộ ra ngoài.

mail-1-jpg-1344485023_480x0.jpg
 
mail-2-jpg-1344485023_480x0.jpg
 
mail-3-jpg-1344485023_480x0.jpg
 
mail-4-jpg-1344485023_480x0.jpg
Một số kết quả tìm kiếm tổng hợp giữa thông tin trên web và trong hòm thư.

Châu An

Lấy tin tự động - Đọc nội dung chi tiết

Cách làm của mình là đọc nội dung bài viết đó dưới dạng html, sau đó phân tích và cắt chuỗi đế lấy nội dung. Cách làm này chưa thực sự tốt vì với mỗi website khác nhau lại có 1 cầu trúc khác nhau, và nếu trang web mình lấy thông tin thay đổi cấu trúc thì mình sẽ lại phải viết lại code. Bài này mình sẽ lấy nội dung của trang vnexpress.net.
1. Hàm đọc nội dung của web

public string GetWebContent(string Address)

    {

        string txOutput = "";

        try

        {

            if (Address != "")

            {

                System.Net.WebClient MyClient = new System.Net.WebClient();

                System.IO.Stream MyStream = MyClient.OpenRead(Address);

                System.IO.StreamReader MyStreamReader = new System.IO.StreamReader(MyStream);

                string NewLine;

                while ((NewLine = MyStreamReader.ReadLine()) != null)

                {

                    txOutput += NewLine + "\r\n";

                }

            }

        }

        catch { }

        return txOutput;

    }

 2. Hàm đếm số kỹ tự của chuỗi

static int CountChars(string value)

    {

        int result = 0;

        bool lastWasSpace = false;

 

        foreach (char c in value)

        {

            if (char.IsWhiteSpace(c))

            {

                if (lastWasSpace == false)

                {

                    result++;

                }

                lastWasSpace = true;

            }

            else

            {

                result++;

                lastWasSpace = false;

            }

        }

        return result;

    }

 3. Hàm tìm và thay đường dẫn tương đối thành tuyệt đối của anh và liên kết

private string GetPicture(string Content)

    {

        string result = "";

        string img = "";

       

        if (Content.IndexOf("<IMG") > -1)

        {

            if (Content.IndexOf("src=") > -1)

            {

                Content = Content.Replace("src=\"", "class=\"Anh\" src=\"http://vnexpress.net/");

            }

        }

        if (Content.IndexOf("<A") > -1)

        {

            if (Content.IndexOf("href=") > -1)

            {

                Content = Content.Replace("href=\"", " href=\"http://vnexpress.net/");

            }

        }

        result = Content;

        return result;

    }

 4. Hàm cắt chuỗi để lầy nội dung bài viết

private string ReasNews(string urlID)

    {

        try

        {

            string strConTent = GetWebContent(urlID) + "";

            string phandau = strConTent.Substring(0, strConTent.IndexOf("class=\"content\"") + CountChars("class=\"content\"") + 1);

            strConTent = strConTent.Replace(phandau, "");

            string phanduoi = strConTent.Substring(strConTent.IndexOf("othernews-header") - 13, strConTent.Length - strConTent.IndexOf("othernews-header"));

            strConTent = strConTent.Replace(phanduoi, "");

            strConTent = GetPicture(strConTent);

            ltlConTent.Text = strConTent;

        }

        catch { }

    }

 Ví dụ bạn dùng ReasNews("http://vnexpress.net/GL/Vi-tinh/2010/03/3BA1944F/") sẽ trả về nội dung chi tiết của bài viết "7 công cụ mà điện thoại di động sẽ thay thế"

Chú ý  để đọc nội dung trang web bạn  cần thêm những thư viện sau

using System.Net;
using System.IO;
using System.Xml;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;

Cách làm này chưa tối ưu nhưng ở thời điểm hiện tại thì chạy tốt


#End

Thứ Năm, 2 tháng 8, 2012

Google cập nhật pagerank ngày 2-8-2012

Sau nhiều tháng ngày chờ của những người làm seo thì đợt thì đợt cập nhật pagerank của google của đã tới.

Vào ngày 2/8/2012 chính thức các pagerank của các site đã được cập nhật. Với hiệu ứng sau khi lọc spam qua hai thuật toán là panda, Penguin thì chất lượng của các trang được cập nhật khá tốt.

Hầu như các site của mọi người đều có pagerank tăng, tùy vào site có thể là tăng nhiều hay tăng ít. Tuy vị trí từ khóa hầu như trong việc seo từ khóa của mọi người vẫn đứng nguyên. Nhưng đây vẫn là tín hiệu tốt cho giới webmaster.

Hiện tượng này xảy ra từ lúc 4h10 đến 4h20 xảy ra cập nhật cục bộ. Sau 4h30 bắt đầu có hiện tượng cập nhật đồng loạt.

Site bạn đã được cập nhật chưa. nếu bạn là admin hay những người quản trị hãy check nhé. hi vọng bạn sẽ thấy sự thay đổi tốt.

Google cập nhật pagerank và cách tính pagerank !

Google cập nhật PageRank

Ảnh
Ảnh: Smashing magazine.
Có lẽ nhiều bạn đã biết, chỉ số Pagerank (PR) là một trong những yếu tố cực kì quan trọng để Google xếp hạng kết quả tìm kiếm. Chỉ số này thường chỉ được cập nhật 3-4 lần mỗi năm.

Chỉ số PageRank (PR) cùng với tuổi thọ và nội dung là những yếu tố quan trọng khi Google xếp hạng các trang web. PR được đánh giá bằng những link (tính như phiếu bầu chọn) từ các trang web khác đến trang của bạn.

PR phụ thuộc vào số lượng và chất lượng link. Thí dụ một trang web A được 3 trang t1, t2, t3 đặt link đến. Chất lượng các link này được đánh giá bằng PR của t1, t2, t3, còn số lượng phụ thuộc vào số trang link đến A (ở đây là 3), và số link được đặt ở mỗi trang t1, t2, t3 (càng nhiều link thì chất lượng các link sẽ không cao).

Google chưa bao giờ mô tả cụ thể chi tiết cách tính PR, nhưng công thức chung là PR(A) = (1-d) + d(PR(t1)/C(t1) + … + PR(tn)/C(tn)) đó đó C(ti) là số link có ở trang ti. Hệ số d được giấu kĩ và chỉ có người của Google mới biết được giá trị này.

PR là một số thực, có lẽ được chuyển sang 0-10 theo thang lô-ga-rít, nên PR càng cao sẽ càng khó tăng.

PR4 như TTCN hiện nay được xếp vào loại khá (các trang rất lớn thường có PR từ 5 trở lên). Với chỉ số này, chúng ta có thể hi vọng càng ngày sẽ càng có nhiều người biết đến TTCN thông qua Google ;-) Và lần cập nhật tới biết đâu sẽ có PR5.

Bạn đọc nào quan tâm có thể đọc một bài viết rất hay (và dài !) về Google PageRank.

Liên kết quảng cáo :