Benennung von Upload-Dateien

Fragen zur Implementierung und/oder Anpassung von ConPresso 4 werden in diesem Forum diskutiert.
Antworten
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Benennung von Upload-Dateien

Beitrag von MarkusR »

Irgendwann nervt es einfach.

Da man Redakteure nicht dauernd ermahnen möchte, ein falsch hochgeladenes Bild erst zu löschen, bevor sie es mit der gleichen Datei nochmal probieren, wird es bei zunehmender Anzahl von Bildern einfach lächerlich, daß das erste Bild irgendwo ganz unten in der Liste steht, das zweite aber mit einem Präfix 1- ganz oben, wo sich schlichtweg mit der Zeit immer mehr Müll sammelt, der sich einfach nicht an die alphabetische Sortierung hält...

Ich habe das jetzt umgebaut, so daß ein Suffix wie -1 an den Namen gehängt wird, also aus der Datei test.jpg beim Vorhandensein derselben einfach test-1.jpg (anstatt 1-test.jpg) gemacht wird.

Dazu in der Datei _includesite/i_file_upload.php den Teil

Code: Alles auswählen

	// add a prefix if file exists
    $prefix = ''; 
    $prefixNo = 0;
    while (file_exists($path.$prefix.$filename)) {
        $prefixNo++;
        $prefix = $prefixNo.'-';
    }
    $new_filename = $path.$prefix.$filename;

    if (file_exists($path.$filename)) {
        printf(__('This file did already exist.<br />To avoid overwriting the old file, a prefix got added: <em>%s</em>.').'<br />',
            $prefix);
    }
erstzen durch

Code: Alles auswählen

    // add a suffix if file exists
    $filepattern = '/(.*)\.([^\.]*)/i';
    $prefix = ''; 
    $suffix = ''; 
    $suffixNo = 0;
    while (file_exists($path.preg_replace($filepattern, '$1'.$suffix.'.$2', $filename))) {
        $suffixNo++;
        $suffix = '-'.$suffixNo;
    }

    if (file_exists($path.$filename)) {
        printf(__('This file did already exist.<br />To avoid overwriting the old file, a suffix got added: <em>%s</em>.').'<br />',
            $suffix);
        $filename = preg_replace($filepattern, '$1'.$suffix.'.$2', $filename);
    }
    $new_filename = $path.$filename;
Ansonsten muß in der Datei nichts geändert werden. Die verbliebenen $prefix stören nicht weiter und sind ohne Funktion.

Wenn man noch Wert auf deutsche Text legt sollten man in _include/lang/deutsch/common.inc.php noch den Teil

Code: Alles auswählen

'This file did already exist.<br />To avoid overwriting the old file, a prefix got added: <em>%s</em>.'
=> 'Diese Datei existiert bereits.<br />Um das Überschreiben der bestehenden Datei zu verhindern, wurde ein Prefix hinzugefügt: <em>%s</em>.',
// Comment: Message displayed in view 'Upload files'.
ersetzen oder ergänzen mit

Code: Alles auswählen

'This file did already exist.<br />To avoid overwriting the old file, a suffix got added: <em>%s</em>.'
=> 'Diese Datei existiert bereits.<br />Um das Überschreiben der bestehenden Datei zu verhindern, wurde ein Suffix hinzugefügt: <em>%s</em>.',
// Comment: Message displayed in view 'Upload files'. SUFFIX-Version
Das ist übrigens vollständig kompatibel mit mod_imagesize, es muß also weder drauf verzichtet noch irgendwas anderes angepasst werden.
Dateianhänge
suffix.jpg
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Beitrag von Mr. Magpie »

Wo ich die Datei ../_includesite/i_file_upload.php schon gerade am Editieren war, hab' ich sie mir auch ein paar Zeilen weiter oberhalb etwas angeschaut.
Was mich nämlich auch schon eine Weile störte, war, dass die Umlaute Ä, ä, Ö, ö, Ü, ü und ß immer einfach durch den blöden Unterstrich ersetzt wurden. Da hab ich doch gleich einmal Hand angelegt und die Zeile

Code: Alles auswählen

    $filename = preg_replace('/[^a-z0-9_\.-]/i', '_', $filename);
ersetzt mit

Code: Alles auswählen

    $filename = preg_replace(
        array(
            '/Ä/',
            '/Ö/',
            '/Ü/',
            '/ß/',
            '/ä/',
            '/ö/',
            '/ü/',
            '/Á/',
            '/À/',
            '/É/',
            '/È/',
            '/Ó/',
            '/Ò/',
            '/Ú/',
            '/Ù/',
            '/Í/',
            '/Ì/',
            '/á/',
            '/à/',
            '/é/',
            '/è/',
            '/ó/',
            '/ò/',
            '/ú/',
            '/ù/',
            '/í/',
            '/ì/',
            '/[^a-z0-9_\.-]/i'
        ),
        array(
            'Ae',
            'Oe',
            'Ue',
            'ss',
            'ae',
            'oe',
            'ue',
            'A',
            'A',
            'E',
            'E',
            'O',
            'O',
            'U',
            'U',
            'I',
            'I',
            'a',
            'a',
            'e',
            'e',
            'o',
            'o',
            'u',
            'u',
            'i',
            'i',
            '_'
        ),
        $filename
    );
Klappt wunderbar!

Wem fallen noch mehr zu ersetzende Zeichen ein? Bitte hier posten!
Günther Ludwig
Antworten