Tinymce редактор галереи плагин Regexp проблема? - PullRequest
1 голос
/ 08 сентября 2011

Я использую редактор tinymce для вставки содержимого в mysql.Я изменил плагин редактора галерей WordPress в соответствии с моей системой.

Если в контенте есть код галереи.Я преобразую этот код в символическую фотографию, чтобы пользователь понял, что вместо кода есть галерея.Как и в случае с WordPress.

Если в контенте только 1 галерея, я успешно конвертирую этот код в изображение, но если существует более 1 галереи, это не получается.

Как я могу конвертировать все {код gallery} в символическое изображение перед сохранением в db и преобразование этих фотографий обратно в код {gallery} при вставке или обновлении в mysql.

Я так плохо разбираюсь в регулярных выражениях.Я думаю, что do_gallery RegExp имеет ошибку.Как мне изменить это.

инициализирующий редактор, такой как:

ed.onBeforeSetContent.add(function(ed, o) {
            ed.dom.loadCSS(url + "/css/gallery.css");
            o.content = t._do_gallery(o.content);
        });

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

Мои коды "делай и получай галерею":

_do_gallery : function(co) {
        return co.replace(/\{gallery([^\]]*)\}/g, function(a,b){
            var image = '<img src="gallery.gif" class="wpGallery mceItem" title="gallery'+tinymce.DOM.encode(b)+'" />';
            console.log(image);
            return image;

        });
    },

    _get_gallery : function(co) {

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

        return co.replace(/(?:<p{^>}*>)*(<img[^>]+>)(?:<\/p>)*/g, function(a,im) {
            var cls = getAttr(im, 'class');

            if ( cls.indexOf('wpGallery') != -1 )
                return '<p>{'+tinymce.trim(getAttr(im, 'title'))+'}</p>';

            return a;
        });
    }

Если содержимое:

<p>Blah</p>
<p>{gallery Name="gallery1" id="82" galeryID="15"  sizeId="6" galery_type="list"}</p>
<p>test</p>

все в порядке

<img src="gallery.gif" class="wpGallery mceItem" title="gallery Name=&quot;tekne1&quot; id=&quot;82&quot; galeryID=&quot;15&quot; sizeId=&quot;6&quot; galery_type=&quot;liste&quot;" />

Но, если содержимое:

<p>Blah</p>
<p>{gallery Name="gallery1" id="82" galeryID="15"  sizeId="6" galery_type="list"}</p>
<p>test</p>
<p>{gallery Name="gallery2" id="88" galeryID="11"  sizeId="1" galery_type="slide"}</p>
<p>test2</p>

регистрируется

<img src="gallery.gif" class="wpGallery mceItem" title="gallery Name=&quot;gallery1&quot; id=&quot;82&quot; galeryID=&quot;15&quot; sizeId=&quot;6&quot; galery_type=&quot;list&quot;}&lt;/p&gt; &lt;p&gt;test&lt;/p&gt; &lt;p&gt;{gallery Name=&quot;gallery2&quot; id=&quot;88&quot; galeryID=&quot;11&quot; sizeId=&quot;1&quot; galery_type=&quot;slide&quot;" />

Я надеюсь, что смогуобъясните мою проблему Спасибо.

1 Ответ

1 голос
/ 08 сентября 2011

Я подозреваю, что ваше оригинальное регулярное выражение является опечаткой, похоже на отсутствующее Shift , когда вы нажимаете ] . Попробуйте это:

/\{gallery([^\}]*)\}/g

Тогда часть ([^\}]*) (жадно) съест любую последовательность символов, которые не }; ваш исходный будет использовать любую последовательность символов, которая не включает ], и в результате вы будете получать все между первым { и последним }, а не просто захватывать текст между парами фигурных скобок .

...