Sosial Media
0
News
    Home Blogspot Tools Yêu Cầu

    Sitemap cho blogspot - Duy Phạm ver 3

    19 min read

    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.blogspotvi.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
    42 nhận xét
    Nếu có thumb thì nên có cả sumary
    Phiên bản này chưa có thumbnail 😅
    Update cả sumary đi bác
    Lụm về dùng luôn bác ơi
    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 🤣
    Feedback giúp mình nhé 😁
    Dạo này bạn hay vọc code nên có vẻ lên tay. Cái ý "đơn giản" vẫn chưa hoặc không thể khắc phục được trong phiên bản này nên trong nội dung hướng dẫn bạn cần nhấn mạnh sitemap theo nhãn, bài đăng bắt buộc phải gắn nhãn vì đó chỉ là tùy chọn của Blogger. Sitemap phân loại theo ngày đăng, nhãn, chữ cái v.v..., mỗi trang hiển thị từ 100 - 150/500 bài đăng thì nhìn có vẻ sitemap hơn :)) Nhiều người sử dụng sitemap mà chỉ hiển thị lèo tèo 5, 10, 20... bài đăng mỗi trang, nguồn cấp blog này với hơn 11319 bài đăng mà sử dụng sitemap kiểu này để tìm được bài đăng đầu tiên hơi bị mệt... thì thà sử dụng widget Labels của Blogger. Nếu kết hợp được cái hay của ba loại sitemap (tùy theo số lượng bài đăng, mục đích v.v...) Hung1001™, Blogspot Việt Nam và Anh Trai Nắng Blogger đang sử dụng hơi khó hoặc không thể thì thật tốt (sitemap Hung1001™ là khá ổn, có lẽ khó hoặc không thể sắp xếp theo ngày đăng mới nhất cũ nhất ngay từ ban đầu do sử dụng cách thức tải thêm v.v...). Mình chỉ gợi ý, đừng bảo mình tự code, mình không phải là... :))

    Nhận xét này khá tốn thời gian kiểm tra và biên tập :))

    Nhắn tin hông thấy trả lời
    Thế mà lại bảo trọn đời yêu anh </3

    https://www.youtube.com/watch?v=3TtxfreSTvU
    Bác thử bên blog test khác chưa?
    Thay vì hiển thị "Trang trước" hay "Trang sau" em sửa cho phân trang theo dạng số, có thể click vào trang cuối cùng luôn được, em chưa update tại bài viết này, mới đang áp dụng cho Sitemap trên trang của em.
    https://i.imgur.com/LU11O7i.png
    Còn kiểu như bác nói e cũng làm gần giống ở đây
    cập nhật code mới đeeee
    Để 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} 😁
    Bạn đúng như câu đầu tiên của nhận xét này. Ý tưởng phân trang đánh số thứ tự không mới nhưng tuyệt vời... Phiên bản sau (có thể là phiên bản cuối cùng) sitemap này kết hợp sắp xếp theo ngày đăng, nhãn... với phân trang đánh số thứ tự... áp dụng cho nguồn cấp blog này với hơn 11320 bài đăng khá hoàn hảo. Có ý gì mình bổ sung sau. Dạo này mình thích "lang thang" nhận xét hơn là tìm hiểu code và chỉnh sửa blog nhiều. Vậy là NAD phải loay hoay với sitemap này nữa :))

    Mình xin phép nhúng YouTube có thể là lần cuối cùng.

    Hãy tặng Đinh Công Huy hai bông (bóng) hồng
    Vì anh ấy không thích kẻ ba hoa :))


    https://www.youtube.com/watch?v=rPZVnfcxrzI
    Cảm ơn bác đã nhiệt tình góp ý. E cũng vừa update thêm 1 button với chức năng sắp xếp theo thời gian. Bác góp ý tiếp giúp e từ site map này ạ
    https://i.imgur.com/R9lNnQZ.png
    Update vào code cho ae đi thớt
    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)
    [note-green]Update ngày 05/03/2024
    - Thêm thumbnail cho bài viết
    - Thay đổi phân trang theo số
    - Thêm chức năng sắp xếp bài viết theo thời gian mới - cũ[/note]

    Click vào đây để xem Demo cho phiên bản này
    Theo dõi blog bạn thường xuyên từ trả lời cho trả lời này :)) Mình gợi ý nhiều lần rồi mà. Sitemap kết hợp sắp xếp theo ngày đăng (tất cả bài đăng), nhãn... với phân trang đánh số thứ tự...

    Với cách phân trang đánh số thứ tự của bạn thì nút tùy chỉnh có thể không cần thiết lắm nhưng đó là tùy chọn được... Đoạn này mình có thể diễn giải dài dòng nhưng thôi...

    Trả lời cho trả lời của bạn khá mệt và tốn thời gian nhưng không là gì so với bạn... Giỡn chút thôi :)) Một ngày vui vẻ!
    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! 😊
    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]
    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
    Ngon đấy bác hihi
    [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]
    Bác tìm rồi xóa
    [pre]var cat_thumbnail = entry.media$thumbnail ? entry.media$thumbnail.url : 'https://via.placeholder.com/150';[/pre]

    [pre]dw += '<div class="post-thumbnail"><a target="blank" href="' + cat_url + '" rel="nofollow"><img src="' + cat_thumbnail + '" alt="' + cat_title + '"></a></div>';[/pre]

    Sr bác, mấy hôm vừa rồi bận nên không rep ngay được 😁
    Nhờ có những góp ý như của bác đấy ạ, cảm ơn bác và mọi người! 🙏🏻
    Ý e là nếu muốn thêm nút cũ/mới nhất là đoạn nào ấy 😄
    Đối với đoạn code bác đang sử dụng thì sửa như sau
    Phần hiển thị button cũ mới bác thêm
    [pre]<span class="right" id="toggleOrderSpan" style="cursor: pointer;">Mới nhất &#8645;</span>[/pre]
    Và sửa thay js sau tại link này
    JS dài quá e không post được tại phần nhận xét 😁
    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
    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 ạ
    E thử margin âm mà nó ko xuống đc :(
    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]
    Ngon r cảm ơn Huy nhiều
    Gửi link qua mình xem giúp
    https://www.codientu.online/p/list-bai-viet.html
    Em gửi ạ, bác xem giúp em.
    Ở 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 😁
    Dạ được rồi ạ, phiền bác cho em đoạn code ẩn label không muốn hiên với ạ
    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]
    Em cảm ơn bác ạ
    nút mới nhất ko hoạt động thớt ơi
    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
    Additional JS