Silverstripe

Silverstripe

Silverstripe est le CMS utilisé par AideDD (mais également par le site de l’Élysée depuis 2012) pour publier du contenu en ligne. Moins connu que les deux poids lourds Joomla (que j'ai essayé comme première option de CMS pour AideDD et qui ne m'a pas convaincu) et Dupral - je laisse Wordpress de côté car il me semble encore et toujours plus axé blog qu'autre chose - il fait néanmoins partie des CMS en vogue en ce moment. Techniquement, l'outil est développé en Php orienté objet par une équipe néo-zélandaise et basé sur l'architecture Modèle-Vue-Contrôleur.

La communauté française de Silverstripe ne semble cependant pas encore très active, c'est pourquoi je vais partager ici les petites modifications et personnalisations que j'ai apporté au programme de base (v 3.5.x). En espérant que ça puisse aider certaines personnes qui débuteraient avec ce CMS.

Index.php et .htaccess

Afin d'éviter des problèmes de index.php dans les sous-directories, éditer votre .htaccess et votre index.php.

Dans .htacess

# <IfModule mod_dir.c>
# DirectoryIndex disabled
# </IfModule>

Dans index.php, remplacer

define('BASE_SCRIPT_URL','index.php/');

par

define('BASE_SCRIPT_URL','');

Titre des pages

Silverstripe ajoute le nom du site au titre html de chaque page, mais cela ne me semble pas très judicieux au niveau SEO. Dans mon cas, le site s’appelle "AideDD" mais je préfère ajouter "D&D 5" que le nom du site après le nom de la page. Modifier cela est relativement facile.

1) Créez un fichier "mysite/code/CustomSiteConfig.php".

<?php
class CustomSiteConfig extends DataExtension {
private static $db = array(
'MetaSiteTitle' => 'Varchar(32)' );

public function updateCMSFields(FieldList $fields) {
$fields->addFieldToTab("Root.Main", new TextField("MetaSiteTitle", "Nom du site pour balise Title"));
}
}
?>

2) Modifiez le template "themes/simple/templates/Page.ss" en modifiant la balise <title> comme suit.

<title><% if $MetaTitle %>$MetaTitle<% else %>$Title<% end_if %> &raquo; $SiteConfig.MetaSiteTitle</title>

3) Activez l'extension en rajoutant la ligne ci-dessous à la fin de votre fichier "mysite/_config.php". Un nouveau champ apparaît en back-office dans le menu Paramètres.

Object::add_extension('SiteConfig', 'CustomSiteConfig');

Purge des versions de page

Par défaut, Silverstripe garde une trace de toutes les versions des pages, publiées et brouillons. En quelques jours, on peut donc avoir des dizaines de versions d'une seule page en base de données, ce qui augmente la taille de la BDD de manière significative. Il existe heureusement un module [Truncator] qui permet de nettoyer automatiquement l'historique d'une page à chaque sauvegarde de celle-ci. On paramètre juste le nombre de versions publiées et le nombre de versions brouillons qu'on souhaite garder par page.

Styles

Pour ajouter de nouveaux styles (par exemple "style1" et "style2") à l'éditeur du back-office, ajoutez les lignes suivantes à la fin de votre fichier "mysite/_config.php". style1_css est le nom du style dans votre feuille de styles. style1_editeur est le nom qui apparaîtra dans l'éditeur.

HtmlEditorConfig::get('cms')->setOption(
'theme_advanced_styles',
'style1_editeur=style1_css; style2_editeur=style2_css'
);

Éditez ensuite le fichier "themes/simple/css/typography.css" et ajoutez à la fin du fichier la description de vos styles.

Alignement des images

Pour modifier les options d'alignement d'images/média dans l'éditeur du back-office, on va étendre la classe existante.

1) Créez un fichier "mysite/code/HtmlEditorField_ToolbarExtension.php".

<?php
class HtmlEditorField_ToolbarExtension extends Extension {
public function updateFieldsForImage(&$fields, $url, $file) {
$className = $fields->fieldByName('CSSClass');
$classes = $className->getSource();
$classes = array( 'right' => _t('HtmlEditorField.CSSCLASSRIGHT', 'On the right, with text wrapping around.'),
'center'=> _t('HtmlEditorField.CSSCLASSCENTER', 'Centered, on its own.'),
'left' => _t('HtmlEditorField.CSSCLASSLEFT', 'On the left, with text wrapping around.'),
[... et tous les styles souhaités ...]
);
$className->setSource($classes);
return $fields;
}
}
?>

2) Modifiez la feuille de style "themes/simple/css/typography.ss" et ajoutez-y la description de vos styles comme right, center, left, etc.

3) Éditez le fichier "framework/lang/fr.yml" pour y ajouter les traductions des noms de vos nouveaux styles comme CSSCLASSRIGHT, CSSCLASSCENTER, CSSCLASSLEFT, etc.

4) Activez l'extension en rajoutant la ligne ci-dessous à la fin de votre fichier "mysite/_config.php".

Object::add_extension('HtmlEditorField_Toolbar', 'HtmlEditorField_ToolbarExtension');

Redimensionnement des images

Silverstripe ajuste par défaut les images à 600 px de large. On peut lors de chaque insertion changer cette valeur manuellement, mais pour changer la valeur par défaut il faut modifier une valeur dans "framework/forms/HtmlEditorField.php".

private static $insert_width = 600;

Traduction des info-bulles des boutons de l'éditeur

Il manque dans le pack de distribution un fichier de traduction en français. Il faut donc créer un fichier "framework/thirdparty/tinymce_ssbuttons/langs/fr.js" à partir de l'original en.js, réaliser les trois traductions, mettre fr.tinymce_ssbuttons et penser à changer la valeur de availableLangs dans le fichier "framework/thirdparty/tinymce_ssbuttons/editor_plugin_src.js" comme suit.

var availableLangs = ['en', 'fr'];

Email admin

L'équipe de Silverstripe m'a répondu que c'était normal, mais l'email de l'admin, nécessaire dans le cas d'un password recovery par exemple, doit être mis manuellement. Pour cela éditer le fichier "mysite/_config/config.yml" et ajouter à la fin :

Email:
admin_email: 'webmaster@monsite.com'

Description des nouveaux types de pages

Créer un nouveau type de page est expliqué clairement dans les tutoriels, mais il est moins facile de trouver l'info sur comment ajouter le texte de description des nouveaux types de page. Si vous avez par exemple un template homepage.ss, il suffit de modifier la classe comme suit dans "mysite/code/homepage.php".

class homepage extends Page {
static $description = "Texte de description du type de page";
}

Icone de type de page

C'est plus fun que fonctionnel, mais il est possible dans l'éditeur du back office de changer l'icone des pages suivant leur type. Si vous avez par exemple un template homepage.ss, il suffit de modifier la classe comme suit dans "mysite/code/homepage.php", et bien entendu de mettre l'image correspondante dans le répertoire "themes/simple/images".

class homepage extends Page {
private static $icon = "themes/simple/images/home.png";
}

Forcer le www

Si, pour des questions de SEO, vous voulez forcer la redirection sur la racine de votre site en www, ajoutez ce qui suit dans "mysite/_config.php".

Director::forceWWW();