Skip to main content

Tanya Jawab - Forum

Halaman tanya jawab tentang topik umum, seputar template atau sharing pengetahuan tentang blogger.
Vũ Trần

Vũ Trần
blogger

Messages
44
Points
+178

Reputation: 100%

New #2
@Anonymous I gave up on using google sheet. Because it's too slow, you can use firebase and there are many tutorials on the internet using firebase to create postviews.
(1 balasan) 👋 #1 ,
0
Vũ Trần

Vũ Trần
blogger

Messages
44
Points
+247

Reputation: 100%

New #4
I think it doesn't improve much. Besides, the diagram is not a surprise factor, I'm currently building a story and chapter posting system based on "blogger api". I hope this factor is a surprise factor and simplifies for users :D
0
Anix Play

Anix Play
blogger

Messages
4
Points
+260

Reputation: 40%

New #21
hello min , i want to learn about making custom headers and footers and landing apge on home and homepage on custom url like hexanime for any blogger theme . can you please help me ?
Anticipating a positive response .
Thanking You ,
Anix Themes
(1 balasan) 👋 #1 ❤️ Wernayasa ,
0
Wernayasa

Wernayasa
Admin

Messages
54
Points
+797

Reputation: 100%

New #27
I know, it not fun to make.
Learn how to use framework, it speed up your development time.
The quickest way to get started working with Flowbite is to include the CSS and JS into your project via CDN.
Paste above head <link href="https://cdn.jsdelivr.net/npm/flowbite@3.1.2/dist/flowbite.min.css" rel="stylesheet" /> Paste above body <script src="https://cdn.jsdelivr.net/npm/flowbite@3.1.2/dist/flowbite.min.js"></script> Next copy navbar code, chose any navbar you like: https://flowbite.com/docs/components/navbar/ or footer https://flowbite.com/docs/components/footer/ You can use an AI assistant like ChatGPT to help you get through this difficulty.
(1 balasan) 👋 #1 Anix Play ,
0
Vũ Trần

Vũ Trần
blogger

Messages
44
Points
+218

Reputation: 100%

New #29
The system for posting stories, chapters, and volumes has been running very smoothly. Tomorrow morning, I will release an official demo of this system, and a few days later, I will upload the official theme version :))
0
Anix Play

Anix Play
blogger

Messages
4
Points
+568

Reputation: 40%

New #30
thank you min , yeah sure and i am working now on a new "Anime Streaming project" using base theme v12 ....

demo : https://anixplay-bt.blogspot.com/

cloning : https://github.com/5rahim/seanime/blob/main/docs/images/4/anime-entry-torrent-stream--sq.jpg

just came cross some issues like the layout is bit changed and getting issues in styling . if you are free btw can you help me with some aspects like blog1 grid layout and post series layout only ?

Anticipating a positive response .
Thanking You ,
Anix
(1 balasan) 👋 #1 ❤️ Wernayasa ,
0
Wernayasa

Wernayasa
Admin

Messages
54
Points
+747

Reputation: 100%

New #31
Sorry, i still working on my theme.
In this case you can use b:tag with condition. Replace: <b:loop index='i' values='data:posts' var='post'>
<b:include data='post' name='postCommentsAndAd'/>
</b:loop>
With: <b:tag class='grid grid-cols-[repeat(auto-fill,minmax(230px,1fr))] gap-4' cond='data:view.isMultipleItems' name='div'>
<b:loop index='i' values='data:posts' var='post'>
<b:include data='post' name='postCommentsAndAd'/>
</b:loop>
</b:tag>
0
Tim-Tam

Tim-Tam
blogger

Messages
21
Points
+873

Reputation: 100%

New #38
bang bisa bantu javascript?

aku ingin memasang post author blogger tapi gagal terus.

// buat ambil data penulis
const post = posts[originalPosition]; // Dapatkan post dari data yang sesuai
const author = post.author ? post.author[0].name.$t : 'Unknown'; // data penulisnya

const contentRow = document.createElement('tr');
contentRow.classList.add('post-content');
contentRow.innerHTML = `
<td colspan="4">${content}</td> <!-- Konten utama -->
<td colspan="1" class="author-cell"><strong>Penulis:</strong> ${author}</td> <!-- Author di kolom Rilis -->
`;



hasilnya Unknown terus.
gimana caranya biar dapetin post authornya?
(1 balasan) 👋 #1 Tim-Tam ,
0
Wernayasa

Wernayasa
Admin

Messages
54
Points
+940

Reputation: 100%

New #40
Coba ini: // buat ambil data penulis const post = posts[originalPosition]; // Dapatkan post dari data yang sesuai
const author = post.author ?
(Array.isArray(post.author) ? post.author[0].name.$t : post.author.name.$t)
: (post.entry && post.entry.author ? post.entry.author.name.$t : 'Unknown');

const contentRow = document.createElement('tr');
contentRow.classList.add('post-content');
contentRow.innerHTML = `
<td colspan="4">${content}</td>
<td colspan="1" class="author-cell"><strong>Penulis:</strong> ${author}</td>
`;
Entah bisa atau engk, karena ini buatan ai.
Coba baca dokumetasi ini: [audiralog - Menggunakan Blogger JSON Feed API]
0
Tim-Tam

Tim-Tam
blogger

Messages
21
Points
+382

Reputation: 100%

New #42
satu lagi, supaya url blogger.com berubah jadi nama Blognya gimana?
pake meta tag juga?

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEievMmXzjI8JFPBXBKC-kF3AQ7JxJ8wCAVDcy5Q3hTU9CEpZ_sm0n_6TkaUICOeff23iYqmOfDD_elMxS55ryTyNHsJX07jieKGwyH0VZFAKPW0-9rpBIxcft8ZHaYZYbuMHx72bdqooUfc6JJw4q3mZcxLIy39LgjorEjade7SI4Dv1f9bEWBq-G6H7OUC/s1600/2.png
(1 balasan) 👋 #1 ❤️ Wernayasa ,
0
Vũ Trần

Vũ Trần
blogger

Messages
44
Points
+292

Reputation: 100%

New #59
Sequential loading from the feed source takes a long time. However, I have a method that can load thousands of chapters from the data feed in under 3 seconds.

You can refer to the following article: https://emissionhex.blogspot.com/2025/03/demo-onetap-manga-100-theme-of-story.html
(1 balasan) 👋 #1 Tim-Tam ,
0
Tim-Tam

Tim-Tam
blogger

Messages
21
Points
+3581

Reputation: 100%

New #60
gini?

const postContainer=document.getElementById("post-container");const label=postContainer.getAttribute("data-label");const feedUrl=startIndex=>`/feeds/posts/default/-/${label}?alt=json&start-index=${startIndex}&max-results=150`;let allChapters=[],currentIndex=-1;function getCurrentPostLink(){return window.location.href;}async function fetchChapters(startIndex){try{const response=await fetch(feedUrl(startIndex));const data=await response.json();return data.feed.entry.map(entry=>({title:entry.title.$t,link:entry.link.find(link=>link.rel==="alternate").href,thumbnail:entry.media$thumbnail?entry.media$thumbnail.url:"",published:new Date(entry.published.$t)}));}catch(error){console.error("Error fetching chapters:",error);return[];}}async function loadAllChapters(){try{const initialResponse=await fetch(feedUrl(1));const initialData=await initialResponse.json();const totalResults=parseInt(initialData.feed.openSearch$totalResults.$t);allChapters.push(...initialData.feed.entry.map(entry=>({title:entry.title.$t,link:entry.link.find(link=>link.rel==="alternate").href,thumbnail:entry.media$thumbnail?entry.media$thumbnail.url:"",published:new Date(entry.published.$t)})));const startIndexes=[];for(let i=151;i<=totalResults;i+=150){startIndexes.push(i);}const remainingChapters=await Promise.all(startIndexes.map(startIndex=>fetchChapters(startIndex)));remainingChapters.forEach(chapters=>allChapters.push(...chapters));const currentPostLink=getCurrentPostLink();currentIndex=allChapters.findIndex(chapter=>chapter.link===currentPostLink);if(currentIndex===-1){currentIndex=0;}updateButtonVisibility();createToC(allChapters);}catch(error){console.error("Error loading all chapters:",error);}}function createToC(filteredPosts){const tocItems=document.getElementById("toc-items");tocItems.innerHTML=filteredPosts.map((post,i)=>`<div class="toc-item"><img src="${post.thumbnail}" alt="Thumbnail" class="toc-thumbnail"><a href="#" onclick="jumpToPost(${i})" class="toc-link">${post.title}</a></div>`).join("");}function jumpToPost(index){currentIndex=index;const postLink=allChapters[currentIndex].link;window.location.assign(postLink);}function updateButtonVisibility(){document.getElementById("prev-btn").disabled=currentIndex<=0;document.getElementById("next-btn").disabled=currentIndex>=allChapters.length-1;}function navigatePost(step){currentIndex+=step;if(currentIndex<0)currentIndex=0;if(currentIndex>=allChapters.length)currentIndex=allChapters.length-1;updateButtonVisibility();const postLink=allChapters[currentIndex]?.link;if(postLink){window.location.assign(postLink);}else{console.warn("Tidak ada tautan untuk postingan ini.");}}document.getElementById("prev-btn").addEventListener("click",()=>{navigatePost(-1);});document.getElementById("next-btn").addEventListener("click",()=>{navigatePost(1);});document.getElementById("toc-btn").addEventListener("click",()=>{const tocList=document.getElementById("toc-list");tocList.classList.add("open");});document.getElementById("close-btn").addEventListener("click",()=>{const tocList=document.getElementById("toc-list");tocList.classList.remove("open");});loadAllChapters();
(1 balasan) 👋 #1 Vũ Trần ,
0
Vũ Trần

Vũ Trần
blogger

Messages
44
Points
+725

Reputation: 100%

New #64
The common method people often use is sequential loading. Each time the number of posts in the feed equals max-results, the system will call the next start-index. However, this approach is very time-consuming when dealing with a large number of posts.

This new method is my own idea. If you look closely, you’ll notice that the openSearch$totalResults parameter represents the total number of posts across the entire system, unrestricted by max-results. By simply using this value to set up a for loop, determining the necessary start-index values, and leveraging Promise.all for parallel fetching, we can significantly optimize loading speed. This is the best possible method, so there will be no better approach.
(1 balasan) 👋 #1 Vũ Trần ,
0
Wernayasa

Wernayasa
Admin

Messages
54
Points
+476

Reputation: 100%

New #66
For a long time, I couldn't understand what you meant.

In my new version, I've added session storage to improve the speed of navigating between chapters.

Now, after reading your second comment, I understand.
Essentially, we are reusing the feed repeatedly all across the theme?

I'm going to try to create a unified feed that can be accessed by all feed themes.
This is a big project, I'm not sure if I'll succeed.
0
Vũ Trần

Vũ Trần
blogger

Messages
44
Points
+1357

Reputation: 100%

New #67
Using "session storage" is not a good idea because it has a limit of about 5–10MB.

My idea is to use an array:
let ChapterCache = [];
to store the chapters.

We will take the id (post ID) of the current chapter and compare it within ChapterCache to determine its position.

When the user clicks "next/prev," instead of reloading the page, we will fetch the data from ChapterCache. We will reuse the existing page structure, only changing the title and content (similar to a single-page application but limited to navigating between chapters).

Using history.pushState, we update the URL as if the user is accessing a new page and push the state into the browser history. This allows the user to use the back/forward buttons as usual.

Here is a demo:
Demo page: [Link]
Demo video: [Link]

This is currently the best approach, and there is certainly no better alternative. Using "session storage" is not just a bad idea—it’s terrible. With this approach, resource usage is minimized because the feed is only loaded once, as we reuse both the feed data and the page structure.
0
Clare

Clare
blogger

Messages
3
Points
+468

Reputation: 30%

New #74
Jika pakai blogger conditional tag, Cara identifikasi url memiliki query tertentu bagaimana ya?
misalnya membuka https://blogger.blogspot.com/?m=1&u=kataKunci
<!-- sudah pakai ini tapi tidak bisa -->
<b:if cond='data:blog.url has "u=kataKunci"'>
<b:if cond='data:blog.url in "u=kataKunci"'>
<b:if cond='data:blog.url includes "u=kataKunci"'>
(1 balasan) 👋 #1 ❤️ Wernayasa ,
0
Wernayasa

Wernayasa
Admin

Messages
54
Points
+254

Reputation: 100%

New #75
<b:if cond='data:blog.url == data:blog.canonicalHomepageUrl + "?m=1&u=kataKunci"'> Aku belum pernah melihat u=kataKunci, apa ini fungsi baru?
Query pencarian seharusnya search?q=kataKunci
0
New #76
Yes, it may be true, as a beginner I also had difficulty understanding it, until it took me 3 days to learn about retrieving data in batch using [promiseAll].

The result is quite satisfying, as a start for me 🥳 [Link].

I think it's better to make an article, I need to understand how it works further.
Reading it through code is a bit difficult.
(1 balasan) 👋 #1 ❤️ Wernayasa ,
0
Vũ Trần

Vũ Trần
blogger

Messages
44
Points
+266

Reputation: 100%

New #79
Good, but using session storage has a 5MB limit. So, we'll use an array to store the chapters and reuse it multiple times when navigating next/prev. Since the array is stored in RAM, it's more suitable for handling large JSON data that exceeds the 5MB limit.
(1 balasan) 👋 #1 Vũ Trần ,
0
Vũ Trần

Vũ Trần
blogger

Messages
44
Points
+641

Reputation: 100%

New #84
Using IndexedDB can be quite complicated when it comes to managing series, updating data, and optimizing performance. If you're storing thousands of series and a bug occurs, fixing it can be a real headache :))

To handle this properly, you need a robust system with optimized algorithms. For example, binary search and other powerful algorithms can be applied to speed up queries.
However, to keep things simple, we can just use a JavaScript array to temporarily store the chapters – and that's more than enough!
Demo Storing chapters in an array: [Link]
(1 balasan) 👋 #1 MAGIC Reincarnated ,
0
New #85
If we only rely on variables to store data as an array, it is difficult to do because our website needs to load every time we change pages.

This method is only good on Single page.

Recently I tested indexedDB with 12000 data, The results are quite good even though when there is a new post or post update it takes a little longer, about 5-9seconds to update the post.
0
Vũ Trần

Vũ Trần
blogger

Messages
44
Points
+416

Reputation: 100%

New #99
I initially thought it would load everything.
However, you should use a Web Worker to prevent lag on the main thread when loading Series data into IndexedDB.
Additionally, there are several major challenges, such as updating posts, optimizing resources, and bandwidth efficiency.
There's a similar site that also uses IndexedDB for storage across the entire platform: https://truyendex.com/nettrom
0
Wernayasa

Wernayasa
Admin

Messages
54
Points
+536

Reputation: 100%

New #101
Yap, itu masalahnay.
Banyak rencana tapi sedikit waktu.
Tadi pagi aku coba bikin ui untuk web app, ternyata sulit juga.
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_KbG7Q7y08RkERyCXfBOJ5pun9-XDA6HxLEweJ5_DcnyDUyVavtNYah3K27USTjUKk7V3XG4BWCwpIbtDJs6qPU1YuC1J9NXDDIiD30HiZovqiKgai__RDd6SW1H1RrNxXeuVGAX4f-9FtBF9bOV6Oq_4rw0k0CQVDVoI-KaaHMHMkQ1RWNql0vLfPs0/s854/Screenshot%202025-03-30%20at%2007-04-16%20.png
Proyeknya batal.
Aku bakal bikin web app kalau antrian tema sudah clear.
(1 balasan) 👋 #1 Tim-Tam ,
0
Tim-Tam

Tim-Tam
blogger

Messages
21
Points
+659

Reputation: 100%

New #102
kira-kira berat gak nih bang?
Baca manga : [Demo]
Baca novel : [Demo]

Untuk baca manga pake navigasi dinamis bisa dengan cara klik gambar dan navigasi keyboard jadi enak mau di baca di pc atau mobile apalagi fokus ke manganya.

Untuk baca novel pake highlight teks jadi enak kalo pake text to speech.

untuk baca novel masih agak was-was soalnya itu merubah struktur html ketika ada higlight teks jadi takutnya bikin yang perangkatnya biasa aja jadi lag.
(1 balasan) 👋 #1 ❤️ Wernayasa ,
0
Wernayasa

Wernayasa
Admin

Messages
54
Points
+308

Reputation: 100%

New #103
Ringan. Recomended.
Seharusnya seperti ini post chapter, temaku sudah ketingalan zaman.
Makanya, kedepannya nanti temaku pakai cara ini.

Aku gk terlalu minat dengan text to speech.
Tapi berguna untuk orang yg punya disabilitas.

Menurutku gk akan berdampak pada peformace.
0
A

Anonymous
anonymous

Messages
11
Points
+309

Reputation: 100%

New #104
Hello guys. I don't speak your language, so i will speak in english. I would like to know how to use the "random post" field. I labeled some works as "completed", as it is marked in the field, but the works did not appear, this part just kept loading. What should I do to make it work?
(1 balasan) 👋 #1 ❤️ Wernayasa ,
0
Tim-Tam

Tim-Tam
blogger

Messages
21
Points
+740

Reputation: 100%

New #110
untuk menghilangkan postingan tertentu di blog1 biasanya menggunakan apa?
saya pake ini:
<b:loop index='i' values='data:posts' var='post'>
<b:if cond='data:post.labels'>
<b:if cond='!(data:post.labels any (l =&gt; l.name == &quot;Chapter&quot;))'>
<b:include data='post' name='postCommentsAndAd'/>
</b:if>
</b:if>
</b:loop>

ternyata kalo pake itu yang di hilangkan juga masih termasuk postingannya, jadi kalo di set 9 post, postingan terbaru yang di hilangkan tetap di hitung, di homepage jadinya cuman ada 8 postingan.
0
Tim-Tam

Tim-Tam
blogger

Messages
21
Points
+532

Reputation: 100%

New #127
kepikiran buat bikin search box yang bisa cari judul dari bahasa lain.
akhirnya bisa juga [link]
siapa tahu bisa jadi update buat template animanga lain.

jadi bisa mencari menggunakan judul post dan juga judul yang terkait, contoh post saya ada series ini, dengan mengetik salah satu judul ini akan langsung muncul di pencariannya. jadi makin fleksibel.
RE: Ankoku Kishi Monogatari
Dark Knight Story
RE: Tale of the Dark Knight
暗黒騎士物語
(1 balasan) 👋 #1 ❤️ Wernayasa ,
0
New #130
pertanyaan:
kalau gabungkan xml dengan js untuk menangkap label bakal ada masalahkah kedepannya.
[link]

tujuanku mau pasang label lebih bebas dibagian chapter, contoh translation by authorname, Volume Number.
kalau gabungkan dengan js lebih enak aja bisa pakai regex.
tapi aku gak tau bakal ada masalah atau tidak kedepannya.
(1 balasan) 👋 #1 ❤️ Wernayasa ,
0
A

Anonymous
anonymous

Messages
11
Points
+318

Reputation: 100%

New #134
Anyone how to make this dark mode? https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTFyvGnH20WsMiipENwjmgtQmqoWcNZLYYKTJuwjFPbHmH4iIgJznbOTstUeWQ5c-EE4M8Qu6lunQJnHwzcf34THsK6GlmVSuDqvT93YJismwVxpJPbckutKGpBqmiUqCC1DZKEzi4t9viLid2l1adIQXQCn_H6Zu6DJ5v2TR4WcFVA_mjrZO2Otozuy4j/s1600/image.webp
0
Wernayasa

Wernayasa
Admin

Messages
54
Points
+1349

Reputation: 100%

New #140
Ini hanya muncul jika ada 200 komentar: <b:if cond='data:post.commentPagingRequired'>
<div class='paging-control-container'>
<b:if cond='data:post.hasOlderLinks'>
<a expr:class='data:post.oldLinkClass' expr:href='data:post.oldestLinkUrl'>
<data:messages.oldest/>
</a>
<a expr:class='data:post.oldLinkClass' expr:href='data:post.olderLinkUrl'>
<data:messages.older/>
</a>
</b:if>

<span class='comment-range-text'>
<data:post.commentRangeText/>
</span>

<b:if cond='data:post.hasNewerLinks'>
<a expr:class='data:post.newLinkClass' expr:href='data:post.newerLinkUrl'>
<data:messages.newer/>
</a>
<a expr:class='data:post.newLinkClass' expr:href='data:post.newestLinkUrl'>
<data:messages.newest/>
</a>
</b:if>
</div>
</b:if>
0
Tim-Tam

Tim-Tam
blogger

Messages
21
Points
+1132

Reputation: 100%

New #159
sudah bisa, ternyata asik juga mainin b:include fokus ke homepage dulu.
oh iya saya coba copy code

<b:includable id='postTitle' var='post'>
<b:if cond='data:post.title != &quot;&quot;'>
<b:tag class='post-title entry-title' cond='data:view.isMultipleItems' name='h3'>
<b:tag class='post-title entry-title' cond='data:view.isPost' name='h1'>
<b:if cond='data:post.link or (data:post.url and data:view.url != data:post.url)'>
<b:include name='flag'/><a expr:href='data:post.link ?: data:post.url'><data:post.title/></a>
<b:else/>
<data:post.title/>
</b:if>
</b:tag>
</b:tag>
</b:if>
</b:includable>


yang ada di doujinread.
ternyata pas saya pake di tema sendiri postingan di homepage malah hilang. kenapa ya? apakah memang harus di setting juga b:include yang lain?
(1 balasan) 👋 #1 ❤️ Wernayasa ,
0
Tim-Tam

Tim-Tam
blogger

Messages
21
Points
+416

Reputation: 100%

New #161
udah mulai kebentuk.
buat ngatasin postingan bengkak akhirnya pake solusi json.
ngambil postingan dari blog ke 2 dan ternyata bisa fleksibel.
jadi tiap postingan novel punya postingan tunggal tidak perlu mikirin postingan chapter.
kalo ada yang tertarik sama jsnya nanti saya kasih reponya.

[Demo]
(1 balasan) 👋 #1 ❤️ Wernayasa ,
0
2201 – 2363 of 2363
Post a Comment
Forum rules
You can use English or Indonesian
Back to top Back to bottom