Skip to content

andrexm/zerd-cms

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

250 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📚 Zerd CMS - A CodeIgniter 4 CMS

Table of Contents

  1. Overview
  2. Features
  3. System Requirements
  4. Installation Guide
  5. Configuration
  6. Directory Structure
  7. User Guide
  8. Admin Panel Guide
  9. Content Management
  10. User Management
  11. Comments System
  12. Media Gallery
  13. Backup System
  14. Search Functionality
  15. Analytics Dashboard
  16. Sitemap Generator
  17. Settings & Configuration
  18. API Documentation
  19. Security Features
  20. Multilingual Support
  21. Troubleshooting
  22. Contributing
  23. License

Overview

A powerful, enterprise-grade Content Management System built with CodeIgniter 4. This CMS provides a complete solution for managing websites, blogs, and online content with a modern admin interface, comprehensive features, and robust security.

Key Highlights

  • 🚀 Built on CodeIgniter 4 - Fast, secure, and lightweight framework

  • 🎨 Modern Admin Interface - Responsive, intuitive, and user-friendly

  • 🔐 Role-Based Access Control - Admin, Editor, Author, Subscriber roles

  • 📱 Mobile-First Design - Works perfectly on all devices

  • 🌐 SEO Optimized - Built-in SEO tools and sitemap generator

  • 🔒 Enterprise Security - CSRF, XSS protection, SQL injection prevention

  • 📊 Advanced Analytics - Real-time statistics and insights

  • 💾 Automated Backups - Database and file backup with cloud storage

  • 🔍 Powerful Search - Full-text search with indexing

  • 🖼️ Media Gallery - Drag-and-drop image management with Quill.js integration

  • 🌎 Multilingual - Built-in support for English and Portuguese (Brazil)


Features

Core Features

Feature Description
User Management Complete user authentication with registration, login, password reset
Role-Based Access Admin, Editor, Author, Subscriber with granular permissions
Post Management Create, edit, delete, and publish posts with Quill.js rich editor
Category System Hierarchical categories with unlimited nesting
Comments System Threaded comments with moderation and spam protection
Media Gallery Drag-and-drop image upload with gallery picker for posts
Search Engine Full-text search with auto-complete and advanced filters
Backup Manager Automated database and file backups with cloud storage
Analytics Dashboard Real-time statistics with interactive charts
Sitemap Generator XML sitemaps with auto-ping to search engines
SEO Tools Meta tags, friendly URLs, robots.txt management
Settings Manager Centralized configuration for all site settings
Multilingual Built-in English and Portuguese (Brazil) support

Advanced Features

  • 📊 Real-time Analytics - Traffic sources, device breakdown, user engagement

  • 🔄 Automated Backups - Schedule backups with retention policies

  • ☁️ Cloud Storage - FTP, SFTP, S3, Dropbox, Google Drive support

  • 📱 Responsive Design - Works on desktop, tablet, and mobile

  • 🔍 Advanced Search - Filter by date, category, author, and more

  • 🖼️ Image Gallery - Bulk upload, delete, and image information with Quill.js integration

  • 📧 Email System - SMTP support with test functionality

  • 🔐 Security Features - Login throttling, session management, HTTPS enforcement

  • 🌎 Multilingual - Language switcher with session persistence

  • 🗺️ Sitemap Generator - Automatic XML sitemaps with image and news support


System Requirements

Server Requirements

Requirement Minimum Recommended
PHP Version 7.4 8.0 or higher
Database MySQL 5.7 MySQL 8.0 / MariaDB 10.4
Web Server Apache 2.4 Nginx 1.18
Memory Limit 128M 256M
Max Execution Time 180 seconds 300 seconds
Upload Max Size 32M 64M
Post Max Size 32M 64M

Required PHP Extensions

  • mysqli - Database connection

  • curl - API calls and remote connections

  • json - JSON handling

  • mbstring - Multi-byte string support

  • intl - Internationalization

  • gd - Image processing

  • zip - File compression for backups

  • xml - XML sitemap generation

Client Requirements

  • JavaScript enabled

  • Cookies enabled

  • Minimum screen resolution: 320px (mobile) to 1920px (desktop)


Installation Guide

Step 1: Download the CMS

# Clone the repository
git clone https://github.com/andrexm/zerd-cms.git

# Navigate to project directory
cd zerd-cms

Step 2: Install Dependencies

# Install PHP dependencies via Composer
composer install

Step 3: Configure Environment

# Copy environment file
cp env .env

# Edit .env file with your configuration
nano .env

Step 4: Create Database

CREATE DATABASE zerd_cms CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Step 5: Run Migrations

# Run all database migrations
php spark migrate

# Seed default data (admin user and settings)
php spark db:seed DatabaseSeeder

Step 6: Set Directory Permissions

# Set writable directory permissions
chmod -R 755 writable/
chmod -R 755 public/uploads/

# Create required directories
mkdir -p public/uploads/posts
mkdir -p public/uploads/avatars
mkdir -p public/uploads/gallery
mkdir -p public/uploads/settings
mkdir -p writable/backups
mkdir -p writable/cache
mkdir -p writable/logs
mkdir -p writable/session

Step 7: Configure Web Server

Apache Configuration

<VirtualHost *:80>
    ServerName yourdomain.com
    DocumentRoot /var/www/zerd_cms/public
    
    <Directory /var/www/zerd-cms/public>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Nginx Configuration

server {
    listen 80;
    server_name yourdomain.com;
    root /var/www/zerd-cms/public;
    
    index index.php;
    
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
    }
    
    location ~ /\.ht {
        deny all;
    }
}

Step 8: Generate Encryption Key

# Generate a random 32-character key
openssl rand -base64 32

# Add to .env file
encryption.key = hex2bin:your-generated-key

Step 9: Final Steps

# Clear cache
php spark cache:clear

# Test installation
php spark serve

Step 10: Access Your CMS

  • Frontend: http://localhost:8080

  • Admin Panel: http://localhost:8080/admin

  • Default Admin Login:


Configuration

Environment Variables (.env)

#--------------------------------------------------------------------
# ENVIRONMENT
#--------------------------------------------------------------------
CI_ENVIRONMENT = development
#--------------------------------------------------------------------
# APP
#--------------------------------------------------------------------
app.baseURL = 'http://localhost:8080/'
app.forceGlobalSecureRequests = false
#--------------------------------------------------------------------
# DATABASE
#--------------------------------------------------------------------
database.default.hostname = localhost
database.default.database = zerd_cms
database.default.username = root
database.default.password = 
database.default.DBDriver = MySQLi
database.default.DBPrefix =
database.default.port = 3306
#--------------------------------------------------------------------
# ENCRYPTION
#--------------------------------------------------------------------
encryption.key = hex2bin:your-32-character-hex-key
#--------------------------------------------------------------------
# EMAIL
#--------------------------------------------------------------------
email.protocol = smtp
email.SMTPHost = smtp.gmail.com
email.SMTPUser = [email protected]
email.SMTPPass = your-app-password
email.SMTPPort = 587
email.SMTPCrypto = tls
#--------------------------------------------------------------------
# BACKUP
#--------------------------------------------------------------------
backup.path = writable/backups/
backup.retention_days = 30
backup.auto_cleanup = true
#--------------------------------------------------------------------
# GALLERY
#--------------------------------------------------------------------
gallery.max_file_size = 5242880  # 5MB
gallery.allowed_types = jpg,jpeg,png,gif,webp
gallery.thumbnail_size = 300x300

Database Configuration

app/Config/Database.php

public $default = [
    'DSN'      => '',
    'hostname' => 'localhost',
    'username' => 'root',
    'password' => '',
    'database' => 'zerd_cms',
    'DBDriver' => 'MySQLi',
    'DBPrefix' => '',
    'pConnect' => false,
    'DBDebug'  => (ENVIRONMENT !== 'production'),
    'charset'  => 'utf8',
    'DBCollat' => 'utf8_general_ci',
    'swapPre'  => '',
    'encrypt'  => false,
    'compress' => false,
    'strictOn' => false,
    'failover' => [],
    'port'     => 3306,
];

Email Configuration

app/Config/Email.php

public $fromEmail = '[email protected]';
public $fromName = 'Your CMS';
public $protocol = 'smtp';
public $SMTPHost = 'smtp.gmail.com';
public $SMTPUser = '[email protected]';
public $SMTPPass = 'your-password';
public $SMTPPort = 587;
public $SMTPCrypto = 'tls';
public $mailType = 'html';
public $charset = 'utf-8';
public $newline = "\r\n";

Directory Structure

zerd_cms/
├── app/
│   ├── Config/              # Configuration files
│   │   ├── Database.php     # Database configuration
│   │   ├── Routes.php       # Route definitions
│   │   ├── Filters.php      # Filter configuration
│   │   └── Email.php        # Email settings
│   ├── Controllers/          # Controllers
│   │   ├── Admin/           # Admin controllers
│   │   │   ├── Dashboard.php
│   │   │   ├── Posts.php
│   │   │   ├── Categories.php
│   │   │   ├── Comments.php
│   │   │   ├── Users.php
│   │   │   ├── Gallery.php
│   │   │   ├── Backup.php
│   │   │   ├── BackupSchedule.php
│   │   │   ├── BackupRemote.php
│   │   │   ├── Search.php
│   │   │   ├── Analytics.php
│   │   │   ├── Sitemap.php
│   │   │   └── Settings.php
│   │   ├── Api/             # API controllers
│   │   ├── Auth.php          # Authentication
│   │   ├── Language.php      # Language switcher
│   │   └── Sitemap.php       # Public sitemap
│   ├── Models/               # Models
│   │   ├── UserModel.php
│   │   ├── PostModel.php
│   │   ├── CategoryModel.php
│   │   ├── CommentModel.php
│   │   ├── VisitModel.php
│   │   ├── BackupModel.php
│   │   └── SettingModel.php
│   ├── Views/                # Views
│   │   ├── admin/           # Admin views
│   │   │   ├── layouts/
│   │   │   ├── dashboard/
│   │   │   ├── posts/
│   │   │   ├── categories/
│   │   │   ├── comments/
│   │   │   ├── users/
│   │   │   ├── gallery/
│   │   │   ├── backup/
│   │   │   ├── analytics/
│   │   │   ├── sitemap/
│   │   │   └── settings/
│   │   ├── auth/            # Authentication views
│   │   ├── frontend/        # Frontend views
│   │   ├── sitemap/         # Sitemap XML views
│   │   └── emails/          # Email templates
│   ├── Entities/             # Entity classes
│   ├── Filters/              # Filters
│   │   ├── AuthFilter.php
│   │   ├── RoleFilter.php
│   │   ├── LanguageFilter.php
│   │   └── NoToolbarFilter.php
│   ├── Helpers/              # Helper functions
│   │   ├── language_helper.php
│   │   ├── settings_helper.php
│   │   ├── image_helper.php
│   │   └── visits_helper.php
│   ├── Services/             # Services
│   │   └── BackupService.php
│   └── Database/
│       ├── Migrations/       # Database migrations
│       └── Seeds/            # Seeders
├── public/
│   ├── assets/
│   │   ├── css/             # CSS files
│   │   ├── js/              # JavaScript files
│   │   └── images/          # Images
│   └── uploads/              # Uploaded files
│       ├── posts/           # Post images
│       ├── avatars/         # User avatars
│       ├── gallery/         # Gallery images
│       └── settings/        # Site settings images
├── writable/
│   ├── cache/                # Cache files
│   ├── logs/                 # Log files
│   ├── backups/              # Backup files
│   └── sessions/             # Session files
├── vendor/                   # Composer dependencies
├── .env                      # Environment configuration
├── .htaccess                 # Apache configuration
├── spark                     # CLI tool
└── README.md                 # This file

User Guide

Frontend Features

Browsing Content

  • Homepage: View latest published posts with excerpts

  • Categories: Browse posts by category with filtering

  • Search: Full-text search with auto-complete and advanced filters

  • Single Post: Read full articles with author info, comments, and related posts

  • Contact Form: Send messages to site administrators

User Features

Feature Description
Registration Create new account with email verification
Login Secure authentication with remember me
Profile Management Update personal info, upload avatar
Password Reset Forgot password functionality with email
Comments Participate in discussions (registered users)
Guest Comments Optional commenting for non-registered users

Frontend Routes

URL Description
/ Homepage
/post/{slug} Single post view
/category/{slug} Category posts listing
/page/{slug} Static pages (about, privacy, terms)
/contact Contact form
/search Search page with filters
/search/advanced Advanced search form
/login Login page
/register Registration page
/forgot-password Password reset request
/reset-password/{token} Password reset form
/language/switch/{locale} Language switcher

Admin Panel Guide

Dashboard Overview

The admin dashboard provides real-time statistics and quick access to all features:

  • Statistics Cards: Total posts, views, users, comments, visits

  • Quick Actions: Create post, manage gallery, view comments

  • Recent Activity: Live feed of posts, comments, and user registrations

  • System Info: PHP version, database status, cache status, disk usage

  • Visit Stats: Today's visits, unique visitors, currently online

Accessing Admin Panel

Admin Menu Structure

Dashboard
├── Content
│   ├── Posts
│   │   ├── All Posts
│   │   └── Create New
│   ├── Categories
│   └── Comments
├── Media
│   └── Gallery
├── Users
│   ├── All Users
│   └── Create New
├── Analytics
├── System
│   ├── Backup Manager
│   │   ├── Schedules
│   │   └── Remote Storage
│   ├── Search Index
│   └── Sitemap
├── Settings
└── Language Switcher

Admin Routes

URL Description
/admin Dashboard
/admin/dashboard Dashboard (alias)
/admin/posts Manage posts
/admin/posts/create Create new post
/admin/posts/edit/{id} Edit post
/admin/posts/delete/{id} Delete post
/admin/categories Manage categories
/admin/comments Manage comments
/admin/gallery Image gallery
/admin/users Manage users
/admin/users/create Create new user
/admin/users/edit/{id} Edit user
/admin/analytics Analytics dashboard
/admin/backup Backup manager
/admin/backup/schedules Backup schedules
/admin/backup/remote Remote storage config
/admin/search/index Search index management
/admin/sitemap Sitemap generator
/admin/settings Site settings
/admin/profile User profile
/admin/profile/edit Edit profile
/admin/profile/change-password Change password

Content Management

Posts Management with Quill.js Editor

Creating a Post

  1. Navigate to Admin → Posts → Create New

  2. Fill in the following fields:

Field Description Required
Title Post title Yes
Slug URL-friendly version (auto-generated) No
Content Main post content with Quill.js rich editor Yes
Excerpt Brief summary (auto-generated from content) No
Category Select from existing categories No
Status Draft, Published, or Archived Yes
Featured Image Select from gallery or upload new No
Meta Title SEO title (defaults to post title) No
Meta Description SEO description (defaults to excerpt) No
Meta Keywords SEO keywords (comma separated) No

Quill.js Editor Features

  • Rich Text Formatting - Bold, italic, underline, strikethrough

  • Headings - H1 to H6

  • Lists - Ordered and unordered

  • Blockquotes - For citations

  • Code Blocks - For code snippets

  • Links - Insert hyperlinks

  • Images - Insert images from gallery

  • Video - Embed videos

  • Formulas - Mathematical expressions

  • Clean Formatting - Remove all formatting

Gallery Image Insertion

  1. Click the gallery button in the Quill toolbar

  2. Browse images by tabs (All, Gallery, Posts)

  3. Select one or multiple images

  4. Choose image size and alignment

  5. Click "Insert Selected" - images appear at cursor position

Post Status

Status Description
Draft Not visible to public, only in admin
Published Visible on website, included in feeds
Archived Hidden from main lists but still accessible via direct URL

Categories Management

Category Hierarchy

  • Top Level: Independent categories

  • Subcategories: Nested under parent categories

  • Unlimited nesting: Create complex category structures

Category Operations

Operation Description
Create Add new category with name, slug, description
Edit Modify category details
Delete Remove category (checks for posts)
Info View category statistics and post count

Comments Management

Comment Status

Status Description
Pending Awaiting moderation
Approved Visible on site
Spam Marked as spam (hidden)
Trash Deleted comments

Moderation Actions

  • Approve: Make comment visible on site

  • Spam: Mark as spam (moves to spam folder)

  • Delete: Remove permanently

  • Bulk Actions: Process multiple comments at once

  • View Details: See full comment with thread


User Management

User Roles

Role Permissions
Admin Full system access, all features
Editor Manage all content, moderate comments
Author Create and edit own posts
Subscriber Comment on posts, manage profile

User Operations

Creating a User

  1. Go to Admin → Users → Create New

  2. Fill in required fields:

    • Username (unique)

    • Email (unique)

    • Password (min 6 characters)

    • Role (Admin, Editor, Author, Subscriber)

    • Status (Active/Inactive)

  3. Optional fields:

    • First Name

    • Last Name

    • Bio

    • Avatar (image upload)

User Statistics

  • Total posts created

  • Published posts count

  • Total comments

  • Total views across all posts

  • Registration date

  • Last login time


Media Gallery

Features

  • Multiple Directories - Organize images in different folders

  • Drag & Drop Upload - Easy file upload with progress bar

  • Bulk Operations - Select and delete multiple images

  • Image Preview - Thumbnail grid with hover effects

  • Image Information - Size, dimensions, type, modification date

  • Copy Functions - Copy image URL or HTML code

  • File Validation - Type and size checking

  • Quill.js Integration - Insert images directly into posts

  • Featured Image Selection - Select from gallery for post featured images

Directory Structure

uploads/
├── posts/       # Post featured images
├── avatars/     # User profile pictures
├── gallery/     # General gallery images
└── settings/    # Site logo and favicon

Upload Settings

Setting Value
Max File Size 5MB (configurable)
Allowed Types jpg, jpeg, png, gif, webp
Max Width 2048px (optional)
Max Height 2048px (optional)

Gallery Operations

  • Upload: Drag and drop or click to select

  • Select: Click images to select (multiple selection)

  • Insert: Insert selected images into Quill editor

  • Delete: Single or bulk delete with confirmation


Backup System

Backup Types

Type Description Contents
Database Complete database dump All tables with structure and data
Files Application files and uploads Config, Controllers, Models, Views, Uploads
Full Combined database and files Everything in one archive

Backup Features

  • Manual Backups - Create on-demand backups

  • Scheduled Backups - Automated backups (hourly, daily, weekly, monthly)

  • Retention Policy - Automatically delete old backups

  • Compression - gzip compression for smaller files

  • Download - Download backups to local machine

  • Restore - Restore from any backup

  • Cloud Storage - Upload to remote locations

Remote Storage

Supported Providers

Provider Type Authentication
FTP Remote Host, Port, Username, Password
SFTP Secure Remote Host, Port, Username, Password
S3 Cloud Access Key, Secret Key, Bucket, Region
Dropbox Cloud Access Token
Google Drive Cloud Client ID, Client Secret, Refresh Token

Visit Analytics System

Features

  • Dedicated Visits Table - Separate table for detailed analytics

  • Real-time Stats - Currently online, visits today, last hour

  • Device Detection - Desktop, mobile, tablet, bot

  • Browser Tracking - Most popular browsers

  • OS Tracking - Operating systems

  • Unique Visitors - Count by IP address

  • Bounce Rate - Single page visits

  • Hourly Breakdown - Visits by hour

  • Daily Trends - Visits over time

  • Top Pages - Most visited posts

  • Referrer Tracking - Where visitors come from

Visit Model Methods

Method Description
recordVisit() Record a new visit with device, browser, OS
getTodayVisits() Get total visits for today
getTodayUniqueVisitors() Get unique visitors for today
getVisitsByHourToday() Get hourly breakdown for today
getVisitsByDay() Get daily breakdown for last X days
getVisitsByDevice() Get device type distribution
getTopPages() Get most visited posts
getRealtimeStats() Get real-time statistics

Sitemap Generator

Features

  • Multiple Sitemaps - Posts, categories, pages, authors, images, news

  • Automatic Pagination - Split large sitemaps (500 URLs per file)

  • Priority Calculation - Based on content freshness

  • Change Frequency - Daily, weekly, monthly, yearly

  • Last Modified - Automatic lastmod timestamps

  • Image Sitemap - Google Image search support

  • News Sitemap - Google News support

  • Ping Search Engines - Notify Google, Bing

  • Admin Management - Generate, view, delete sitemaps

Sitemap Types

Type URL Description
Index /sitemap.xml Main sitemap index
Posts /sitemap/posts/{page}.xml All published posts (paginated)
Categories /sitemap/categories.xml All categories
Authors /sitemap/authors.xml Active authors
Pages /sitemap/pages.xml Static pages
Images /sitemap/images.xml Image sitemap for Google Images
News /sitemap/news.xml News sitemap for Google News

Generate Sitemap

# Via admin panel
Admin → Sitemap → Generate

# Via CLI
php spark sitemap:generate

Settings & Configuration

Setting Categories

General Settings

Setting Description
Site Title Website name
Site Description Meta description for SEO
Site Keywords Meta keywords
Site Email Main contact email
Site Logo Upload logo image
Favicon Browser tab icon
Site Language Default language
Timezone Site timezone

Content Settings

Setting Description
Posts Per Page Number of posts in listings
Excerpt Length Characters in excerpts
Enable Comments Global comment toggle
Auto-approve Comments Auto-approve registered users
Comments Per Page Comments in thread
Allow Nesting Enable threaded comments
Max Nesting Level Depth of replies

SEO Settings

Setting Description
Enable Pretty URLs Clean URLs structure
Enable Sitemap Automatic sitemap generation
Auto-ping Search Engines Notify on update
Google Analytics ID Tracking code
Google Site Verification Search Console verification
Bing Site Verification Bing Webmaster Tools
Robots.txt Custom robots.txt content

Multilingual Support

Features

  • Built-in Languages - English (en) and Portuguese (pt_BR)

  • Language Switcher - Dropdown in admin panel

  • Session Persistence - Language preference stored in session

  • Translation Files - Separate files for Common, Auth, Admin

  • Helper Function - _l('file.key') for translations

  • Fallback Mechanism - Falls back to English if translation missing

  • Extensible - Easy to add more languages

Adding a New Language

  1. Create new directory: app/Language/es/

  2. Copy English files and translate them

  3. Add to get_languages() helper function:

function get_languages()
{
    return [
        'en' => 'English',
        'pt_BR' => 'Português (Brasil)',
        'es' => 'Español',
    ];
}

Usage in Views

<!-- Using _l() helper -->
<h1><?= _l('Admin.dashboard') ?></h1>
<p><?= _l('Common.welcome_back') ?>, <?= session()->get('user_name') ?>!</p>

<!-- With parameters -->
<p><?= _l('Common.showing') ?> {start} {to} {of} {total} {entries}</p>

Security Features

Authentication

  • Password Hashing: Bcrypt algorithm

  • Session Management: Database sessions

  • Remember Me: Secure token-based

  • Login Throttling: Prevent brute force

Authorization

  • Role-Based Access: Admin, Editor, Author, Subscriber

  • Route Protection: Auth filters

  • API Authentication: Token-based (optional)

Data Protection

  • CSRF Protection: All forms

  • XSS Prevention: Output escaping

  • SQL Injection: Prepared statements

  • Input Validation: Strict validation rules

File Security

  • Upload Validation: Type, size checks

  • Path Traversal: Prevention

  • File Permissions: Proper chmod


Troubleshooting

Common Issues

1. Database Connection Error

Error: Unable to connect to the database
Solution:

# Check database credentials in .env
# Verify MySQL is running
sudo systemctl status mysql

# Test connection
php spark db:connect

2. 404 Page Not Found

Error: 404 - File Not Found
Solution:

# Check .htaccess file exists
# Verify mod_rewrite is enabled
sudo a2enmod rewrite
sudo systemctl restart apache2

# Check base URL in .env
app.baseURL = 'http://yourdomain.com/'

3. Upload Failed

Error: File upload failed
Solution:

# Check directory permissions
chmod -R 755 public/uploads/

# Check PHP upload limits in php.ini
upload_max_filesize = 64M
post_max_size = 64M

4. Sitemap XML Error

Error: XML declaration allowed only at the start of the document
Solution:

# Disable debug toolbar for XML routes
# Or run BOM checker
php spark sitemap:clean

5. Language Not Switching

Error: Language selector doesn't change language
Solution:

# Check session is working
# Verify language files exist in correct directory
# Clear cache
rm -rf writable/cache/*

Contributing

Development Setup

# Fork repository
git clone https://github.com/andrexm/zerd-cms.git
cd zerd_cms

# Install dependencies
composer install

# Create feature branch
git checkout -b feature/your-feature

Coding Standards

  • PHP: Follow PSR-12 coding style

  • JavaScript: Use ES6+ features

  • CSS: Use BEM naming convention

  • Documentation: PHPDoc for all methods

Pull Request Process

  1. Update documentation

  2. Add tests if applicable

  3. Ensure all tests pass

  4. Request review


License

MIT License

The MIT License (MIT). Please see License File for more information.


Credits

Built With

Special Thanks

  • CodeIgniter Team

  • Open Source Community


Thank you for using our CodeIgniter 4 CMS! 🚀

About

A CodeIgniter 4 CMS.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages