Fusionner un forum Fluxbb 1.5.x et CmsMadeSimple 1.11.x

Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
#1
Gros tuto en plusieurs parties vu les possibilités d'une telle fusion.

Vous pouvez retrouver une discussion similairepour une solution entre phpBB et cmsmadesimple ici. Notez que je ne préconise plus de passer par phpBB pour faire une telle fusion : trop complexe. Ce nouveau tuto à le mérite d'être beaucoup plus léger en terme de modification de fichier source dans fluxbb. Il a également le mérite de pousser le bouchon jusqu'à automatiser les répercutions des modifications dans la charte graphique de CmsMadeSimple vers Fluxbb sans aucune action de l'administrateur.

Quelques points très important à ne pas oublier.

- 1 - Comme à chacun de mes gros tuto, je vous demande de maitriser LARGEMENT php, html, css, js avant de vous lancer dans la mise en application de mon tutoriel. Il est hors de question que je passe mon temps à répéter les même explications parce que le lecteur à oublié de lire tous les mots d'une phrase Wink (rigolez pas, ça arrive plus souvent qu'il n'y parait)

- 2 - Toute modification de fichier source entraine la contrainte de voir ses modifs perdue à la prochaine mise à jour de fluxbb. J'ai externalisé au max ces modif mais vous devez conserver à l'esprit que vous gagnez en ergo tout en perdant en maintenabilité. Un choix qui n'engage que vous.

- 3 - Le tuto est réalisé sur les versions courantes des deux logiciels. Il ne devrait pas avoir de grosses évolutions à l'avenir, mais n'oubliez pas que les choses pourraient tout de même changer sans que le tuto soit mis à jour (manque de temps, oublis, ...)


Le tutoriel va expliquer 3 points majeurs :

1 - Comment intégrer les chartes graphiques de cmsmadesimple dans fluxbb : gabarit + css + ...
2 - Comment automatiser la tache de copie des fichiers
3 - Comment pluguer FEU/cmsmadesimple DEPUIS l'inscription des users dans Fluxbb et bénéficier ainsi de la puissance communautaire de Fluxbb et de la puissance des mises en pages personnalisées par groupes de CmsMadeSimple.

Vous pouve déjà voir le résultat sur cette page. Pensez à jouer avec la déconnexion de ce même forum pour voir les deux résultats différents : connecté et déconnecté

http://pro.cmsmadesimple.fr Smile
Répondre
#1
Gros tuto en plusieurs parties vu les possibilités d'une telle fusion.

Vous pouvez retrouver une discussion similairepour une solution entre phpBB et cmsmadesimple ici. Notez que je ne préconise plus de passer par phpBB pour faire une telle fusion : trop complexe. Ce nouveau tuto à le mérite d'être beaucoup plus léger en terme de modification de fichier source dans fluxbb. Il a également le mérite de pousser le bouchon jusqu'à automatiser les répercutions des modifications dans la charte graphique de CmsMadeSimple vers Fluxbb sans aucune action de l'administrateur.

Quelques points très important à ne pas oublier.

- 1 - Comme à chacun de mes gros tuto, je vous demande de maitriser LARGEMENT php, html, css, js avant de vous lancer dans la mise en application de mon tutoriel. Il est hors de question que je passe mon temps à répéter les même explications parce que le lecteur à oublié de lire tous les mots d'une phrase Wink (rigolez pas, ça arrive plus souvent qu'il n'y parait)

- 2 - Toute modification de fichier source entraine la contrainte de voir ses modifs perdue à la prochaine mise à jour de fluxbb. J'ai externalisé au max ces modif mais vous devez conserver à l'esprit que vous gagnez en ergo tout en perdant en maintenabilité. Un choix qui n'engage que vous.

- 3 - Le tuto est réalisé sur les versions courantes des deux logiciels. Il ne devrait pas avoir de grosses évolutions à l'avenir, mais n'oubliez pas que les choses pourraient tout de même changer sans que le tuto soit mis à jour (manque de temps, oublis, ...)


Le tutoriel va expliquer 3 points majeurs :

1 - Comment intégrer les chartes graphiques de cmsmadesimple dans fluxbb : gabarit + css + ...
2 - Comment automatiser la tache de copie des fichiers
3 - Comment pluguer FEU/cmsmadesimple DEPUIS l'inscription des users dans Fluxbb et bénéficier ainsi de la puissance communautaire de Fluxbb et de la puissance des mises en pages personnalisées par groupes de CmsMadeSimple.

Vous pouve déjà voir le résultat sur cette page. Pensez à jouer avec la déconnexion de ce même forum pour voir les deux résultats différents : connecté et déconnecté

http://pro.cmsmadesimple.fr Smile
Répondre
#2
Génial Smile
Répondre
#2
Génial Smile
Répondre
#3
[h]Comment intégrer les chartes graphiques de cmsmadesimple dans fluxbb[/h]

Petit point explication : comment vais-je procéder ?

je vais créer un gabarit dans cmsmadesimple que je personnaliserais. Ce gabarit n'a pas à être valide HTML ou quoi que ce soit, ici on utilise juste la puissance des templates smarty pour nos besoins. Il est habituel de prendre comme modèle un gabarit existant, après tout on est ici pour uniformiser son site Smile

Je vais créer également des feuilles de style dans cmsmadesimple. Je peux également utiliser celles qui existent déjà et ajouter une Nième qui comportera uniquement les surcharges inhérente à l'adaptation pour Fluxbb.

Je vais créer une page dans cmsmadesimple, une page cachée, qui sera la seule à être liée à mon gabarit

Je vais créer un fichier en pur php, externe à Cmsms, externe à fluxbb, qui aura pour les missions suivantes
- Appeler ma page cachée
- Parser son contenu et extraire les informations liées aux feuilles de style
- Mettre en cache la page (+ 2/3 modif)
- Mettre en cache le CSS
- Retourner le cache à l'appelant sous la forme d'une liste au même format que ceux utilisés par Fluxbb

Évidement, si le cache existe, seul le dernier point est exécuté. C'est d'ailleurs une différence capitale entre ma méthode proposée sur phpBB et celui ci sur fluxBB : la vitesse d’exécution est odieusement rapide, la bande passante consommée négligeable.

Je vais modifier 1 seul fichier dans fluxbb qui aura pour mission d'appeler le précédent.

Je vais modifier les templates de fluxbb afin de profiter des nouvelles données issues de CmsMadeSimple.

Je vais modifier 2-3 lignes dans le css de FluxBB

Fin de l'explication générale.

Créer son gabarit

C'est certainement la partie la plus complexe ! alors attention. L'idée est de créer un gabarit "au plus proche" de votre modèle habituel, et d'inclure un tag à l'intérieur afin de poser des bornes. le tag est <CMSMS> dans notre cas, un choix purement arbitraire car on aurait pu choisir <!-- QUELQUECHOSE --> pour ne pas péter la validation xHTML.

Ces bornes sont utilisées plus loin afin de découper le gabarit en différentes sections, cela facilite deux choses :
- Je pourrais virer post-traitement des portions de code du gabarit que je n'ai pas besoin dans fluxBB
- Par extension, mon gabarit peut rester TRÈS proche de l'original, ce qui limite les soucis de report de modifications entre les gabarits d'origine et ceux destinés au forum.

Donc nouveau gabarit nommé simplement "forum"

Citation :{process_pagedata}<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
{if isset($canonical)}<link rel="canonical" href="{$canonical}" />{elseif isset($content_obj)}<link rel="canonical" href="{$content_obj->GetURL()}" />{/if}
<title>{sitename} - {title}</title>
<CMSMS>
{global_content name='javascript_header'}

<script type="text/javascript" src="{root_url}/uploads/lib/formToWizard.js"></script>
<script type="text/javascript" src="{root_url}/uploads/lib/niceforms.js"></script>
<script type="text/javascript" src="{root_url}/uploads/lib/other.js"></script>
<link rel="stylesheet" type="text/css" media="all" href="{root_url}/uploads/lib/niceforms-default.css" />
<script type="text/javascript">
{literal}
$(document).ready(function() {
init();
existingLoadEvent();
NFInit();
$("#myform").formToWizard({ submitButton: 'close' });
$('.NFSelectOptions').click(function(){verif();});
$('#close2').click(function(){close();});
$('#close').click(function(){cac();});

if(uniquePage){
$('#step0commands').css('display','none');
}

/* Récupère la bannière*/
$.ajax({
url: "{/literal}{root_url}{literal}/index.php?page=bann_forum",
cache: false,
success: function(html){
$("#ban_target").append(html);
}
});

});{/literal}
</script>
{metadata}
{cms_stylesheet}
<CMSMS>
</head>
<CMSMS>
<body class="subf">

<div id="calc"></div>
<div id="popup">
<form id='myform' action="" class="niceform">
<fieldset>
<legend id='firstTitre'></legend>
<div id='firstMessage'></div>
<div id='close2wrap'><input id="close2" type="button" value="Fermer cette fenêtre"/></div>
</fieldset>
<fieldset>
<legend>Informations G&eacute;n&eacute;rales</legend>
<dl>
<dt><label for="versionCmsms">Votre version :</label></dt>
<dd>
<select size="1" name="versionCmsms" id="versionCmsms">
<option value='#1.11.1'># 1.11.1</option>
<option value='-1.11.0'>&nbsp;&nbsp;&nbsp;1.11.0</option>
<option value='-1.10.x'>&nbsp;&nbsp;&nbsp;1.10.x</option>
<option value='-1.9.4.3'>&nbsp;&nbsp;&nbsp;1.9.4.3</option>
<option value='!1.9.x'>&nbsp;&nbsp;&nbsp;1.9.x</option>
<option value='!1.8.x'>&nbsp;&nbsp;&nbsp;1.8.x</option>
<option value='!1.7.x'>&nbsp;&nbsp;&nbsp;1.7.x</option>
<option value='#1.6.10'># 1.6.10</option>
<option value='!1.6.x'>&nbsp;&nbsp;&nbsp;1.6.9 et moins</option>
<option value='?'>&nbsp;&nbsp;&nbsp;Je ne connais pas ma version</option>
</select>

</dd>
</dl>
<dl>
<dt></dt>
<dd>
<span id='versionFaille' class="explication err">Votre version poss&egrave;de une faille de s&eacute;curit&eacute; connue. Mettez vous &agrave; jour imp&eacute;rativement dans les plus bref d&eacute;lais<a href='{root_url}/documentation-cms' target='_blank' title="Regarder l'aide">
<img src="data:image/gif,GIF89a%10%00%10%00%C4%1D%00%00%00%00%D0%D4%DA%C4%C9%D1%C9%CE%D5%D6%D9%DF%BF%C5%CE%E3%E5%E8%DD%E0%E3%F7%F7%F7%EF%F0%F1%F4%F4%F4%EA%EB%ED%04%04%04%01%01%01%02%02%02%BC%C2%CB%03%03%03%08%08%08%0A%0A%0A%11%11%11%09%09%09%06%06%06%0E%0E%0E%05%05%05%07%07%07%0D%0D%0D%13%13%13%15%15%15%0B%0B%0B%FF%FF%FF%00%00%00%00%00%00!%F9%04%01%00%00%1D%00%2C%00%00%00%00%10%00%10%00%00%05t%60%D7%01%91%04%5C%00%04%AC%18%20%8EH%2C%CFq6*8%BE%02%5B%AE3%89%60b%15%B4%00%84%C3%C6b%B9%80p%96%00%07s%B12X%AF%06%40%03kp0%0E%E0p4%1Cf4%08%E8%B46%AD%06%04%DE%F0x%1C%E2%18%D8%EF%AB%3B%1E%20%E8%FBW~%7F%23%05%84%85%86%84%13%2F%00%0F%0F%0C%26%14%0D%00%1A%0C.%2F%11%0F%95%2F%9A%9A%24%9B%9E%2F%15%9F%9E!%00%3B" width="16" height="16" alt="besoin d'aide ?" />
</a></span>
<span id='versionObsolete' class="explication warn">Vous utilisez une version obsol&egrave;te qui n'est plus supportée. Mettez vous &agrave; jour pour obtenir l'aide de la communaut&eacute;<a href='{root_url}/documentation-cms' target='_blank' title="Regarder l'aide">
<img src="data:image/gif,GIF89a%10%00%10%00%C4%1D%00%00%00%00%D0%D4%DA%C4%C9%D1%C9%CE%D5%D6%D9%DF%BF%C5%CE%E3%E5%E8%DD%E0%E3%F7%F7%F7%EF%F0%F1%F4%F4%F4%EA%EB%ED%04%04%04%01%01%01%02%02%02%BC%C2%CB%03%03%03%08%08%08%0A%0A%0A%11%11%11%09%09%09%06%06%06%0E%0E%0E%05%05%05%07%07%07%0D%0D%0D%13%13%13%15%15%15%0B%0B%0B%FF%FF%FF%00%00%00%00%00%00!%F9%04%01%00%00%1D%00%2C%00%00%00%00%10%00%10%00%00%05t%60%D7%01%91%04%5C%00%04%AC%18%20%8EH%2C%CFq6*8%BE%02%5B%AE3%89%60b%15%B4%00%84%C3%C6b%B9%80p%96%00%07s%B12X%AF%06%40%03kp0%0E%E0p4%1Cf4%08%E8%B46%AD%06%04%DE%F0x%1C%E2%18%D8%EF%AB%3B%1E%20%E8%FBW~%7F%23%05%84%85%86%84%13%2F%00%0F%0F%0C%26%14%0D%00%1A%0C.%2F%11%0F%95%2F%9A%9A%24%9B%9E%2F%15%9F%9E!%00%3B" width="16" height="16" alt="besoin d'aide ?" />
</a></span>
<span id='versionInconnue' class="explication warn">Si vous ne connaissez pas votre version, renseignez imp&eacute;rativement les informations syst&egrave;mes dans la prochaine page afin v&eacute;rifier ensemble si votre installation est &agrave; jour.</span>
</dd>
</dl>
<dl>
<dt><label for="urlCmsms">Url du site :</label></dt>
<dd>
<input type='text' id ='urlCmsms' size='30'/>

</dd>
</dl>
<dl><dt></dt><dd><span class="explication">Tr&egrave;s utile pour constater nous même les anomalies, notamment les erreurs de design</span></dd></dl>
<dl>
<dt><label for="hebergeurCmsms">Nom H&eacute;bergeur / Serveur :</label></dt>
<dd>
<input type='text' id ='hebergeurCmsms' size='30'/>

</dd>
</dl>
<dl><dt></dt><dd><span class="explication">Nous pr&eacute;ciser le nom de l'h&eacute;bergeur ou le logiciel sur votre PC (wampserver, easyphp, ...) permettra im&eacute;diatement de cibler certains probl&egrave;mes r&eacute;currants sur nos forums</span></dd></dl>

</fieldset>
<fieldset>
<legend>Informations Syst&egrave;me</legend>

<dl>
<dt>
<label for="moduleCmsms">Ajoutez les informations syst&egrave;mes:</label>
<a href='http://www.furie.be/wink/redigez-votre-question/redigez-votre-question.htm' target='_blank' title="Regarder l'aide">
<img src="data:image/gif,GIF89a%10%00%10%00%C4%1D%00%00%00%00%D0%D4%DA%C4%C9%D1%C9%CE%D5%D6%D9%DF%BF%C5%CE%E3%E5%E8%DD%E0%E3%F7%F7%F7%EF%F0%F1%F4%F4%F4%EA%EB%ED%04%04%04%01%01%01%02%02%02%BC%C2%CB%03%03%03%08%08%08%0A%0A%0A%11%11%11%09%09%09%06%06%06%0E%0E%0E%05%05%05%07%07%07%0D%0D%0D%13%13%13%15%15%15%0B%0B%0B%FF%FF%FF%00%00%00%00%00%00!%F9%04%01%00%00%1D%00%2C%00%00%00%00%10%00%10%00%00%05t%60%D7%01%91%04%5C%00%04%AC%18%20%8EH%2C%CFq6*8%BE%02%5B%AE3%89%60b%15%B4%00%84%C3%C6b%B9%80p%96%00%07s%B12X%AF%06%40%03kp0%0E%E0p4%1Cf4%08%E8%B46%AD%06%04%DE%F0x%1C%E2%18%D8%EF%AB%3B%1E%20%E8%FBW~%7F%23%05%84%85%86%84%13%2F%00%0F%0F%0C%26%14%0D%00%1A%0C.%2F%11%0F%95%2F%9A%9A%24%9B%9E%2F%15%9F%9E!%00%3B" width="16" height="16" alt="besoin d'aide ?" />
</a>
</dt>
<dd>
<textarea id='moduleCmsms' cols='70' rows='7' ></textarea>

</dd>
</dl>
<dl><dt></dt><dd><span class="explication">Ne n&eacute;gligez jamais cette partie, elle nous permet de r&eacute;soudre un nombre tr&egrave;s important de questions en une seule r&eacute;ponse.</span></dd></dl>

</fieldset>

<fieldset>
<legend>Merci pour votre participation</legend>
<p>
A la fin de la discussion, ajoutez dans le d&eacute;but du titre le terme <span class='important'>[R&eacute;solu]</span> entre crochet.
</p>
<p>
Cette simple manipulation nous aide &agrave; conserver le forum bien organis&eacute;. Merci de penser &agrave; nos pauvres mod&eacute;rateurs, mais &eacute;galement aux prochains visiteurs Wink
</p>
<input id="close" type="button" value="Valider ce premier formulaire"/>
</fieldset>

</form></div>

<div id="page">

<div id="pagewrapper">
<div id="langlog">
<div id="login">
{global_content name='social'}
</div>
<div id="lang">
{global_content name='langs'}
</div>

</div>

<!-- start menu -->
<div id="menusearch">
{* <div id="search">
{search}
</div> *}
<div id="menu_vert">
{menu template="corporate_top"}
</div>
</div>
<!-- end menu -->

<!-- start header -->
<div id="header">
<ul id='headlist'>






<li>
<span class='btn_donnate'>{cms_selflink page='participez-cms' text='Donation'}</span>
</li>
<li>
<span class='btn_down'>{global_content name='telecharger'}</span>
</li>
</ul>
<h1><a href="{root_url}">{sitename}</a></h1>
</div>
<!-- end header -->

<!-- start content -->
<div id="content">
<CMSMS>

<CMSMS>

{content}
<CMSMS>
<div class='clearb'></div>
<div class='forumpun'><div class='forumban'><div id='ban_target' class='ban'>{*Sera remplis par Ajax*}</div></div></div>
</div>
<!-- end content -->
</div>

<div id="foot">
<div id="footer">
{menu template="accessible_simple_navigation" number_of_levels="2"}
<div class="clearb"></div>
{global_content name='footer'}
<div class='clearboth'> </div>
</div>
</div>

</div>
<div id="follow">
{global_content name='follow'}
</div>
{global_content name='GA'} {global_content name='popup_content'}
<CMSMS>

</body>
</html>

Ce qui donne de manière synthétique :

Citation :1 - les headers : doctypes, ...
<CMSMS>
2 -le javascript
<CMSMS>
3 -la balise </head>
<CMSMS>
4 -le début du body (notez, la classe body est personnalisée, j'utilise cette classe dans mes fichiers css habituels)
<CMSMS>
5 - du vide (oups, un oublis sans doute...)
<CMSMS>
6 - la balise {content}, bien connue.
<CMSMS>
7 - la fin de page / fin du body + GoogleAnalytics + ...
<CMSMS>
8 - les balises de fin : </body> et </html>

Qu'aurons nous besoin dans fluxBB : le javascript du header, le début du body, la fin du body et c'est tout. Soit respectivement les parties 2-4-7 de notre découpage.

Notez que j'ai également ajouté un peu de code que je sais nécessaire dans fluxbb : mon formulaire de renseignement lors de la création d'un nouveau topic, ce n'est pas un code nécessaire pour vous. De manière plus générale
n'utilisez pas cet exemple en l'état ! si vous réfléchissez 2,5 secondes, vous comprendrez que c'est MON gabarit, il ne marchera jamais chez vous Big Grin

Créer ses feuilles de styles

Personnellement je n'ai pas créé de css en plus. J'ai déporté les surcharges de css directement dans fluxbb. Mais vous pouvez choisir de créer une feuille de style dédiée à cette surchage.

J'ai rattaché 3 feuilles existantes au gabarit : Corporate (la principale), ie pour notre ami de toujours et popup pour la popup d'arrivée.

Aucune modification particulière, y compris dans les urls ou le code smarty.

Créer une page cachée

J'ai créé une bête page de contenu avec un contenu "à la con" et à laquelle j'ai donné une url "à la con" afin de m'assurer qu'elle ne soit pas indéxée. Vous pouvez d'ailleurs la voir en action sur le .fr en tapant dans l'url "/xsa/plu". Dans le code source de cette page html, vous pourrez retrouver nos fameuses balises <CMSMS> Wink

Créer le fichier pur PHP

Créez dans votre répertoire du forum un sous répertoire nommé "tplcmsms"
Créez dedans un fichier vide index.html pour éviter de se faire indexer le contenu du répertoire.
Créez dedans un fichier "tpl.php" qui contient ce code

Citation :<?php

$config = array();
include_once(PUN_ROOT.'../config.php');

$cmsms = array();
//Lecture du fichier de cache
$root_url = "http: //www.votresite.fr";
$filename = PUN_ROOT."tplcmsms/cache.php";
unset($config);
//echo '<!--'.$filename .'-->';

if(is_file($filename) && false)
{
require($filename);
$cmsms = $cmsarr;
} else
{
$cms = file_get_contents("$root_url/xsa/plu");

$cms = str_replace('<base href="'.$root_url.'/" />','',$cms);

$searchD = '<link rel="stylesheet" type="text/css" href="'.$root_url.'/tmp/cache/';
$searchF = '.css"';
$posD = stripos($cms, $searchD);

$arrayOldCss = array();
$arrayNewCss = array();

while($posD !== FALSE)
{
$posF = stripos($cms, $searchF, $posD);
$mycss = substr($cms, $posD + 45, $posF - $posD - 45 + 4);
$mycssContent = file_get_contents($mycss);
$mynewcss = str_replace('/tmp/cache/', '/forum/tplcmsms/', $mycss);
$filenamecss = "./tplcmsms/".substr($mynewcss, stripos($mynewcss, '/forum/tplcmsms/') + strlen('/forum/tplcmsms/'));

//creation du fichier de cache pour css
$handle = @fopen($filenamecss , "w");
if (fwrite($handle, $mycssContent) === FALSE) {
echo "Impossible d'ecrire dans le fichier ($filenamecss)";
exit;
}
fclose($handle);

$arrayOldCss[] = $mycss;
$arrayNewCss[] = $mynewcss;

$posD = stripos($cms, $searchD, $posF);
}

for($i = 0; $i < count($arrayOldCss); $i++)
{
$cms = str_replace($arrayOldCss[$i], $arrayNewCss[$i],$cms);
}


$cms = explode('<CMSMS>',$cms);

$cmsms = array();
// $cmsms['<http>'] = $cms[0];
$cmsms['<CMS_header_content>'] = $cms[1];
//$cmsms['</head>'] = $cms[2];
$cmsms['<CMS_body_haut>'] = $cms[3];
//$cmsms['<CMS_js>'] = $cms[4];
//$cmsms['<body_centre>'] = $cms[5];
$cmsms['<CMS_body_bas>'] = $cms[6];
//$cmsms['</body>'] = $cms[7];

//creation du fichier de cache
$handle = @fopen($filename, "w");
if (fwrite($handle, print_out($cmsms)) === FALSE) {
echo "Impossible d'ecrire dans le fichier ($filename)";
exit;
}
fclose($handle);
}


$tpl_main = str_replace('<CMS_header_content>', $cmsms['<CMS_header_content>'], $tpl_main);
$tpl_main = str_replace('<CMS_body_haut>', $cmsms['<CMS_body_haut>'], $tpl_main);
$tpl_main = str_replace('<CMS_body_bas>', $cmsms['<CMS_body_bas>'], $tpl_main);



function print_out($cmsms)
{
$buffer = '<?php

$cmsarr = array();
';

foreach($cmsms as $key => $value)
{
$buffer .= '$cmsarr["'.$key.'"] =
<<<\'TEXT\'
'.$value.'
TEXT;
';
}
$buffer .= '
?>';

return $buffer;
}

?>

J'ai personnellement ajouté d'autre code propre à notre installation cmsmadesimple.fr mais qui n'a pas besoin d'être montré ici.


En vert on retrouve l'url de la page cachée : à personnaliser si vous n'avez pas la même url que dans mon tuto.

En bleu on récupère nos parties 2-4-7 (oubliez pas que php fait commencer les indexes d'un tabeau à zéro et non à 1, cela explique mon décalage)

Que faisons nous des autres parties ? on les jette Wink

En orange on affecte à des balises purement fluxbb le contenu de nos parties 2-4-7 (pour rappel : parties issues de cmsmadesimple)

Notez : Si ici j'ai choisit d'utiliser les même chaines de bout en bout (ex : <CMS_body_haut>), sachez que ce n'est pas obligatoire. par habitude, FluxBB travaille avec des balises entre < et >. On pourrait avoir donc :

Citation :$cmsms['##oooo'] = $cms[6];

puis
Citation :$tpl_main = str_replace('<Une_Balise_8_Au_HasarD>', $cmsms['##oooo'], $tpl_main);

la balise <Une_Balise_8_Au_HasarD> devient alors disponible dans tous les templates de fluxBB.

Ce que fait ce programme en dehors des points déjà décrits plus haut :

Il fait du changement d'url pour adapter les bases et conserver des images accessible
Il fait une copie des fichiers css compilées de cmsms
Il créé un fichier php de cache qui contiendra les contenus des parties 2-4-7


Modifier Fluxbb

Comme j'ai pu le dire, cette version du tuto est très light en terme de modifications de fichier source. Néanmoins pensez à renouveler cette partie à chaque fois que vous ferrez une mise à jour de fluxBB !


Moi ça se passe ligne 290 dans le fichier header.php

après

Citation :$tpl_main = str_replace('<pun_status>', $tpl_temp, $tpl_main);
// END SUBST - <pun_status>

Ajouter simplement (oui oui, restons simple)

Citation ://CMS
include_once('tplcmsms/tpl.php');

finit Smile

Modifier les templates de Fluxbb

Je pars du principe que vous travaillez avec le gabarit par défaut : Air. Les fichiers à modifiés sont dans le répertoire /include/templates de l'installation de votre forum.

Les modifications sont toujours les mêmes, je vous donne donc un exemple avec help.tpl

Avant :

Citation :<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<pun_language>" lang="<pun_language>" dir="<pun_content_direction>">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<pun_head>
</head>
<body>


<div id="punhelp" class="pun">
<div class="top-box"><div><!-- Top Corners --></div></div>
<div class="punwrap">

<div id="brdmain">
<pun_main>
</div>

</div>
<div class="end-box"><div><!-- Bottom Corners --></div></div>
</div>

</body>
</html>

après

Citation :<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<pun_language>" lang="<pun_language>" dir="<pun_content_direction>">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<pun_head>
<CMS_header_content>
</head>
<body> <--- J'ai supprimé cette ligne
<CMS_body_haut>



<div id="punhelp" class="pun">
<div class="top-box"><div><!-- Top Corners --></div></div>
<div class="punwrap">

<div id="brdmain">
<pun_main>
</div>

</div>
<div class="end-box"><div><!-- Bottom Corners --></div></div>
</div>

<CMS_body_bas>
</body>
</html>

Très simplement j'y inclus les balises contenant les désormais fameuses parties 2-4-7 Smile

J'ai également supprimé la ligne <body> au profit de mon code perso de cmsms qui donnera un truc du style <body class=....> pour m'aider dans la création de règles css spécifiques au forum.


Modifier le css de Fluxbb

Très simple, toujours partant du principe que vous avez le gabarit par défaut : Air, ça se passe dans le fichier /style/Air.css de l'installation de votre forum.

Re-Notez que vous avez la possibilité de déporter ces modifs dans CmsMadeSimple avec une feuille de style dédiée.

== fin de cette partie ==


A ce stade du tuto, votre forum est capable d'afficher un design de type CmsMadeSimple. Smile
Répondre
#3
[h]Comment intégrer les chartes graphiques de cmsmadesimple dans fluxbb[/h]

Petit point explication : comment vais-je procéder ?

je vais créer un gabarit dans cmsmadesimple que je personnaliserais. Ce gabarit n'a pas à être valide HTML ou quoi que ce soit, ici on utilise juste la puissance des templates smarty pour nos besoins. Il est habituel de prendre comme modèle un gabarit existant, après tout on est ici pour uniformiser son site Smile

Je vais créer également des feuilles de style dans cmsmadesimple. Je peux également utiliser celles qui existent déjà et ajouter une Nième qui comportera uniquement les surcharges inhérente à l'adaptation pour Fluxbb.

Je vais créer une page dans cmsmadesimple, une page cachée, qui sera la seule à être liée à mon gabarit

Je vais créer un fichier en pur php, externe à Cmsms, externe à fluxbb, qui aura pour les missions suivantes
- Appeler ma page cachée
- Parser son contenu et extraire les informations liées aux feuilles de style
- Mettre en cache la page (+ 2/3 modif)
- Mettre en cache le CSS
- Retourner le cache à l'appelant sous la forme d'une liste au même format que ceux utilisés par Fluxbb

Évidement, si le cache existe, seul le dernier point est exécuté. C'est d'ailleurs une différence capitale entre ma méthode proposée sur phpBB et celui ci sur fluxBB : la vitesse d’exécution est odieusement rapide, la bande passante consommée négligeable.

Je vais modifier 1 seul fichier dans fluxbb qui aura pour mission d'appeler le précédent.

Je vais modifier les templates de fluxbb afin de profiter des nouvelles données issues de CmsMadeSimple.

Je vais modifier 2-3 lignes dans le css de FluxBB

Fin de l'explication générale.

Créer son gabarit

C'est certainement la partie la plus complexe ! alors attention. L'idée est de créer un gabarit "au plus proche" de votre modèle habituel, et d'inclure un tag à l'intérieur afin de poser des bornes. le tag est <CMSMS> dans notre cas, un choix purement arbitraire car on aurait pu choisir <!-- QUELQUECHOSE --> pour ne pas péter la validation xHTML.

Ces bornes sont utilisées plus loin afin de découper le gabarit en différentes sections, cela facilite deux choses :
- Je pourrais virer post-traitement des portions de code du gabarit que je n'ai pas besoin dans fluxBB
- Par extension, mon gabarit peut rester TRÈS proche de l'original, ce qui limite les soucis de report de modifications entre les gabarits d'origine et ceux destinés au forum.

Donc nouveau gabarit nommé simplement "forum"

Citation :{process_pagedata}<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
{if isset($canonical)}<link rel="canonical" href="{$canonical}" />{elseif isset($content_obj)}<link rel="canonical" href="{$content_obj->GetURL()}" />{/if}
<title>{sitename} - {title}</title>
<CMSMS>
{global_content name='javascript_header'}

<script type="text/javascript" src="{root_url}/uploads/lib/formToWizard.js"></script>
<script type="text/javascript" src="{root_url}/uploads/lib/niceforms.js"></script>
<script type="text/javascript" src="{root_url}/uploads/lib/other.js"></script>
<link rel="stylesheet" type="text/css" media="all" href="{root_url}/uploads/lib/niceforms-default.css" />
<script type="text/javascript">
{literal}
$(document).ready(function() {
init();
existingLoadEvent();
NFInit();
$("#myform").formToWizard({ submitButton: 'close' });
$('.NFSelectOptions').click(function(){verif();});
$('#close2').click(function(){close();});
$('#close').click(function(){cac();});

if(uniquePage){
$('#step0commands').css('display','none');
}

/* Récupère la bannière*/
$.ajax({
url: "{/literal}{root_url}{literal}/index.php?page=bann_forum",
cache: false,
success: function(html){
$("#ban_target").append(html);
}
});

});{/literal}
</script>
{metadata}
{cms_stylesheet}
<CMSMS>
</head>
<CMSMS>
<body class="subf">

<div id="calc"></div>
<div id="popup">
<form id='myform' action="" class="niceform">
<fieldset>
<legend id='firstTitre'></legend>
<div id='firstMessage'></div>
<div id='close2wrap'><input id="close2" type="button" value="Fermer cette fenêtre"/></div>
</fieldset>
<fieldset>
<legend>Informations G&eacute;n&eacute;rales</legend>
<dl>
<dt><label for="versionCmsms">Votre version :</label></dt>
<dd>
<select size="1" name="versionCmsms" id="versionCmsms">
<option value='#1.11.1'># 1.11.1</option>
<option value='-1.11.0'>&nbsp;&nbsp;&nbsp;1.11.0</option>
<option value='-1.10.x'>&nbsp;&nbsp;&nbsp;1.10.x</option>
<option value='-1.9.4.3'>&nbsp;&nbsp;&nbsp;1.9.4.3</option>
<option value='!1.9.x'>&nbsp;&nbsp;&nbsp;1.9.x</option>
<option value='!1.8.x'>&nbsp;&nbsp;&nbsp;1.8.x</option>
<option value='!1.7.x'>&nbsp;&nbsp;&nbsp;1.7.x</option>
<option value='#1.6.10'># 1.6.10</option>
<option value='!1.6.x'>&nbsp;&nbsp;&nbsp;1.6.9 et moins</option>
<option value='?'>&nbsp;&nbsp;&nbsp;Je ne connais pas ma version</option>
</select>

</dd>
</dl>
<dl>
<dt></dt>
<dd>
<span id='versionFaille' class="explication err">Votre version poss&egrave;de une faille de s&eacute;curit&eacute; connue. Mettez vous &agrave; jour imp&eacute;rativement dans les plus bref d&eacute;lais<a href='{root_url}/documentation-cms' target='_blank' title="Regarder l'aide">
<img src="data:image/gif,GIF89a%10%00%10%00%C4%1D%00%00%00%00%D0%D4%DA%C4%C9%D1%C9%CE%D5%D6%D9%DF%BF%C5%CE%E3%E5%E8%DD%E0%E3%F7%F7%F7%EF%F0%F1%F4%F4%F4%EA%EB%ED%04%04%04%01%01%01%02%02%02%BC%C2%CB%03%03%03%08%08%08%0A%0A%0A%11%11%11%09%09%09%06%06%06%0E%0E%0E%05%05%05%07%07%07%0D%0D%0D%13%13%13%15%15%15%0B%0B%0B%FF%FF%FF%00%00%00%00%00%00!%F9%04%01%00%00%1D%00%2C%00%00%00%00%10%00%10%00%00%05t%60%D7%01%91%04%5C%00%04%AC%18%20%8EH%2C%CFq6*8%BE%02%5B%AE3%89%60b%15%B4%00%84%C3%C6b%B9%80p%96%00%07s%B12X%AF%06%40%03kp0%0E%E0p4%1Cf4%08%E8%B46%AD%06%04%DE%F0x%1C%E2%18%D8%EF%AB%3B%1E%20%E8%FBW~%7F%23%05%84%85%86%84%13%2F%00%0F%0F%0C%26%14%0D%00%1A%0C.%2F%11%0F%95%2F%9A%9A%24%9B%9E%2F%15%9F%9E!%00%3B" width="16" height="16" alt="besoin d'aide ?" />
</a></span>
<span id='versionObsolete' class="explication warn">Vous utilisez une version obsol&egrave;te qui n'est plus supportée. Mettez vous &agrave; jour pour obtenir l'aide de la communaut&eacute;<a href='{root_url}/documentation-cms' target='_blank' title="Regarder l'aide">
<img src="data:image/gif,GIF89a%10%00%10%00%C4%1D%00%00%00%00%D0%D4%DA%C4%C9%D1%C9%CE%D5%D6%D9%DF%BF%C5%CE%E3%E5%E8%DD%E0%E3%F7%F7%F7%EF%F0%F1%F4%F4%F4%EA%EB%ED%04%04%04%01%01%01%02%02%02%BC%C2%CB%03%03%03%08%08%08%0A%0A%0A%11%11%11%09%09%09%06%06%06%0E%0E%0E%05%05%05%07%07%07%0D%0D%0D%13%13%13%15%15%15%0B%0B%0B%FF%FF%FF%00%00%00%00%00%00!%F9%04%01%00%00%1D%00%2C%00%00%00%00%10%00%10%00%00%05t%60%D7%01%91%04%5C%00%04%AC%18%20%8EH%2C%CFq6*8%BE%02%5B%AE3%89%60b%15%B4%00%84%C3%C6b%B9%80p%96%00%07s%B12X%AF%06%40%03kp0%0E%E0p4%1Cf4%08%E8%B46%AD%06%04%DE%F0x%1C%E2%18%D8%EF%AB%3B%1E%20%E8%FBW~%7F%23%05%84%85%86%84%13%2F%00%0F%0F%0C%26%14%0D%00%1A%0C.%2F%11%0F%95%2F%9A%9A%24%9B%9E%2F%15%9F%9E!%00%3B" width="16" height="16" alt="besoin d'aide ?" />
</a></span>
<span id='versionInconnue' class="explication warn">Si vous ne connaissez pas votre version, renseignez imp&eacute;rativement les informations syst&egrave;mes dans la prochaine page afin v&eacute;rifier ensemble si votre installation est &agrave; jour.</span>
</dd>
</dl>
<dl>
<dt><label for="urlCmsms">Url du site :</label></dt>
<dd>
<input type='text' id ='urlCmsms' size='30'/>

</dd>
</dl>
<dl><dt></dt><dd><span class="explication">Tr&egrave;s utile pour constater nous même les anomalies, notamment les erreurs de design</span></dd></dl>
<dl>
<dt><label for="hebergeurCmsms">Nom H&eacute;bergeur / Serveur :</label></dt>
<dd>
<input type='text' id ='hebergeurCmsms' size='30'/>

</dd>
</dl>
<dl><dt></dt><dd><span class="explication">Nous pr&eacute;ciser le nom de l'h&eacute;bergeur ou le logiciel sur votre PC (wampserver, easyphp, ...) permettra im&eacute;diatement de cibler certains probl&egrave;mes r&eacute;currants sur nos forums</span></dd></dl>

</fieldset>
<fieldset>
<legend>Informations Syst&egrave;me</legend>

<dl>
<dt>
<label for="moduleCmsms">Ajoutez les informations syst&egrave;mes:</label>
<a href='http://www.furie.be/wink/redigez-votre-question/redigez-votre-question.htm' target='_blank' title="Regarder l'aide">
<img src="data:image/gif,GIF89a%10%00%10%00%C4%1D%00%00%00%00%D0%D4%DA%C4%C9%D1%C9%CE%D5%D6%D9%DF%BF%C5%CE%E3%E5%E8%DD%E0%E3%F7%F7%F7%EF%F0%F1%F4%F4%F4%EA%EB%ED%04%04%04%01%01%01%02%02%02%BC%C2%CB%03%03%03%08%08%08%0A%0A%0A%11%11%11%09%09%09%06%06%06%0E%0E%0E%05%05%05%07%07%07%0D%0D%0D%13%13%13%15%15%15%0B%0B%0B%FF%FF%FF%00%00%00%00%00%00!%F9%04%01%00%00%1D%00%2C%00%00%00%00%10%00%10%00%00%05t%60%D7%01%91%04%5C%00%04%AC%18%20%8EH%2C%CFq6*8%BE%02%5B%AE3%89%60b%15%B4%00%84%C3%C6b%B9%80p%96%00%07s%B12X%AF%06%40%03kp0%0E%E0p4%1Cf4%08%E8%B46%AD%06%04%DE%F0x%1C%E2%18%D8%EF%AB%3B%1E%20%E8%FBW~%7F%23%05%84%85%86%84%13%2F%00%0F%0F%0C%26%14%0D%00%1A%0C.%2F%11%0F%95%2F%9A%9A%24%9B%9E%2F%15%9F%9E!%00%3B" width="16" height="16" alt="besoin d'aide ?" />
</a>
</dt>
<dd>
<textarea id='moduleCmsms' cols='70' rows='7' ></textarea>

</dd>
</dl>
<dl><dt></dt><dd><span class="explication">Ne n&eacute;gligez jamais cette partie, elle nous permet de r&eacute;soudre un nombre tr&egrave;s important de questions en une seule r&eacute;ponse.</span></dd></dl>

</fieldset>

<fieldset>
<legend>Merci pour votre participation</legend>
<p>
A la fin de la discussion, ajoutez dans le d&eacute;but du titre le terme <span class='important'>[R&eacute;solu]</span> entre crochet.
</p>
<p>
Cette simple manipulation nous aide &agrave; conserver le forum bien organis&eacute;. Merci de penser &agrave; nos pauvres mod&eacute;rateurs, mais &eacute;galement aux prochains visiteurs Wink
</p>
<input id="close" type="button" value="Valider ce premier formulaire"/>
</fieldset>

</form></div>

<div id="page">

<div id="pagewrapper">
<div id="langlog">
<div id="login">
{global_content name='social'}
</div>
<div id="lang">
{global_content name='langs'}
</div>

</div>

<!-- start menu -->
<div id="menusearch">
{* <div id="search">
{search}
</div> *}
<div id="menu_vert">
{menu template="corporate_top"}
</div>
</div>
<!-- end menu -->

<!-- start header -->
<div id="header">
<ul id='headlist'>






<li>
<span class='btn_donnate'>{cms_selflink page='participez-cms' text='Donation'}</span>
</li>
<li>
<span class='btn_down'>{global_content name='telecharger'}</span>
</li>
</ul>
<h1><a href="{root_url}">{sitename}</a></h1>
</div>
<!-- end header -->

<!-- start content -->
<div id="content">
<CMSMS>

<CMSMS>

{content}
<CMSMS>
<div class='clearb'></div>
<div class='forumpun'><div class='forumban'><div id='ban_target' class='ban'>{*Sera remplis par Ajax*}</div></div></div>
</div>
<!-- end content -->
</div>

<div id="foot">
<div id="footer">
{menu template="accessible_simple_navigation" number_of_levels="2"}
<div class="clearb"></div>
{global_content name='footer'}
<div class='clearboth'> </div>
</div>
</div>

</div>
<div id="follow">
{global_content name='follow'}
</div>
{global_content name='GA'} {global_content name='popup_content'}
<CMSMS>

</body>
</html>

Ce qui donne de manière synthétique :

Citation :1 - les headers : doctypes, ...
<CMSMS>
2 -le javascript
<CMSMS>
3 -la balise </head>
<CMSMS>
4 -le début du body (notez, la classe body est personnalisée, j'utilise cette classe dans mes fichiers css habituels)
<CMSMS>
5 - du vide (oups, un oublis sans doute...)
<CMSMS>
6 - la balise {content}, bien connue.
<CMSMS>
7 - la fin de page / fin du body + GoogleAnalytics + ...
<CMSMS>
8 - les balises de fin : </body> et </html>

Qu'aurons nous besoin dans fluxBB : le javascript du header, le début du body, la fin du body et c'est tout. Soit respectivement les parties 2-4-7 de notre découpage.

Notez que j'ai également ajouté un peu de code que je sais nécessaire dans fluxbb : mon formulaire de renseignement lors de la création d'un nouveau topic, ce n'est pas un code nécessaire pour vous. De manière plus générale
n'utilisez pas cet exemple en l'état ! si vous réfléchissez 2,5 secondes, vous comprendrez que c'est MON gabarit, il ne marchera jamais chez vous Big Grin

Créer ses feuilles de styles

Personnellement je n'ai pas créé de css en plus. J'ai déporté les surcharges de css directement dans fluxbb. Mais vous pouvez choisir de créer une feuille de style dédiée à cette surchage.

J'ai rattaché 3 feuilles existantes au gabarit : Corporate (la principale), ie pour notre ami de toujours et popup pour la popup d'arrivée.

Aucune modification particulière, y compris dans les urls ou le code smarty.

Créer une page cachée

J'ai créé une bête page de contenu avec un contenu "à la con" et à laquelle j'ai donné une url "à la con" afin de m'assurer qu'elle ne soit pas indéxée. Vous pouvez d'ailleurs la voir en action sur le .fr en tapant dans l'url "/xsa/plu". Dans le code source de cette page html, vous pourrez retrouver nos fameuses balises <CMSMS> Wink

Créer le fichier pur PHP

Créez dans votre répertoire du forum un sous répertoire nommé "tplcmsms"
Créez dedans un fichier vide index.html pour éviter de se faire indexer le contenu du répertoire.
Créez dedans un fichier "tpl.php" qui contient ce code

Citation :<?php

$config = array();
include_once(PUN_ROOT.'../config.php');

$cmsms = array();
//Lecture du fichier de cache
$root_url = "http: //www.votresite.fr";
$filename = PUN_ROOT."tplcmsms/cache.php";
unset($config);
//echo '<!--'.$filename .'-->';

if(is_file($filename) && false)
{
require($filename);
$cmsms = $cmsarr;
} else
{
$cms = file_get_contents("$root_url/xsa/plu");

$cms = str_replace('<base href="'.$root_url.'/" />','',$cms);

$searchD = '<link rel="stylesheet" type="text/css" href="'.$root_url.'/tmp/cache/';
$searchF = '.css"';
$posD = stripos($cms, $searchD);

$arrayOldCss = array();
$arrayNewCss = array();

while($posD !== FALSE)
{
$posF = stripos($cms, $searchF, $posD);
$mycss = substr($cms, $posD + 45, $posF - $posD - 45 + 4);
$mycssContent = file_get_contents($mycss);
$mynewcss = str_replace('/tmp/cache/', '/forum/tplcmsms/', $mycss);
$filenamecss = "./tplcmsms/".substr($mynewcss, stripos($mynewcss, '/forum/tplcmsms/') + strlen('/forum/tplcmsms/'));

//creation du fichier de cache pour css
$handle = @fopen($filenamecss , "w");
if (fwrite($handle, $mycssContent) === FALSE) {
echo "Impossible d'ecrire dans le fichier ($filenamecss)";
exit;
}
fclose($handle);

$arrayOldCss[] = $mycss;
$arrayNewCss[] = $mynewcss;

$posD = stripos($cms, $searchD, $posF);
}

for($i = 0; $i < count($arrayOldCss); $i++)
{
$cms = str_replace($arrayOldCss[$i], $arrayNewCss[$i],$cms);
}


$cms = explode('<CMSMS>',$cms);

$cmsms = array();
// $cmsms['<http>'] = $cms[0];
$cmsms['<CMS_header_content>'] = $cms[1];
//$cmsms['</head>'] = $cms[2];
$cmsms['<CMS_body_haut>'] = $cms[3];
//$cmsms['<CMS_js>'] = $cms[4];
//$cmsms['<body_centre>'] = $cms[5];
$cmsms['<CMS_body_bas>'] = $cms[6];
//$cmsms['</body>'] = $cms[7];

//creation du fichier de cache
$handle = @fopen($filename, "w");
if (fwrite($handle, print_out($cmsms)) === FALSE) {
echo "Impossible d'ecrire dans le fichier ($filename)";
exit;
}
fclose($handle);
}


$tpl_main = str_replace('<CMS_header_content>', $cmsms['<CMS_header_content>'], $tpl_main);
$tpl_main = str_replace('<CMS_body_haut>', $cmsms['<CMS_body_haut>'], $tpl_main);
$tpl_main = str_replace('<CMS_body_bas>', $cmsms['<CMS_body_bas>'], $tpl_main);



function print_out($cmsms)
{
$buffer = '<?php

$cmsarr = array();
';

foreach($cmsms as $key => $value)
{
$buffer .= '$cmsarr["'.$key.'"] =
<<<\'TEXT\'
'.$value.'
TEXT;
';
}
$buffer .= '
?>';

return $buffer;
}

?>

J'ai personnellement ajouté d'autre code propre à notre installation cmsmadesimple.fr mais qui n'a pas besoin d'être montré ici.


En vert on retrouve l'url de la page cachée : à personnaliser si vous n'avez pas la même url que dans mon tuto.

En bleu on récupère nos parties 2-4-7 (oubliez pas que php fait commencer les indexes d'un tabeau à zéro et non à 1, cela explique mon décalage)

Que faisons nous des autres parties ? on les jette Wink

En orange on affecte à des balises purement fluxbb le contenu de nos parties 2-4-7 (pour rappel : parties issues de cmsmadesimple)

Notez : Si ici j'ai choisit d'utiliser les même chaines de bout en bout (ex : <CMS_body_haut>), sachez que ce n'est pas obligatoire. par habitude, FluxBB travaille avec des balises entre < et >. On pourrait avoir donc :

Citation :$cmsms['##oooo'] = $cms[6];

puis
Citation :$tpl_main = str_replace('<Une_Balise_8_Au_HasarD>', $cmsms['##oooo'], $tpl_main);

la balise <Une_Balise_8_Au_HasarD> devient alors disponible dans tous les templates de fluxBB.

Ce que fait ce programme en dehors des points déjà décrits plus haut :

Il fait du changement d'url pour adapter les bases et conserver des images accessible
Il fait une copie des fichiers css compilées de cmsms
Il créé un fichier php de cache qui contiendra les contenus des parties 2-4-7


Modifier Fluxbb

Comme j'ai pu le dire, cette version du tuto est très light en terme de modifications de fichier source. Néanmoins pensez à renouveler cette partie à chaque fois que vous ferrez une mise à jour de fluxBB !


Moi ça se passe ligne 290 dans le fichier header.php

après

Citation :$tpl_main = str_replace('<pun_status>', $tpl_temp, $tpl_main);
// END SUBST - <pun_status>

Ajouter simplement (oui oui, restons simple)

Citation ://CMS
include_once('tplcmsms/tpl.php');

finit Smile

Modifier les templates de Fluxbb

Je pars du principe que vous travaillez avec le gabarit par défaut : Air. Les fichiers à modifiés sont dans le répertoire /include/templates de l'installation de votre forum.

Les modifications sont toujours les mêmes, je vous donne donc un exemple avec help.tpl

Avant :

Citation :<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<pun_language>" lang="<pun_language>" dir="<pun_content_direction>">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<pun_head>
</head>
<body>


<div id="punhelp" class="pun">
<div class="top-box"><div><!-- Top Corners --></div></div>
<div class="punwrap">

<div id="brdmain">
<pun_main>
</div>

</div>
<div class="end-box"><div><!-- Bottom Corners --></div></div>
</div>

</body>
</html>

après

Citation :<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<pun_language>" lang="<pun_language>" dir="<pun_content_direction>">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<pun_head>
<CMS_header_content>
</head>
<body> <--- J'ai supprimé cette ligne
<CMS_body_haut>



<div id="punhelp" class="pun">
<div class="top-box"><div><!-- Top Corners --></div></div>
<div class="punwrap">

<div id="brdmain">
<pun_main>
</div>

</div>
<div class="end-box"><div><!-- Bottom Corners --></div></div>
</div>

<CMS_body_bas>
</body>
</html>

Très simplement j'y inclus les balises contenant les désormais fameuses parties 2-4-7 Smile

J'ai également supprimé la ligne <body> au profit de mon code perso de cmsms qui donnera un truc du style <body class=....> pour m'aider dans la création de règles css spécifiques au forum.


Modifier le css de Fluxbb

Très simple, toujours partant du principe que vous avez le gabarit par défaut : Air, ça se passe dans le fichier /style/Air.css de l'installation de votre forum.

Re-Notez que vous avez la possibilité de déporter ces modifs dans CmsMadeSimple avec une feuille de style dédiée.

== fin de cette partie ==


A ce stade du tuto, votre forum est capable d'afficher un design de type CmsMadeSimple. Smile
Répondre
#4
[h]Comment automatiser la tache de copie des fichiers[/h]

Seconde partie qui consiste à combler un point très chiant : je suis actuellement obligé de vider le cache de mon répertoire /tplcms dans l'installation du forum à chaque fois que je souhaite rafraichir le gabarit.

Vous allez me dire : ça arrive pas tous les jours. Je vous répondrais : non ... mais par exemple , ici nous avons le numéro de version qui change ! et faut pas que j'oublie de mettre à jour le forum si le site propose une nouvelle version Wink


La solution vient de CmsMadeSimple lui même (encore une fois diront certains,... ils ont raison).

Créez une balise utilisateur nommée sobrement : "vide_cache_forum"


Son code :

Citation :$path = "/forum/tplcmsms";

$config = cmsms()->GetConfig();
$path = $config['root_path'].$path;

$dir = opendir($path) or die('Erreur');
while($file= @readdir($dir)) {
if(!is_dir($path.'/'.$file) && $file!= '.' && $file!= '..'
&& $file!= 'tpl.php' && $file!= 'index.html') {
unlink($path.'/'.$file);

}
}

closedir($dir);

Très simple : ouvre le répertoire, supprime tout sauf notre tpl.php + index.html. Cela provoquera une regénération de cache au prochain chargement d'une page dans le forum.

Attention aux 3 premières lignes en mauve qui peuvent être à adapter selon votre installation, moi j'ai le répertoire /forum qui contient fluxbb directement dans les répertoires de CmsMadesimple. Je sais que tout le monde ne fonctionne pas ainsi.

Testez la balise pour confirmer la bonne suppression des fichiers de cache : cache.php + un certain nombre de fichier .css dans le répertoire /tplcmsms de l'installation de Fluxbb


Gérez les events

Toujours dans cmsmadesimple, allez dans Extensions » Gestion des événements et ajoutez la balise utilisateur "vide_cache_forum" pour les évènements suivant :
  • CGBlogArticleAdded <-- lié à la config de cmsmadesimple.fr, à voir chez vous mais je penses pas.
  • CGBlogArticleDeleted <-- lié à la config de cmsmadesimple.fr, à voir chez vous mais je penses pas.
  • CGBlogArticleEdited <-- lié à la config de cmsmadesimple.fr, à voir chez vous mais je penses pas.
  • AddGlobalContentPost
  • AddStylesheetPost
  • AddTemplatePost
  • ContentDeletePost <-- pas certain que ce soit obligatoire ...
  • ContentEditPost <-- pas certain que ce soit obligatoire ...
  • DeleteGlobalContentPost
  • DeleteStylesheetPost
  • DeleteTemplatePost
  • EditStylesheetPost
  • EditTemplatePost

Donc en gros, dès qu'on touche à un contenu global, à un template ou à une feuille de style, que ce soit en créa, en modif ou en suppression, on régénère le cache derrière Smile

== fin de cette partie ==

A ce stade du tuto vous avez totalement automatisé l'installation Smile
Répondre
#4
[h]Comment automatiser la tache de copie des fichiers[/h]

Seconde partie qui consiste à combler un point très chiant : je suis actuellement obligé de vider le cache de mon répertoire /tplcms dans l'installation du forum à chaque fois que je souhaite rafraichir le gabarit.

Vous allez me dire : ça arrive pas tous les jours. Je vous répondrais : non ... mais par exemple , ici nous avons le numéro de version qui change ! et faut pas que j'oublie de mettre à jour le forum si le site propose une nouvelle version Wink


La solution vient de CmsMadeSimple lui même (encore une fois diront certains,... ils ont raison).

Créez une balise utilisateur nommée sobrement : "vide_cache_forum"


Son code :

Citation :$path = "/forum/tplcmsms";

$config = cmsms()->GetConfig();
$path = $config['root_path'].$path;

$dir = opendir($path) or die('Erreur');
while($file= @readdir($dir)) {
if(!is_dir($path.'/'.$file) && $file!= '.' && $file!= '..'
&& $file!= 'tpl.php' && $file!= 'index.html') {
unlink($path.'/'.$file);

}
}

closedir($dir);

Très simple : ouvre le répertoire, supprime tout sauf notre tpl.php + index.html. Cela provoquera une regénération de cache au prochain chargement d'une page dans le forum.

Attention aux 3 premières lignes en mauve qui peuvent être à adapter selon votre installation, moi j'ai le répertoire /forum qui contient fluxbb directement dans les répertoires de CmsMadesimple. Je sais que tout le monde ne fonctionne pas ainsi.

Testez la balise pour confirmer la bonne suppression des fichiers de cache : cache.php + un certain nombre de fichier .css dans le répertoire /tplcmsms de l'installation de Fluxbb


Gérez les events

Toujours dans cmsmadesimple, allez dans Extensions » Gestion des événements et ajoutez la balise utilisateur "vide_cache_forum" pour les évènements suivant :
  • CGBlogArticleAdded <-- lié à la config de cmsmadesimple.fr, à voir chez vous mais je penses pas.
  • CGBlogArticleDeleted <-- lié à la config de cmsmadesimple.fr, à voir chez vous mais je penses pas.
  • CGBlogArticleEdited <-- lié à la config de cmsmadesimple.fr, à voir chez vous mais je penses pas.
  • AddGlobalContentPost
  • AddStylesheetPost
  • AddTemplatePost
  • ContentDeletePost <-- pas certain que ce soit obligatoire ...
  • ContentEditPost <-- pas certain que ce soit obligatoire ...
  • DeleteGlobalContentPost
  • DeleteStylesheetPost
  • DeleteTemplatePost
  • EditStylesheetPost
  • EditTemplatePost

Donc en gros, dès qu'on touche à un contenu global, à un template ou à une feuille de style, que ce soit en créa, en modif ou en suppression, on régénère le cache derrière Smile

== fin de cette partie ==

A ce stade du tuto vous avez totalement automatisé l'installation Smile
Répondre
#5
J'ai mis un lien sur .org : http://forum.cmsmadesimple.org/viewtopic...46#p285746
Répondre
#5
J'ai mis un lien sur .org : http://forum.cmsmadesimple.org/viewtopic...46#p285746
Répondre
#6
Houahhhh ... j'avais un forum à intégrer à un site en cours ...., et je me demandais par où j'allais devoir commencer pour adapter ... !
Vouii génial le boss !
Merci bess !
Retour fin de semaine prochaine !
Philippe
CmsMs V1.6.11 Fr (merci jce) et V1.11.x Fr
Hébergeur Free.fr, Gandi.net (GandiAI et SimpleHosting)
Répondre
#6
Houahhhh ... j'avais un forum à intégrer à un site en cours ...., et je me demandais par où j'allais devoir commencer pour adapter ... !
Vouii génial le boss !
Merci bess !
Retour fin de semaine prochaine !
Philippe
CmsMs V1.6.11 Fr (merci jce) et V1.11.x Fr
Hébergeur Free.fr, Gandi.net (GandiAI et SimpleHosting)
Répondre
#7
Jean le Chauve tu me fous la pression là :o

Merci Philippe. Vous le savez, ce que j'aime ce sont les retours, bons ou mauvais Smile

J'essaie de récupérer le code demain matin (inaccessible de mon taff) ce qui terminera le tuto : piloter à distance les user de fluxbb dans cmsms via FEU.
Répondre
#7
Jean le Chauve tu me fous la pression là :o

Merci Philippe. Vous le savez, ce que j'aime ce sont les retours, bons ou mauvais Smile

J'essaie de récupérer le code demain matin (inaccessible de mon taff) ce qui terminera le tuto : piloter à distance les user de fluxbb dans cmsms via FEU.
Répondre
#8
Désolé, mais ce post va avoir une très grosse audience, il suffit de regarder le nombre de vues pour ton post sur phpBB : 25.691.
T'as intérêt à assurer :lol:
Répondre
#8
Désolé, mais ce post va avoir une très grosse audience, il suffit de regarder le nombre de vues pour ton post sur phpBB : 25.691.
T'as intérêt à assurer :lol:
Répondre
#9
Tiens j'avais pas fait attention a ces stats... boaf sans doute Google qui associe phpBB et Cmsms ... rien d'étonnant Smile

allez demain matin je ressors le code de transfert FluxBB -> FEU. Celui là il est costaud Big Grin
Répondre
#9
Tiens j'avais pas fait attention a ces stats... boaf sans doute Google qui associe phpBB et Cmsms ... rien d'étonnant Smile

allez demain matin je ressors le code de transfert FluxBB -> FEU. Celui là il est costaud Big Grin
Répondre
#10
[h]Comment pluger FEU/cmsmadesimple et Fluxbb[/h]

Le processus que nous allons utiliser n'est pas encore testé de manière massif sur cmsmadesimple.fr, c'est testé en interne sans soucis notable. Mais bon, ... veillez à bien compléter les tests de votre côté Smile

Nous allons, dans CmsMadeSimple, capter le cookies de fluxbb du visiteur. Si il existe, si il est valide, alors nous allons créer un compte équivalent dans FEU (si innexistant) et lui créer une session FEU afin qu'il soit considéré comme connecté sur CmsMadeSimple.

Ce processus de captation de session possède une faille fonctionnelle : Que ce passe t il si je me déconnecte de FEU ? le code va automatiquement regénérer une session FEU ... et si je me connecte sur FEU avant d'être sur fluxBB ? Donc impossibilité de laisser un bouton "connexion" ou "déconnecter" sur cmsmadesimple.

Ma solution est de faire un lien qui pointe vers le forum et/ou de laisser un message à l'attention de l'utilisateur lui expliquant que sa connexion/déconnexion se fait UNIQUEMENT via fluxBB.

Autre point important : comment lire les données de bdd de fluxBB depuis CmsMadeSimple ?

2 cas de figure :

Dans 95% des cas vous utiliserez une base de donnée commune, un schéma commun et donc des identifiants identiques : youpi.
Dans 5% des cas vous utilisez des identifiants différents : arf... mais pas de panique, j'ai une solution aussi.

Préparez votre terrain

Avant de démarrer le code il va falloir aller à la pêche aux informations.

Il vous faut :

* Le nom du cookie
* la seed du cookie
* le préfixe de la base de donnée Fluxbb, traditionnellement "fluxbb_"

et pour ceux qui sont dans les 5% : les identifiants de connexion à la bdd de votre installation.


Le nom du cookie et sa seed sont trouvable facilement dans le fichier config.php de votre installation de forum.

Code :
$cookie_name = 'punbb_cookie';
$cookie_seed = '2a852bb9';

ASTUCE : pour ceux qui sont dans le cas suivant (rare, moi je l'étais) : le forum et cmsmadesimple ne sont pas sur le même sous domaine, exemple : http://www.monsite.fr/forum et http://cms.monsite.fr, un sous domaine différent, il faut faire comprendre à fluxBB que son cookie peut se balader AU DELÀ du sous domaine initial : le www. Pour ce faire il faut modifier dans config.php la ligne suivante :


Code :
$cookie_domain = '.monsite.fr';

Cela laissera valable le cookies partout sur monsite.fr, y compris sur ses sous domaines. Fin de l'astuce.

Le code

J'ai choisit pour des raisons pratiques (créer et appeler des fonctions dans mon code), de placer mon code dans un plugin et non dans une balise utilisateur. Vous pouvez adapter le code pour le mettre dans une UDT si vous le souhaitez mais il faudra repenser mon code.

Créez donc dans le répertoire /plugins de cmsmadesimple un fichier nommé "function.fluxbb2feu.php"

Citation :function smarty_cms_function_fluxbb2feu($params = array(), &$smarty = null)
{
$db = cmsms()->GetDb();
//$db = getFluxBBDb();
$cookie_name = 'punbb_cookie';
$cookie_seed = '2a852bb9';
$dbprefix = 'fluxbb_';
$pun_user = null;

$now = time();

// If the cookie is set and it matches the correct pattern, then read the values from it
if (isset($_COOKIE[$cookie_name]) && preg_match('%^(\d+)\|([0-9a-fA-F]+)\|(\d+)\|([0-9a-fA-F]+)$%', $_COOKIE[$cookie_name], $matches))
{
$cookie = array(
'user_id' => intval($matches[1]),
'password_hash' => $matches[2],
'expiration_time' => intval($matches[3]),
'cookie_hash' => $matches[4],
);
} else{
trace('pattern');
$db->Close();
unset($db);
return;
}


$modops = cmsms()->GetModuleOperations();
$feu = $modops->get_module_instance('FrontEndUsers');


// If it has a non-guest user, and hasn't expired
if (isset($cookie) && $cookie['user_id'] > 1 && $cookie['expiration_time'] > $now)
{
// If the cookie has been tampered with
if (forum_hmac($cookie['user_id'].'|'.$cookie['expiration_time'], $cookie_seed.'_cookie_hash') != $cookie['cookie_hash'])
{
trace('hash');

$db->Close();
unset($db);
return;
}


// Check if there's a user with the user ID and password hash from the cookie
$query = 'SELECT u.*, g.*, o.logged, o.idle FROM '.$dbprefix.'users AS u INNER JOIN '.$dbprefix.'groups AS g ON u.group_id=g.g_id LEFT JOIN '.$dbprefix.'online AS o ON o.user_id=u.id WHERE u.id= ?';
$pun_user = $db->GetRow($query, array(intval($cookie['user_id'])));

// If user authorisation failed
if (!isset($pun_user['id']) || forum_hmac($pun_user['password'], $cookie_seed.'_password_hash') !== $cookie['password_hash'])
{
trace('autho/failes');
$db->Close();
unset($db);
return;
}

$email = $pun_user['email'];
//$password = $pun_user['password'];
$password = 'toto22!#';

//other informations
$id_fluxbb = $pun_user['id'];
$id_group_fluxbb = $pun_user['group_id'];
$username = $pun_user['username'];

unset($pun_user);




//Group by default
$gid = $feu->GetGroupID('utilisateurs');

$feu_user = $feu->GetUserInfoByName($email);
if($feu_user == null || $feu_user[0] == null)
{
$tmp = $feu->GetPreference('expireage_months',6);
$expires = strtotime(sprintf("+%d months",$tmp));

$feu_user = $feu->AddUser( $email, $password, $expires);
$feu_user = $feu->GetUserInfo($feu_user[1]);
$feu->AssignUserToGroup( $feu_user[1]["id"], $gid );
$feu->SetUserPropertyFull('id_fluxbb',$id_fluxbb,$feu_user[1]["id"]);
$feu->SetUserPropertyFull('id_group_fluxbb',$id_group_fluxbb,$feu_user[1]["id"]);
$feu->SetUserPropertyFull('user_fluxbb',$username,$feu_user[1]["id"]);
}

$name = $feu->LoggedInName();
if($name == null || $name =! $email)
{
$result = $feu->Login( $email, $password, "",false,true);
$uid = $result[0];
} else
{
$uid = $feu->LoggedInId();
}

trace("User $uid connect&eacute;");

} else
{
trace('not set or expire : '.print_r($cookie, true).' '.$now);

//Remove FEU cookies / Session
$feu->Logout();
_AttemptInvalidateLoginCookie($feu);

$db->Close();
unset($db);
return;
}


//Finnaly
trace("finnaly");
$db->Close();
unset($db);
}

function smarty_cms_help_function_fluxbb2feu()
{
echo "Gere la liaison Forum cmsms => autre cmsms";
}

function smarty_cms_about_function_fluxbb2feu()
{
?>
<p>Author: Kevin Danezis</p>
<p>Version: 0.1</p>
<p>
Change History:
</p>
<?php
}

function forum_hmac($data, $key, $raw_output = false)
{
return hash_hmac('sha1', $data, $key, $raw_output);
}






function trace($message) {
//echo '<code>'.$message.'</code><br/>';
}

/**
* See FrontEndUsers.module.php Line 1232
**/
function _AttemptInvalidateLoginCookie($feu)
{
$gCms = cmsms();
//$config = $gCms->GetConfig();
if( $feu->GetPreference('usecookiestoremember') &&
($feu->GetPreference('cookiename') != '') )
{
$cookiename = $feu->GetPreference('cookiename');
$value = FALSE;
if( isset($_COOKIE[$cookiename]) )
{
$value = $_COOKIE[$cookiename];
}

$expires = time()-(3600*24); // one day ago
$res = setcookie( $cookiename, $value, $expires, "/" );
if( !$res ) die('delete cookie failed');
}
}

Ce code est en très très grande partie inspiré du code d'authentification du forum Fluxbb lui même, j'ai copié le code, j'ai viré tout ce qui ne m'intéressait pas, j'ai ajouté un peu de code par ci par là et j'ai finit en câblant les données dans FEU.

Notez ce que j'ai colorié dans cette drôle de couleur bizarre : les différentes valeurs que vous devrez personnaliser (généralement : uniquement la seed).

Vous trouvez également la valeur utilisateurs dans le code, c'est le nom d'un groupe existant dans FEU qui sera le groupe par défaut des nouveaux arrivant. A votre charge de créer ce groupe dans FEU et de déplacer au besoin les utilisateurs dans d'autres groupes FEU.

J'ai surligné en vert des éléments qui peuvent être personnalisé. Ainsi dans mon code je récupère l'id de l'utilisateur, l'id de son groupe et le pseudo de l'utilisateur (Bess pour moi). J'ai également choisit de récupérer l'email (...@gmail.com pour moi) qui me servira un peu plus loin d'identifiant unique dans FEU. Vous pouvez ajouter ou changer ces informations assez facilement en tapant sur ces lignes de code.


J'ai surligné en rouge un dernier point : le mot de passe affecté aux utilisateur FEU. Il est le même pour tous, mais comme je ne laisse personne demander son mot de passe, se connecter ou se déconnecter depuis l'interface de FEU, les risques de piratage de session me semblent nuls. Néanmoins on pourrait améliorer le code en choisissant de réencoder le mot de passe de Fluxbb avec un Salt


exemple
Citation :$email = $pun_user['email'];
$salt = 'toto22!#';
$password = md5($salt.$pun_user['password']);


Et si vous faites partie des 5% ayant deux identifiants différents pour cmsmadesimple / Fluxbb : ajoutez ce code :

Citation :function getFluxBBDb()
{
try {
$db= &ADONewConnection('mysql','pear:date:extend');
$db->Connect('localhost','login','password','databaseName');

return $db;
} catch (exception $e) {
var_dump($e);
adodb_backtrace($e->gettrace());
}
}

function smarty_cms_function_fluxbb2feu($params = array(), &$smarty = null)
{
//$db = cmsms()->GetDb(); <-- Notez l'inversion de la ligne en commentaire
$db = getFluxBBDb();
$cookie_name = 'punbb_cookie';
$cookie_seed = '2a852bb9';
$dbprefix = 'fluxbb_';
$pun_user = null;

$now = time();


[......]

Le reste du code sera identique, pensez juste à bien mettre vos identifiants de base de donnée FluxBB Smile

Voilà pour le code ! Vous pouvez maintenant placer {fluxbb2feu} dans le gabarit de vos pages CmsMadeSimple, tout visiteur ayant une session ouverte sur Fluxbb qui passe sur ces pages aura une session ouverte dans FEU.

Notez que si pour une raison (expiration ou par action) la session FluxBB disparait : le code supprimera automatiquement la session FEU en même temps. Donc un utilisateur se déconnectant de Fluxbb sera déconnecté immédiatement de CmsMadeSimple

Préparer FEU

Maintenant que votre code est prêt à fonctionner, il faut préparer FEU pour accueillir les données des visiteurs.

Créez 3 propriétés pour les users

Nom : id_fluxbb Lib : identifiant utilisateur fluxbb Type : Texte Taille : 10 Non Unique
Nom : user_fluxbb Lib : nom d'utilisateur sur le forum Type : Texte Taille : 80 Non Unique
Nom : id_group_fluxbb Lib : identifiant du group utilisateur dans fluxbb Type : Texte Taille : 5 Non Unique


Créez un groupe de users dans FEU nommé humblement "utilisateurs". Remarquez que c'est bien le nom issu du code de mon plugin Smile

Enfin vous liez nos 3 propriétés à ce nouveau groupe en déclarant id_fluxbb et id_group_fluxb comme cachés et user_fluxbb en lecture seule.


Normalement les premiers visiteurs devraient automatiquement avoir un compte équivalent sur FEU. Reste à exploiter les données FEU dans CmsMadeSimple.

Créer une page de test

Pour m'aider dans ma tâche j'ai installé évidement FEU, mais également CustomContent. Un exemple de code très simple :

Citation :{fluxbb2feu}
{if $ccuser->loggedin()}
<p> Bienvenue </p>
<b>Votre email forum : </b> {$ccuser->username()}<br/>
<b>Votre login forum : </b> {$ccuser->property('user_fluxbb') }<br/>
<b>Votre groupe id forum : </b> {$ccuser->property('id_group_fluxbb') }<br/>
<b>Votre user id forum : </b> {$ccuser->property('id_fluxbb') }<br/>
{else}
<h1>Pas connecté sur le forum Fluxbb</h1>
{/if}
Répondre
#10
[h]Comment pluger FEU/cmsmadesimple et Fluxbb[/h]

Le processus que nous allons utiliser n'est pas encore testé de manière massif sur cmsmadesimple.fr, c'est testé en interne sans soucis notable. Mais bon, ... veillez à bien compléter les tests de votre côté Smile

Nous allons, dans CmsMadeSimple, capter le cookies de fluxbb du visiteur. Si il existe, si il est valide, alors nous allons créer un compte équivalent dans FEU (si innexistant) et lui créer une session FEU afin qu'il soit considéré comme connecté sur CmsMadeSimple.

Ce processus de captation de session possède une faille fonctionnelle : Que ce passe t il si je me déconnecte de FEU ? le code va automatiquement regénérer une session FEU ... et si je me connecte sur FEU avant d'être sur fluxBB ? Donc impossibilité de laisser un bouton "connexion" ou "déconnecter" sur cmsmadesimple.

Ma solution est de faire un lien qui pointe vers le forum et/ou de laisser un message à l'attention de l'utilisateur lui expliquant que sa connexion/déconnexion se fait UNIQUEMENT via fluxBB.

Autre point important : comment lire les données de bdd de fluxBB depuis CmsMadeSimple ?

2 cas de figure :

Dans 95% des cas vous utiliserez une base de donnée commune, un schéma commun et donc des identifiants identiques : youpi.
Dans 5% des cas vous utilisez des identifiants différents : arf... mais pas de panique, j'ai une solution aussi.

Préparez votre terrain

Avant de démarrer le code il va falloir aller à la pêche aux informations.

Il vous faut :

* Le nom du cookie
* la seed du cookie
* le préfixe de la base de donnée Fluxbb, traditionnellement "fluxbb_"

et pour ceux qui sont dans les 5% : les identifiants de connexion à la bdd de votre installation.


Le nom du cookie et sa seed sont trouvable facilement dans le fichier config.php de votre installation de forum.

Code :
$cookie_name = 'punbb_cookie';
$cookie_seed = '2a852bb9';

ASTUCE : pour ceux qui sont dans le cas suivant (rare, moi je l'étais) : le forum et cmsmadesimple ne sont pas sur le même sous domaine, exemple : http://www.monsite.fr/forum et http://cms.monsite.fr, un sous domaine différent, il faut faire comprendre à fluxBB que son cookie peut se balader AU DELÀ du sous domaine initial : le www. Pour ce faire il faut modifier dans config.php la ligne suivante :


Code :
$cookie_domain = '.monsite.fr';

Cela laissera valable le cookies partout sur monsite.fr, y compris sur ses sous domaines. Fin de l'astuce.

Le code

J'ai choisit pour des raisons pratiques (créer et appeler des fonctions dans mon code), de placer mon code dans un plugin et non dans une balise utilisateur. Vous pouvez adapter le code pour le mettre dans une UDT si vous le souhaitez mais il faudra repenser mon code.

Créez donc dans le répertoire /plugins de cmsmadesimple un fichier nommé "function.fluxbb2feu.php"

Citation :function smarty_cms_function_fluxbb2feu($params = array(), &$smarty = null)
{
$db = cmsms()->GetDb();
//$db = getFluxBBDb();
$cookie_name = 'punbb_cookie';
$cookie_seed = '2a852bb9';
$dbprefix = 'fluxbb_';
$pun_user = null;

$now = time();

// If the cookie is set and it matches the correct pattern, then read the values from it
if (isset($_COOKIE[$cookie_name]) && preg_match('%^(\d+)\|([0-9a-fA-F]+)\|(\d+)\|([0-9a-fA-F]+)$%', $_COOKIE[$cookie_name], $matches))
{
$cookie = array(
'user_id' => intval($matches[1]),
'password_hash' => $matches[2],
'expiration_time' => intval($matches[3]),
'cookie_hash' => $matches[4],
);
} else{
trace('pattern');
$db->Close();
unset($db);
return;
}


$modops = cmsms()->GetModuleOperations();
$feu = $modops->get_module_instance('FrontEndUsers');


// If it has a non-guest user, and hasn't expired
if (isset($cookie) && $cookie['user_id'] > 1 && $cookie['expiration_time'] > $now)
{
// If the cookie has been tampered with
if (forum_hmac($cookie['user_id'].'|'.$cookie['expiration_time'], $cookie_seed.'_cookie_hash') != $cookie['cookie_hash'])
{
trace('hash');

$db->Close();
unset($db);
return;
}


// Check if there's a user with the user ID and password hash from the cookie
$query = 'SELECT u.*, g.*, o.logged, o.idle FROM '.$dbprefix.'users AS u INNER JOIN '.$dbprefix.'groups AS g ON u.group_id=g.g_id LEFT JOIN '.$dbprefix.'online AS o ON o.user_id=u.id WHERE u.id= ?';
$pun_user = $db->GetRow($query, array(intval($cookie['user_id'])));

// If user authorisation failed
if (!isset($pun_user['id']) || forum_hmac($pun_user['password'], $cookie_seed.'_password_hash') !== $cookie['password_hash'])
{
trace('autho/failes');
$db->Close();
unset($db);
return;
}

$email = $pun_user['email'];
//$password = $pun_user['password'];
$password = 'toto22!#';

//other informations
$id_fluxbb = $pun_user['id'];
$id_group_fluxbb = $pun_user['group_id'];
$username = $pun_user['username'];

unset($pun_user);




//Group by default
$gid = $feu->GetGroupID('utilisateurs');

$feu_user = $feu->GetUserInfoByName($email);
if($feu_user == null || $feu_user[0] == null)
{
$tmp = $feu->GetPreference('expireage_months',6);
$expires = strtotime(sprintf("+%d months",$tmp));

$feu_user = $feu->AddUser( $email, $password, $expires);
$feu_user = $feu->GetUserInfo($feu_user[1]);
$feu->AssignUserToGroup( $feu_user[1]["id"], $gid );
$feu->SetUserPropertyFull('id_fluxbb',$id_fluxbb,$feu_user[1]["id"]);
$feu->SetUserPropertyFull('id_group_fluxbb',$id_group_fluxbb,$feu_user[1]["id"]);
$feu->SetUserPropertyFull('user_fluxbb',$username,$feu_user[1]["id"]);
}

$name = $feu->LoggedInName();
if($name == null || $name =! $email)
{
$result = $feu->Login( $email, $password, "",false,true);
$uid = $result[0];
} else
{
$uid = $feu->LoggedInId();
}

trace("User $uid connect&eacute;");

} else
{
trace('not set or expire : '.print_r($cookie, true).' '.$now);

//Remove FEU cookies / Session
$feu->Logout();
_AttemptInvalidateLoginCookie($feu);

$db->Close();
unset($db);
return;
}


//Finnaly
trace("finnaly");
$db->Close();
unset($db);
}

function smarty_cms_help_function_fluxbb2feu()
{
echo "Gere la liaison Forum cmsms => autre cmsms";
}

function smarty_cms_about_function_fluxbb2feu()
{
?>
<p>Author: Kevin Danezis</p>
<p>Version: 0.1</p>
<p>
Change History:
</p>
<?php
}

function forum_hmac($data, $key, $raw_output = false)
{
return hash_hmac('sha1', $data, $key, $raw_output);
}






function trace($message) {
//echo '<code>'.$message.'</code><br/>';
}

/**
* See FrontEndUsers.module.php Line 1232
**/
function _AttemptInvalidateLoginCookie($feu)
{
$gCms = cmsms();
//$config = $gCms->GetConfig();
if( $feu->GetPreference('usecookiestoremember') &&
($feu->GetPreference('cookiename') != '') )
{
$cookiename = $feu->GetPreference('cookiename');
$value = FALSE;
if( isset($_COOKIE[$cookiename]) )
{
$value = $_COOKIE[$cookiename];
}

$expires = time()-(3600*24); // one day ago
$res = setcookie( $cookiename, $value, $expires, "/" );
if( !$res ) die('delete cookie failed');
}
}

Ce code est en très très grande partie inspiré du code d'authentification du forum Fluxbb lui même, j'ai copié le code, j'ai viré tout ce qui ne m'intéressait pas, j'ai ajouté un peu de code par ci par là et j'ai finit en câblant les données dans FEU.

Notez ce que j'ai colorié dans cette drôle de couleur bizarre : les différentes valeurs que vous devrez personnaliser (généralement : uniquement la seed).

Vous trouvez également la valeur utilisateurs dans le code, c'est le nom d'un groupe existant dans FEU qui sera le groupe par défaut des nouveaux arrivant. A votre charge de créer ce groupe dans FEU et de déplacer au besoin les utilisateurs dans d'autres groupes FEU.

J'ai surligné en vert des éléments qui peuvent être personnalisé. Ainsi dans mon code je récupère l'id de l'utilisateur, l'id de son groupe et le pseudo de l'utilisateur (Bess pour moi). J'ai également choisit de récupérer l'email (...@gmail.com pour moi) qui me servira un peu plus loin d'identifiant unique dans FEU. Vous pouvez ajouter ou changer ces informations assez facilement en tapant sur ces lignes de code.


J'ai surligné en rouge un dernier point : le mot de passe affecté aux utilisateur FEU. Il est le même pour tous, mais comme je ne laisse personne demander son mot de passe, se connecter ou se déconnecter depuis l'interface de FEU, les risques de piratage de session me semblent nuls. Néanmoins on pourrait améliorer le code en choisissant de réencoder le mot de passe de Fluxbb avec un Salt


exemple
Citation :$email = $pun_user['email'];
$salt = 'toto22!#';
$password = md5($salt.$pun_user['password']);


Et si vous faites partie des 5% ayant deux identifiants différents pour cmsmadesimple / Fluxbb : ajoutez ce code :

Citation :function getFluxBBDb()
{
try {
$db= &ADONewConnection('mysql','pear:date:extend');
$db->Connect('localhost','login','password','databaseName');

return $db;
} catch (exception $e) {
var_dump($e);
adodb_backtrace($e->gettrace());
}
}

function smarty_cms_function_fluxbb2feu($params = array(), &$smarty = null)
{
//$db = cmsms()->GetDb(); <-- Notez l'inversion de la ligne en commentaire
$db = getFluxBBDb();
$cookie_name = 'punbb_cookie';
$cookie_seed = '2a852bb9';
$dbprefix = 'fluxbb_';
$pun_user = null;

$now = time();


[......]

Le reste du code sera identique, pensez juste à bien mettre vos identifiants de base de donnée FluxBB Smile

Voilà pour le code ! Vous pouvez maintenant placer {fluxbb2feu} dans le gabarit de vos pages CmsMadeSimple, tout visiteur ayant une session ouverte sur Fluxbb qui passe sur ces pages aura une session ouverte dans FEU.

Notez que si pour une raison (expiration ou par action) la session FluxBB disparait : le code supprimera automatiquement la session FEU en même temps. Donc un utilisateur se déconnectant de Fluxbb sera déconnecté immédiatement de CmsMadeSimple

Préparer FEU

Maintenant que votre code est prêt à fonctionner, il faut préparer FEU pour accueillir les données des visiteurs.

Créez 3 propriétés pour les users

Nom : id_fluxbb Lib : identifiant utilisateur fluxbb Type : Texte Taille : 10 Non Unique
Nom : user_fluxbb Lib : nom d'utilisateur sur le forum Type : Texte Taille : 80 Non Unique
Nom : id_group_fluxbb Lib : identifiant du group utilisateur dans fluxbb Type : Texte Taille : 5 Non Unique


Créez un groupe de users dans FEU nommé humblement "utilisateurs". Remarquez que c'est bien le nom issu du code de mon plugin Smile

Enfin vous liez nos 3 propriétés à ce nouveau groupe en déclarant id_fluxbb et id_group_fluxb comme cachés et user_fluxbb en lecture seule.


Normalement les premiers visiteurs devraient automatiquement avoir un compte équivalent sur FEU. Reste à exploiter les données FEU dans CmsMadeSimple.

Créer une page de test

Pour m'aider dans ma tâche j'ai installé évidement FEU, mais également CustomContent. Un exemple de code très simple :

Citation :{fluxbb2feu}
{if $ccuser->loggedin()}
<p> Bienvenue </p>
<b>Votre email forum : </b> {$ccuser->username()}<br/>
<b>Votre login forum : </b> {$ccuser->property('user_fluxbb') }<br/>
<b>Votre groupe id forum : </b> {$ccuser->property('id_group_fluxbb') }<br/>
<b>Votre user id forum : </b> {$ccuser->property('id_fluxbb') }<br/>
{else}
<h1>Pas connecté sur le forum Fluxbb</h1>
{/if}
Répondre
#11
Un grand merci Bess pour se tuto, je m'y mets dés que mon client valide sa demande de forum...

Encore bravo pour ton efficacité
Répondre
#11
Un grand merci Bess pour se tuto, je m'y mets dés que mon client valide sa demande de forum...

Encore bravo pour ton efficacité
Répondre
#12
Voilà, le tuto est terminé. Je vais sans aucun doute devoir revenir dessus ultérieurement et vous apporter des précisions qui sont peut être trop évidentes à mes yeux pour être détaillées en première écriture.

Il parait monstrueusement gros, mais il faut bien se rendre compte qu'il n'est pas complexe du tout. Il suffit de prendre le temps de lire sans sauter de sections car chacune d'entre elles est indispensable Wink

J'en suis assez content parce que ça faisait un moment que je devais m'y mettre, une chose en moins sur ma liste. J'espère juste qu'il sera utile pour ceux qui travaille avec CmsMadeSimple Smile

S'il vous a été utile, un petit ping pour donner votre sentiment à l'usage me ferra bien plaisir.

Enfin pour ceux qui veulent voir ce que donne l'intégration : je mettrais ce soir une url pour montrer en live le résultat dans CmsMadeSimple Smile
Répondre
#12
Voilà, le tuto est terminé. Je vais sans aucun doute devoir revenir dessus ultérieurement et vous apporter des précisions qui sont peut être trop évidentes à mes yeux pour être détaillées en première écriture.

Il parait monstrueusement gros, mais il faut bien se rendre compte qu'il n'est pas complexe du tout. Il suffit de prendre le temps de lire sans sauter de sections car chacune d'entre elles est indispensable Wink

J'en suis assez content parce que ça faisait un moment que je devais m'y mettre, une chose en moins sur ma liste. J'espère juste qu'il sera utile pour ceux qui travaille avec CmsMadeSimple Smile

S'il vous a été utile, un petit ping pour donner votre sentiment à l'usage me ferra bien plaisir.

Enfin pour ceux qui veulent voir ce que donne l'intégration : je mettrais ce soir une url pour montrer en live le résultat dans CmsMadeSimple Smile
Répondre
#13
Attention : En date de ce post, j'ai fait une modification dans le code du plugin suite à la découverte d'un bug (la déco ne se faisait pas bien en automatique). Reprenez ce nouveau code si vous aviez déjà commencé à prendre le code du tuto.

Et une jolie page pour tester : http://pro.cmsmadesimple.fr Smile
Répondre
#13
Attention : En date de ce post, j'ai fait une modification dans le code du plugin suite à la découverte d'un bug (la déco ne se faisait pas bien en automatique). Reprenez ce nouveau code si vous aviez déjà commencé à prendre le code du tuto.

Et une jolie page pour tester : http://pro.cmsmadesimple.fr Smile
Répondre
#14
Yop,
Effectivement, tuto monstrueusement long Tongue.
Mais il m'as l'air pas mal complet et ça me plait Smile
Je voulais intégrer un PHPBB à mon site via un module fait maison.

Mais finalement j'en aurais pas besoin (merci bess)

Je vous enverrais le résultat quand ça sera prêt Big Grin

A+
Répondre
#14
Yop,
Effectivement, tuto monstrueusement long Tongue.
Mais il m'as l'air pas mal complet et ça me plait Smile
Je voulais intégrer un PHPBB à mon site via un module fait maison.

Mais finalement j'en aurais pas besoin (merci bess)

Je vous enverrais le résultat quand ça sera prêt Big Grin

A+
Répondre
#15
avec grand plaisir Wink
Répondre
#15
avec grand plaisir Wink
Répondre
#16
J'en suis à la conception du CSS pour bien intégrer le Forum à mon site Web.
Demain je m'occuperais de FEU Wink

Bon premier feedback:

c'est parfait mais il y a quelques erreurs...

Créer le fichier pur PHP
Manque le < à <?php
erreur à la ligne 106, tu as une } qui ne ferme rien et tu retourne $html qui n’existe pas
$config['root_url'] n’existe pas. (pour ma part)

Modifier Fluxbb
tu ne dis pas que c'est le fichier header.php qu'il faut modifié Wink

Modifier les templates de Fluxbb
c'est dans le dossier /inculde/templates et non seulement /include

Sinon c'est vraiment parfait, bravo à toi bess et merci du coup de main Wink
Répondre
#16
J'en suis à la conception du CSS pour bien intégrer le Forum à mon site Web.
Demain je m'occuperais de FEU Wink

Bon premier feedback:

c'est parfait mais il y a quelques erreurs...

Créer le fichier pur PHP
Manque le < à <?php
erreur à la ligne 106, tu as une } qui ne ferme rien et tu retourne $html qui n’existe pas
$config['root_url'] n’existe pas. (pour ma part)

Modifier Fluxbb
tu ne dis pas que c'est le fichier header.php qu'il faut modifié Wink

Modifier les templates de Fluxbb
c'est dans le dossier /inculde/templates et non seulement /include

Sinon c'est vraiment parfait, bravo à toi bess et merci du coup de main Wink
Répondre
#17
Hello, après test de l’intégration de ton plugin pour la liaison fluxbb - feu j'ai pu remarqué les détails suivant:
lors de la mise de la balise {fluxbb2feu} le CSS plante, et les connexion ne jouent pas...
Tu peux voir le problème ici: http://www.levalaisan.ch/test
bonne soirée ^^'
Répondre
#17
Hello, après test de l’intégration de ton plugin pour la liaison fluxbb - feu j'ai pu remarqué les détails suivant:
lors de la mise de la balise {fluxbb2feu} le CSS plante, et les connexion ne jouent pas...
Tu peux voir le problème ici: http://www.levalaisan.ch/test
bonne soirée ^^'
Répondre
#18
Tu devrais enlever les commentaires avant la doctype, ils risquent de casser ta mise en page sur les plus vieilles versons d'IE.
Répondre
#18
Tu devrais enlever les commentaires avant la doctype, ils risquent de casser ta mise en page sur les plus vieilles versons d'IE.
Répondre
#19
merci pour ces retours, j'ai corrigé le tuto en fonction

http://www.levalaisan.ch/test

ton gabarit forum ne doit avoir aucun css associé je parie Smile

préfère les url absolues à celles relatives également (pour tes JS)
Répondre
#19
merci pour ces retours, j'ai corrigé le tuto en fonction

http://www.levalaisan.ch/test

ton gabarit forum ne doit avoir aucun css associé je parie Smile

préfère les url absolues à celles relatives également (pour tes JS)
Répondre
#20
Hello bess,

Ben le CSS le gabarit du forum à bel et bien un css...

http://www.levalaisan.ch/forum Wink

Je vais quand même chercher l'erreur Wink

Je te redis.
Répondre
#20
Hello bess,

Ben le CSS le gabarit du forum à bel et bien un css...

http://www.levalaisan.ch/forum Wink

Je vais quand même chercher l'erreur Wink

Je te redis.
Répondre
#21
http://www.levalaisan.ch/test n'a rien a voir avec le forum si je ne m'abuse, c'est l’équivalent à mon /xsa/plu de mon tuto ?

donc il ne devrait pas avoir de css issu de fluxbb mais seulement du css issu de cmsms
Répondre
#21
http://www.levalaisan.ch/test n'a rien a voir avec le forum si je ne m'abuse, c'est l’équivalent à mon /xsa/plu de mon tuto ?

donc il ne devrait pas avoir de css issu de fluxbb mais seulement du css issu de cmsms
Répondre
#22
Hello,

Alors je vais clarifier la situation pour que tu puisse mieux comprendre le soucis.

J'ai créer un gabarit Forum comme expliqué dans ton tuto,
J'y es incorporé le CSS du forum (cela m’évite de devoir modifier le fichier Air.css)
Celui-ci attribué à la page invisible: http://www.levalaisan.ch/ppf

Jusque la tous fonctionne, comme tu vois, le forum fonctionne bien à l'adresse http://www.levalaisan.ch/forum

Le soucis apparait lorsque j'utilise le plugin de liaison de FEU.
J'ai repris ta balise {fluxbb2feu} (et rien d'autre) sur la page http://www.levalaisan.ch/test avec le gabarit de base de mon site.
Apparemment le soucis viendrait du plugin ?

J'espère avoir clarifié le soucis Wink

Bonne soirée
Répondre
#22
Hello,

Alors je vais clarifier la situation pour que tu puisse mieux comprendre le soucis.

J'ai créer un gabarit Forum comme expliqué dans ton tuto,
J'y es incorporé le CSS du forum (cela m’évite de devoir modifier le fichier Air.css)
Celui-ci attribué à la page invisible: http://www.levalaisan.ch/ppf

Jusque la tous fonctionne, comme tu vois, le forum fonctionne bien à l'adresse http://www.levalaisan.ch/forum

Le soucis apparait lorsque j'utilise le plugin de liaison de FEU.
J'ai repris ta balise {fluxbb2feu} (et rien d'autre) sur la page http://www.levalaisan.ch/test avec le gabarit de base de mon site.
Apparemment le soucis viendrait du plugin ?

J'espère avoir clarifié le soucis Wink

Bonne soirée
Répondre
#23
haaaaaaaaa .....

effectivement Big Grin j'avais rien compris...

bon là de but en blanc je ne saurais dire ce qui peut se passer.

Ta page test est avec le même gabarit qu'un /a-propos ?

si tu met en commentaire le code {fluxbb2feu} ça se remet en place ?

et en modifiant le code de mon plugin pour y ajouter un peu de code au fur et à mesure, tu pourrais isoler le code qui fait sauter le CSS?
Répondre
#23
haaaaaaaaa .....

effectivement Big Grin j'avais rien compris...

bon là de but en blanc je ne saurais dire ce qui peut se passer.

Ta page test est avec le même gabarit qu'un /a-propos ?

si tu met en commentaire le code {fluxbb2feu} ça se remet en place ?

et en modifiant le code de mon plugin pour y ajouter un peu de code au fur et à mesure, tu pourrais isoler le code qui fait sauter le CSS?
Répondre
#24
Hello bess, après une petite recherche de ma part j'ai trouvé le "bug" dans ton plugin Wink
le $db->Close(); est obsolète, et il faut donc ne pas les mettre Wink
Répondre
#24
Hello bess, après une petite recherche de ma part j'ai trouvé le "bug" dans ton plugin Wink
le $db->Close(); est obsolète, et il faut donc ne pas les mettre Wink
Répondre
#25
comment çà c'est obsolète Sad

bon si ça résout ton soucis : tant mieux mais je suis très surpris, tu as un lien à me filer à ce sujet ? car quand je regarde cette page http://adodblite.sourceforge.net/functions.php c'est tout sauf deprecated ...
Répondre
#25
comment çà c'est obsolète Sad

bon si ça résout ton soucis : tant mieux mais je suis très surpris, tu as un lien à me filer à ce sujet ? car quand je regarde cette page http://adodblite.sourceforge.net/functions.php c'est tout sauf deprecated ...
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)