Форма с расширенными возможностями

Discussion in 'PHP' started by 0x22b, 1 Sep 2008.

  1. 0x22b

    0x22b Elder - Старейшина

    Joined:
    1 Dec 2007
    Messages:
    114
    Likes Received:
    32
    Reputations:
    9
    Все видели форму, когда постят на форум.. вот мне нужна такая же, только всего с двумя кнопками: сделать выделенный текст жирным, вставить ссылку. Если есть что предложить, или уже есть готовый вариант, пишите цену..
     
    2 people like this.
  2. BlackSun

    BlackSun Banned

    Joined:
    1 Apr 2007
    Messages:
    989
    Likes Received:
    1,168
    Reputations:
    446
    <form method="POST" id="mforum">
    <textarea name="msg" ..
    Code:
    script>
    function inc_tag(st_t, en_t)
    { 
    	obj = document.forms.mforum.msg;
    	obj2 = document.forms.mforum;
    	if ((document.selection)) 
    	{
    		obj.focus();
    		obj2.document.selection.createRange().text = st_t+obj2.document.selection.createRange().text+en_t;
    	} else 
    	{
    		obj.focus();
    		obj.value += st_t+en_t;
    	}
    }
    </script>
    
    inc_tag(st_t, en_t) - st_t - начальный тег ([*B] например), en_t - закрывающий.
    Пробелы незабудь вырезать, которые ачат вставил.
     
    2 people like this.
  3. 0x22b

    0x22b Elder - Старейшина

    Joined:
    1 Dec 2007
    Messages:
    114
    Likes Received:
    32
    Reputations:
    9
    Ок, спс. Сча испытаю..
     
  4. 0x22b

    0x22b Elder - Старейшина

    Joined:
    1 Dec 2007
    Messages:
    114
    Likes Received:
    32
    Reputations:
    9
    Code:
    <html>
    </head>
    <script>
    	function inc_tag(st_t, en_t)
    	{ 
    		obj=document.forms.mforum.msg;
    		obj2=document.forms.mforum;
    		if ((document.selection)) 
    		{
    			obj.focus();
    			obj2.document.selection.createRange().text=st_t+obj2.document.selection.createRange().text+en_t;
    		} 
    		else 
    		{
    			obj.focus();
    			obj.value+=st_t+en_t;
    		}
    	}
    </script>
    </head>
    <body>
    <form method="POST" id="mforum">
    <textarea name="msg" WRAP="virtual" COLS="40" ROWS="3">
    </TEXTAREA><br>
    <INPUT TYPE="button" VALUE="B" onClick="inc_tag([тег], [/тег])">
    </form>
    </body>
    </html>
    Вот тут накидал, тестовый вариант.. я с яваскриптом на вы.. только он как то работать не особо желает.. Пробелы убрал..
     
    #4 0x22b, 1 Sep 2008
    Last edited: 1 Sep 2008
  5. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    попробуй так, хота логика скрипта странная
    onClick="inc_tag('<b>', '</b>')", (вместо "<", ">" нужно поставить "[", "]" ) так как в текстареа будет результат,
    <b>Выделенный текст</b>, а не сразу выделенный текст болдом

    поставь любой визивик, например TinyMCE, и укажи в настройках, какие кнопки отображать, делов 5 минут
     
    #5 Naydav, 1 Sep 2008
    Last edited: 1 Sep 2008
  6. Jer1cho

    Jer1cho Member

    Joined:
    6 Jun 2008
    Messages:
    209
    Likes Received:
    65
    Reputations:
    10
    Когда-то выдерал из форума phpbb его бб-коды:
    PHP:
    <html>
     <
    head>
        <
    title>test</title>
        <
    script type="text/javascript">
            var 
    imageTag false;
            var 
    theSelection false;
            var 
    clientPC navigator.userAgent.toLowerCase();
            var 
    clientVer parseInt(navigator.appVersion);
            var 
    is_ie = ((clientPC.indexOf("msie") != -1) && (clientPC.indexOf("opera") == -1));
            var 
    is_nav = ((clientPC.indexOf('mozilla')!=-1) && (clientPC.indexOf('spoofer')==-1)
            && (
    clientPC.indexOf('compatible') == -1) && (clientPC.indexOf('opera')==-1)
            && (
    clientPC.indexOf('webtv')==-1) && (clientPC.indexOf('hotjava')==-1));
            var 
    is_moz 0;
            var 
    is_win = ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit") != -1));
            var 
    is_mac = (clientPC.indexOf("mac")!=-1);
            
    bbcode = new Array();
            
    bbtags = new Array('[b]','[/b]','[i]','[/i]','[u]','[/u]','[s]','[/s]','[quote]','[/quote]','[code]','[/code]','[list]','[/list]','[list=]','[/list]','[url]','[/url]');
            
    imageTag false;
            function 
    getarraysize(thearray) {
            for (
    0thearray.lengthi++) {
            if ((
    thearray[i] == "undefined") || (thearray[i] == "") || (thearray[i] == null))
            return 
    i;}
            return 
    thearray.length;}
            function 
    arraypush(thearray,value) {
            
    thearraygetarraysize(thearray) ] = value;}
            function 
    arraypop(thearray) {
            
    thearraysize getarraysize(thearray);
            
    retval thearray[thearraysize 1];
            
    delete thearray[thearraysize 1];
            return 
    retval;}
            function 
    bbstyle(bbnumber) {
            var 
    txtarea document.post.message;
            
    txtarea.focus();
            
    donotinsert false;
            
    theSelection false;
            
    bblast 0;
            if (
    bbnumber == -1) {
            while (
    bbcode[0]) {
            
    butnumber arraypop(bbcode) - 1;
            
    txtarea.value += bbtags[butnumber 1];
            
    buttext = eval('document.post.addbbcode' butnumber '.value');
            eval(
    'document.post.addbbcode' butnumber '.value ="' buttext.substr(0,(buttext.length 1)) + '"');}
            
    imageTag false;
            
    txtarea.focus();
            return;}
            if ((
    clientVer >= 4) && is_ie && is_win){
            
    theSelection document.selection.createRange().text;
            if (
    theSelection) {
            
    document.selection.createRange().text bbtags[bbnumber] + theSelection bbtags[bbnumber+1];
            
    txtarea.focus();
            
    theSelection '';
            return;}}
            else if (
    txtarea.selectionEnd && (txtarea.selectionEnd txtarea.selectionStart 0)){
            
    mozWrap(txtareabbtags[bbnumber], bbtags[bbnumber+1]);
            return;}
            for (
    0bbcode.lengthi++) {
            if (
    bbcode[i] == bbnumber+1) {
            
    bblast i;
            
    donotinsert true;}}
            if (
    donotinsert) {
            while (
    bbcode[bblast]) {
            
    butnumber arraypop(bbcode) - 1;
            
    txtarea.value += bbtags[butnumber 1];
            
    buttext = eval('document.post.addbbcode' butnumber '.value');
            eval(
    'document.post.addbbcode' butnumber '.value ="' buttext.substr(0,(buttext.length 1)) + '"');
            
    imageTag false;}
            
    txtarea.focus();
            return;
            } else {
            if (
    imageTag && (bbnumber != 14)) {
            
    txtarea.value += bbtags[15];
            
    lastValue arraypop(bbcode) - 1;
            
    document.post.addbbcode14.value "Img";
            
    imageTag false;}
            
    txtarea.value += bbtags[bbnumber];
            if ((
    bbnumber == 14) && (imageTag == false)) imageTag 1;
            
    arraypush(bbcode,bbnumber+1);
            eval(
    'document.post.addbbcode'+bbnumber+'.value += "*"');
            
    txtarea.focus();
            return;}
            
    storeCaret(txtarea);}
            function 
    mozWrap(txtareaopenclose){
            var 
    selLength txtarea.textLength;
            var 
    selStart txtarea.selectionStart;
            var 
    selEnd txtarea.selectionEnd;
            if (
    selEnd == || selEnd == 2
            
    selEnd selLength;
            var 
    s1 = (txtarea.value).substring(0,selStart);
            var 
    s2 = (txtarea.value).substring(selStartselEnd)
            var 
    s3 = (txtarea.value).substring(selEndselLength);
            
    txtarea.value s1 open s2 close s3;
            return;
            }
        
    </script>
     </head>
     <body>
        <form action="" name="post" method="post">
            <input type="button" value="B" onclick="bbstyle(0)"/>
            <input type="button" value="i" onclick="bbstyle(2)"/>
            <input type="button" value="u" onclick="bbstyle(4)"/>
            <input type="button" value="s" onclick="bbstyle(6)"/>
            <input type="button" value="Quote" onclick="bbstyle(8)"/>
            <input type="button" value="Code" onclick="bbstyle(10)"/>
            <input type="button" value="List" onclick="bbstyle(12)"/>
            <input type="button" value="List=" onclick="bbstyle(14)"/>
            <input type="button" value="URL" onclick="bbstyle(16)"/><br/>
            <textarea name="message" rows="10" cols="50"></textarea>
        </form>
     </body>
    </html>
     
    1 person likes this.
  7. .:EnoT:.

    .:EnoT:. Сексуальное чудовище

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    Всё гораздо проще)) + ко всему кроссбраузерность.
    Я в своих проектах его использую)
    Code:
    /* BB-codes */
    function bbcode(open, close){
    	msgfield = (document.all) ? document.all.msg : document.forms['post']['msg']; 
    
    	/* IE */
    	if (document.selection && document.selection.createRange){
    		msgfield.focus();
    		sel = document.selection.createRange();
    		sel.text = open + sel.text + close;
    		msgfield.focus();
    	}
    	/* Mozilla */
    	else if (msgfield.selectionStart || msgfield.selectionStart == '0'){
    		var startPos = msgfield.selectionStart;
    		var endPos = msgfield.selectionEnd;
    
    		msgfield.value = msgfield.value.substring(0, startPos) + open + msgfield.value.substring(startPos, endPos) + close + msgfield.value.substring(endPos, msgfield.value.length);
    		msgfield.selectionStart = msgfield.selectionEnd = endPos + open.length + close.length;
    		msgfield.focus();
    	}
    	/* Main browsers */
    	else{
    		msgfield.value += open + close;
    		msgfield.focus();
    	}
    }
    PHP:
    <form id="post" action="" method="post">
    <
    button type="button" onclick="bbcode('[b]','[/b]')"><b>B</b></button>
    <
    button type="button" onclick="bbcode('[i]','[/i]')"><i>I</i></button>
    <
    textarea name="msg"></textarea>
    </
    form>
     
    2 people like this.
  8. 0x22b

    0x22b Elder - Старейшина

    Joined:
    1 Dec 2007
    Messages:
    114
    Likes Received:
    32
    Reputations:
    9
    Ооо, спасибо вам огромное!
    to BlackSun спасибо за кодес!
    to Naydav спс, забыл просто теги в ковычки поставить!
    to Jer1cho спасиб огромное!
    кстати вот скромное вознаграждение, по два в руки(только для участников предэдущих постов)..
    13983333
    16424444
    17641111
    18048888
    19626666
    25305555
    С меня еще + :) ну прям выручили, я уж искать заколебался.. отпишитесь какие номерки забрать хотите..

    ай яй, Енот, обожди сча еще два добавлю.. ))
     
    1 person likes this.
  9. BlackSun

    BlackSun Banned

    Joined:
    1 Apr 2007
    Messages:
    989
    Likes Received:
    1,168
    Reputations:
    446
    Мну ненадо) отдай нужнаюшимся
     
  10. 0x22b

    0x22b Elder - Старейшина

    Joined:
    1 Dec 2007
    Messages:
    114
    Likes Received:
    32
    Reputations:
    9
    Значит BlackSun не нужно, всеравно спасибо!
     
  11. .:EnoT:.

    .:EnoT:. Сексуальное чудовище

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    Мне тож не надо, лучше в халяву сдай или себе оставь :)
     
    1 person likes this.
  12. 0x22b

    0x22b Elder - Старейшина

    Joined:
    1 Dec 2007
    Messages:
    114
    Likes Received:
    32
    Reputations:
    9
    .:EnoT:. тебе веднее, огромное спасибо за код!
    Jer1cho и NayDav пишите отдам по три в руки..
     
    #12 0x22b, 1 Sep 2008
    Last edited: 1 Sep 2008
  13. Naydav

    Naydav Elder - Старейшина

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    спс, та я к своей привык, хоть ниче прикольного, а уже года 4 :)
     
    1 person likes this.
  14. blaga

    blaga Elder - Старейшина

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    http://www.xbb.uz/
    качни его и юзай на здоровье.
     
    2 people like this.