Pages Managerfor WHMCS · Documentation
v7.0.0

Changelog v6 → v7

Everything that changed between the legacy v6 release and the v7 rewrite — additions, migrations and the critical fixes.


Full rewrite — v7 is built on the modern WHMCS addon architecture (namespaced controllers, PSR-style helpers, Smarty templates). Features that existed in v6 are preserved and migrated; several are brand new.

SEO Friendly URLs — the big change

The old single SEO Friendly URLs checkbox is replaced by a master switch + format selector:

  • SEO Friendly URLs — the master on/off switch.
  • URL Format (only shown while SEO is on):
    • With .html — pages at /about.html, /test.html.
    • Without .html — clean extensionless URLs such as /about, /test.
  • On save the module writes the matching rewrite block into the WHMCS root .htaccess automatically — fenced between ### BEGIN - Pages Manager SEO and ### END - Pages Manager SEO — and keeps it in sync, replacing or removing the block when you switch formats or disable SEO. No manual editing required.
  • The legacy unfenced block (plain rules left at the top of .htaccess by v6 or by manual edits) is detected and cleaned up automatically on save.
  • Admin page previews and client-area menu items reflect the active format.

Major changes

  • Sidebar Widgets manager — Content / Links / Content + Links / Image types with per-page assignment and display order, image upload with click-through link and “open in new tab” option; rendered as real WHMCS ClientAreaPrimarySidebar panels and menu items.
  • Analytics Dashboard — page counts, lifetime views with month-over-month trend, SEO health score, 30-day traffic chart, top/recent pages, geographic view overlay, plus “Clear Template Cache” and “Export Routes” actions.
  • Client-area navigation injection — Internal and PHP pages added to the primary and secondary navbar, optionally nested under a parent, with custom order.
  • Per-page SEO — meta title, description and keywords injected into the page head, with live preview.
  • Unified publish/status toggle on every page type.
  • SEO Friendly URLs in two formats — with or without .html, with automatic .htaccess management.
  • Modern storage — data kept in hsc_pm_* tables, auto-migrated from the legacy mod_* tables on activation or upgrade.

External pages are standalone deployments

External pages are no longer served on the WHMCS URL. Each external page is rendered to templates/external/<name>.tpl and deployed as a self-contained site using the bundled index.php + config.php + .htaccess — a modern default header/footer/homepage design is included. The former WHMCS-side ClientAreaPage external hook was removed. Full flow in External Pages & Deployment.

Data & migration

  • Data moved to hsc_pm_* tables; automatic migration of legacy mod_* data on activation/upgrade.
  • Legacy tables preserved until deactivate with “Delete Module Database” enabled.

Admin UX & hardening

  • All admin forms use PRG (post-redirect-get) and session-token (CSRF) protection.
  • Consistent Smarty admin templates, DataTables lists, SweetAlert confirmations and Choices.js multi-selects.
  • SEO-friendly .html URL generation for internal and PHP pages.

Critical fixes

Please read — two fixes affect the root .htaccess and SEO URLs:
  • Fixed: broken SEO block in the root .htaccess. In v6 (and in manual edits), the plain rules block could end up malformed — e.g. a missing newline between </IfModule> and the ### END marker, or the WHMCS end marker merged on the same line. This caused an Apache configuration error (HTTP 500). v7 writes a properly fenced block with the end marker on its own line, and repairs existing broken blocks on every settings save.
  • Fixed: extensionless URLs for PHP pages. With SEO on and the “without .html” format, generated PHP pages are now served at their clean URLs (/test → test.php) — previously the PHP-file rewrite was missing and requests to /test returned a 404. The PHP-rule runs first and excludes core WHMCS friendly-URL routes (/announcements, /knowledgebase, /download, /store, /cart, /contact, /index.php) so the module never hijacks core pages or causes redirect loops.
Compatibility — the module reads the legacy on value and normalizes it to 'html' on upgrade, so v6 behaviour is preserved automatically.