NAME
Statocles::Help::Content - How to use Statocles to write content
DESCRIPTION
This guide describes how to use the statocles command to manage site content, build, test, and deploy the site.
BASIC CONTENT
Run an App Command
Every application in a Statocles site has a name. The name is the key in the site object's apps
attribute in the site.yml config file. We can use that name to access the app's command-line commands.
Not all applications have or need commands. See the application documentation for more information.
Create a Blog Post
To create a new blog post using the blog app, we can use the post
command:
$ statocles blog post Snickerdoodles
New post at: blog/2014/06/04/snickerdoodles
Everything after post
will be used as the title of the post.
If you have the EDITOR
environment variable set, your editor will automatically open on the newly-created document.
Create a Page
To create a page using the basic app, we just have to create a new file:
### Create /page/index.html
$ vim page/index.markdown
### Create /page/about/index.html
$ mkdir page/about
$ vim page/about/index.markdown
### Create /page/resume.html
$ vim page/resume.markdown
Frontmatter
Statocles documents start out with a block of YAML, called the frontmatter. This header holds metadata about the document, such as the title, author, date, tags, and other information.
---
title: Snickerdoodles
author: preaction
tags: cookies, cinnamon
---
Frontmatter is optional, but it's recommended that you have at least a title. Available frontmatter options are listed in the Statocles::Document attributes documentation.
Markdown
Below the frontmatter, after the second ---
, everything is Markdown, a simple, text-based language that will be generated into HTML.
# Snickerdoodles
Snickerdoodles are a simple, chewy, cinnamon cookie.
## Ingredients
* 1/2 c butter
* 1 c sugar
This will be parsed into
<h1>Snickerdoodles</h1>
<p>Snickerdoodles are a simple, chewy, cinnamon cookie.</p>
<h2>Ingredients</h2>
<ul>
<li>1/2 c butter</li>
<li>1 c sugar</li>
</ul>
Markdown has some simple formatting for basic things. For more advanced needs, you can embed raw HTML directly. See the Markdown website for full documentation on Markdown syntax.
Build The Site
$ statocles build
Running the build
command will write all our pages to the .statocles-build
directory. We can open up this directory and look at the files to make sure that our deploy will be correct.
Test The Site
$ statocles daemon
Listening on http://*:3000
Run the daemon
command to start an HTTP server to view your built site. This will automatically build the site, so if you forgot to run build
, don't worry.
If you edit any content, running build
again will update the site. On Mac OS X, editing any content will automatically rebuild the site.
Commit Your Changes
$ git add blog/2014/06/04/my-first-post.markdown
$ git commit -m'My first post'
Once the build looks good, we'll want to commit our changes. The major feature of having a website in a git repository is change tracking.
Deploy The Site
$ statocles deploy
Running the deploy
command will, in the case of the Git deploy, commit the updated pages to the Git repository. deploy
will try to do a git push
automatically, so your changes are now live on Github Pages!
ADVANCED FEATURES
Most of the content in a Statocles site consists of documents. This section explains some of the options available when writing documents.
Content Sections
After the frontmatter, you can use ---
to divide the document into sections. This may have meaning for an app. For example, the blog app shows only the first content section on the index page, tag pages, and feeds, hiding the rest of the post behind a "Continue reading" link.
---
title: My Long Post
---
# A Long Post
This is a long post. Since I don't want you to have to skip past all the content,
I will instead put a "Read more" link below.
---
Turns out this isn't that long of a post. Made you click!
Custom Template and Layout
Every document can have its own custom template and layout. This allows you to have multiple kinds of posts in a blog, or additional customization for particular pages.
You can specify a custom template or layout by using the template
or layout
key in the frontmatter:
---
title: Chocolate-Chip Cookies
template: document/recipe.html
---
# Chocolate-Chip Cookies
This is really the best cookie ever!
When the page is created, the document/recipe.html.ep
template will be read from the theme directory.
Generated Content
All documents are also run through the template processor, so we have access to template helpers, but we can also generate our content from the document's frontmatter data.
---
title: Cheddar Cheese Sauce
data:
ingredients:
- 1 tbsp flour
- 1 tbsp butter
- 1 c milk
- 2 c cheddar cheese
---
% for my $ingredient ( @{ $self->data->{ingredients} } ) {
* <%= $ingredient %></li>
% }
Since this template is generated before the Markdown is parsed, you can generate HTML or Markdown from your template.
When the content is being generated, you have access to the following variables:
$self
- The current document object$site
- The current site object$app
- The current app object
Helper Functions
Like the theme's templates, the document has access to the theme's helper functions, like the Highlight plugin:
---
title: How to use Perl
---
Here is the basic `Hello, World!` in Perl:
%= highlight Perl => begin
print "Hello, World!\n";
% end
Don't forget to add the plugin to your configuration!
SEE ALSO
- Statocles::Document
-
These objects are created from document files.