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这个插件每次都强制把注释去掉,这个真无法接受,也无法理解

Post Comment