Keep your site. Add the CMS.
Total CMS does not need to own your website. Drop it into the pages you already have, design in the web builder you already use, let Site Builder render everything, or run it headless — the content lives in one place either way.
<?php
require_once __DIR__ . '/../vendor/autoload.php';
$totalcms = new TotalCMS\TotalCMS();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>{{ cms.text('sitetitle') }}</title>
{{ cms.assetsHead() }}
</head>
<body>
<!-- Your existing markup stays exactly as it is -->
{% for post in cms.collection.objects('blog') | slice(0, 3) %}
<article>
<h2>{{ post.title }}</h2>
<p>{{ post.summary | striptags | truncate(150) }}</p>
</article>
{% endfor %}
{{ cms.assetsBody() }}
</body>
</html>
<?php echo $totalcms->processBufferMacros(); ?>
Most content management systems arrive as the website. Their router answers every request, their theme system renders every page, and your choice is to build inside them or to go headless and run a second application in front. Total CMS is built the other way round: it manages the content, and the front end is yours to choose.
There are four ways in, and a site can mix them.
- Inside pages you already have. Initialize Total CMS at the top of any PHP file, write your HTML exactly as before with Twig tags where the content belongs, and call
processBufferMacros()at the end. Your markup, your CSS, your URLs. Total CMS renders the tags and leaves everything else alone. - In the web builder you already use. Design in Stacks, Pinegrow, Bootstrap Studio or anything else that outputs HTML, then mark the parts your client should edit with Total CMS tags. The layout you built is the layout that ships. Stacks goes a step further, with dedicated stacks for every content type and deployment built in. See every supported design tool.
- With Site Builder. When you would rather Total CMS render the whole site, Site Builder routes pages and renders Twig templates with no build step.
- Headless. The REST API reads and writes on every edition for same-origin requests; Pro adds API keys so a separate front end or service can authenticate.
The practical upshot is that adopting Total CMS is not a rebuild. A hand-coded site can gain an editable blog on one page this afternoon and leave the other twenty untouched. A site from your visual builder keeps its design. A team with a JavaScript front end keeps it and points it at the API.
It also means the decision is reversible in both directions. The content sits in plain JSON files on your server, and the front end was never tied to the CMS in the first place. Change how the site is built and the content does not have to move.
At a glance
What you get
- Twig inside your own pages
- Initialize Total CMS at the top of a PHP file, write your HTML as usual, and Twig tags render where the content goes. No theme to adopt, no routing taken over.
- Any web builder
- Design in Stacks, Pinegrow, Bootstrap Studio or anything that outputs HTML, then mark what your client edits. Stacks adds dedicated stacks for every content type.
- Or the whole site
- Site Builder routes pages and renders Twig templates when you want Total CMS to handle the front end too, with nothing to build or deploy.
- Headless when you need it
- The REST API reads and writes on every edition for same-origin requests. Pro adds API keys for external front ends and services.
Works with any front end
Common questions
Do I have to rebuild my site to use Total CMS?
No. Initialize Total CMS at the top of any PHP page and add Twig tags where the content should appear. The rest of the page — markup, styles, URLs — stays as it is, so you can add a CMS to one page at a time.
Can I use Total CMS with a JavaScript framework?
Yes, through the REST API. It reads and writes on every edition for same-origin requests; Pro adds API keys so a front end or service on another origin can authenticate.
What does my page need to run?
A PHP file on the same server as your Total CMS install, which needs PHP 8.2 or later. A plain .html page becomes a Total CMS page by renaming it to .php and adding the initialization line at the top and the render call at the end.
Try it on a site of your own.
45 days, every Pro feature, no credit card. Build it, hand it to a client, and see what they can and can’t touch.