Astro动态路由层级需要注意的问题
注意:仅针对SSG模式
以这样的路由目录结构为例:
pages ----[lang] --------[category] ------------[page].astro
如果以这样的嵌套循环是无法传入params参数的,需要注意。
const categories: string[] = [];
const languages: string[] = [];
responseArticles.data.forEach(p => {
//categories
const cat: string = p.category.slug ?? '';
if(cat.length == 0){
console.log('No categories found', p.slug);
}
if (!categories.includes(cat)) {
categories.push(cat);
}
//languages
p.translations.forEach(t => {
if(t.languages_code && !languages.includes(t)){
languages.push(t.languages_code);
}
})
});
return languages.map(l => {
categories.forEach(c => {
const filtered = responseArticles.data.filter(p =>{
const cat: string = p.category.slug ?? '';
const lang: string = p.translations.find(item => item.languages_code === l).languages_code ?? '';
return (cat && lang);
console.log(p)
});
return paginate(filtered, {
params: { lang: l, category: c },
props: { filtered },
pageSize: 2,
}
);
});
});正确的打开方式是把第一层languages单独放入一个目录,所以这也是为什么Astro i18n的方案都是生成出各级语言的目录的原因,个人使用下来感受还是官网的方案最靠谱,其它两个社区插件astro-i18next以及astro-i18n都多少有点问题,而且每次都要用命令生成更新语言目录,更为可怕的是i18next这个插件每次都强制把注释去掉,这个真无法接受,也无法理解