From d4d18238078570c83d02d671bb563ce45cc9b87f Mon Sep 17 00:00:00 2001 From: Dan Kleine Date: Fri, 18 Oct 2024 22:51:33 +0200 Subject: [PATCH] feat: Docs: Remove dead links and amp up the guide This project is still linked in many static site lists and stared by many people. It's old and has it's quirks (see https://stitcher.io/blog/a-simple-approach-to-static-generation), but it's working fine and still easier to set up than many competing projects. So a little upgrade to the docs - removing dead links, add sidenotes, explain some files - is probably okay. --- README.md | 79 ++++++++++++++++++++++++++++------------ src/data/guide.md | 80 +++++++++++++++++++++++------------------ src/img/screenshot.png | Bin 0 -> 29386 bytes src/template/home.tpl | 6 ++-- src/template/index.tpl | 5 +-- 5 files changed, 108 insertions(+), 62 deletions(-) create mode 100644 src/img/screenshot.png diff --git a/README.md b/README.md index 29fbbc6..3a52a71 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,26 @@ -[![Build Status](https://scrutinizer-ci.com/g/brendt/stitcher/badges/build.png?b=master)](https://scrutinizer-ci.com/g/brendt/stitcher/build-status/master) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/brendt/stitcher/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/brendt/stitcher/?branch=master) - # Stitcher -High performance, static websites for PHP developers. +**High performance, static websites for PHP developers.** -```bash -composer create-project pageon/stitcher -``` +![Screenshot](src/img/screenshot.png) + +Stitcher sites utilize a simple concept that allows PHP developers to quickly publish a structured website or blog. +**Data entries** are mapped onto **templates** and “stitched” together via a **config file**. + +Data entries can be provided in many ways: +JSON or YAML files, MarkDown files, images, SASS or CSS, JavaScript, folders and more. -### Why Stitcher? +Templates may use Twig or Smarty to output a desired HTML markup. -Stitcher differs from many other static site generator in two areas. First of all: **performance is key**. Stitcher is built from its core for high performance websites. All tools available to you put performance on the first place. Secondly, it doesn't try to add extra syntax to existing formats. Stitcher provides a robust set of tools **for developers** to build with, and not a lot of hacks so everything fits in one file. +And the config file: well, it's a small YAML. + +## Why Stitcher? + +Stitcher differs from many other static site generators in two areas. +First of all: **performance is key**. Stitcher is built from its core for high performance websites. +All tools available to you put performance on the first place. +Secondly, it doesn't try to add extra syntax to existing formats. Stitcher provides a robust set of tools +**for developers** to build with, and not a lot of hacks so everything fits in one file. Also important to note, included with Stitcher: @@ -22,8 +32,22 @@ Also important to note, included with Stitcher: - Built-in SASS support - JavaScript and CSS minification - Built-in SEO and meta tag optimizations +- CLI to run common actions + +## Setup + +```bash +composer create-project pageon/stitcher +``` + +For development purposes you may run the internal PHP server and point it to the `/dev` directory. +You should see an introduction guide and example blog files. + +## Quick Guide -A quick look at Stitcher: +A quick look at Stitcher. + +The site config defines template and data source files for different routes. This is a minimal blog setup: ```yaml # site.yml @@ -43,6 +67,9 @@ A quick look at Stitcher: field: id ``` +Each blog post could come from different content sources, which are listed in data files. +Metadata is stored here as well. + ```yaml # data/blog.yml @@ -61,6 +88,18 @@ foo_bar: image: foo_bar.jpg ``` +One blog post, in this example it's just a MarkDown file. + +```markdown +# data/blog/hello.md + +# Hello World + +This is a **MarkDown** file. That's it. +``` + +And finally, a template to render a single post: + ```html @@ -79,21 +118,17 @@ foo_bar: {% endblock %} ``` +The [full documentation](src/data/guide.md) is shown when you run the project in a server. -You can read more about it on [the Stitcher website](http://stitcher.pageon.be). - -### Upcoming features +## Examples -Stitcher is in alpha development, so new features are still being made. Here's a list of what's to come before a stable v1 release: +This project is used, with some rather strong modifications, on [stitcher.io](https://stitcher.io), +the source code for this blog is available at [github.com/brendt/stitcher.io](https://github.com/brendt/stitcher.io). -- Plugin support -- Theme support +## Development -Also, we're already thinking about the farther future: +The core library is maintained in [github.com/pageon/stitcher-core](https://github.com/pageon/stitcher-core). -- Localisation -- URL generation -- CLI Configuration and setup -- site:deploy command -- Frontend Filters -- Form support with Lumen/Slim +This project was created mainly for personal usage. It's in maintenance mode only. +The project [fades out](https://stitcher.io/blog/a-simple-approach-to-static-generation) and +will be replaced with another framework eventually. diff --git a/src/data/guide.md b/src/data/guide.md index 81761d4..a25e81e 100644 --- a/src/data/guide.md +++ b/src/data/guide.md @@ -1,17 +1,31 @@ +# Guide + +## Building a site with Stitcher + +Stitcher sites utilize a simple concept that allows PHP developers to quickly publish a structured website or blog. +**Data entries** are mapped onto **templates** and “stitched” together via a **config file**. + +The goal is simple: create blazing fast websites. Stitcher will parse all your templates into static HTML pages, +will parse and minify CSS and JavaScript, will optimize images using ``srcset`` and provides useful developer tools +to aid you in setting things up smoothly. + ## Installation -```sh -composer create-project brendt/stitcher-site +When you read this guide you probably have set up the project already. If not, run + +```bash +composer create-project pageon/stitcher ``` -## Building a site with Stitcher +For development purposes you may run the internal PHP server and point it to the `/dev` directory. + +```bash +php -S localhost:80 -t dev/ +``` -Stitcher sites can be built by anyone with basic HTML knowledge: **data entries** are mapped onto **templates** which are accessible via **a URL**. -These two components (entries and templates) are mapped - *stitched* - together via a **config file**. Data entries can be provided in many ways: -JSON or YAML files, MarkDown files, images, SASS or CSS, JavaScript, folders and more. +See »Host setup« to find out how to set up different hosts for development and production. -The goal is simple: create blazing fast websites. Stitcher will parse all your templates into static HTML pages, will parse and minify CSS and JavaScript, - will optimize images using ``srcset`` and provides useful developer tools to aid you in setting things up smoothly. +## File setup ### site.yml @@ -48,15 +62,15 @@ The ``site.yml`` file, located in the ``src/site`` directory is used to stitch t ``` The ``template`` key is required and provides a path to the required template for this page. - The ``data`` key isn't required. It takes a collection of variable names (these will be accessible in the template as variables). - Each variable will need to be loaded. You can either provide a path to a data file (loaded from ``src/data`` by default), - or you can provide a collection with a `src` and `id` key. This approach will generate detail pages from a collection of data entries. +The ``data`` key isn't required. It takes a collection of variable names (these will be accessible in the template as variables). +Each variable will need to be loaded. You can either provide a path to a data file (loaded from ``src/data`` by default), +or you can provide a collection with a `src` and `id` key. This approach will generate detail pages from a collection of data entries. ### Data entries Data entries can be provided in many formats: JSON, YAML, MarkDown, image, folder, ... Examples can be found after running the `site:install` command. - A data file can either contain data of a single entry, or contain a collection of multiple entries. In the second case, when using JSON or YAML files, - An extra root key `entries` is required. +A data file can either contain data of a single entry, or contain a collection of multiple entries. In the second case, when using JSON or YAML files, +An extra root key `entries` is required. ```yaml entries: @@ -79,8 +93,7 @@ See the `src/data` folder files for a more thorough reference. ### Templates -At this moment, Stitcher only supports Smarty as a template engine. Support for more engines will be added in the future. - In a template, all functionality of the engine is available, and all variables provided in `site.yml` are available. +In a template, all functionality of the engine is available, and all variables provided in `site.yml` are available. ```html {extends 'index.tpl'} @@ -98,7 +111,12 @@ At this moment, Stitcher only supports Smarty as a template engine. Support for {/block} ``` -### Helpers +### Config + +The `config.yml` file provides some configuration options, to set directory paths, image rendering config, meta config and minification options. +See the config file for more information. + +## Helpers Stitcher provides some helper functions in aid of creating fast websites. @@ -128,12 +146,11 @@ Stitcher provides some helper functions in aid of creating fast websites. ``` -### Config +## Commands -The `config.yml` file provides some configuration options, to set directory paths, image rendering config, meta config and minification options. - See the config file for more information. +Stitcher offers a command line script to run some static site actions. -### Commands +Run `./stitcher` to see the list of available commands and options. Some of them are: - `site:install`: Copy a base install example. - `site:generate [url]`: Generate the whole site, or a specific URL from `sites.yml`. @@ -141,17 +158,11 @@ The `config.yml` file provides some configuration options, to set directory path - `router:list`: List all available URLs from `sites.yml`. - `router:dispatch url`: Debug a specified URL. -### Developer controller - -The developer controller can be used to generate a single URL on-the-fly. Thus enabling a developer to make changes to data entries, configs or templates; and see these changes in real-time, without the need of manually generating the website again. +## Host setup -It's obvious that this approach takes a bit more rendering time, so web pages will be slower. +Stitcher requires at least one virtual host, two if you'd want to use the development mode. -### Host setup - -Stitcher requires at least one virtual host, two if you'd want to use the developers controller. - -**production** +**Production** ```xml @@ -167,7 +178,7 @@ Stitcher requires at least one virtual host, two if you'd want to use the develo ``` -**development** +**Development** ```xml @@ -183,9 +194,8 @@ Stitcher requires at least one virtual host, two if you'd want to use the develo ``` -Don't forget to add a local host in ``/ets/hosts``. +The development mode can be used to generate a single URL on-the-fly. -``` -127.0.0.1 stitcher.local -127.0.0.1 dev.stitcher.local -``` +Thus enabling developers to make changes to data entries, configs or templates +and see these changes in real-time, without the need of manually generating the website again. +It's obvious that this approach takes a bit more rendering time, so web pages will be slower. diff --git a/src/img/screenshot.png b/src/img/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..534bfa9fcc1b4dff7efbf9a46ba70f55b9dbc6c4 GIT binary patch literal 29386 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 TZVxuK^^KIcyjZn}LC}8#=4dRe literal 0 HcmV?d00001 diff --git a/src/template/home.tpl b/src/template/home.tpl index fe666a8..6cc2e5c 100644 --- a/src/template/home.tpl +++ b/src/template/home.tpl @@ -12,13 +12,13 @@ Welcome to Stitcher

- a tool to create blazing fast websites. + High performance, static websites for PHP developers.

{/block} diff --git a/src/template/index.tpl b/src/template/index.tpl index a9aec2c..5486b35 100644 --- a/src/template/index.tpl +++ b/src/template/index.tpl @@ -1,7 +1,7 @@ {block 'head'} - Stitcher 1.0 + Stitcher {meta} {css src="main.scss" inline=true} {/block} @@ -12,7 +12,8 @@
{/block}