On peut aller chercher les données de la feuille de personnage ou du profil par javascript.
On charge la page par du javascript et on y prend ce qu'on souhaite.
Par exemple sur ce forum je pourrais mettre ceci quelque part :
- Code:
Vous êtes fondateur ? La réponse est : <span class="_pf">{{profile_field_7_3}}</span> et votre humeur est " <input type="text" class="_pf" value="{{profile_field_13_-11}}" /> ".
Les profile_field_7_3 et profile_field_13_-11 sont des identifiants ( id="..." ) présent sur la page d'édition de profil, et pour les avoir il faut regarder le code source :
Et ajouter ce script où nécessaire (
voir ce tutoriel ) :
- Code:
// on fait quelque chose seulement si connecté
if(document.cookie.indexOf('fa_'+location.hostname.replace(/\./g,'_')+'_data=')!=-1)
// une fois que la page est chargée
$(function(){
// si il n'y a aucun élément html avec class="_pf" on ne fait rien
if($("._pf").length==0) return;
// on charge la page de profile qui se trouvera dans la variable 'd'
$.get('/profile?mode=editprofile', function(d) {
// on détecte les {{profile_field_...}} et on a une fonction pour les remplacer
var r = /\{\{\s*profile_field_[0-9_-]+\s*\}\}/g, f = function(s){
var v, m = s.match(r);
// si il n'y a pas de {{profile_field_...}} à la chaîne passée en paramètre on ne fait rien de ce qui suit
if(!m.length) return s;
// on va traiter chaque {{profile_field_...}} trouvé
for(var i= 0; i<m.length; i++) {
// on récupère dans la variable v juste le profile_field_... en cours
v= m[i].substr(2, m[i].length-4).trim();
// si id="profile_field_..." est sur la page de profil on continue
if($('#'+v, d).length) {
// si le champ est un champ de texte ou une zone de texte on remplace par la valeur
if($('#'+v, d).is('input[type="text"],textarea'))
m[i]= $('#'+v, d).val();
// si le champ est une liste déroulante on remplace par le texte de l'élément sélectionné
else if($('#'+v, d).is('select'))
m[i]= $('#'+v+' option[selected]', d).text();
// si le champ est une case à cocher on remplace par "coché" ou "non coché"
else if($('#'+v, d).is('input[type="checkbox"])'))
m[i]= ($('#'+v+'[checked]').length?'coché': 'non coché');
// si le champ est une liste, on remplace par les éléments cochés de la liste séparés par des virgules
else if($('#'+v, d).is('ul')) {
var stack = [];
$('#'+v+' input[checked]', d).each(function(){
stack.push($(this).closest("label").text());
});
m[i]= stack.toString()
}
}
}
// après tout ça on réassemble la chaîne ( qui aura subi les remplacements )
var p = s.split(r);
s = p[0];
for(var i= 1; i < p.length; i++)
s += m[i-1] + p[i];
return s;
};
// on boucle sur les éléments avec class="_pf" et on tente de faire des remplacements
$('._pf').each(function(){
var v;
if((v = $(this).val()) && v.indexOf('}}')!=-1)
$(this).val(f(v));
if((v = $(this).html()) && v.indexOf('}}')!=-1)
$(this).html(f(v));
});
});
});
Si c'est sur une page html sans le haut ni le bas du forum, il faut l'entourer de <script> et </script> et faire précéder le script de :
- Code:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
Sinon on pourrait aussi juste les enregistrer dans le navigateur, par exemple :
- Code:
<input class="remember_value" id="champ_xxx" />
en ayant le script suivant sur la page :
- Code:
// le script ne fonctionne que si le navigateur a localStorage ( il faut un navigateur assez vieux pour que ça ne fonctionne pas )
window.localStorage && $(function(){
// si il y a des éléments html avec class="remember_value", on boucle sur chacun d'eux
$('.remember_value').each(function(){
// et si il y a une valeur sauvegardée dans le navigateur
if(localStorage.getItem('rv_'+$(this).attr('id'))!==null)
// on la restaure dans le champ
$(this).val(localStorage.getItem('rv_'+$(this).attr('id')));
// et également à chaque fois que la valeur dans le champ est changée
}).change(function(){
// on met à jour la sauvegarde du champ dans le navigateur
localStorage.setItem('rv_'+$(this).attr('id'), $(this).val());
});
});
devrait permettre que la valeur des champs avec class="remember_value" soient récupérés aux prochains affichages.
On peut également avoir un champ qui aura la même valeur entre plusieurs pages ( il suffit que le id="..." soit identique ).