SWFupload - передача переменной из формы с загрузкой - PullRequest
2 голосов
/ 08 декабря 2010

Я ссылаюсь на simpledemo в этом вопросе http://demo.swfupload.org/v220/simpledemo/index.php

Я хочу иметь возможность передать переменную, которая устанавливается в раскрывающемся меню.

загрузчик инициируется

var swfu;
window.onload = function() {
    var settings = {
        flash_url : "<?php global_data::show_admin_dir(); ?>SWFUpload v2.2.0.1 Samples/demos/swfupload/swfupload.swf",
        upload_url: "<?php global_data::show_admin_dir(); ?>upload.php",
        post_params: {"PHPSESSID" : "<?php echo session_id(); ?>" },
        file_size_limit : "100 MB",
        file_types : "*.*",
        file_types_description : "All Files",
        file_upload_limit : 100,
        file_queue_limit : 0,
        custom_settings : {
            progressTarget : "fsUploadProgress",
            cancelButtonId : "btnCancel"
        },
        debug: false,
                // Button settings
        button_image_url: "images/TestImageNoText_65x29.png",
        button_width: "95",
        button_height: "29",
        button_placeholder_id: "spanButtonPlaceHolder",
        button_text: '<span class="theFont">UPLOAD</span>',
        button_text_style: ".theFont { font-size: 16; }",
        button_text_left_padding: 12,
        button_text_top_padding: 3,

        // The event handler functions are defined in handlers.js
        file_queued_handler : fileQueued,
        file_queue_error_handler : fileQueueError,
        file_dialog_complete_handler : fileDialogComplete,
        upload_start_handler : uploadStart,
        upload_progress_handler : uploadProgress,
        upload_error_handler : uploadError,
        upload_success_handler : uploadSuccess,
        upload_complete_handler : uploadComplete,
        queue_complete_handler : queueComplete  // Queue plugin event
    };

    swfu = new SWFUpload(settings);
 };

и форма выглядит следующим образом:

<form id="form1" action="index.php" method="post" enctype="multipart/form-data">
        <p><label>Category: </label><input type="radio" name="for" class="radio" value="category" checked="checked" /><select name="foo"><option>...</option><?php global_data::show_breadcrum_list( 'option', " / " ); ?></select></p>
        <p><label>Product: </label><input type="radio" name="for" class="radio" value="category" /><select disabled="disabled"><option name="foo">...</option><?php global_data::show_breadcrum_list( 'option', " / " ); ?></select></p>    
        <div class="fieldset flash" id="fsUploadProgress">
            <span class="legend">Upload Queue</span>
        </div>
        <div id="divStatus">0 Files Uploaded</div>
        <div>
            <span id="spanButtonPlaceHolder"></span>
            <input id="btnCancel" type="button" value="Cancel All Uploads" onclick="swfu.cancelQueue();" disabled="disabled" style="margin-left: 2px; font-size: 8pt; height: 29px;" />
        </div>
    </form>

Если бы кто-нибудь мог указать мне правильное направление, это было бы очень ценно.

######РЕДАКТИРОВАТЬ ##### Я, возможно, нашел способ ...

, используя post_params: {"PHPSESSID" : "<?php echo session_id(); ?>", "PR" : thing }, в настройках init и оборачивая все это в функцию

function loader( thing ) {
    ....
}

, а затем используя

$(document).ready(function(){
    $('select[name=foo]').change(function(){
        loader( $(':selected', this).text() );
    });
});

это будет работать, но если я изменю опцию выбора во второй раз перед загрузкой, то получит ошибку и отправит только первый выбор вместо второго ...

Ответы [ 3 ]

1 голос
/ 03 мая 2011

Я пытался сделать то же самое, и после того, как я нашел это решение и обсудил его с коллегой, мы решили его еще одним способом, используя API Javascript, доступный в swfupload.

Мы пытались передать качествонастройка вместе с загрузкой видео.В конечном итоге решения этой проблемы заключаются в том, как изменить post_params.Для начала post_params будет значением раскрывающегося списка по умолчанию:

var selected_quality = $('select#quality-".$dirId." option:selected').val();
...
post_params: {'quality' : selected_quality},

Затем вы можете использовать метод addPostParam (расположенный в swfupload.js), чтобы обновить его, если в раскрывающемся списке выбраны параметры.

$('select#quality-".$dirId."').change(function () {
  swfu.addPostParam('quality' , this.value);
});
0 голосов
/ 08 декабря 2010

Я решил эту проблему двумя способами (оба с помощью jquery): cookie и mysql.Концепцией будет

$('select[name=foo]').change(function(){
   $.cookie('dropdown', $(this).val());
});

, поэтому при изменении раскрывающегося списка у вас теперь есть файл cookie.в файле upload.php вы можете затем вызвать этот файл cookie и использовать его в качестве своей переменной.

Другой вариант был

$('select[name=foo]').change(function(){
   $.post('updatedatabase.php', {'dropdown': $(this).val()});
});

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

0 голосов
/ 08 декабря 2010

######## EDIT #######

Правильно, это работает очарование.

$(function() {
    function loader( thing ) {
        var settings = {
            flash_url : admin_dir + "SWFUpload v2.2.0.1 Samples/demos/swfupload/swfupload.swf",
            upload_url: web_root + "pm_admin/upload_image",
            post_params: { "aj" : "true", "PR" : thing },
            file_size_limit : "100 MB",
            file_types : "*.*",
            file_types_description : "All Files",
            file_upload_limit : 100,
            file_queue_limit : 0,
            custom_settings : {
                progressTarget : "fsUploadProgress",
                cancelButtonId : "btnCancel"
            },
            debug: false,

            // Button settings
            button_image_url: "images/TestImageNoText_65x29.png",
            button_width: "95",
            button_height: "29",
            button_placeholder_id: "spanButtonPlaceHolder",
            button_text: '<span class="theFont">UPLOAD</span>',
            button_text_style: ".theFont { font-size: 16; }",
            button_text_left_padding: 12,
            button_text_top_padding: 3,

            // The event handler functions are defined in handlers.js
            file_queued_handler : fileQueued,
            file_queue_error_handler : fileQueueError,
            file_dialog_complete_handler : fileDialogComplete,
            upload_start_handler : uploadStart,
            upload_progress_handler : uploadProgress,
            upload_error_handler : uploadError,
            upload_success_handler : uploadSuccess,
            upload_complete_handler : uploadComplete,
            queue_complete_handler : queueComplete  // Queue plugin event
        };

        swfu = new SWFUpload(settings);
     };
    function pre_load(){
        var data = '';
        data += '<div class="fieldset flash" id="fsUploadProgress">';
        data += '    <span class="legend">Upload Queue</span>';
        data += '</div>';
        data += '<div id="divStatus">0 Files Uploaded</div>';
        data += '<div>';
        data += '    <span id="spanButtonPlaceHolder"></span>';
        data += '    <input id="btnCancel" type="button" value="Cancel All Uploads" onclick="swfu.cancelQueue();" disabled="disabled" style="margin-left: 2px; font-size: 8pt; height: 29px;" />';
        data += '</div>';
        return data;
    }
    /* args stores the input/select/textarea/radio's name and then it's value and then passes a single serialised string when uploading */
    /* then use a trigger to update the array, off focus, change, keyup... along thos lines on a class set for all inputs, selects and so on... works a treat */
    var args = {};
    $('.radio').click(function(){
        var ob = $(this).siblings('select');
        $('#uploader-wrapper').html(pre_load());
        $('.radio').siblings('select').attr('disabled', 'disabled');
        ob.removeAttr('disabled');
        args[$(this).attr('name')] = $(this).val();
        args[ob.attr('name')] = $(':selected', ob).text();
        loader( $.param(args) );
    })
    $('select[name=foo]').change(function(){
        var ob = $(this);
        $('#uploader-wrapper').html(pre_load());
        args[ob.attr('name')] = $(':selected', ob).text();
        loader( $.param(args) );
    });
});

в форме:

<form id="form1" action="index.php" method="post" enctype="multipart/form-data">
        <p><label>Category: </label><input type="radio" name="for" class="radio" value="category" checked="checked" /><select name="foo"><option>...</option><?php global_data::show_breadcrum_list( 'option', " / " ); ?></select></p>
        <p><label>Product: </label><input type="radio" name="for" class="radio" value="category" /><select disabled="disabled"><option name="foo">...</option><?php global_data::show_breadcrum_list( 'option', " / " ); ?></select></p>    
        <div id="uploader-wrapper">
            <div class="fieldset flash" id="fsUploadProgress">
                <span class="legend">Upload Queue</span>
            </div>
            <div id="divStatus">0 Files Uploaded</div>
            <div>
                <span id="spanButtonPlaceHolder"></span>
                <input id="btnCancel" type="button" value="Cancel All Uploads" onclick="swfu.cancelQueue();" disabled="disabled" style="margin-left: 2px; font-size: 8pt; height: 29px;" />
            </div>
        </div>
    </form>
...