| Package Data | |
|---|---|
| Maintainer Username: | lord_of_freaks |
| Maintainer Contact: | alex311es@gmail.com (Alejandro Tabares) |
| Package Create Date: | 2016-01-27 |
| Package Last Update: | 2017-03-17 |
| Language: | ApacheConf |
| License: | MIT |
| Last Refreshed: | 2025-10-30 03:16:06 |
| Package Statistics | |
|---|---|
| Total Downloads: | 327 |
| Monthly Downloads: | 0 |
| Daily Downloads: | 0 |
| Total Stars: | 0 |
| Total Watchers: | 1 |
| Total Forks: | 0 |
| Total Open Issues: | 0 |
Puzzle is a simple static sites generator which also provides the oportunity to use REST endpoints for your forms (or any other type of endpoint you want to use).
Uses Jigsaw to provide a template engine as Laravel's Blade and compile the resources to a static site.
Uses Grunt to automate tasks providing an effortless development experience and optimal frontend.
Install Puzzle globally via Composer:
$ composer global require lordoffreaks/puzzle
Make sure
~/.composer/vendor/binis in your$PATH.
Initialize a new project:
$ puzzle init my-site
If you run into dependency conflicts when trying to install Puzzle globally, you can always install it locally on a per site basis.
Create a folder for your site:
$ mkdir my-site && cd my-site
Install Puzzle via Composer:
$ composer require lordoffreaks/puzzle
Initialize a new project in the current folder:
$ ./vendor/bin/puzzle init
Building a Puzzle site is exactly like building a static HTML site, except that files ending in .blade.php will be rendered using Laravel's Blade Templating Language.
Build out your site however you like in the /source directory. It might look something like this:
├─ source
│ ├─ _assets
│ ├─ _layouts
│ │ └─ master.blade.php
│ ├─ img
│ │ └─ logo.png
│ ├─ about-us.blade.php
│ └─ index.blade.php
└─ config.php
When you'd like to build it, run the build command from within your project root:
$ puzzle build
Your site will be built and placed in the /build_local directory by default.
Using the example structure above, you'd end up with something like this:
├─ build_local
│ ├─ about-us
│ │ └─ index.html
│ ├─ img
│ │ └─ logo.png
│ └─ index.html
├─ source
└─ config.php
To quickly preview it, start a local PHP server:
$ php -S localhost:8000/ -t build_local
One of the biggest benefits of a templating language is the ability to create reusable layouts.
Since it's important that a layout is never rendered on it's own, you need to be able to tell Jigsaw when a file shouldn't be rendered.
To prevent a file or folder from being rendered, simply prefix it with an underscore:
├─ source
│ ├─ _layouts
│ │ └─ master.blade.php # Not rendered
│ └─ index.blade.php # Rendered
└─ config.php
Anything you add to the array in config.php will be made available as a variable in your templates.
For example, if your config looks like this...
return [
'contact_email' => 'support@example.com',
];
...you can use that variable in your templates like so:
@extends('_layouts.master')
@section('content')
<p>Contact us at {{ $contact_email }}</p>
@stop
You might have certain configuration variables that need to be different in different environments, like a Google Analytics tracking ID for example.
Puzzle lets you specify a different configuration file for each environment to handle this.
To create an environment-specific config file, just stick your environment name in front of the file extension:
config.production.php
To build your site for a specific environment, use the --env option:
$ puzzle build --env=production
Each environment gets it's own build_* folder, so in this case your site will be placed in build_production.
Note: Environment-specific config files are merged with the base config file, so you don't have to repeat values that don't need to change.
Puzzle will automatically take any Blade files not named index and render them as index.html in a subfolder with the same name as the original file.
For example, if you have a file named about-us.blade.php in your source directory:
├─ source
├─ _layouts
├─ about-us.blade.php
└─ index.blade.php
...it will be rendered as index.html in the build/about-us directory:
├─ build_local
├─ about-us
│ └─ index.html
└─ index.html
If you need to disable this behavior, use the
--pretty=falseoption when building your site.