Merge branch 'redirect' of https://github.com/rozza/hugo into rozza-redirect

Conflicts:
	hugolib/page.go
This commit is contained in:
spf13 2013-08-10 14:08:38 +01:00
commit 45ce6e2b30
6 changed files with 79 additions and 6 deletions

View file

@ -4,8 +4,8 @@ date = "2013-07-01"
+++ +++
The front matter is one of the features that gives Hugo it's strength. It enables The front matter is one of the features that gives Hugo it's strength. It enables
you to include the meta data of the content right with it. Hugo supports a few you to include the meta data of the content right with it. Hugo supports a few
different formats each with their own identifying tokens. different formats each with their own identifying tokens.
Supported formats: <br> Supported formats: <br>
**YAML**, identified by '\-\-\-'. <br> **YAML**, identified by '\-\-\-'. <br>
@ -24,7 +24,7 @@ Supported formats: <br>
- "VIM" - "VIM"
slug: "spf13-vim-3-0-release-and-new-website" slug: "spf13-vim-3-0-release-and-new-website"
--- ---
Content of the file goes Here Content of the file goes Here
### TOML Example ### TOML Example
@ -39,7 +39,7 @@ Supported formats: <br>
] ]
slug = "spf13-vim-3-0-release-and-new-website" slug = "spf13-vim-3-0-release-and-new-website"
+++ +++
Content of the file goes Here Content of the file goes Here
### JSON Example ### JSON Example
@ -54,7 +54,7 @@ Supported formats: <br>
], ],
"slug": "spf13-vim-3-0-release-and-new-website", "slug": "spf13-vim-3-0-release-and-new-website",
} }
Content of the file goes Here Content of the file goes Here
### Variables ### Variables
@ -71,6 +71,7 @@ any variable they want to. These will be placed into the `.Params` variable avai
#### Optional #### Optional
**redirect** Mark the post as a redirect post<br>
**draft** If true the content will not be rendered unless `hugo` is called with -d<br> **draft** If true the content will not be rendered unless `hugo` is called with -d<br>
**type** The type of the content (will be derived from the directory automatically if unset).<br> **type** The type of the content (will be derived from the directory automatically if unset).<br>
**markup** (Experimental) Specify "rst" for reStructuredText (requires **markup** (Experimental) Specify "rst" for reStructuredText (requires

View file

@ -0,0 +1,37 @@
---
title: "Redirects"
Pubdate: "2013-07-09"
---
For people migrating existing published content to Hugo theres a good chance
you need a mechanism to handle redirecting old urls.
Luckily, this can be handled easily in a couple of easy steps.
1. Create a special post for the redirect and mark the file as a `redirect`
file in the front matter. Here is an example
`content/redirects/my-awesome-blog-post.md` :
```markdown
---
redirect: true
slug: /my-awesome-blog-post/
url: /docs/redirects/
---
```
2. Set the redirect template `layouts/redirects/single.html`:
```html
<!DOCTYPE html>
<html>
<head>
<link rel="canonical" href="{{ .Url }}"/>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="refresh" content="0;url={{ .Url }}" />
</head>
</html>
```
Now when you go to `/my-awesome-blog-post/` it will do a meta redirect to
`/docs/redirects/`.

View file

@ -0,0 +1,5 @@
---
redirect: true
slug: /my-awesome-blog-post/
url: /docs/redirects1/
---

View file

@ -19,6 +19,7 @@
<li class="nav-header">Extras</li> <li class="nav-header">Extras</li>
<li> <a href="/doc/shortcodes">ShortCodes</a></li> <li> <a href="/doc/shortcodes">ShortCodes</a></li>
<li> <a href="/doc/indexes">Indexes</a></li> <li> <a href="/doc/indexes">Indexes</a></li>
<li> <a href="/doc/redirects">Redirects</a></li>
<li class="divider"></li> <li class="divider"></li>
<li class="nav-header">Meta</li> <li class="nav-header">Meta</li>
<li> <a href="/doc/release-notes">Release Notes</a></li> <li> <a href="/doc/release-notes">Release Notes</a></li>

View file

@ -0,0 +1,8 @@
<!DOCTYPE html>
<html>
<head>
<link rel="canonical" href="{{ .Url }}"/>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="refresh" content="0;url={{ .Url }}" />
</head>
</html>

View file

@ -46,6 +46,7 @@ type Page struct {
RenderedContent *bytes.Buffer RenderedContent *bytes.Buffer
contentType string contentType string
Draft bool Draft bool
Aliases []string
Tmpl *template.Template Tmpl *template.Template
Markup string Markup string
PageMeta PageMeta
@ -98,16 +99,28 @@ func (p *Page) setSection() {
return return
} }
//section := x[len(x)-2]
if section := x[len(x)-2]; section != "content" { if section := x[len(x)-2]; section != "content" {
p.Section = section p.Section = section
} }
//c := p.Site.Config
//systemDirs := map[string]bool{
//c.ContentDir: true,
//c.StaticDir: true,
//c.LayoutDir: true,
//}
//if !systemDirs[section] && !p.Redirect {
//p.Section = section
//}
} }
func (page *Page) Type() string { func (page *Page) Type() string {
if page.contentType != "" { if page.contentType != "" {
return page.contentType return page.contentType
} }
page.setSection()
if x := page.GetSection(); x != "" { if x := page.GetSection(); x != "" {
return x return x
} }
@ -151,6 +164,7 @@ func ReadFrom(buf io.Reader, name string) (page *Page, err error) {
// TODO initalize separately... load from reader (file, or []byte) // TODO initalize separately... load from reader (file, or []byte)
func NewPage(filename string) *Page { func NewPage(filename string) *Page {
p := initializePage(filename) p := initializePage(filename)
if err := p.buildPageFromFile(); err != nil { if err := p.buildPageFromFile(); err != nil {
fmt.Println(err) fmt.Println(err)
} }
@ -264,6 +278,13 @@ func (page *Page) update(f interface{}) error {
page.layout = interfaceToString(v) page.layout = interfaceToString(v)
case "markup": case "markup":
page.Markup = interfaceToString(v) page.Markup = interfaceToString(v)
case "aliases":
page.Aliases = interfaceArrayToStringArray(v)
for _, alias := range page.Aliases {
if strings.HasPrefix(alias, "http://") || strings.HasPrefix(alias, "https://") {
return fmt.Errorf("Only relative aliases are supported, %v provided", alias)
}
}
case "status": case "status":
page.Status = interfaceToString(v) page.Status = interfaceToString(v)
default: default: