.. |vspace| raw:: latex
\vspace{5mm}
.. |embed_js| raw:: html
|embed_js|
*************************************************
Les sites web
*************************************************
Définition d'un site web
-------------------------
**Un site web dans MindFlow, c'est :**
* **Une série de gabarits HTML** déposée dans le dossier ``mf_websites/www.sample-website.com/templates/``
|vspace|
* **Une structure de données définie pour chaque gabarit** dans le fichier ``mf_websites/www.sample-website.com/templates.php``
|vspace|
* **Une arborescence de pages** définies et éditées dans le backend
|vspace|
* Très probablement, **des fonctions PHP** définies dans le fichier ``mf_websites/www.sample-website.com/functions.php``. Par exemple une fonction pour générer le menu de navigation sur toutes les pages.
|vspace|
* Eventuellement, **une série de micro-gabarits** (microtemplates) servant à afficher des blocs HTML répétés au sein d'une même page (pour l'affichage d'une série d'actualités par exemple).
|vspace|
* Eventuellement, **un ou plusieurs fichiers de langue** pour traduire les labels du site (navigation, footer...) si le site est multilingue
|vspace|
* Eventuellement, **des plugins** pour gérer des enregistrements personnalisés en backend et générer du contenu dynamique dans les pages.
|
|
De préférence, chaque site web disposera de son propre sous-dossier dans le dossier ``mf_websites/``.
Dans ce sous dossier, on pourra trouver 1 ou plusieurs fichiers de configuration pour le site qui seront appelés depuis le fichier ``mf_config/config.php`` en fonction du nom de domaine d'appel.
Reportez-vous à la section :ref:`install` pour voir comment préparer le fichier de configuration de base et spécifier le nom de domaine de votre site web.
.. important::
A ce stade, assurez-vous que les plugins **URLRewriter** et **Pages** sont bien chargés dans le fichier de configuration de votre site. Normalement ils sont définis par défaut.
|
|
|
|
Définition des gabarits HTML et des marqueurs
---------------------------------------------
Vos gabarits HTML seront faits de code HTML standard, hormis le fait que vous allez y substituer des marqueurs dont le nom sera défini entre crochets comme suit :
::
{nom_du_marqueur}
Vous pouvez en insérer un peu partout dans vos gabarits. Définissons pour l'exemple un gabarit nommé ``default.html`` minimaliste, basé sur l'exemple "stickyFooter" de Bootstrap 3.0 :
.. code-block:: html
|
|
|
N'oubliez pas non-plus de créer l'image associée au micro-gabarit :
.. image:: images/infos.png
|
|
|
|
Sites multilingues
------------------
Pour gérer des sites multilingues avec MindFlow, vous avez 2 possibilités :
* **Créer plusieurs sites différents,** 1 par langue, avec chacun son nom de domaine, sa base de données et son fichier de configuration propres. Dans ce cas Il y aura aussi un backend par site. En somme cette solution consiste plus en du multisite que du multilingue. Toutefois comme les chemins des dossiers sont configurables, les 3 sites pourront pointer vers les mêmes dossier ``templates/`` et ``plugins/``, ce qui leur permettra de disposer d'une base de code commune.
|vspace|
* **Créer un site en plusieurs langues,** administrable à partir d'un même backend. Dans ce cas, le contenu de chaque site sera accessible en frontend via un sous-dossier correspondant au code ISO2 de la langue, par exemple :
::
http://www.sample-website.com/fr/
http://www.sample-website.com/en/
http://www.sample-website.com/it/
**La page d'accueil chargée par défaut** quand on accèdera à ``http://www.sample-website.com`` sans spécifier de sous-dossier **sera celle de la langue par défaut**.
Les langues sont définies dans le fichier de configuration de votre site, dans les variables suivantes
.. code-block:: php
$config = array(
// ...
//on crée une entrée pour chaque langue du site en frontend
'frontend_locales' => array(
'fr' => 'Français',
'en' => 'Anglais',
'it' => 'Italien',
),
// les backend locales servent uniquement si on veut traduire
// le backend en plusieurs langues, c'est à dire si l'on a des
// webmasters dans plusieurs pays différents et ne parlant pas
// nécessairement la langue de la maison mère
// Dans ce cas ils peuvent choisir la langue d'affichage de leur
// backend dans les propriétés de leur profil utilisateur backend
'backend_locales' => array(
'fr' => 'Français',
'en' => 'English',
),
//langue par défaut du site
'default_frontend_locale' => 'fr',
//langue par défaut du backend
'default_backend_locale' => 'fr',
// ...
)
A partir du moment ou l'on ajoute plus d'une langue dans la variable ``$config['frontend_locales']``, une boite de sélection de la langue du site courament éditée apparait dans le backend :
.. image:: images/language-1.jpg
Dès lors, chaque fois que vous créerez un nouvel enregistrement dans le backend, qu'il s'agisse d'une page, d'un utilisateur ou d'une actualité, celui-ci aura le code ISO2 de la langue courante saisi dans le champ `language` de son enregistrement.
.. note ::
Le champ `language` est un champ hérité de dbRecord. Il est donc défini nativement dans tous les enregistrements / classes hérités de dbRecord.
Voici par exemple un extrait d'une vue d'une table mf_news dans phpmyadmin, on y voit les enregistrement créés en langue française :
.. image:: images/language-2.jpg
.. note ::
Si le champ `language` d'un enregistrement a la valeur ``'ALL'``, alors celui-ci sera affiché dans toutes les langues d'édition du backend.
.. note::
Dans un plugin, pour filtrer et afficher les enregistrements en langue italienne, il suffira d'ajouter la condition ``AND language='it'`` à la section WHERE de votre requête.
|
|
MindFlow définit également un champ ``alt_language`` qui stocke, sous la forme d'un tableau, les UIDs des pages correspondant à la page actuelle, mais dans les autres langues du site. Le but de ce champ est essentiellement de permettre de sélectionner, pour une page donnée, les version alternatives définies dans les autres langues et de pouvoir afficher sur le site des liens vers la traduction de la page, sous forme de petits drapeaux cliquables par exemple.
Lorsque plusieurs langues sont actives sur le site, le champ "Langues alternatives de la page" apparait dans l'onglet "Propriétés de la page" :
.. image:: images/language-3.jpg
Voici un exemple de récupération des langues alternatives d'une page en générant des liens sous forme d'images de drapeaux, que l'on pourra définir au sein d'une fonction PHP mappée sur un champ de gabarit :
.. code-block:: php
function getFlags(){
global $mf;
//récupération de la langue actuellement affichée en frontend
$locale = $mf->getLocale();
$page = new page();
$currentPageUid = $mf->info['currentPageUid'];
//on récupère les langues alternatives de la page
if($locale=='fr'){
$AltLangURL_EN = $mf->getPageURL($page->data['alt_language']['value']['en']);
$AltLangURL_IT = $mf->getPageURL($page->data['alt_language']['value']['it']);
$AltLangURL_FR = $mf->getPageURL($currentPageUid);
}
else if($locale=='en') {
$AltLangURL_FR = $mf->getPageURL($page->data['alt_language']['value']['fr']);
$AltLangURL_IT = $mf->getPageURL($page->data['alt_language']['value']['it']);
$AltLangURL_EN = $mf->getPageURL($currentPageUid);
}
else if($locale=='it') {
$AltLangURL_FR = $mf->getPageURL($page->data['alt_language']['value']['fr']);
$AltLangURL_EN = $mf->getPageURL($page->data['alt_language']['value']['en']);
$AltLangURL_IT = $mf->getPageURL($currentPageUid);
}
//génération du code HTML avec les liens de nos drapeaux
$flagFR = '';
$flagEN = '';
$flagIT = '';
return '