Skip to content

Instantly share code, notes, and snippets.

@elvisoliveira
Last active January 15, 2025 10:28
Show Gist options
  • Select an option

  • Save elvisoliveira/2d59df7a67c72fdc43125dfb84247df8 to your computer and use it in GitHub Desktop.

Select an option

Save elvisoliveira/2d59df7a67c72fdc43125dfb84247df8 to your computer and use it in GitHub Desktop.

Using PHP and Twig as a Static Site Generator

In the world of static site generators, there are numerous tools that help you create static websites with little to no server-side processing. However, sometimes a simple and lightweight solution is all you need. This is where using PHP and Twig as a static site generator comes in. Although it may seem like a bit of a hack, it’s a viable option for simple projects that don’t require a large or diverse content management system.

Why PHP and Twig?

When building static websites, the main goal is usually to serve pre-rendered content that is fast and easy to deploy. PHP, a well-known server-side scripting language, has built-in functionalities that make it an excellent tool for quickly processing data and rendering templates. Twig, on the other hand, is a flexible and powerful template engine that integrates seamlessly with PHP.

By using PHP's built-in features, you can fetch and parse payloads that will serve as the general-purpose data for the site. This could include things like configuration parameters, internationalization (i18n) strings, and other variables that your templates can use.

Here’s how I approached using PHP and Twig together as a static site generator.

The Process

The process begins by using PHP to fetch and parse the necessary data. This can include things like:

  • Configuration parameters – for settings like themes, layout options, etc.
  • Internationalization (i18n) strings – for multiple language support.
  • Content data – from various sources like JSON, YAML, or even simple text files.

Once the data is parsed, the next step is to initialize the Twig environment. Twig will be used as the templating engine to render the content into the final HTML files.

Initializing the Twig Environment

You’ll start by installing Twig via Composer (if you haven’t already):

composer require "twig/twig:^3.0"

Then, you can initialize the Twig environment with the parsed data:

<?php

require_once '/path/to/vendor/autoload.php';

// Configure Twig
$loader = new \Twig\Loader\FilesystemLoader('/path/to/templates');
$twig = new \Twig\Environment($loader);

// Parse data (i.e., config, i18n, etc.)
$data = [
    'title' => 'My Static Website',
    'content' => 'Welcome to my simple site!',
    'i18n' => [
        'en' => 'Hello!',
        'es' => '¡Hola!',
    ]
];

// Render template with the data
echo $twig->render('index.twig', $data);

This PHP script will load your templates, apply the data, and render the final output.

Using CLI for Static Site Generation

Now that you have your PHP script ready to generate the static content, it’s time to automate the process. The most convenient way to do this is by using Composer's script commands, which allow you to execute PHP commands via the command line.

In your composer.json, add a script for static site generation:

{
    "scripts": {
        "generate": "php generate.php"
    }
}

Now, you can generate your static site by simply running:

composer generate

This will invoke the PHP script, fetch the necessary data, parse it, and render the final HTML files using Twig templates.

Benefits of This Approach

  1. Simplicity: For small projects that don’t require complex CMS systems, this approach is simple to set up and maintain.
  2. No Overhead: You don’t need to rely on third-party static site generators or complex build processes.
  3. Flexibility: You have full control over the data parsing and template rendering, making it easy to adjust and extend as your project grows.

Drawbacks to Consider

  1. Limited Content Management: While this approach works great for simple sites, it doesn’t have the built-in content management features of more advanced static site generators or CMS platforms.
  2. Manual Handling of Updates: You’ll need to manually update the PHP script whenever new data sources or configuration changes are needed.
  3. Scalability: If your project grows in size and complexity, this approach may not be suitable for handling large-scale websites or extensive content management.

Conclusion

Using PHP and Twig as a static site generator is an unconventional but useful method for simple static websites. It’s a perfect solution for small projects that don’t require heavy content management or the overhead of complex tools. With PHP handling the data parsing and Twig rendering the templates, you get a flexible and lightweight static site generator that’s easy to set up and maintain.

If you’re looking for an easy way to generate static sites with a little bit of custom logic, PHP and Twig might be the perfect fit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment