CMS Made Simple

Cet article est assez long mais montre la facilité, la flexibilité et la rapidité avec laquelle vous pourrez développer votre projet avec CMS Made Simple (CMSMS).

CMS Made SimpleSuivant le conseil de Benoît Henry à propos des CMS, j’ai choisi CMSMS pour ma première expérience. J’avais jusque là développé mes propres CMS. Les développeurs Web considèrent que CMSMS est intuitif et felxible. De plus, vous trouverez des articles très bien commentés sur le Wiki officiel de CMSMS.

CMSMS est une solution PHP-MySql Open Source que j’utiliserais pour des sites web aux exigences conventionnelles, pour des organisations sans but lucratif, par exemple, puisqu’il nécessite un temps de développement court et une implémentation rapide. Vous pouvez le télécharger sur CMSMS.org.

Cet article a été réalisé sur base de CMSMS 1.6.6.

Le seul aspect négatif que je mentionnerais ici est qu’il faudra que le développeur Web mette son CMSMS et les modules, plugins,… à jour régulièrement pour profiter des corrections de bugs et de failles de sécurité.

J’ai configuré un CMSMS en quelques heures (le développement du layout avait été réalisé au préalable) avec les options suivantes :

  • url rewriting (urls dynamiques du type : http://www.mondomaine.be/notre_projet.htm)
  • des templates dynamiques avec Smarty (le moteur PHP de templates)
  • un moteur de recherche interne
  • une zone client privée (+ login avec captcha)
  • une page contact (avec PHP mail et le module CMSMailer)
  • des meta tags “description” and “keywords” générés automatiquement
  • des fils d’ariane (breadcrumb trails)

CMSMS fonctionne avec des modules que l’on installe pour ajouter des fonctionnalités telles que :

  • un générateur de formulaires
  • un formulaire avec champ captcha (vérifie que l’utilisateur est un être humain plutôt qu’un robot)
  • un calendrier

Vous trouverez tous les modules, plugins, templates disponibles sur CMSMS Forge.

Documentation

Pour ma première installation, j’ai choisi d’installer des données exemples, ce qui rend l’adaptation et la compréhension du fonctionnement de CMSMS plus aisées. Une fois installé, sélectionnez le Menu Disposition / Gabarits (templates) et éditez le gabarit pour comprendre comment le moteur de template (Smarty) fonctionne.

Les modules and Balises (tags) que vous trouverez dans le Menu Extensions sont fournis avec des fichiers d’aide qui détaillent l’implémentation de ces fonctionnalités.

Le wiki officiel de CMSMS offre des articles bien documentés sur tout ce qu’il faut savoir pour adapter CMSMS à vos besoins.

Caractéristiques de développement Web

Implémenter CMSMS nécessite le développement Web de templates et feuilles de style css, le paramétrage des formulaires, modules choisis,… et la définition des accès administrateur par la gestion des groupes, utilisateurs et permissions. CMSMS est flexible et vous pouvez créer de nouveaux groupes d’administrateurs et définir leurs permissions de sorte que votre client n’aie pas la possibilité de rendre lui-même son site inaccessible. Vous pouvez par exemple paramétrer les droits d’éditeurs de sorte qu’ils ne puissent que modifier le contenu des pages. Ils ne pourront ainsi pas modifier vos scripts et paramétrages.

Les templates Smarty de CMSMS

Une caractéristique majeure de CMSMS est l’emploi de templates pour générer les contenus des pages. Les templates sous CMSMS sont accessibles par le Menu Disposition > Gabarits. CMSMS utilie Smarty, un moteur de template qui implémente votre template de manière dynamique grâce au code suivant, avec les variables placées entre accolades :

{metadata}

Mettez cette ligne de code entre les balises <head> et </head> et cette variable affichera les méta-données globales définies dans le Menu Administration de site > Paramètres globaux > Méta-données globales. Vous faites ainsi apparaître les balises suivantes sur toutes vos pages dynamiquement :

<meta http-equiv=”Content-type” content=”text/html; charset=iso-8859-1″ />

<meta http-equiv=”Content-Language” content=”fr-be” />

<meta name=”robots” content=”index,follow” />

<base url=”http://127.0.0.1/ael/cmsms” />

<link rel=”shortcut icon” href=”./favicon.ico” />

La variable suivante placée dans le template entre les balises <head> et </head> est basée sur le plugin appelé “autometa” :

{autometa}

Le plugin autometa est téléchargeable à partir de CMSMS Forge : autometa. Téléchargez-le et placez le fichier .php dans le répertoire plugins de CMSMS. Une fois inséré dans la <head> de votre template, le plugin génèrera dynamiquement les balises meta description et meta keywords à partir du contenu de la page. Si vous voulez paramétrer vos meta tags page par page manuellement, plutôt que laisser autometa les générer lui-même, vous le pouvez également (cliquez sur l’onglet “Options” dans le contenu de la page en question et remplissez le champ “méta-données spécifiques pour cette page”). Tapez :

<meta name=”description” content=”description de la page” />

<meta name=”keywords” content=”mots-clefs,pour, cette, page” />

Si vous désirez insérer du javascript dans votre template, ajoutez le code entre les balises {literal} et {/literal} :

{literal}

<script type=”text/javascript” language=”javascript” src=”./js/empty_fields.js”></script>

{/literal}

Dans le Menu Disposition > Gabarits, vous pouvez aussi cliquer sur le bouton “CSS” pour attacher une feuille de style à votre template. Ajoutez ensuite :

{stylesheet}

à l’intérieur de la balise <head> de votre template pour insérer les feuilles de styles attachées à ce template.

Vous devrez au préalable créer les feuilles de style dans le menu DIsposition > Feuilles de style.

Si vous voulez ajouter des commentaires à votre template, utilisez les {* et *} :

{* voici comment ajouter un commentaire à votre template *}

CMSMS et url rewriting en un clin d’oeil

Si vous désirez que CMSMS exprime des urls plus élégantes du type : http://www.moncmsms.com/comment-parametrer-cmsms/templates.htm au lieu de http://www.moncmsms.com/index.php?page=comment-parametrer-cmsms, vous devez :

  • modifier quelques variables dans /config.php :

$config['url_rewriting'] = true;

$config['page_extension'] = ‘.htm’;

  • puis créez un fichier .htaccess dans le root de votre projet Web avec les lignes suivantes :
SetEnv MAGIC_QUOTES 0
SetEnv REGISTER_GLOBALS 0
SetEnv PHP_VER 5
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^moncmsms.be$ [NC]
RewriteRule ^(.*)$ http://www. moncmsms.be/$1 [QSA,L,R=301]
#Sub-dir e.g: /cmsms
RewriteBase /
# 301 Redirect all requests that don’t contain a dot or trailing slash to
# include a trailing slash
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !\.
RewriteRule ^(.*) %{REQUEST_URI}/ [R=301,L]
# Rewrites urls in the form of /parent/child/
# but only rewrites if the requested URL is not a file or directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA]
Ajouter un fil d’ariane (breadcrumb trails) à votre template
Le fil d’ariane est considéré comme une balise par CMSMS. Vous pouvez faire afficher toutes les balises disponibles dans le Menu Extensions > Balises : cliquez sur la balise “breadcrumbs” pour voir comment elle fonctionne. Puis ajoutez simplement :

{breadcrumbs starttext=’Vous êtes ici’ root=’Home’ delimiter=’&raquo;’}
dans le body de votre template pour afficher le breadcrumbs trails dans lvos pages. Vous pouvez facilement l’adapter en changeant le contenu de ses attributs. Référez-vous à l’aide fournie par le Menu Extensions > Balises > Breadcrumbs.

Ajouter un moteur de recherche interne à votre template

 

Vous pouvez configurer le module de moteur de recherche interne dans Menu Extensions > Recherche et changer les paramètres de formulaire, le template de recherche et le template des résultats de la recherche. Puis ajoutez les lignes suivantes dans votre template de page :

<div id=”search”>
{search search_method=”post”}
</div>

Ajouter une structure de pages en accès privé à CMSMS

Pour ajouter une zone privée avec login et mot de passe à votre CMSMS, Vous devrez télécharger et installer 3 modules complémentaires :

  • FrontEndUsers (FEU) (vous autorisera à gérer les utilisateurs front-end, c’est-à-dire les internautes)
  • CustomContent (vous permet d’afficher différents contenus à vos différents utilisateurs front-end)
  • Captcha (à utiliser pout ajouter un test Captcha à votre formulaire de login)

Une fois décompressés, copiez les répertoires de ces modules dans le réperoire Modules de votre CMSMS. Puis installez ces modules par le Menu Extensions > Modules dans l’ordre cité ci-dessus (FrontEndUsers, puis CustomContent, et enfin Captcha).

FrontEndUsers (FEU)

Le Menu Utilisateurs/Groupes > Gestion des utilisateurs du site est maintenant disponible. Ouvrez-le et :

  • allez dans l’onglet “Propriétés de l’utilisateur” pour ajouter des propriétés au profil de l’utilisateur (une propriété appelée “nom” avec el type “texte” et une propriété appelée “email” avec le type “Adresse email”)
  • allez dans l’onglet “Groupes” pour créer un groupe appelé “client_users” et paramétrez vos propriétés (nom et email comme champs optionnels ou requis, et cochez “demandé lors de la récupération de l’identifiant” en ce qui concerne la propriété “email”)
  • allez dans l’onglet “Utilisateurs” et ajoutez un utilisateur pour ce groupe (n’oubliez pas de cocher le groupe du nouvel utilisateur). Puis vous devrez remplir les propriétés définies précédemment.

Créez ensuite la page Login. Allez dans le menu Contenu > Pages > Ajouter un nouveau contenu et créez la page login avec le contenu suivant :

{FrontEndUsers}

Puis associez cette nouvelle page avec votre template principal (par l’onglet “options”).

Votre CMSMS client affiche maintenant une page login avec formulaire d’identification et test Captcha.

Paramétrer les contenus de l’espace privé

Une fois que l’utilisateur est identifié, Le CMSMS client devrait afficher les entrées de menu supplémentaires : les pages de l’espace privé. Il est assez simple de le réaliser. Nous utiliserons le module CustomContent pour ce faire. Vous devrez créer un template privé à associer aux pages privées.

Vous pouvez copier le template principal de votre site en cliquant dur le bouton “copier”.

Au lieu de taper :

{content}

pour afficher le contenu de la page directement, tapez :

{if $ccuser->loggedin()}

{content}

{else}

Désolé, vous devez vous identifier d’abord

{/if}

Puis créez une page privée dans le Menu Contenu > Pages et associez-la avec le nouveau template privé dans l’onglet “Options”.

Votre contenu privé devrait être affiché correctement une fois identifié côté client.

Le gestionnaire de Menu

CMSMS contient un gestionnaire de menus pour éditer ou créer de nouveaux templates de menus.

Vérifiez d’abord quel menu est chargé dans votre template par défaut. Ouvrez le Menu Disposition / Gabarits et cherchez le contenu de la div id=”menus”. Imaginons que le template de menu soit cssmenu_ulshadow.tpl.

Ouvrez le Menu Disposition > Gestion de Menu. Votre cssmenu_ulshadow.tpl n’es pas éditable (mais en lecture seule). Importez ce menu dans votre base de données en cliquant sur le bouton “Importer”. Donnez un nom à ce nouveau template de menu (“test”, dans mon cas).

Editez le template de menu “test”. Vous y trouverez du code Smarty, le moteur de template. Recherchez-y la première boucle “Foreach” et ajoutez la ligne suivante juste après :

{$node->id}

Ensuite, vous devez changer le template de page par défaut pour qu’il prenne en charge votre menu “test”. Allez dans le Menu Disposition > Gabarits, et éditez le template par défaut (NClearBlue dans mon cas) et changez le contenu de la div menu en :

{*menu template=’cssmenu_ulshadow.tpl’*}

{menu template=”test1″}

J’ai simplement commenté le template de menu par défaut et ajouté mon nouveau template de menu.

Allez sur le site client, rafraîchissez la page et vous verrez apparaître l’ID numérique de la page privée (57 dans mon cas).

De retour au Menu Disposition > Gestion de Menu, éditez le menu “test”, et remplacez le {$node->id} par :

{if (($node->id == 57 and $ccuser->loggedin()) or $node->id <> 57)}

qui vérifiera si la page affichée est la zone privée. Si c’est le cas, l’utilisateur doit s’être préalablement identifié pour que le menu s’affiche.

La dernière chose à faire est f’ajouter :

{/if}

juste avant le {/foreach} en fin de fichier.

Webliographie :

Smarty.net

Smarty basics (tuto)

CMSMS Forge

CMSMS Wiki officiel

CMS Made Simple

This article is rather long but shows how easy, flexible and fast CMS Made Simple (CMSMS) can be.

CMS Made SimpleFollowing Benoît Henry‘s advice on CMS, I chose CMSMS for my first CMS experience. Before that, I had only developed my own CMS. Webdevelopers will consider it intuitve and flexible. You’ll find well-documented articles on CMSMS official Wiki.

CMSMS is a PHP-MySql Open Source solution I would implement for websites with straightforward requirements, for non-profit organization, for example, since it requires short development and quick implementation. You can download it at CMSMS.org.

This article is based on CMSMS v. 1.6.6.

The only negative aspect I would here mention is you’ll need to upgrade your CMSMS and modules, plugins,… implemented regularly for bug fixes and security fixes.

I managed to configure CMSMS for a website in a few hours (layout development had been prepared beforehand) with the following features :

  • url rewriting (dynamic urls of the type : http://www.mydomain.be/our_project.htm)
  • dynamic templates with Smarty (template engine for PHP)
  • internal search engine
  • private client area (+ login with captcha)
  • contact page (with PHP mail through CMSMailer)
  • meta tags description and keywords generated automatically
  • breadcrumb trails

CMSMS works with modules you install to add functionalities such as:

  • a form builder
  • a captcha form (test in form to check if user is a robot or a human being)
  • a calendar

You’ll find lots of modules, templates,… to be downloaded in CMSMS Forge.

Documentation

For my first install, I installed it with sample data which made adaptation much easier. Once installed, select Menu Layout / Templates and edit a template to check how the template engine (Smarty) works.

Modules and Tags (found in Menu Extensions) are provided with help files that detail the way you should implement functionalities.

CMSMS official Wiki offers well-documented articles on eveything you need to adapt CMSMS to your needs.

Webdevelopment features

Implementing CMSMS for a customer requires the webdeveloper to create the templates and css stylesheets, customize the website forms, thechosen modules,… and define administrators’ access through groups, users and permissions. CMSMS is flexible enough for you to create new groups of administrators and manage their rights so that they don’t set their website out of order. As an example, you can customize editors rights so that they can only modify page content and leave your scripting and parameters intact.

CMSMS Smarty templates

A key CMSMS feature is the use of templates to generate page content. Templates in CMSMS are accessible through menu Admin Menu layout > templates. CMSMS uses Smarty, a template engine that implements your template dynamically through the following kind of code, with the variable written inside curly brackets :

{metadata}

Put in between <head> and </head>, this variable prints global meta tags defined in menu Site Admin / Global Settings. That way, you can have all your pages display the following tags :

<meta http-equiv=”Content-type” content=”text/html; charset=iso-8859-1″ />

<meta http-equiv=”Content-Language” content=”fr-be” />

<meta name=”robots” content=”index,follow” />

<base url=”http://127.0.0.1/ael/cmsms” />

<link rel=”shortcut icon” href=”./favicon.ico” />

The next variable is based on the plugin called “autometa” :

{autometa}

This autometa plugin can be found in CMSMS Forge : autometa. Download it and place the php file in CMSMS plugins directory. Once inserted inside the <head> of your template, the plugin will generate meta description and meta keywords tags from the content of the page. If you want to customize your meta tags page per page rather than let autometa manage meta tags description and keywords (the latter being rather deprecated now), you can also do so (click the “Options” tab in the page content and fill in the “metadata for this page” field). Then type :

<meta name=”description” content=”description of the page content” />

<meta name=”keywords” content=”keywords, for, that, page” />

If you want to insert javascript in your template, add the code between {literal} and {/literal} tags :

{literal}

<script type=”text/javascript” language=”javascript” src=”./js/empty_fields.js”></script>

{/literal}

In the Admin menu Layout > Templates page, you may also click “CSS button” to attach a css stylesheet to the template. Then simply add :

{stylesheet}

in your template to implement the attached stylesheets in your <head>.

You’ll have to create your own stylesheets in Menu Layout > stylesheets beforehand.

If you want to add comment to your template, put it between {* any comment *}

{* this is how you add comments to your template *}

CMSMS and url rewriting in the twinkling of an eye

If you want CMSMS to render pretty urls of the following type : http://www.mycmsms.com/how-cmsms-works/content_types.htm instead of http://www.mycmsms.com/index.php?page=how-cmsms-works, you have to :

  • change some default variables in /config.php. Please set :

$config['url_rewriting'] = true;

$config['page_extension'] = ‘.htm’;

  • then create a .htaccess file at the root of your web project with the following lines :
SetEnv MAGIC_QUOTES 0
SetEnv REGISTER_GLOBALS 0
SetEnv PHP_VER 5
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^mycmsms.be$ [NC]
RewriteRule ^(.*)$ http://www. mycmsms.be/$1 [QSA,L,R=301]
#Sub-dir e.g: /cmsms
RewriteBase /
# 301 Redirect all requests that don’t contain a dot or trailing slash to
# include a trailing slash
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !\.
RewriteRule ^(.*) %{REQUEST_URI}/ [R=301,L]
# Rewrites urls in the form of /parent/child/
# but only rewrites if the requested URL is not a file or directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA]
Add breadcrumb trails to your template
You can display all available tags in Menu Extensions / tags : a click on tag “breadcrumbs” will tell you what it’s worth. Simply add :

{breadcrumbs starttext=’You are here’ root=’Home’ delimiter=’&raquo;’}
to the body of your template to display breadcrumbs trails. You can easily adapt it by changing the content of its attributes. Just refer to the help provided in Menu Extensions / tags.

Add an internal search engine to your template

 

You can configure the internal search engine module in Menu Extensions / Search and change the form parameters, the search template and the result template. Then simply add the following lines in your page template :
<div id=”search”>
{search search_method=”post”}
</div>

Add a private area to your CMSMS

In order to add a private area with login to your CMSMS, you’ll have to download 3 extra modules :

  • FrontEndUsers (FEU) (will allow you to manage front-end users)
  • CustomContent (will allow you to display different contents to your different front-end users)
  • Captcha (to be used to add a Captcha test in your login form)
Copy the directories of these modules in your CMSMS/Modules directory. Then install the modules in Menu Extensions / Modules in the right order (FrontEndUsers, CustomContent, Captcha).

FrontEndUsers (FEU)

Menu Users & Groups / FrontEndUsers Management is now available. Open it and

  • go to the “User properties” tab to add properties to the users profile (a property called “name” with “text” type and a property called “email” with “Email address” type)
  • go to the “Groups” tab to create a group called “client_users” and custom your properties (name and email optional or required, for example, and tick email asked in lost username)
  • go to the “Users” tab and add a user for that group (do not forget to tick the new user’s group). Then you’ll have to fill in the properties you’ve defined earlier.

Let’s create the login page. Switch to Menu Content / Add new content and create the login page with the following content :

{FrontEndUsers}

Then associate it with your main template (options tab).

Your client CMSMS now displays a login page with login form and captcha.

Customize content

Once your user is loggedin, the client CMSMS should display extra menu items : the private pages. This is rather easy to achieve and is managed by the CustomContent Module. You’ll have to create a private template to ge associated with private page.

You can copy the main template of your site by clicking the “copy” button.

Instead of displaying

{content}

directly, type:

{if $ccuser->loggedin()}

{content}

{else}

Sorry, you need to login first

{/if}

Then create a private page in Menu Content / Pages and associate it with the new private template in the Options tab.

Your private content should now be displayed properly once logged in.

Menu manager

CMSMS provides a Menu Manager to edit or create new menu templates.

First check what menu is loaded in your default template. Open Menu Layout / Templates and look for div id=”menus” content. Let’s assume the menu template is cssmenu_ulshadow.tpl.

Open Menu Layout / Menu Manager. You’ll see that your cssmenu_ulshadow.tpl is not editable (but read only). Import it to your database by clicking the Import button. Give it a new name (test in my case).

Edit test menu template. You’ll see some smarty code. Look for the first foreach loop and add the following line just under it :

{$node->id}

Then, you have to change your default page template to take your “test” menu into account. Go to Menu Layout / Templates, edit the default template (NClearBlue in my case) and change the menu div content to :

{*menu template=’cssmenu_ulshadow.tpl’*}

{menu template=”test1″}

I’ve just commented the default menu template and added my new test template.

Go to the client site, refresh your page and you’ll be able to identify the menu ID of your private area (57 in my case).

Back to the Menu Layout / Menu Manager : I edit my test Menu, erase my {$node->id} and replace it by :

{if (($node->id == 57 and $ccuser->loggedin()) or $node->id <> 57)}

which checks if the page being displayed is the private area. If it is, the user needs to have logged in.

The last thing to do is to add a

{/if}

just before the {/foreach} at the bottom of the page.

Webliography :

Smarty.net

Smarty basics (tuto)

CMSMS Forge

CMSMS official Wiki