Sitemap cho blogspot - Duy Phạm ver 3

Các phiên bản trước
  1. Phiên bản gốc
  2. Ver 2

Tính năng

Và bên dưới là một số các tính năng sitemap của phiên bản này
  1. Sắp xếp theo thứ tự số lượng bài viết trong nhãn
  2. Hiển thị thêm tiêu đề của nhãn trên danh sách bài viết
  3. Cho phép hiển thị bài viết thuộc một nhãn bất kỳ lần đầu (mặc định sẽ hiển thị các bài viết ở nhãn đầu tiên)
  4. Tùy chọn mở cửa sổ mới cho link bài viết
  5. Tùy chọn hiển thị số lượng nhận xét
  6. Tùy chọn hiển thị thời gian đăng bài

Demo

Cài đặt

Nếu không nhập mặc định sẽ hiển thị các bài viết của nhãn đầu tiên
*Phân cách bằng dấu phẩy, nhập chính xác tên nhãn và phân biệt chữ Hoa thường

    

Update tính năng cho ver 3

Update ngày 05/03/2024
Click vào đây để xem Demo cho phiên bản này
  1. Thêm thumbnail cho bài viết
  2. Thay đổi phân trang theo số
  3. Thêm chức năng sắp xếp bài viết theo thời gian mới - cũ
<div id='show-cat'></div>
<span class="right" id="toggleOrderSpan" style="cursor: pointer;">Mới nhất &#8645;</span>
<div id='show-post'>
<script type='text/javascript'>
var cat_home = 'https://www.blogspotvn.net'; // Link blogspot của bạn
var cat_numb = 5; // Số lượng bài viết hiển thị trên một trang
var cat_pre = '<i class="fas fa-chevron-double-left"></i>'; // Văn bản hiển thị nút trang trước
var cat_nex = '<i class="fas fa-chevron-double-right"></i>'; // Văn bản hiển thị nút trang sau
var cat_name;
var cat_start;
var cat_class;
var oldestFirst = false; 

document.getElementById('toggleOrderSpan').addEventListener('click', function() {
    oldestFirst = !oldestFirst; 
    var orderText = oldestFirst ? 'Cũ nhất &#8645;' : 'Mới nhất &#8645;';
    document.getElementById('toggleOrderSpan').innerHTML = orderText;
    updatePosts(); 
});

function updatePosts() {
    show_post(cat_name, cat_start, cat_class, oldestFirst); 
}

function show_post(a, b, c, orderByOldestFirst) {
    var d = document.getElementsByTagName('head')[0];
    var e = document.createElement('script');
    e.type = 'text/javascript';
    e.setAttribute('src', cat_home + '/feeds/posts/default/-/' + a + '?alt=json-in-script&start-index=' + b + '&max-results=' + cat_numb + '&orderby=published&reverse=' + orderByOldestFirst + '&callback=show_post2');
    d.appendChild(e);
    cat_name = a;
    cat_start = parseInt(b), cat_class = c;
}

function show_post2(a) {
    var tt = a.feed.openSearch$totalResults.$t;
    var dw = '';
    dw += '<div class="label-name"><h3><i class="fad fa-tags icon-link"></i> ' + cat_name + '</h3></div>';
    dw += '<div class="posts">';
    for (var i = 0; i < cat_numb && i < a.feed.entry.length; i++) {
        var entry = a.feed.entry[i];
        var cat_title = entry.title.$t;
        var cat_thumbnail = entry.media$thumbnail ? entry.media$thumbnail.url : 'https://via.placeholder.com/150';
        var cat_url = entry.link.find(link => link.rel === 'alternate').href;
        dw += '<div class="post">';
        dw += '<div class="post-thumbnail"><a target="blank" href="' + cat_url + '" rel="nofollow"><img src="' + cat_thumbnail + '" alt="' + cat_title + '"></a></div>';
        dw += '<a target="blank" href="' + cat_url + '" rel="nofollow">' + cat_title + '</a>';
        var numComments = entry.thr$total.$t || 0; 
        if (numComments) {
            dw += '<span class="comment"><i class="fad fa-comments"></i> ' + numComments + ' nhận xét</span> | '; 
        } else {
            dw += '<span>Chưa có bình luận</span>'; 
        }
        var publishedDate = new Date(entry.published.$t);
        var formattedDate = publishedDate.getDate().toString().padStart(2, '0') + '/' +
                            (publishedDate.getMonth() + 1).toString().padStart(2, '0') + '/' +
                            publishedDate.getFullYear().toString().substring(2);
        dw += '<span class="date"><i class="fad fa-clock"></i> ' + formattedDate + '</span>';
        dw += '</div>'
    }
    dw += '</div>';
    dw += '<div id="navi-cat">';

    var lastPageButtonDisplayed = false; 

    if (cat_start > 1) {
        dw += '<a href="" onclick="show_post(\'' + cat_name + '\',\'' + (cat_start - cat_numb) + '\',\'' + cat_class + '\',' + oldestFirst + ');return false">' + cat_pre + '</a>';
    }

    var numPagesToShow = 3; // Số lượng trang hiển thị trong một nhóm
    var currentPage = Math.ceil(cat_start / cat_numb); 
    var totalPages = Math.ceil(tt / cat_numb); 
    var startPage = Math.max(1, currentPage - Math.floor(numPagesToShow / 2)); 
    var endPage = Math.min(startPage + numPagesToShow - 1, totalPages); 

    if (startPage > 1) {
        dw += '<a href="" onclick="show_post(\'' + cat_name + '\',\'1\',\'' + cat_class + '\',' + oldestFirst + ');return false">1</a>';
        if (startPage > 2) {
            dw += '… ';
        }
    }

    for (var p = startPage; p <= endPage; p++) {
        if (p === currentPage) {
            dw += '<span class="current">' + p + '</span>';
        } else {
            dw += '<a href="" onclick="show_post(\'' + cat_name + '\',\'' + ((p - 1) * cat_numb + 1) + '\',\'' + cat_class + '\',' + oldestFirst + ');return false">' + p + '</a>';
        }
    }

    if (endPage < totalPages && totalPages > numPagesToShow && !lastPageButtonDisplayed) {
        if (endPage < totalPages - 1) {
            dw += '… ';
        }
        var lastPageStartIndex = (totalPages - 1) * cat_numb + 1;
        dw += '<a href="" onclick="show_post(\'' + cat_name + '\',\'' + lastPageStartIndex + '\',\'' + cat_class + '\',' + oldestFirst + ');return false">' + totalPages + '</a>';
        lastPageButtonDisplayed = true; 
    }

    if ((cat_start + cat_numb - 1) < tt) {
        dw += '<a href="" onclick="show_post(\'' + cat_name + '\',\'' + (cat_start + cat_numb) + '\',\'' + cat_class + '\',' + oldestFirst + ');return false">' + cat_nex + '</a>';
    }

    dw += '<span class="right">' + cat_start + ' &ndash; ' + Math.min(cat_start + cat_numb - 1, tt) + ' / ' + tt + '</span>';
    dw += '</div>';
    document.getElementById('show-post').innerHTML = dw + '<style type="text/css">.cat-' + cat_class + ' a{background:#bbb!important;color:#fff!important}<\/style>';
}

function show_cat(a) {
    var cat = a.feed.category;
    var cat_first_label = cat[0].term;
    show_post(cat_first_label, '1', '0', oldestFirst);
    var dw = '';
    dw += '<ul>';
    for (var i = 0; i < cat.length; i++) {
        dw += '<li class="cat-' + i + '">';
        dw += '<a href="" onclick="cat_name=\'' + cat[i].term + '\'; cat_start=\'1\'; cat_class=\'' + i + '\'; updatePosts(); return false;">';
        dw += cat[i].term;
        dw += '</a>';
        dw += '</li>';
    }
    dw += '</ul>';
    document.getElementById('show-cat').innerHTML = dw;
}
document.write('<script type="text/javascript" src="' + cat_home + '/feeds/posts/default?alt=json-in-script&max-results=0&callback=show_cat"><\/script>');</script>
</div>
<style type='text/css'>
#show-cat ul {
  margin:0;
  padding:0;
  list-style-type:circle;
}

#show-cat ul li {
  list-style-type:none;
  margin:0;
  border:1px solid #ccc;
  padding:0;
}

#show-cat {
  float:left;
  margin-right:2%;
  width:20%;
  height:715px;
  overflow-x:hidden;
  overflow-y:auto;
  line-height:18px;
}

.posts {
  margin:0;
  padding:0;
  border:1px solid #ccc;
  border-bottom: 0;
}

.post {
  border-bottom:1px solid #ccc;
  padding:16px 20px;
}

.posts a {
  display:block;
}

.post a,
#navi-cat a {
  color:#005b53;
  text-decoration:none;
}

.post-thumbnail {
  float:left;
  margin:5px 20px 0 0;
  width:72px;
  overflow:hidden;
}

.post-thumbnail img {
  height:72px;
  width:72px;
  border-radius:5px;
}

#show-cat ul li a {
  color:#005b53;
  text-decoration:none;
  display:block;
  padding:10px;
}
  
span.comment, span.date  {
    color: gray;
}  
  
.dark #show-cat ul li a{
  color:#eee;
}  
  
#show-cat ul li a:hover {
  background:#ccc;
  color:#fff;
}

.dark #show-cat .post a,
.dark #navi-cat a {
  background:#6a6a6a;
  color:#eee;
}

.posts a {
  font-size:12px;
  font-weight:bold;
  margin-bottom:10px;
}

#navi-cat a:hover {
  background:#ccc;
  color:#fff;
}

#show-post {
  float:left;
  width:78%;
}

#navi-cat {
  padding:20px 0;
}

#navi-cat a {
  margin-right:10px;
  border:1px solid #ccc;
}

#navi-cat a,
#navi-cat span {
  padding:5px 10px;
  margin-right: 10px;
}


#sidebar-wrapper,
#navigation,
#comments {
  display:none;
}

#main-wrapper {
  width:100%;
}

.label-name h3 {
  padding:0;
  margin-top:10px;
}

#show-cat::-webkit-scrollbar {
  background:#ddd;
  width:5px;
}

.dark #show-cat::-webkit-scrollbar {
  background:#000;
}

#show-cat::-webkit-scrollbar-thumb {
  background:#c1c1c1;
}

.container li {
  line-height:2em;
}

@media screen and (max-width:1094px) {
  #show-cat,
  #show-post {
    width:100%;
    height:auto;
  }
  #show-post {
    border-top:5px solid #ddd;
    margin-top:20px;
  }
  #show-cat ul li {
    float:left;
  }
}
</style>
Ngại viết tool nên anh em thông cảm nhé, tự thay những gì mình đánh dấu tương ứng bằng thông tin của các bạn. Anh em tự khám phá thêm nhé, chúc mọi người một ngày vui. Đừng quên để lại nhận xét bên dưới nếu muốn góp ý nhé, cảm ơn!
Trong đoạn code trên một số icon mình có sử dụng font awesome nên sẽ không hiển thị đầy đủ nếu bạn không cài đặt font này

About the author

Đỗ Thu Hoài
Ko biết để gì cho hợp lý! https://www.threads.com/@dwo_th

33 تعليقًا

  1. Tomorrow
    Nếu có thumb thì nên có cả sumary
  2. A Đê Min
    Phiên bản này chưa có thumbnail 😅
  3. NAD
    Ặc
  4. NAD
    Update cả sumary đi bác
  5. Thành Trương Blog
    Lụm về dùng luôn bác ơi
  6. A Đê Min
    E đang mới test ở blog này có thêm thumnail thôi. Lúc nào rảnh thêm sumary. Như thế nhìn giống y bài viết luôn 🤣
  7. A Đê Min
    Feedback giúp mình nhé 😁
  8. A Đê Min
    Bác thử bên blog test khác chưa?
  9. Anh Trai Nắng
    cập nhật code mới đeeee
  10. A Đê Min
    Để thay thế thành phân trang bằng số thì anh em tìm
    [pre] dw += '<div id="navi-cat">';
    if (cat_start > 1) {
    dw += '<a href="" onclick="show_post(\'' + cat_name + '\',\'' + (cat_start - cat_numb) + '\',\'' + cat_class + '\');return false">' + cat_pre + '</a>'
    }
    if ((cat_start + cat_numb - 1) < tt) {
    dw += '<a href="" onclick="show_post(\'' + cat_name + '\',\'' + (cat_start + cat_numb) + '\',\'' + cat_class + '\');return false">' + cat_nex + '</a>'
    }
    dw += '<span>' + cat_start + ' &ndash; ' + (cat_start + i - 1) + ' / ' + tt + '</span>';
    dw += '</div>';[/pre]
    Sau đó thay bằng
    [pre]dw += '<div id="navi-cat">';

    var lastPageButtonDisplayed = false;

    if (cat_start > 1) {
    dw += '<a href="" onclick="show_post(\'' + cat_name + '\',\'' + (cat_start - cat_numb) + '\',\'' + cat_class + '\');return false">' + cat_pre + '</a>';
    }

    var numPagesToShow = 3; // Số lượng trang hiển thị trong một nhóm
    var currentPage = Math.ceil(cat_start / cat_numb);
    var totalPages = Math.ceil(tt / cat_numb);
    var startPage = Math.max(1, currentPage - Math.floor(numPagesToShow / 2));
    var endPage = Math.min(startPage + numPagesToShow - 1, totalPages);

    if (startPage > 1) {
    dw += '<a href="" onclick="show_post(\'' + cat_name + '\',\'1\',\'' + cat_class + '\');return false">1</a>';
    if (startPage > 2) {
    dw += '… ';
    }
    }

    for (var p = startPage; p <= endPage; p++) {
    if (p === currentPage) {
    dw += '<span class="current">' + p + '</span>';
    } else {
    dw += '<a href="" onclick="show_post(\'' + cat_name + '\',\'' + ((p - 1) * cat_numb + 1) + '\',\'' + cat_class + '\');return false">' + p + '</a>';
    }
    }

    if (endPage < totalPages && totalPages > numPagesToShow && !lastPageButtonDisplayed) {
    if (endPage < totalPages - 1) {
    dw += '… ';
    }
    var lastPageStartIndex = (totalPages - 1) * cat_numb + 1;
    dw += '<a href="" onclick="show_post(\'' + cat_name + '\',\'' + lastPageStartIndex + '\',\'' + cat_class + '\');return false">' + totalPages + '</a>';
    lastPageButtonDisplayed = true;
    }

    if ((cat_start + cat_numb - 1) < tt) {
    dw += '<a href="" onclick="show_post(\'' + cat_name + '\',\'' + (cat_start + cat_numb) + '\',\'' + cat_class + '\');return false">' + cat_nex + '</a>';
    }

    dw += '<span class="right">' + cat_start + ' &ndash; ' + Math.min(cat_start + cat_numb - 1, tt) + ' / ' + tt + '</span>';
    dw += '</div>';[/pre]

    Style thì xóa #navi-cat span{float:right} thay bằng .right{float:right} 😁
  11. NAD
    Update vào code cho ae đi thớt
  12. NAD
    Sitemap theo label cơ bản ok r, giờ thêm option theo thời gian nữa thì hay hơn (thời gian xếp theo tháng hoặc năm)
  13. A Đê Min
    Cảm ơn bác đã nhiều lần góp ý giúp e. Những góp ý của bác e ghi nhận hết cơ mà trình độ có hạn 😁
    Chúc bác một ngày vui! 😊
  14. A Đê Min
    Test chức năng ghim comment của admin
    Comment này sẽ luôn giữ vị trí trên cùng dù có như nào đi nữa 🤣🤣🤣
    [pin]
  15. NAD
    Ngon
  16. A Đê Min
    ✌️😀
  17. Tomorrow
    Thêm nút cũ/mới nhất là đoạn nào thớt ơi, vì ko phải ai cũng muốn thêm thumb
  18. Quốc Đẹp Trai
    Ngon đấy bác hihi
  19. YMG
    [note-green]Sơ lược 9 nhận xét của YMG (20.2 - 6.3.24)

    1. Blog này trước đây "tưởng không hay" bây giờ "hay không tưởng".

    2. Gần đây niềm đam mê vẫn còn, ĐCH dành khá nhiều thời gian cho blog.

    3. YMG sẽ nhận xét, góp ý hoặc gợi ý cẩn thận, hợp lý tránh những nhận định sai lầm, thiếu sót thô thiển v.v...[/note]
  20. A Đê Min
    Nhờ có những góp ý như của bác đấy ạ, cảm ơn bác và mọi người! 🙏🏻
  21. NAD
    Ý e là nếu muốn thêm nút cũ/mới nhất là đoạn nào ấy 😄
  22. Tomorrow
    Cảm ơn bác, e muốn để chữ "cũ/mới nhất" đối diện với tên nhãn cho đối xứng, thẳng theo hàng dọc thì nhét thế nào bác :D
  23. A Đê Min
    Thằng cũ - mới này do thêm ban đầu bằng HTML còn thằng tên nhãn kia dùng đoạn js viết ra. E chưa nghĩ ra đoạn này nhưng e nghĩ dùng CSS cho id “toggleOrderSpan” để xác định vị trí cho nó là được bác ạ
  24. NAD
    E thử margin âm mà nó ko xuống đc :(
  25. A Đê Min
    Như của bác có thể sửa như sau cho id #toggleOrderSpan như sau
    [pre]#toggleOrderSpan {
    position: relative;
    right: 15px;
    top: 48px;
    }[/pre]
  26. NAD
    Ngon r cảm ơn Huy nhiều
  27. A Đê Min
    Gửi link qua mình xem giúp
  28. A Đê Min
    Ở class .post bạn thêm chiều cao tối thiểu là được. Như của bạn sửa thành là đẹp
    [pre].post {
    border-bottom: 1px solid #ccc;
    padding: 16px 20px;
    min-height: 110px;
    }[/pre]
    Góp ý thêm chút là bỏ phần nhận xét ở trang này đi 😁
  29. Quản Trị Viên
    Dạ được rồi ạ, phiền bác cho em đoạn code ẩn label không muốn hiên với ạ
  30. A Đê Min
    Theo như đoạn code bạn đang sử dụng thì sửa toàn bộ nội dung của hàm show_cat như sau
    [pre]function show_cat(a) {
    var cat = a.feed.category;
    var dw = '';
    dw += '<ul>';
    var firstValidLabelShown = false;
    for (var i = 0; i < cat.length; i++) {
    if (cat[i].term === "Khóa Học" || cat[i].term === "Lập Trình" || cat[i].term === "Tin Tức") {
    continue;
    }

    if (!firstValidLabelShown) {
    firstValidLabelShown = true;
    show_post(cat[i].term, '1', '0', oldestFirst);
    }

    dw += '<li class="cat-' + i + '">';
    dw += '<a href="" onclick="cat_name=\'' + cat[i].term + '\'; cat_start=\'1\'; cat_class=\'' + i + '\'; updatePosts(); return false;">';
    dw += cat[i].term;
    dw += '</a>';
    dw += '</li>';
    }
    dw += '</ul>';
    document.getElementById('show-cat').innerHTML = dw;
    }[/pre]
    Như ví dụ trên là mình đang không cho hiển thị 3 label "Khóa Học", "Lập Trình", "Tin Tức"
    [note]Lưu ý: Label muốn ẩn phân biệt chữ Hoa thường[/pre]
  31. Quản Trị Viên
    Em cảm ơn bác ạ
  32. Đỗ Trực
    nút mới nhất ko hoạt động thớt ơi
  33. A Đê Min
    Bạn thử test ở blog khác xem, có khi xung đột gì đấy ở blog hiện tại. Nếu blog test vẫn bị thì gửi code mình xem, vì mình cũng thấy nhiều người dùng và ko bị lỗi này