Generate per language RSS feed
This commit is contained in:
parent
832360f9b1
commit
3d22b4f1f9
|
@ -14,6 +14,7 @@ huge-kb
|
||||||
|
|
||||||
current.bench
|
current.bench
|
||||||
now.bench
|
now.bench
|
||||||
|
*.zst
|
||||||
|
|
||||||
# snapcraft artifacts
|
# snapcraft artifacts
|
||||||
snap/.snapcraft
|
snap/.snapcraft
|
||||||
|
|
|
@ -246,7 +246,7 @@ impl Config {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Is this site using i18n?
|
/// Is this site using i18n?
|
||||||
pub fn uses_i18n(&self) -> bool {
|
pub fn is_multilingual(&self) -> bool {
|
||||||
!self.languages.is_empty()
|
!self.languages.is_empty()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -109,7 +109,7 @@ impl FileInfo {
|
||||||
/// remove it and return the language code
|
/// remove it and return the language code
|
||||||
pub fn find_language(&mut self, config: &Config) -> Result<Option<String>> {
|
pub fn find_language(&mut self, config: &Config) -> Result<Option<String>> {
|
||||||
// No languages? Nothing to do
|
// No languages? Nothing to do
|
||||||
if !config.uses_i18n() {
|
if !config.is_multilingual() {
|
||||||
return Ok(None);
|
return Ok(None);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -511,9 +511,41 @@ impl Site {
|
||||||
self.render_sections()?;
|
self.render_sections()?;
|
||||||
self.render_orphan_pages()?;
|
self.render_orphan_pages()?;
|
||||||
self.render_sitemap()?;
|
self.render_sitemap()?;
|
||||||
|
|
||||||
if self.config.generate_rss {
|
if self.config.generate_rss {
|
||||||
self.render_rss_feed(self.library.pages_values(), None)?;
|
let pages = if self.config.is_multilingual() {
|
||||||
|
self.library
|
||||||
|
.pages_values()
|
||||||
|
.iter()
|
||||||
|
.filter(|p| p.lang.is_none())
|
||||||
|
.map(|p| *p)
|
||||||
|
.collect()
|
||||||
|
} else {
|
||||||
|
self.library.pages_values()
|
||||||
|
};
|
||||||
|
self.render_rss_feed(pages, None)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for lang in &self.config.languages {
|
||||||
|
if !lang.rss {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let pages = self
|
||||||
|
.library
|
||||||
|
.pages_values()
|
||||||
|
.iter()
|
||||||
|
.filter(|p| {
|
||||||
|
if let Some(ref l) = p.lang {
|
||||||
|
l == &lang.code
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.map(|p| *p)
|
||||||
|
.collect();
|
||||||
|
self.render_rss_feed(pages, Some(&PathBuf::from(lang.code.clone())))?;
|
||||||
|
}
|
||||||
|
|
||||||
self.render_404()?;
|
self.render_404()?;
|
||||||
self.render_robots()?;
|
self.render_robots()?;
|
||||||
self.render_taxonomies()?;
|
self.render_taxonomies()?;
|
||||||
|
|
|
@ -30,7 +30,7 @@ macro_rules! file_contains {
|
||||||
let mut file = std::fs::File::open(&path).unwrap();
|
let mut file = std::fs::File::open(&path).unwrap();
|
||||||
let mut s = String::new();
|
let mut s = String::new();
|
||||||
file.read_to_string(&mut s).unwrap();
|
file.read_to_string(&mut s).unwrap();
|
||||||
println!("{}", s);
|
// println!("{}", s);
|
||||||
s.contains($text)
|
s.contains($text)
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,8 +13,8 @@ fn can_parse_multilingual_site() {
|
||||||
let mut site = Site::new(&path, "config.toml").unwrap();
|
let mut site = Site::new(&path, "config.toml").unwrap();
|
||||||
site.load().unwrap();
|
site.load().unwrap();
|
||||||
|
|
||||||
assert_eq!(site.library.pages().len(), 9);
|
assert_eq!(site.library.pages().len(), 10);
|
||||||
assert_eq!(site.library.sections().len(), 4);
|
assert_eq!(site.library.sections().len(), 6);
|
||||||
|
|
||||||
// default index sections
|
// default index sections
|
||||||
let default_index_section =
|
let default_index_section =
|
||||||
|
@ -79,4 +79,15 @@ fn can_build_multilingual_site() {
|
||||||
assert!(file_exists!(public, "sitemap.xml"));
|
assert!(file_exists!(public, "sitemap.xml"));
|
||||||
assert!(file_contains!(public, "sitemap.xml", "https://example.com/blog/something-else/"));
|
assert!(file_contains!(public, "sitemap.xml", "https://example.com/blog/something-else/"));
|
||||||
assert!(file_contains!(public, "sitemap.xml", "https://example.com/fr/blog/something-else/"));
|
assert!(file_contains!(public, "sitemap.xml", "https://example.com/fr/blog/something-else/"));
|
||||||
|
assert!(file_contains!(public, "sitemap.xml", "https://example.com/it/blog/something-else/"));
|
||||||
|
|
||||||
|
// one rss per language
|
||||||
|
assert!(file_exists!(public, "rss.xml"));
|
||||||
|
assert!(file_contains!(public, "rss.xml", "https://example.com/blog/something-else/"));
|
||||||
|
assert!(!file_contains!(public, "rss.xml", "https://example.com/fr/blog/something-else/"));
|
||||||
|
assert!(file_exists!(public, "fr/rss.xml"));
|
||||||
|
assert!(!file_contains!(public, "fr/rss.xml", "https://example.com/blog/something-else/"));
|
||||||
|
assert!(file_contains!(public, "fr/rss.xml", "https://example.com/fr/blog/something-else/"));
|
||||||
|
// Italian doesn't have RSS enabled
|
||||||
|
assert!(!file_exists!(public, "it/rss.xml"));
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,8 +11,11 @@ highlight_code = false
|
||||||
# Whether to build a search index to be used later on by a JavaScript library
|
# Whether to build a search index to be used later on by a JavaScript library
|
||||||
build_search_index = false
|
build_search_index = false
|
||||||
|
|
||||||
|
generate_rss = true
|
||||||
|
|
||||||
languages = [
|
languages = [
|
||||||
{code = "fr"},
|
{code = "fr", rss = true},
|
||||||
|
{code = "it", rss = false},
|
||||||
]
|
]
|
||||||
|
|
||||||
[extra]
|
[extra]
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
+++
|
||||||
|
sort_by = "date"
|
||||||
|
insert_anchors = "right"
|
||||||
|
+++
|
|
@ -0,0 +1,7 @@
|
||||||
|
+++
|
||||||
|
title = "Un slug fixe"
|
||||||
|
slug = "something-else"
|
||||||
|
date = 2017-01-01
|
||||||
|
+++
|
||||||
|
|
||||||
|
Una pagina che definisce il suo slug nel front-matter
|
Loading…
Reference in New Issue