Aide BBcode...Une messagerie pour un espace membre...

WRInaute discret
Bonjour,

Voila, je suis en train de créer un espace membre, mais je souhaiterais que les membres ient une messagerie interne.Mais malhreusement, je suis encore un faible en php et j'aimerais des conseil en php! (ou bien un script tout prêt!! :lol: )

J'ai déjà beaucoup chercher un petit truc tout prêt, mais sans succès!

Attention : C'est un ajout, je ne souhaite pas changer tout l'espace membre.
 
WRInaute passionné
Ici tu en auras :
http://www.phpscripts-fr.net/scripts/sc ... s+internes

Mais tu ne pourras pas trouver un script qui s'adapte à ton espace membre (sauf si tu ne l'as pas codé toi même et à pris un truc déjà connu? peut être il y aura un mod)

Car par définition une messagerie interne sera nécessaire intimement lié à ton espace membre. Après tu peux peut être adapter, mais si tu es pas top en PHP c'est peut être pas préférable.
 
WRInaute passionné
C'est pas trop compliqué une messagerie interne.

Avant de penser php, il faut penser aux données à stocker.

Crée toi une table "messagerie" du style :
id
expediteur
destinataire
date/heure
sujet
message

(et d'autres infos plus tard pr savoir si le message a été lu ou non, archivé...etc)

Ensuite, il suffit de l'exploiter tout comme tu exploites ta partie membres.

- Ecrire un message (vérifier destinataire => envoyer)
- Lire un message

C'est le minimum.
ça prend du temps à développer mais tu fais ce que tu veux et tu pourra grandement l'améliorer avec le temps.
 
Nouveau WRInaute
Ou alors tu as pensé au coté CMS de la chose ?

Des legers , ou des complets pourraient reprendre toutes les fonctionnalités dont tu as besoin :)
 
WRInaute discret
Au fait, je suis en train de la créer !

Mais, si possible, j'aimerais de l'aide pour le BBcode, j'ai fait quelques recherche su le net, mais pas super intérésant, meci de votre consil ;)
 
WRInaute discret
Code:
$a = array('#\[b\](.*?)\[/b\]#s',
					 '#\[i\](.*?)\[/i\]#s',
					 '#\[u\](.*?)\[/u\]#s',
					 '#\[img\](.*?)\[/img\]#s');

	$b = array('<strong>$1</strong>',
					 '<i>$1</i>',
					 '<u>$1</u>',
					 '<img src="$1" alt="IMAGE" />');

	$text = preg_replace($a, $b, $text);

Voila ;)

Pour une URL par exemple :

Code:
$a = array('#\[url=(.*?)\](.*?)\[/url\]#s');

	$b = array('<a href="$1">$2</a>');

	$text = preg_replace($a, $b, $text);

PS : Je te donne pour l'URL par que je me souvient, j'"ai chercher longtemps ^^ ( il y a un certain temps xP )
 
WRInaute discret
Ok, je vais essayer de faire avec cela, mais juste un autre petit truc, comment faire pour que quand on clique sur le smilies, ca ajoute le code dans la balise textarea?
 
WRInaute discret
Créer un fichier par exempl;e bbcodes.js et met ce code :

Code:
var isMozilla = (navigator.userAgent.toLowerCase().indexOf('gecko')!=-1) ? true : false;
var regexp = new RegExp("[\r]","gi");

function storeCaret(selec) {
if (isMozilla) {
oField = document.forms['news'].elements['newst'];
objectValue = oField.value;
deb = oField.selectionStart;
fin = oField.selectionEnd;
objectValueDeb = objectValue.substring( 0 , oField.selectionStart );
objectValueFin = objectValue.substring( oField.selectionEnd , oField.textLength );
objectSelected = objectValue.substring( oField.selectionStart ,oField.selectionEnd );

	//	alert("Debut:'"+objectValueDeb+"' ("+deb+")\nFin:'"+objectValueFin+"' ("+fin+")\n\nSelectionné:'"+objectSelected+"'("+(fin-deb)+")");
			
oField.value = objectValueDeb + "[" + selec + "]" + objectSelected + "[/" + selec + "]" + objectValueFin;
oField.selectionStart = strlen(objectValueDeb);
oField.selectionEnd = strlen(objectValueDeb + "[" + selec + "]" + objectSelected + "[/" + selec + "]");
oField.focus();
oField.setSelectionRange(
objectValueDeb.length + selec.length + 2,
objectValueDeb.length + selec.length + 2);
}
else
{
oField = document.forms['news'].elements['newst'];
var str = document.selection.createRange().text;
if (str.length>0)
{
// Si on a selectionné du texte
var sel = document.selection.createRange();
sel.text = "[" + selec + "]" + str + "[/" + selec + "]";
sel.collapse();
sel.select();
}
else
{
oField.focus(oField.caretPos);
// alert(oField.caretPos+"\n"+oField.value.length+"\n")
oField.focus(oField.value.length);
oField.caretPos = document.selection.createRange().duplicate();
var bidon = "%~%";
var orig = oField.value;
oField.caretPos.text = bidon;
var i = oField.value.search(bidon);
oField.value = orig.substr(0,i) + "[" + selec + "][/" + selec + "]" + orig.substr(i, oField.value.length);
var r = 0;
for(n = 0; n < i; n++)
{if(regexp.test(oField.value.substr(n,2)) == true){r++;}};
pos = i + 2 + selec.length - r;
//placer(document.forms['news'].elements['newst'], pos);
var r = oField.createTextRange();
r.moveStart('character', pos);
r.collapse();
r.select();
}
}
}

Le bouton :

Code:
<input type="button" value="b" onclick="storeCaret('b')">

PS : L'id du champs de texte doit être "newst"
 
WRInaute discret
Je doit inclure ce code dans ma page?
Exemple : <?php include("smilies.js") ?>

Merci!
aussi, je peut changer l'id du champ en changeant tout les "newst" du code par ce que je souhaite?

Remerci!
 
WRInaute discret
Pour la première question, non pas comme ça^^

Pour la deuxièmes, oui ;)

Pour lié le code :

Code:
<script src="ADRESSE_FICHIER" type="text/javascript"></script>

Biensur tu change : ADRESSE_FICHIER ;)
 
WRInaute discret
SI ;)

Mais, tu voit, tu a une balise <form> ( avec les element biensur ).

Rajoute : id="news"

après <form en laissant un espace ;)
 
WRInaute discret
ah! ca marche pour , mais pour italic, ca :
<input type="button" value="i" onclick="storeCaret('i')">

Non?

et pour les smilies?
 
WRInaute discret
Pour italique, c'est ça mais les smileys c'est un autre code ^^

Dans le fichier .js, ajoute ce code à la fin :

Code:
function smile(smiley)

{

var message = document.form1.message.value;

document.form1.message.value = message + smiley;

}

Ensuite : <img src="images/smileys/content1.gif" OnClick="smile(':)')" />

( c'est un exemple ;) )
 
WRInaute discret
Ca ne marche pas, je pense que c'est a cause de mon fichier Js, le voici!

var isMozilla = (navigator.userAgent.toLowerCase().indexOf('gecko')!=-1) ? true : false;
var regexp = new RegExp("[\r]","gi");

function storeCaret(selec) {
if (isMozilla) {
oField = document.forms['news'].elements['message'];
objectValue = oField.value;
deb = oField.selectionStart;
fin = oField.selectionEnd;
objectValueDeb = objectValue.substring( 0 , oField.selectionStart );
objectValueFin = objectValue.substring( oField.selectionEnd , oField.textLength );
objectSelected = objectValue.substring( oField.selectionStart ,oField.selectionEnd );

// alert("Debut:'"+objectValueDeb+"' ("+deb+")\nFin:'"+objectValueFin+"' ("+fin+")\n\nSelectionné:'"+objectSelected+"'("+(fin-deb)+")");

oField.value = objectValueDeb + "[" + selec + "]" + objectSelected + "[/" + selec + "]" + objectValueFin;
oField.selectionStart = strlen(objectValueDeb);
oField.selectionEnd = strlen(objectValueDeb + "[" + selec + "]" + objectSelected + "[/" + selec + "]");
oField.focus();
oField.setSelectionRange(
objectValueDeb.length + selec.length + 2,
objectValueDeb.length + selec.length + 2);
}
else
{
oField = document.forms['news'].elements['message'];
var str = document.selection.createRange().text;
if (str.length>0)
{
// Si on a selectionné du texte
var sel = document.selection.createRange();
sel.text = "[" + selec + "]" + str + "[/" + selec + "]";
sel.collapse();
sel.select();
}
else
{
oField.focus(oField.caretPos);
// alert(oField.caretPos+"\n"+oField.value.length+"\n")
oField.focus(oField.value.length);
oField.caretPos = document.selection.createRange().duplicate();
var bidon = "%~%";
var orig = oField.value;
oField.caretPos.text = bidon;
var i = oField.value.search(bidon);
oField.value = orig.substr(0,i) + "[" + selec + "][/" + selec + "]" + orig.substr(i, oField.value.length);
var r = 0;
for(n = 0; n < i; n++)
{if(regexp.test(oField.value.substr(n,2)) == true){r++;}};
pos = i + 2 + selec.length - r;
//placer(document.forms['news'].elements['message'], pos);
var r = oField.createTextRange();
r.moveStart('character', pos);
r.collapse();
r.select();
}
}
}
function smile(smiley)

{

var message = document.form1.message.value;

document.form1.message.value = message + smiley;

}
 
WRInaute discret
Le bbcode marche nn ?

Pour les smileys, voila la fonction addaptée à ton script :

Code:
function smile(smiley)

{

var message = document.news.message.value;

document.news.message.value = message + smiley;

}
 
WRInaute discret
ba met ce code :

Code:
function smile(smiley)

{

var oFieldsmiley = document.forms['news'].elements['message'];

document.news.message.value = oFieldsmiley + smiley;

}
 
WRInaute discret
Code:
function toolBar(textarea,bt_img_path,smilies_img_path)
{
	this.addButton		= function() {}
	this.addSmiley		= function() {}
	this.addSpace		= function() {}
	this.draw			= function() {}
	this.moreSmilies	= function() {}
	this.btStrong		= function() {}
	this.btEm			= function() {}
	this.btIns			= function() {}
	this.btDel			= function() {}
	this.btQ			= function() {}
	this.btBquote		= function() {}
	this.btCode			= function() {}
	this.btColor		= function() {}
	this.btPre			= function() {}
	this.btHr			= function() {}
	this.btLink			= function() {}
	this.btAcronym		= function() {}
	this.btEmail		= function() {}
	this.btNospam		= function() {}
	this.btImgLink		= function() {}
	this.btSmilies		= function() {}
	this.barSmilies		= function() {}

	if (!document.createElement) {
		return;
	}

	if ((typeof(document["selection"]) == "undefined")
	&& (typeof(textarea["setSelectionRange"]) == "undefined")) {
		return;
	}

	var toolbar = document.createElement("div");
	toolbar.id = "toolbar";

	var smilies = document.createElement("div");
	smilies.id = "smilies";
	smilies.style.display = 'none';
	smilies.style.padding = '0.3em 0';

	function addButton(src, title, fn)
	{
		var i = document.createElement('img');
		i.src = src;
		i.title = title;
		i.onclick = function() { try { fn() } catch (e) { } return false };
		i.tabIndex = 400;
		toolbar.appendChild(i);
		addSpace(2);
	}

	function addSmiley(src, txt)
	{
		var i = document.createElement('img');
		i.src = src;
		i.title = txt;
		i.style.verticalAlign = 'middle';
		i.onclick = function() { try { encloseSelection(txt, '') } catch (e) { } return false };
		i.tabIndex = 400;
		smilies.appendChild(i);
		addSpace(2);
	}

	function addSpace(w)
	{
		s = document.createElement('span');
		s.style.padding='0 '+w+'px 0 0';
		s.appendChild(document.createTextNode(' '));
		toolbar.appendChild(s);
	}

	function encloseSelection(prefix, suffix, fn)
	{
		textarea.focus();
		var start, end, sel, scrollPos, subst;

		if (typeof(document["selection"]) != "undefined") {
			sel = document.selection.createRange().text;
		} else if (typeof(textarea["setSelectionRange"]) != "undefined") {
			start = textarea.selectionStart;
			end = textarea.selectionEnd;
			scrollPos = textarea.scrollTop;
			sel = textarea.value.substring(start, end);
		}

		if (sel.match(/ $/)) { // exclude ending space char, if any
			sel = sel.substring(0, sel.length - 1);
			suffix = suffix + " ";
		}

		if (typeof(fn) == 'function') {
			var res = (sel) ? fn(sel) : fn('');
		} else {
			var res = (sel) ? sel : '';
		}

		subst = prefix + res + suffix;

		if (typeof(document["selection"]) != "undefined") {
			var range = document.selection.createRange().text = subst;
			textarea.caretPos -= suffix.length;
		} else if (typeof(textarea["setSelectionRange"]) != "undefined") {
			textarea.value = textarea.value.substring(0, start) + subst +
			textarea.value.substring(end);
			if (sel) {
				textarea.setSelectionRange(start + subst.length, start + subst.length);
			} else {
				textarea.setSelectionRange(start + prefix.length, start + prefix.length);
			}
			textarea.scrollTop = scrollPos;
		}
	}

	function draw()
	{
		textarea.parentNode.insertBefore(smilies, textarea);
		textarea.parentNode.insertBefore(toolbar, textarea);
	}

	function moreSmilies(txt)
	{
		l = document.createElement('strong');
		l.style.padding='1em';
		l.style.cursor='pointer';
		l.onclick = function() { popup_smilies(); };
		l.appendChild(document.createTextNode(txt));
		smilies.appendChild(l);
	}

	// ---
	function singleTag(tag)
	{
		var stag = '['+tag+']';
		var etag = '[/'+tag+']';
		encloseSelection(stag,etag);
	}

	function btStrong(label)
	{
		addButton(bt_img_path+'bt_strong.png',label,
		function() { singleTag('b'); });
	}

	function btEm(label)
	{
		addButton(bt_img_path+'bt_em.png',label,
		function() { singleTag('i'); });
	}

	function btIns(label)
	{
		addButton(bt_img_path+'bt_ins.png',label,
		function() { singleTag('u'); });
	}

	function btDel(label)
	{
		addButton(bt_img_path+'bt_del.png',label,
		function() { singleTag('s'); });
	}

	function btQ(label)
	{
		addButton(bt_img_path+'bt_quote.png',label,
		function() { singleTag('q'); });
	}

	function btBquote(label)
	{
		addButton(bt_img_path+'bt_bquote.png',label,
		function() { singleTag('quote'); });
	}

	function btCode(label)
	{
		addButton(bt_img_path+'bt_code.png',label,
		function() { singleTag('c'); });
	}

	function btPre(label)
	{
		addButton(bt_img_path+'bt_pre.png',label,
		function() { singleTag('code'); });
	}

	function btColor(label)
	{
		addButton(bt_img_path+'bt_color.png',label,
		function() { popup_color_picker(); });
	}

	function btImgLink(label,msg_url)
	{
		addButton(bt_img_path+'bt_img_link.png',label,
		function() {
			encloseSelection('','',
			function(str) {
				var href = window.prompt(msg_url,str);
				if (!href) { return str; }

				return '[img]'+href+'[/img]';
			});
		});
	}

	function btHr(label)
	{
		addButton(bt_img_path+'bt_hr.png',label,
		function() {
			encloseSelection('[---]','');
		});
	}

	function btLink(label,msg_url,msg_label)
	{
		addButton(bt_img_path+'bt_link.png',label,
		function() {
			encloseSelection('','',
			function(str) {
				var href = window.prompt(msg_url,str);
				if (!href) { return str; }

				var label = window.prompt(msg_label,str);

				if (label) {
					return '[url="'+href+'"]'+label+'[/url]';
				} else {
					return '[url]'+href+'[/url]';
				}
			});
		});
	}

	function btAcronym(label,msg_title,msg_label)
	{
		addButton(bt_img_path+'bt_acronym.png',label,
		function() {
			encloseSelection('','',
			function(str) {
				var label = window.prompt(msg_label,str);
				if (!label) { return str; }

				var title = window.prompt(msg_title,'');

				if (title) {
					return '[acronym="'+title+'"]'+label+'[/acronym]';
				} else {
					return '[acronym]'+label+'[/acronym]';
				}
			});
		});
	}

	function btEmail(label,msg_addresse,msg_label)
	{
		addButton(bt_img_path+'bt_email.png',label,
		function() {
			encloseSelection('','',
			function(str) {
				var href = window.prompt(msg_addresse,'');
				if (!href) { return str; }

				var label = window.prompt(msg_label,str);

				if (label) {
					return '[email="'+href+'"]'+label+'[/email]';
				} else {
					return '[email]'+href+'[/email]';
				}
			});
		});
	}

	function btNospam(label,msg_addresse,msg_label)
	{
		addButton(bt_img_path+'bt_nospam.png',label,
		function() {
			encloseSelection('','',
			function(str) {
				var href = window.prompt(msg_addresse,'');
				if (!href) { return str; }

				var label = window.prompt(msg_label,str);

				if (label) {
					return '[nospam="'+href+'"]'+label+'[/nospam]';
				} else {
					return '[nospam]'+href+'[/nospam]';
				}
			});
		});
	}

	function btSmilies(label)
	{
		addButton(bt_img_path+'bt_smilies.png',label,
		function()
		{
			element = document.getElementById('smilies');

			if (element.style.display == 'block' )
			{
				textarea.focus();
				element.style.display = 'none';
			}
			else {
				textarea.focus();
				element.style.display = 'block';
			}
		});
	}

	function barSmilies(smiliesTxt,smiliesImg)
	{
		for (var i=0; i<smiliesTxt.length; i++){
			addSmiley(smilies_img_path+smiliesImg[i],smiliesTxt[i]);
		}
	}

	// methods
	this.addButton		= addButton;
	this.addSmiley		= addSmiley;
	this.addSpace		= addSpace;
	this.draw			= draw;
	this.moreSmilies	= moreSmilies;
	this.btStrong		= btStrong;
	this.btEm			= btEm;
	this.btIns			= btIns;
	this.btDel			= btDel;
	this.btQ			= btQ;
	this.btBquote		= btBquote;
	this.btCode			= btCode;
	this.btColor		= btColor;
	this.btPre			= btPre;
	this.btHr			= btHr;
	this.btLink			= btLink;
	this.btAcronym		= btAcronym;
	this.btEmail		= btEmail;
	this.btNospam		= btNospam;
	this.btImgLink		= btImgLink;
	this.btSmilies		= btSmilies;
	this.barSmilies		= barSmilies;
}

Voici le code d'une fonction Js de mon forum, (voir ici, en bas de la page : http://forum.tuning-ordi.com/viewtopic.php?id=77 )

Peut-tu m'aider a en faire quelque hose pour mon forum??

Merci
 
Discussions similaires
Haut