XHTMLforum

XHTMLforum (http://xhtmlforum.de/index.php)
-   Javascript & Ajax (http://xhtmlforum.de/forumdisplay.php?f=83)
-   -   JQuery Uploadify Upload Ordner Problem (http://xhtmlforum.de/showthread.php?t=61394)

Mr. Tool 09.06.2010 15:54

JQuery Uploadify Upload Ordner Problem
 
Hallo XHTML Community!

Ich hoffe das Jemand von euch mir bei diesem problem helfen kann.


Das Problem:
Ich benutze auf meiner Seite JQuery 1.4.2 und das Uploadify Script 2.1.0

Ich habe ein Auswahlfeld, wenn ich einen Eintrag auswähle wird (falls nicht vorhanden) die Uploadify Instanz generiert.
Das funktioniert noch alles.

Sobald ich jedoch einen anderen Eintrag auswähle wird mittels "uploadifySettings" (offizielle funktion für settings änderungen) der Ordner auf einen anderen umgelenkt.

uploadify Initialisierungs Funktion
Code:

function initUploadify(folder)
{
    // If button is already added, do not add it again.
    if( jQuery('#uploadifyUploader').length < 1)
    {
        jQuery("#uploadify").uploadify({
                        'uploader'      : './inc/uploadify/uploadify.swf',
                        'script'        : './inc/uploadify/uploadify.php',
                        'cancelImg'      : './templates/images/cancel.png',
                        'folder'        : folder,
                        'auto'          : false,
                        'multi'          : true
        });
    }else{
        jQuery("#uploadify").uploadifySettings('folder', folder);
    }
}

Beim ändern des Eintrages wird dieser Block aufgerufen
Code:

$('#select').change(function () {
       
        var folder = $(this).val();
       
        if($("#uploadifyBox").is(':visible')){
                $("#uploadifyBox").hide("slow");
        }
       
        $("#uploadifyBox").show("slow", function(){
                initUploadify(folder);
        });
});

HTML Code
HTML-Code:

        <div class="content">
                <select name="upload" id="select">
                        <option selected="selected">Bitte Auswählen</option>
                        <option value="./data/Ordner1">Ordner1</option>
                        <option value="./data/Ordner2">Ordner2</option>
                </select>
                <br/><br/>
                <div id="uploadifyBox">
                        <div id="fileQueue"></div>
                        <input type="file" name="uploadify" id="uploadify" />
                        <p><a href="javascript:jQuery('#uploadify').uploadifyClearQueue()">Cancel All Uploads</a></p>
                        <p><a href="javascript:jQuery('#uploadify').uploadifyUpload()">Start All Uploads</a></p>
                </div>
        </div>

Also
Nachdem ein Eintrag ausgewählt wurde Initialisiert er das Uploadify Script korrekt und erzeugt folgenden HTML Code

HTML-Code:

<div id="uploadifyBox" style="display: block;">
                        <div id="fileQueue"></div>
                        <input width="110" type="file" height="30" id="uploadify" name="uploadify" style="display: none;">
<object width="110" height="30" type="application/x-shockwave-flash" data="./inc/uploadify/uploadify.swf" id="uploadifyUploader" style="visibility: visible;">
<param name="quality" value="high">
<param name="wmode" value="opaque">
<param name="allowScriptAccess" value="sameDomain">
<param name="flashvars" value="uploadifyID=uploadify&amp;pagepath=/downloadarea/&amp;script=./inc/uploadify/uploadify.php&amp;folder=./data/Ordner1&amp;width=110&amp;height=30&amp;wmode=opaque&amp;method=POST&amp;queueSizeLimit=999&amp;simUploadLimit=1&amp;multi=true&amp;fileDataName=Filedata">
</object>
<div class="uploadifyQueue" id="uploadifyQueue">
</div>
                        <p><a href="javascript:jQuery('#uploadify').uploadifyClearQueue()">Cancel All Uploads</a></p>
                        <p><a href="javascript:jQuery('#uploadify').uploadifyUpload()">Start All Uploads</a></p>
                </div>

Dort steht im parameter <flashvars> folder=./data/Ordner1 was auch stimmt

Wenn man dann jedoch den 2 Eintrag auswählt sollte er mittels dem uloadifySettings den folder in ./data/Ordner2 ändern, was er aber nicht tut

beim direkten ändern mit Firebug funktioniert es.

Ich glaube es liegt daran das die funktion zwar aufruft die flashvars value aber nicht umschreibt.

Kennt jemand von euch eventuell eine andere möglichkeit diese value umzuschreiben?


MfG
Mr. Tool

uspri 09.06.2010 16:59

Zitat aus der offiziellen Doku:
Zitat:

uploadifySettings
Changed

A function used to change options for a fileUpload object.

Two arguments are available, one is required:
setting: The option to change.
value: The value to change the option to. If left blank, this function will return the current value of the setting.

The following example will change the upload folder to ‘/uploads’:
$(‘#someID’).uploadifySettings(‘folder’,'/uploads’);

The following example will return the simUploadLimit:
$(‘#someID’).uploadifySettings(’simUploadLimit’);


The following options can be changed:
buttonImg, buttonText, cancelImg, fileDesc, fileExt, width, height, folder, script, scriptData, simUploadLimit, sizeLimit, hideButton

The following will return the current size of the queue
#(‘#someID’).uploadifySettings(‘queueSize’);

When using scriptData enter it in {key1 : value1, key2 : value2, …} format.

#(‘#someID’).uploadifySettings(’scriptData’, {‘name’ : some.val()});

If the key already exists it will update it, if it doesn’t exist it will add it. You no longer need to re-write every key/value pair. When requesting scriptData it will return the key/value pairs as an object.

Mr. Tool 09.06.2010 22:38

ja das ist mir schon klar

das hab ich ja in der Initialisierungs Funktion schon gemacht.

Code:

//folder wird beim ändern des dropdown feldes übergeben
("#uploadify").uploadifySettings('folder', folder);

also wenn der Button schon existiert soll er einfach den Pfad zum Ordner updaten.
Das komische ist das wenn ich nach dem aufruf der oben genanten Zeile das ganze mit alert() und nur ('folder') aufrufe gibt er mir den richtigen Pfad zurück
nur wenn ich dann was uploade wird es wieder in Ordner1 anstatt Ordner2 hochgeladen


Aber genau das tut er ja nicht.
Deswegen suche ich eine alternative zu diesem funktions aufruf

uspri 10.06.2010 06:58

Du rufst beim init die Settings auf und beim change() nochmals, dann sollte der das überschreiben.
Code:

$('#select').change(function () {
       
        var folder = $(this).val();
       
        if($("#uploadifyBox").is(':visible')){
                $("#uploadifyBox").hide("slow");
        }
       
        $("#uploadifyBox").show("slow", function(){
                jQuery("#uploadify").uploadifySettings('folder', folder);
        });
});


Mr. Tool 10.06.2010 09:27

ich ruf nach jedem change die init funktion auf.

in der is ne if abfrage ob der button existiert
existiert er nicht wird er generiert, existiert er wird umgeschrieben.

der vorschlag von dir is ja genau das gleiche.

EDIT://

So habs jetzt gelöst.
Ich habe eine neue .php Datei erstellt in der das input feld/sart/cancel und ein script tag mit der inituploadify funktion drinnen ist die nurnoch aus dem aufruf uploadify() besteht.

onchange der dropdownbox mach ich nen load mit variablen übergabe (der ausgewählte Ordner) und warte bis es hereingeladen ist, dann wird geshowt und danach die funktion aufgerufen.

uploadify.php
Code:

<?php
/*Hier kommen noch sicherheitsabfragen rein*/
$ordner = $_POST['ordner'];
?>

<div id="fileQueue"></div>
<input type="file" name="uploadify" id="uploadify" />
<p><a href="javascript:jQuery(\'#uploadify\').uploadifyClearQueue()">Cancel All Uploads</a></p>
<p><a href="javascript:jQuery(\'#uploadify\').uploadifyUpload()">Start All Uploads</a></p>


<script type="text/javascript">
        function initUploadify(){
                jQuery("#uploadify").uploadify({
                                'uploader'      : './inc/uploadify/uploadify.swf',
                                'script'        : './inc/uploadify/uploadify.php',
                                'cancelImg'      : './templates/images/cancel.png',
                    'folder'        : '<?php echo $ordner ?>',
                    'auto'          : false,
                    'multi'          : true
                    });
        };
</script>


Aufruf im documentReady
Code:

$('#select').change(function () {
       
        var folder = $(this).val();
       
        if($("#uploadifyBox").is(':visible')){
                $("#uploadifyBox").hide("slow");
        }
       
        $('#uploadifyBox').load('uploadify.php', {ordner: folder}, function(){
                $("#uploadifyBox").show("slow", function(){
                        initUploadify();
                });
        });
});

falls einer noch fragen darüber hat soll er sich melden.


und vielen dank an uspri ich glaub ich hab zwar deinen vorigen post falsch verstanden aber du hast mich auf die load schiene gebracht

MfG
Mr. Tool

uspri 10.06.2010 14:05

Nee, ich hatte das so gemeint, dass Du dein init() schon laufen lassen kannst, dann aber nach dem change() bei dem Select dann explizit nochmal mit den uploadifysettings den folder überschreiben sollst, nicht nochmal init() aufrufen.


Alle Zeitangaben in WEZ +2. Es ist jetzt 04:33 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.

© Dirk H. 2003 - 2023