CMSMS 1.11 Update

Hi everybody, it has been a while since we let you know about what we’re working on and what is happening with CMSMS 1.11, so we thought we would drop you a line. CMSMS 1.11 has been progressing steadily. It will be perhaps the biggest single functionality release in CMSMS history. We are also tackling some internals, and doing a lot of cleanup. There is new functionality, and some “under the hood” work. There should be a little bit for everybody in this release.

Category: Releases, General
Posted: April 20, 2012 by calguy1000

Hi everybody, it has been a while since we let you know about what we’re working on and what is happening with CMSMS 1.11, so we thought we would drop you a line.

CMSMS 1.11 has been progressing steadily. It will be perhaps the biggest single functionality release in CMSMS history. We are also tackling some internals, and doing a lot of cleanup. There is new functionality, and some “under the hood” work. There should be a little bit for everybody in this release. So let’s get started.

Features and Changes:

1. New Admin Theme

Goran Ilic, a valued member of the CMSMS Dev team, has created a new, HTML5, responsive admin theme for CMSMS that is completely Smarty controlled, and extendable. This will be the new admin theme for all fresh CMSMS installs, and the old ‘default’ admin theme has been removed. This leaves the NCleanGrey and OneEleven admin themes.

2. Drag and Drop Upload

Along with the new admin theme, we’ve upgraded the jquery and jquery.ui that is shipped with CMSMS and have added support for uploading files via drag and drop (for most non-IE browsers). This will make the file upload capabilities in wysiwyg editors all but redundant, and solves a long standing difficulty with CMSMS. The OneEleven admin theme has a dropzone in its main area, allowing you to drag files from your desktop into CMSMS, then select the file from within the wysiwyg editor. Additionally, you can change working directories from within the admin theme.

3. Smarty 3

Perhaps the biggest change in CMSMS will be using Smarty3. Smarty3 brings some new functionality for Smarty templates, such as improved parsing, which should help with embedded javascript; smarty functions; and advanced cache control.

The CMSMS Dev Team worked extensively in conjunction with the developers of Smarty to implement an unmodified version Smarty 3.1.8 (as of the time of this writing) into CMSMS. The important part of this transition was to retain the power of the variable scoping we have become accustomed to in CMSMS. For example, being able to set a variable in a module template that is called from the body, and to use that variable in the page head.

In CMSMS 1.11 we will be enabling Smarty caching in a very flexible way to give the the power of caching all or parts of individual pages. This is almost as good as full page caching, but retains the dynamic power of CMSMS.

In 1.11, most plugins in the plugins folder will be ‘cachable’, i.e., the output of those plugins can be cached on the page and not re-executed. The obvious exception to this will be the {content} plugins which will not cache.

We are also modifying the News and Search modules to take better advantage of Smarty3’s caching capabilities, and to serve as an example for module developers.

There are some detriments to the adoption of Smarty3 however. We have noticed that the initial compilation (converting Smarty templates into PHP code) of a stock CMSMS page is noticeably slower. This performance degradation is due to the complexity of the lexer and parser in Smarty3 and is a known limitation in the library.

However, once template compilation has completed, we are noticing a significant performance improvement; even on pages that are not ‘cachable’. We feel that this trade-off will be beneficial in the long run to all users of CMSMS.

We will be providing more information as to how the caching in CMSMS 1.11 will work in the coming days.

4. CSS Improvements

We are working on adding the ability to specify a media query string for each stylesheet. This will allow you to better make responsive websites, or webpages for mobile devices. As well, some new config variables will allow you to control the output directory for generated stylesheets.

5. Better Module Lazy Loading

Continuing with what was started in the 1.10 series, we will be improving the module lazy loading capabilities to improve performance on your websites. To that end we are also re-working the routing functionality.

6. Improved auditing

Audit trails are becoming more and more important in our websites (who did what, and when). For that reason, we are going through all of the important pieces of functionality and ensuring that there is a line placed in the audit log for each of them.

7. An improved MenuManager

MenuManager will be getting a new breadcrumbs action (and we will be deprecating the breadcrumbs tag). The new breadcrumbs action will allow for template customization of the appearance of breadcrumbs, and even its behaviour.

Additionally, MenuManager has a new “items” action to replace the “items=” method that currently exists. This will allow naming specific page aliases and having them, and their children, in your navigation.

8. A System maintenance page

A new system maintenance page in the admin interface will allow you to perform maintenance tasks like database repairs or optimizations, clearing the cache, etc.

9. Language and locale improvements.

We have rewritten the language detection and selection mechanisms into a class to allow for more flexibility. The NLS data set now contain locale and encoding information so that the $config[‘locale’] and $config[‘encoding’] information will be optional even for non-English sites.

We have reorganized some of the language detection mechanisms so that it is called AFTER modules (the ones that can’t lazy load) are initialized. This, in conjunction with the new CmsNlsOperations::set_language_detector() method, will allow third party modules to specify how the current frontend language should be detected. Modules can then use session variables, cookies, a variable on the URL, or user or module preferences to determine what language to use for that frontend request.

The importance of this cannot be understated. This allows third party modules to create proper multi-language capabilities within CMSMS and we are sure that there are many module developers, and thousands of website developers, that will be extremely happy.

10. Improved Content class

a. We have re-organized the Content class yet again in attempt to improve performance, and to lay the foundation for some work planned in the future. To that end we have reworked the property classes in the base content object (the methods that retrieve the content blocks, etc). We have also marked all of the content object methods and members as public, protected, or private, as appropriate.

These may have minor effects on some modules that implement custom content types. Therefore, developers of modules that export custom content types should participate in the beta process so that we can ensure new releases of the module are available at the time when CMSMS 1.11 is released.

b. In the past, the editcontent form used regular expressions to parse the page template in order to detect the content blocks. This has changed, and we are actually now using Smarty. This improves the flexibility, and reduces the possibility for error when editing page templates. Additionally, it is now possible for content block definitions to be inserted into sub templates (i.e: via {include} or via global content blocks) which gives us much more flexibility for re-use of templates.

c. It is now possible, when editing content blocks, to specify a tab within the edit content form that should contain the content block text area.

11. An improved news module

The news module has gone through extensive “under the hood” modifications:

  • a: The news module now uses Smarty caching so that on cached pages no database queries are necessary (for summary views).
  • b: The news module now preloads field information for all articles displayed in a summary view to reduce the number of queries required and improve performance.
  • c: Category information is now preloaded and cached and can be shared between summary and detail views.

12. Bits and pieces

  • - XML Module export will only export the English version of the help and about.
  • - A new bulk action in listcontent for changing page ownership.
  • - Improved user settings pages.
  • - Adding a new user allows you to specify the default wysiwyg for that user.
  • - Custom page URLs can now include an extension.
  • - Remove the ‘output_compression’ config option.
  • - Remove the ‘process_whole_template’ config option.
  • - Remove the ‘use_adodb_lite’ config option.
  • - Remove support for Postgres.
  • - Remove the ‘max_upload_size’ config option.
  • - Remove the google_search plugin.
  • - Moved the {menu}, {news,} {search}, and other plugins to their respective modules.
  • - Some general re-organization of various admin pages.
  • - Dozens of bug fixes.
  • - Lots more.

What We’ve Broken:

Other than the aforementioned problems with modules that export content page types (which should be a simple problem to solve) there may be a few remaining items related to the adoption of Smarty3.

  • Smarty plugin caching:

    Smarty plugins (the ones in the plugins directory) will be cachable. This means that the output from these plugins may be cached and re-used on cachable pages. This may cause some difficulty in some installs. The fix to this is to add the nocache attribute to the plugin, or to wrap the plugin in {nocache} tags, e.g.:
    {mydbqueryplugin nocache}


Our goal is to have the beta process start by approximately mid June 2012. To that end, we set feature cut-off at the first of June. No features will be committed past that date. We have already trimmed our to-do list down, cleaned out or assigned bug tasks, and there may be more trimming in order to meet our goals.


CMSMS 1.11 is coming together to solve a number of past issues, move forward with new technology, improve performance, and to make it even more simple for our end users to use. We look forward to hearing from you during the beta process to make sure that this release is the smoothest ever.