6°C
завтра: 5°C
Погода в Перми
6°C
днем5°C
вечером9°C
завтра5°C
Подробно
 63,79
+0.0046
Курс USD ЦБ РФна 24 апреля
63,7906
+0.0046
 71,75
+0.0243
Курс EUR ЦБ РФна 24 апреля
71,7453
+0.0243
  • experienced

    Сообщений: 692

    Всем доброго времени суток!
    Признаться вобще мало разбираю сей язык, а вот сталкиваться с ним так или иначе приходится.
    Пытаюсь адаптировать CKeditor под возможность загрузки лайтбоксовых картинок. Если с пхп частью всё более-менее понятно, то добавить мельчайшую функцию в жс код беда неимоверная.

    Есть пара файликов:
    Здесь описываесь окошко загрузки файла на сервер, к нему требовалось добавить параметры ширина и высота, обозвал их imgwidth и imgheight;
    ...
    {
    id : 'Upload',
    hidden : true,
    filebrowser : 'uploadButton',
    label : editor.lang.image.upload,
    elements :
    [
    {
    type : 'file',
    id : 'upload',
    label : editor.lang.image.btnUpload,
    style: 'height:40px',
    size : 38
    },
    {
    id : 'imgwidth',
    type : 'text',
    label : 'Ширина',
    style : 'width: 30%',
    'default' : '200',
    onChange : function()
    {

    alert(this.getValue());
    }
    },
    {
    id : 'imgheight',
    type : 'text',
    label : 'Высота',
    style : 'width: 30%',
    'default' : '100',
    onChange : function()
    {
    alert(this.getValue());
    }
    },
    {
    type : 'fileButton',
    id : 'uploadButton',
    filebrowser : 'info:txtUrl',
    label : editor.lang.image.btnUpload,
    'for' : [ 'Upload', 'upload']
    }
    ]
    },
    ...

    и второй, сжатый жс, что собирает параметры для отправки пхпешке:
    ...
    function q(v,w,x){var y=x.params||{};
    y.CKEditor=v.name;y.CKEditorFuncNum=v._.filebrowserFn;if(!y.langCode)y.langCode=v.langCode;
    y.img_width=?????;y.img_height=?????;
    w.action=m(x.url,y);w.filebrowser=x;};
    ...

    Нужно передать this.getValue() из первого файла во второй. Дабы не разбираться во всех остальных нутрях, думал это сделать через чего-нить подобное глобальным переменным, но так и не нашёл рабочего варианта.
    Вопрос - куда нужно записать this.getValue(), чтоб добраться до него из второго жс-ника ?

  • experienced

    Сообщений: 846

    В ответ на: Дабы не разбираться во всех остальных нутрях, думал это сделать через чего-нить подобное глобальным переменным, но так и не нашёл рабочего варианта.
    Вопрос - куда нужно записать this.getValue(), чтоб добраться до него из второго жс-ника ?
    В лоб - http://api.jquery.com/data/

    По правильному, наверное передать функции q соответсвующие параметры, она же откуда-то вызывается.

    Ну и нужно помнить, что глобальные переменные это всегда зло.

  • experienced

    Сообщений: 692

    Спасибо, возможноб это и сработало еслиб я нашёл правильное место во втором файле...

    Беда оказалось в том что ГЕТ запрос собирается в момент открытия окна, а не при клике на кнопку "Загрузить изображение".

    Начал копать дальше итог мозг взоврван вобще, руки уже опускаются( Благо хоть исходник нашел второго файла. Ситуация в целом немного прояснилась, но до конца довести не могу.

    Прилагаю оба файла:
    image.js
    со строчки 1176 начинается опись окошка где происходит загрузка файла, сам добавил туда следущие поля:
    use_lightbox, imgwidth, imgheight

    plugin.js
    функция setupFileElement - собирает гет строку, вызывается при открытии окошка добавления каринки в текст
    функция uploadFile - срабатывает при клике на кнопку отправки, проверяет заполненость полей

    требуется в функции uploadFile добавить в ГЕТ запрос переменные use_lightbox, imgwidth, imgheight

    Если кто готов взяться, напишите в личку почём обойдётся.

  • experienced

    Сообщений: 846

    Не знаю, поможет это Вам или нет, но в в plugins.js написан следующий текст:

    * The filebrowser plugin also supports more advanced configuration performed through
    * a JavaScript object.
    *
    * The following settings are supported:
    *
    * <ul>
    * <li><code>action</code> – <code>Browse</code> or <code>QuickUpload</code>.</li>
    * <li><code>target</code> – the field to update in the <code><em>tabId:elementId</em></code> format.</li>
    * <li><code>params</code> – additional arguments to be passed to the server connector (optional).</li>
    * <li><code>onSelect</code> – a function to execute when the file is selected/uploaded (optional).</li>
    * <li><code>url</code> – the URL to be called (optional).</li>
    * </ul>

    и ниже пример.

  • experienced

    Сообщений: 692

    С params уже ставил эксперименты, пытался их динамически менять. Но так и не разобрался как это сделать. А потом еще увидел, что они применяются в момент загрузки страницы в функции setupFileElement и бросил эту затею совсем.

    "ОнСелект" признаться не заметил - сейчас попробовал - он выполняется уже после аплода файла.

    функция uploadFile для этой цели вродь само-то подходит, но я не не могу сообразить как из неё поменять этот action, что задаётся в setupFileElement, и как добраться до переменных use_lightbox, imgwidth, imgheight. Хотя для последнего можноб было поиспользовать злые глобальные переменные)))

  • experienced

    Сообщений: 692

    Решение найдено) помог метод тыка и немного логики. и почти без глобальных переменных:улыб:

  • experienced

    Сообщений: 846

    Покажите решение, может кому-нибудь понадобиться.

  • experienced

    Сообщений: 692

    До экшена , где хранится гет строка, добраться можно следущим образом:


    var y=this;var w=y.getDialog();
    w.getContentElement(y['for'][0],y['for'][1]).getInputElement().getParent().$.action


    До значений полей, также при наличии "диалога" ( w=y.getDialog(); ):

    w.getContentElement('Upload', 'imgwidth').getInputElement().$.value
    //где Upload - ид вкладки, imgwidth - ид конкретного элемента.


    В итоге получилось:


    function strpos( haystack, needle, offset){
    var i = haystack.indexOf( needle, offset );
    return i >= 0 ? i : false;
    }

    if (w.getContentElement('Upload', 'imgwidth') !== undefined) {
    //проверка существует ли поле imgwidth. Без проверки будут вылетать ошибки в js т.к. функция используется не только для загрузки картинок

    if (strpos(w.getContentElement(y['for'][0],y['for'][1]).getInputElement().getParent().$.action, 'imgwidth' ,0)==false)
    {window.action_orig = w.getContentElement(y['for'][0],y['for'][1]).getInputElement().getParent().$.action; }
    //window.action_orig - переменная в которой храню изначальное значение экшена, без добавления моих элементов. в if заходит только если в экшене нет 'imgwidth'

    var action_add = '';
    action_add = action_add+'&imgwidth='+w.getContentElement('Upload', 'imgwidth').getInputElement().$.value;
    action_add = action_add+'&imgheight='+w.getContentElement('Upload', 'imgheight').getInputElement().$.value;
    action_add = action_add+'&use_lightbox='+w.getContentElement('Upload', 'use_lightbox').getInputElement().$.checked;

    w.getContentElement(y['for'][0],y['for'][1]).getInputElement().getParent().$.action = window.action_orig + action_add;

    }


    Все это положил в функцию fileUpload.

    Переделаю ещё немного, чтоб только для лайтбоксовых рисунков были все эти параметры + уходить будет на другую пхпшку.

Записей на странице:

Перейти в форум

Модератор: