Смайлы в поле ввода

Discussion in 'PHP' started by Rednoise, 8 Jun 2009.

  1. Rednoise

    Rednoise New Member

    Joined:
    28 Mar 2007
    Messages:
    29
    Likes Received:
    4
    Reputations:
    0
    ребят, дело такое - хочу сделать так чтобы при вставке смайлов во время написания сообщения в поле ввода появлялся не код смайла, как например тут, а отображалась именно его картинка, в javascript я не особо силен, но полагаю что это делается с помощью
    execCommand("InsertImage",false,theImage);
    заколебался гуглить чтобы найти чтото полезное, есть куча готовых редакторов, но там куча еще всяких примочек, а надо только смайлы, да и хочется самому это все понять, поэтому прошу вас помочь мне в этом деле
     
  2. FireFenix

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

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Здесь вместо кода смайлика используется аббревиатура скобочек и символов "; )" и работает по аналогии с кодом.
     
  3. Rednoise

    Rednoise New Member

    Joined:
    28 Mar 2007
    Messages:
    29
    Likes Received:
    4
    Reputations:
    0
    не ну то как тут сделано я прекрасно знаю, да это и не сложно реализовать - дело нескольких минут, у меня проблема в том что я хочу вместо скобочек и прочих символов в поле ввода видеть сам смайл
     
  4. FireFenix

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

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Если хочешь видеть картинку в текстовом поле, то это сущий гемор. Где-то в инете были реализации текстовых редакторов полностью на JS, там сплошные макароны кода
    Проще флешку сделать и припрекить на сайт как текстовое поле
     
    #4 FireFenix, 8 Jun 2009
    Last edited: 8 Jun 2009
  5. Rednoise

    Rednoise New Member

    Joined:
    28 Mar 2007
    Messages:
    29
    Likes Received:
    4
    Reputations:
    0
    да их дофига этих редакторов, я их ковырял ковырял, понял что для отображения используется <iframe> и execCommand("InsertImage",false,theImage); но как самому сделать так и не врубил, тут уже началось чисто упорство типа "спать не лягу пока не допинаю" или "ссать хочу но есть идея..." - просто хочу разобраться в этом деле
     
  6. FireFenix

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

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Ну для ифрейма делается как обычная картинка и работаешь как с отдельным html документом типа
    Code:
    self.bottom.frames[1].document.getElementById('text').innerHTML += '<img src='картинко.джпг'>';
    А вот в textarea там гемор.
     
  7. Rednoise

    Rednoise New Member

    Joined:
    28 Mar 2007
    Messages:
    29
    Likes Received:
    4
    Reputations:
    0
    вот в том то и суть что как то к этому текстареа присобачивается ифрейм и смайлы там блин показываются
    вот например http://batiste.dosimple.ch/blog/posts/2007-09-11-1/rich-text-editor-jquery.html
    в исходном коде текстареа, в яваскрипте как то задействован ифрейм, п.с. смайлов там нет просто нажми на добавить картику, введи юрл и она появится - суть то таже, она в поле ввода
     
  8. FireFenix

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

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Code:
    function enableDesignMode(textarea) 
    {
            // need to be created this way
            var iframe = document.createElement("iframe");
            iframe.frameBorder=0;
            iframe.frameMargin=0;
            iframe.framePadding=0;
            iframe.height=200;
            if(textarea.attr('class'))
                iframe.className = textarea.attr('class');
            if(textarea.attr('id'))
                iframe.id = textarea.attr('id');
            if(textarea.attr('name'))
                iframe.title = textarea.attr('name');
            textarea.after(iframe);
            var css = "";
            if(css_url)
                var css = "<link type='text/css' rel='stylesheet' href='"+css_url+"' />"
            var content = textarea.val();
            // Mozilla need this to display caret
            if($.trim(content)=='')
                content = '<br>';
            var doc = "<html><head>"+css+"</head><body class='frameBody'>"+content+"</body></html>";
            tryEnableDesignMode(iframe, doc, function() {
                $("#toolbar-"+iframe.title).remove();
                $(iframe).before(toolbar(iframe));
                textarea.remove();
    }
    
    Code:
        function tryEnableDesignMode(iframe, doc, callback)
       {
            try {
                iframe.contentWindow.document.open();
                iframe.contentWindow.document.write(doc);
                iframe.contentWindow.document.close();
            } catch(error) {
                console.log(error)
            }
            if (document.contentEditable) {
                iframe.contentWindow.document.designMode = "On";
                callback();
                return true;
            }
            else if (document.designMode != null) {
                try {
                    iframe.contentWindow.document.designMode = "on";
                    callback();
                    return true;
                } catch (error) {
                    console.log(error)
                }
            }
            setTimeout(function(){tryEnableDesignMode(iframe, doc, callback)}, 250);
            return false;
        }
    
    атач ифрейма
     
    #8 FireFenix, 8 Jun 2009
    Last edited: 8 Jun 2009
  9. Rednoise

    Rednoise New Member

    Joined:
    28 Mar 2007
    Messages:
    29
    Likes Received:
    4
    Reputations:
    0
    ну да а это

    Code:
    $('.image', tb).click(function(){ 
    var p='smile.gif';
    formatText(iframe, 'InsertImage', p);
    return false; });
    
     function formatText(iframe, command, option) {
            iframe.contentWindow.focus();
            try{
                iframe.contentWindow.document.execCommand(command, false, option);
            }catch(e){console.log(e)}
            iframe.contentWindow.focus();
        }
    
    сама вставка картинки
     
  10. Rednoise

    Rednoise New Member

    Joined:
    28 Mar 2007
    Messages:
    29
    Likes Received:
    4
    Reputations:
    0
    токо там дофига чо еще есть и я упорно пытаюсь разобрать это все на куски
     
  11. FireFenix

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

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    PHP:
    //создаём iframe
    var iframe document.createElement("iframe");
    //определяем его параметры
    iframe.frameBorder=0;
    iframe.frameMargin=0;
    iframe.framePadding=0;
    iframe.height=200;
    //определяем класс uframe
    if(textarea.attr('class'))
    iframe.className textarea.attr('class');
    //определяем id iframe
    if(textarea.attr('id'))
    iframe.id textarea.attr('id');
    //определяем имя iframe
    if(textarea.attr('name'))
    iframe.title textarea.attr('name');
    //присоединяем iframe к textarea
    textarea.after(iframe);

    //определяем контект iframe
    var css "<link type='text/css' rel='stylesheet' href='"+css_url+"' />";
    var 
    content textarea.val();
    var 
    doc "<html><head>"+css+"</head><body class='frameBody'>"+content+"</body></html>";
    //заносим контент в iframe
    iframe.contentWindow.document.open();
    iframe.contentWindow.document.write(doc);
    iframe.contentWindow.document.close();
    //Выставляем режим редактирования объектов
    if (document.contentEditable
    {
      
    iframe.contentWindow.document.designMode "On";
    }

    //атачим картинку в iframe
    iframe.contentWindow.document.execCommand('InsertImage'false'я_картинко.джпг');
    http://msdn.microsoft.com/ru-ru/library/ms536419(en-us,VS.85).aspx
    http://fastcoder.org/articles/?aid=172
    http://fastcoder.org/articles/?aid=204
     
    #11 FireFenix, 8 Jun 2009
    Last edited: 8 Jun 2009
    1 person likes this.
  12. Rednoise

    Rednoise New Member

    Joined:
    28 Mar 2007
    Messages:
    29
    Likes Received:
    4
    Reputations:
    0
    +10, сенкс огромное, седня попожже буду ковырять дальше, чуть что отпишусь, пЫсЫ: поспал 4 часа проснулся оттого что эти смайлы приснились ггг))))
     
  13. Sharky

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

    Joined:
    1 May 2006
    Messages:
    487
    Likes Received:
    312
    Reputations:
    46
    используй fckeditor :) много возможностей и легко можно прикрутить куда угодно)
     
  14. FireFenix

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

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
  15. Rednoise

    Rednoise New Member

    Joined:
    28 Mar 2007
    Messages:
    29
    Likes Received:
    4
    Reputations:
    0
    Sharky, да вот и суть то в том что ненужны все эти примочки, надо только смайлы и ппц, щя я чо наковыряю выложу код, появились идеи...
     
  16. malik555

    malik555 New Member

    Joined:
    4 Feb 2009
    Messages:
    132
    Likes Received:
    1
    Reputations:
    0
    Я согласен с товарищем "FireFenix" !!!!!!

    Ваши идеи не дадут нужного результата , так как они бы-ли-бы уже реализованы , единственное что вам поможет это сделать на flash + as3 , все остальное бесмысленая трата времени !!!!

    Но на flashe это тоже не так просто !
     
  17. Rednoise

    Rednoise New Member

    Joined:
    28 Mar 2007
    Messages:
    29
    Likes Received:
    4
    Reputations:
    0
    malik555, да мне не главное чтото сделать по своему, прикрутить готовый скрипт не сложно, а вот понять всю суть его работы можно только когда сам сделаешь подобное, пусть и методом тыка, мне просто хочется разобраться и понять это все
     
    1 person likes this.
  18. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    разберешси приведи полный простенький пример твоего поля ввода, хоть это чисто извращенство но интересненько.

    JS сила!
     
    _________________________
  19. malik555

    malik555 New Member

    Joined:
    4 Feb 2009
    Messages:
    132
    Likes Received:
    1
    Reputations:
    0

    На as3 я знаю как это сделать но тоже довольнно сложно , на js я думаю принцып такойже !
     
  20. Rednoise

    Rednoise New Member

    Joined:
    28 Mar 2007
    Messages:
    29
    Likes Received:
    4
    Reputations:
    0
    Gar|k, да приводить то особо нечего, просто есть текстареа в который происходит набор сообщения, ну как я полагаю его надо допустим при загрузке ДОМа заменять на <input type="hidden" name="textarea" /> а вместо него подставлять <iframe></iframe> и во время ввода данных их копию заносить в скрытый текстареа, при этом в ифрейм вставлять картинку смайла а в текстареа заносить лишь его код