Tinymce OnPostProcess проблема - PullRequest
       6

Tinymce OnPostProcess проблема

1 голос
/ 08 июля 2011

Вот html-контент из db

<p>Some p</p>
<p>some p 1</p>
<p><a href="http://www.google.com/">google</a></p>
<p><a href="http://www.yahoo.com/">yahoo</a></p>

<p>{link class="readmore" cat_id="14" content_id="15" slug="Slug 1" content="Content 1"}</p>
<p>{link class="" cat_id="15" content_id="16" slug="Slug 2" content="Content 2"}</p>
<p>Some p 2 </p>
<p>Some p 3</p>

, а затем я использую функцию onBeforeSetContent и конвертирую html для tinymce, например: Нет проблем ...

<p>Some p</p> 
<p>some p 1</p> 
<p><a href="http://www.google.com/">google</a></p> <p><a href="http://www.yahoo.com/">yahoo</a></p> 
<p><a href="#" rel="SpecialLink" class="readmore" title="link class=&quot;readmore&quot; cat_id=&quot;14&quot; content_id=&quot;15&quot; slug=&quot;Slug 1&quot; content=&quot;Content 1&quot;">Content 1</a>
</p> 
<p><a href="#" rel="SpecialLink" class="" title="link class=&quot;&quot; cat_id=&quot;15&quot; content_id=&quot;16&quot; slug=&quot;Slug 2&quot; content=&quot;Content 2&quot;">Content 2</a></p> 
<p>Some p 2 </p> 
<p>Some p 3</p>

Когда формаЯ хочу преобразовать специальные URL-адреса в оператор {ссылка и т. д.} снова с помощью функции onPostProcess.Но это не работает.Если я console.log (o.content) в содержимом onPostProcess то же самое;не преобразован и beging сохранен в MySQL неправильно.Но если console.log (t._get_link (o.content)) внутри onBeforeSetContent, то это работает.Я не мог справиться с этим часами.

 ed.onBeforeSetContent.add(function(ed, o) {
            o.content = t._do_link(o.content);
        });

ed.onPostProcess.add(function(ed, o) {
            if (o.get)          
                o.content = t._get_link(o.content);
        });

ниже функций _do_link и _get_link;

_do_link :  function(co) {
        return co.replace(/\{link([^<]+)\}/g, function(a,b){

            content = b.match(/content=['"]([^'"]+)/i); 
            aclass =  b.match(/class=['"]([^'"]+)/i);

            if(aclass == undefined)
            {
                aclass = '';
            }
            else
            {
                aclass = aclass[1];
            }
            return '<a href="#" rel="SpecialLink" class="'+aclass+'" title="link'+tinymce.DOM.encode(b)+'">'+content[1]+'</a>';             
        });     
    },
    _get_link : function(co) {

        function getAttr(s, n) {
            n = new RegExp(n + '="([^"]+)"', 'g').exec(s);
            return n ? tinymce.DOM.decode(n[1]) : '';
        };

        return co.replace(/(<a href="([^"]+)" ([\S]*=.*(\ )*)*>([^<]+)<\/a>)/g, function(a,im) {

            var cls = getAttr(im, 'rel');

            if ( cls.indexOf('SpecialLink') != -1 )
            {
                return '{'+tinymce.trim(getAttr(im, 'title'))+'}';
            }
            return a;
        });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...