Theme Development: Building Your Own PolyCMS Theme

Theme Development: Building Your Own PolyCMS Theme

The PolyCMS Theme Engine

PolyCMS separates content from presentation. Themes reside in the modules/polycms/themes/ directory. Creating a custom theme ensures your blog perfectly matches your brand identity.

Step 1: Theme Directory & Metadata

Create a new folder: modules/polycms/themes/my-theme. Inside, create a theme.json file so the system recognizes it:

{
    "name": "My Custom Theme",
    "slug": "my-theme",
    "description": "A minimal, fast-loading PolyCMS theme.",
    "version": "1.0.0",
    "author": "Your Company",
    "author_uri": "https://yourcompany.com"
}

Step 2: The Homepage (homepage.php)

This file renders your blog's main index. Here is a complete, minimal example:

<?php defined('BASEPATH') or exit('No direct script access allowed'); ?>
<!DOCTYPE html>
<html>
<head>
    <title><?php echo get_option('companyname'); ?> Blog</title>
    <?php polycms_head(); ?>
</head>
<body class="<?php echo polycms_body_class(); ?>">
    <header>
        <h1>Welcome to Our Blog</h1>
    </header>

    <main>
        <?php if (!empty($posts)): ?>
            <?php foreach ($posts as $post): ?>
                <article>
                    <h2><a href="<?php echo polycms_get_post_permalink($post); ?>"><?php echo html_escape($post->title); ?></a></h2>
                    <div class="excerpt"><?php echo $post->description; ?></div>
                </article>
            </?php endforeach; ?>
        <?php else: ?>
            <p>No posts found.</p>
        <?php endif; ?>
    </main>

    <?php polycms_footer(); ?>
</body>
</html>

Step 3: The Single Post Layout (single.php)

When a user clicks on an article, they are routed to single.php:

<?php defined('BASEPATH') or exit('No direct script access allowed'); ?>
<!DOCTYPE html>
<html>
<head>
    <title><?php echo html_escape($post->title); ?></title>
    <?php polycms_head(); ?>
</head>
<body>
    <article class="single-post">
        <h1><?php echo html_escape($post->title); ?></h1>
        <div class="meta">
            Published on <?php echo polycms_format_date($post->published_at); ?>
        </div>
        
        <div class="content">
            <?php echo $post->content; ?>
        </div>
    </article>
    
    <?php polycms_footer(); ?>
</body>
</html>

Go to PolyCMS -> Themes and you will see "My Custom Theme" ready to be activated!


* This is demo data for PolyCMS module for Perfex CRM to help customers explore features. If your business uses Perfex CRM and needs customizations or enhancements for integrated plugins/themes, you can leave feedback on Envato (CodeCanyon) while having active support time. Useful and suitable features will be received, integrated and updated. Explore full official docs: https://headrandom.com/oX3Im6fx