Silverstripe
Silverstripe est le CMS utilisé par Tapouweb pour publier du contenu en ligne. Moins connu que les deux poids lourds Joomla (que j'ai essayé comme première option de CMS 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 faisait néanmoins partie des CMS en vogue en 2013, lorsque le site a été relancé. Techniquement, l'outil est développé en Php orienté objet par une équipe néo-zélandaise.
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 4.x). En espérant que ça puisse aider certaines personnes qui débuteraient avec ce CMS.
Installation
Avant toute chose, j'ai essayé plusieurs fois d'installer SS4 avec Softaculous sur CPanel, sans succès. Avec FTP ça n'a pas non plus marché. La seule manière d'installer correctement Silverstripe semble donc être celle recommandée sur leur site, via composer.
composer create-project silverstripe/installer SS4
Puis déplacer tous les fichiers du répertoire SS4 à la racine du site.
.htaccess
Les redirections doivent être placées dans le .htaccess à la racine du site, avant la redirection de Slverstripe. Par exemple :
Redirect 301 "/intro" "/dnd-5"
RewriteEngine On
# Redirect non www to www
RewriteCond %{HTTP_HOST} ^Tapouweb\.org$ [NC]
RewriteRule ^(.*)$ https://www.Tapouweb.org/$1 [R=301,L]
# Redirect non https to https
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteRule ^(.*)$ public/$1
Arborescence
J'ai opté pour l'arborescence suggérée dans les leçons de Silverstripe.
app
-- src
-- templates
public
-- assets
-- css
-- images
-- javascript
-- webfonts
silverstripe-cache
vendor
Puis modifier app/_config/theme.yml en conséquences.
----
Name: mytheme
---
SilverStripe\View\SSViewer:
themes:
- '$public'
- '$default'
Langue
Pensez à modifier la langue de votre site pour la balise html lang. Dans app/_config.php ajouter :
use SilverStripe\i18n\i18n;
i18n::set_locale('fr_FR');
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 "Tapouweb" mais je préfère ajouter "D&D 5" que le nom du site après le nom de la page. Modifiez le template "templates/Page.ss" comme suit.
<title><% if $MetaTitle %>$MetaTitle<% else %>$Title<% end_if %> » [titre customisé]</title>
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 et changer l'icône. Si vous avez par exemple un template homepage.ss, il suffit de modifier la classe comme suit dans "app/src/homepage.php". La liste des icônes est disponible ici.
class homepage extends Page {
private static $icon_home = 'font-icon-p-home';
private static $description = "Texte de description du type de page";
}
Modifier les Breadcrumbs
Pour modifier les breadcrumbs afin que Google les reconnaisse, éditez le fichier "vendor/silverstripe/ cms/templates/ BreadcrumbsTemplate.ss" comme indiqué si vous souhaitez utiliser les balises <ol> et <li> par exemple.
<ol itemscope itemtype="http://schema.org/BreadcrumbList"><% if $Pages %><% loop $Pages %>
<% if $Last %>
<li> $MenuTitle.XML</li>
<% else %>
<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
<% if not Up.Unlinked %><a itemprop="item" href="$Link"><% end_if %>
<span itemprop="name">$MenuTitle.XML</span>
<% if not Up.Unlinked %></a><% end_if %><meta itemprop="position" content="$Pos" /></li>
<% end_if %>
<% end_loop %><% end_if %></ol>
Puis modifier le fichier "public/css/layout.css" pour y ajouter quelque chose du style :
#Breadcrumbs ol {list-style-type: none;}
#Breadcrumbs ol li {display: inline; color: #999;}
#Breadcrumbs ol li+li:before {content: "\203A"}
Customiser la barre d'édition
Dans app/_config.php vous pouvez facilement ajouter ou retirer des boutons. Exemple :
use SilverStripe\Forms\HTMLEditor\HTMLEditorConfig;
HtmlEditorConfig::get('cms')->enablePlugins('hr');
HtmlEditorConfig::get('cms')->enablePlugins('charmap');
HtmlEditorConfig::get('cms')->insertButtonsAfter('underline', 'strikethrough');
HtmlEditorConfig::get('cms')->insertButtonsAfter('indent', 'hr');
HtmlEditorConfig::get('cms')->insertButtonsAfter('hr', 'charmap');
HtmlEditorConfig::get('cms')->removeButtons('ssembed');
Ensuite, pour ajouter de vos propres styles, toujours dans app/_config.php :
$style_formats = [
['title' => 'Nom du style 1', 'selector' => 'div, p', 'classes' => 'style1' ],
['title' => 'Nom du style 2', 'selector' => 'div, p', 'classes' => 'style2' ]
];
HtmlEditorConfig::get('cms')->addButtonsToLine(2, 'styleselect');
HtmlEditorConfig::get('cms')->setOptions([ 'importcss_append' => true, 'importcss_selector_filter' => 'fake', 'style_formats' => $style_formats]);
Codes HTML
Par défaut plusieurs écritures HTML sont bloquées par Silverstripe. Pour permettre de nouveaux codes HTML, ajoutez les lignes suivantes à la fin de votre fichier "app/_config.php".
HtmlEditorConfig::get('cms')->setOption(
'extended_valid_elements',
'ol[start|type],i[class|title]'
);
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 "app/_config/app. yml" et ajouter à la fin :
SilverStripe\Control\Email\Email:
admin_email: 'webmaster@monsite.com'
W3C check
La validation des pages par le W3C donne deux warning sur <script type="application/javascript">. Pour s'en défaire, dans "vendor\silverstripe\framework\src\View\Requierements_Backend.php" commenter l'ajout du type :
$htmlAttributes = [
// 'type' => isset($attributes['type']) ? $attributes['type'] : "application/javascript",
'src' => $this->pathForFile($file),
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.
composer require axllent/silverstripe-version-truncator
On paramètre juste le nombre de versions publiées et le nombre de versions brouillons qu'on souhaite garder par page dans "vendor/axllent/silverstripe-version-truncator/_config/extension.yml".