2.3.24 |
45
nhận xét
|
lượt xem
Các phiên bản trước
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- Sắp xếp theo thứ tự số lượng bài viết trong nhãn
- Hiển thị thêm tiêu đề của nhãn trên danh sách bài viết
- 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)
- Tùy chọn mở cửa sổ mới cho link bài viết
- Tùy chọn hiển thị số lượng nhận xét
- 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
Click vào đây để xem Demo cho phiên bản này
- 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ũ
<div id='show-cat'></div> <span class="right" id="toggleOrderSpan" style="cursor: pointer;">Mới nhất ⇅</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 ⇅' : 'Mới nhất ⇅'; 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 + ' – ' + 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
hay quá, để mình thêm vào blog https://bangchuyentitan.blogspot.com/ của mình
REPLY DELETENếu có thumb thì nên có cả sumary
REPLY DELETEPhiên bản này chưa có thumbnail 😅
REPLY DELETEẶc
REPLY DELETEUpdate cả sumary đi bác
REPLY DELETEE đ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 🤣
DELETELụm về dùng luôn bác ơi
REPLY DELETEFeedback giúp mình nhé 😁
REPLY DELETEDạ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à... :))
REPLY DELETENhậ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
A Đê Min có viết bài này khá giống của của Hung1001 nè a. Em có áp dụng làm thử bên blog em mà mỗi tội nó ko chạy 😂
REPLY DELETEBác thử bên blog test khác chưa?
REPLY DELETEThay 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.
REPLY DELETEhttps://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
REPLY DELETEĐể thay thế thành phân trang bằng số thì anh em tìm
DELETE[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 + ' – ' + (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 + ' – ' + 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 :))
REPLY DELETEMì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 ạ
DELETEhttps://i.imgur.com/R9lNnQZ.png
Update vào code cho ae đi thớt
DELETESitemap 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)
DELETETheo 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ự...
DELETEVớ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 😁
DELETEChúc bác một ngày vui! 😊
[note-green]Update ngày 05/03/2024
REPLY DELETE- 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
Ngon
REPLY DELETE✌️😀
REPLY DELETETest chức năng ghim comment của admin
REPLY DELETEComment 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
REPLY DELETEBác tìm rồi xóa
REPLY DELETE[pre]var cat_thumbnail = entry.media$thumbnail ? entry.media$thumbnail.url : 'https://via.placeholder.com/150';[/pre]
Và
[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 😁
Ý e là nếu muốn thêm nút cũ/mới nhất là đoạn nào ấy 😄
REPLY DELETEĐối với đoạn code bác đang sử dụng thì sửa như sau
DELETEPhầ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 ⇅</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
DELETEThằ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 ạ
DELETEE thử margin âm mà nó ko xuống đc :(
DELETENhư của bác có thể sửa như sau cho id #toggleOrderSpan như sau
DELETE[pre]#toggleOrderSpan {
position: relative;
right: 15px;
top: 48px;
}[/pre]
Ngon r cảm ơn Huy nhiều
DELETENgon đấy bác hihi
REPLY DELETE[note-green]Sơ lược 9 nhận xét của YMG (20.2 - 6.3.24)
REPLY DELETE1. 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]
Nhờ có những góp ý như của bác đấy ạ, cảm ơn bác và mọi người! 🙏🏻
REPLY DELETEhttps://i.imgur.com/EoFyD1o.png
REPLY DELETEBài viết của em nó hiển thì thụt ra thụt vô như vậy. Bác giúp em với
Gửi link qua mình xem giúp
REPLY DELETEhttps://www.codientu.online/p/list-bai-viet.html
REPLY DELETEEm 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
DELETE[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 ạ
REPLY DELETETheo 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
DELETE[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 ạ
DELETEnút mới nhất ko hoạt động thớt ơi
REPLY DELETEBạ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
REPLY DELETE