Hochgeladene Dateien im Editor verlinken

Fragen und Diskussionen zu laufenden ConPresso 4.x Projekten werden in diesem Forum diskutiert.
Antworten
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Hochgeladene Dateien im Editor verlinken

Beitrag von dutch »

Hallo zusammen,

im Editor kann man auch über ein Auswahlfeld Dateien als Textlink hinzufügen. Dabei wird aber automatisch die Dateigröße in KB mit eingefügt.
Lässt sich das irgendwie abstellen? Dass man also einfach eine Textpassage direkt verlinken kann mit einer Datei aber ohne diese KB Angabe dabei?

Gruß,
dutch
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7360
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Leider funktioniert das Markieren und Zuweisen eines Datei-Links nicht.
(ist im Editor-Code auch schon vermerkt, editor.js Zeile 1289)

Was durch Auswahl einer Datei passiert findet sich in editor.php ab Zeile 299.
Das kann man natürlich anpassen, z.B. die Dateigröße weglassen.
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
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Hallo Markus,

danke für die schnelle Antwort.
Schade, dass die Zuweisung zum ausgewählten Text nicht funktioniert.
Dann muss der Kunde es eben in der HTML Ansicht anpassen...

Gruß,
dutch
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7360
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Vielleicht willst Du ja mal folgendes testen:

Ersetze in editor.js die komplette Funktion encloseSelection() durch

Code: Alles auswählen

function encloseSelection(html,closing) 
{
	if (typeof(closing) == 'undefined') var closing = '';
    bse_conWin.focus();
    if (bse_conWin.getSelection) { // Mozilla
        var oSelection = bse_conWin.getSelection();
        var Content  = oSelection.toString();
        var oRange = oSelection.getRangeAt(0);
        oRange.deleteContents();
        var Fragment = oRange.createContextualFragment(html+Content+closing);
        oRange.insertNode(Fragment);
    } else { // IE
        var editRange = bse_conWin.document.selection.createRange();
        var Content = editRange.htmlText;
        editRange.pasteHTML(html+Content+closing);
    }
    bse_conWin.focus();
}
Damit wird (bei mir in IE und FF) der markierte Text durch die übergebenen Werte umschlossen. Also das was die Funktion eigentlich machen soll.

Dann kann man in editor.php die Zeilen 292 bis 324 durch folgendes ersetzen

Code: Alles auswählen

if ($db->num_rows()>0) {
    echo ' <select id="files" onChange="encloseSelection(document.getElementById(\'files\').value,\'</a>\'); document.getElementById(\'files\').selectedIndex = 0;">';
    echo '<option value="" selected>' . ___('Files') . '</option>';
    echo '<option value="">--------------------------</option>';
    while($db->next_record()) {
        echo '<option value="';
        echo htmlspecialchars('<A HREF="../_data/'.$db->v('datei').'" target="_blank">', ENT_COMPAT, 'ISO-8859-15');
        echo '">';

        if ($db->v('datei')!='') {
            $k_datei = $db->v('datei');
            $k_datei = substr($k_datei, 0, 50);
            echo htmlspecialchars($k_datei, ENT_COMPAT, 'ISO-8859-15');
        }
        
        if ($db->v('beschreibung')!='') {
            $k_beschreibung = $db->v("beschreibung")."##############################";
            $k_beschreibung = substr($k_beschreibung, 0, 30);
            $k_beschreibung = ereg_replace ( "#", "&nbsp;", $k_beschreibung);

            echo ' - ' . $k_beschreibung;
        }

        echo '</option>';
    }
    echo '</select>';
}
Dann kann man allerdings keine Dateien mehr einfügen ohne vorher einen Text markiert zu haben...
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
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Das klingt vielversprechend.
Werde ich so schnell wie möglich testen.

Vielen Dank!
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7360
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Hier nochmal ein gepimpte Version:

Ersetze in editor.js die komplette Funktion encloseSelection() durch

Code: Alles auswählen

function encloseSelection(html) 
{
    var arrayOfStrings = html.split('###');
    if (arrayOfStrings.length > 1)
    { // enclose
        var startTag = arrayOfStrings[0];
        var endTag = arrayOfStrings[1];
        var title = arrayOfStrings[2];
    } else { // put in front
        var startTag = arrayOfStrings[0];
        var endTag = '';
        var title = '';
    }

    bse_conWin.focus();
    if (bse_conWin.getSelection) { // Mozilla
        var oSelection = bse_conWin.getSelection();
        var Content  = oSelection.toString();
        if (Content.length == 0) Content = title;
        var oRange = oSelection.getRangeAt(0);
        oRange.deleteContents();
        var Fragment = oRange.createContextualFragment(startTag+Content+endTag);
        oRange.insertNode(Fragment);
        oRange.collapse(false);
    } else { // IE
        var editRange = bse_conWin.document.selection.createRange();
        var Content = editRange.htmlText;
        if (Content.length == 0 || Content == "\r\n<P>&nbsp;</P>") Content = title;
        editRange.pasteHTML(startTag+Content+endTag);
    }
    bse_conWin.focus();
}
Dann in editor.php die Zeilen 292 bis 324 durch folgendes ersetzen

Code: Alles auswählen

if ($db->num_rows()>0) {
    echo ' <select id="files" onChange="encloseSelection(document.getElementById(\'files\').value); document.getElementById(\'files\').selectedIndex = 0;">';
    echo '<option value="" selected>' . ___('Files') . '</option>';
    echo '<option value="">--------------------------</option>';
    while($db->next_record()) {
        $fileString = '';
        $descString = '';
        $k_datei = '';
        $k_beschreibung = '';

        if ($db->v('datei')!='') {
            $k_datei = $db->v('datei');
            $title = $k_datei;
            $k_datei = substr($k_datei, 0, 50);
            $fileString = htmlspecialchars($k_datei, ENT_COMPAT, 'ISO-8859-15');
        }
        
        if ($db->v('beschreibung')!='') {
            $title = $db->v("beschreibung");
            $k_beschreibung = $title."##############################";
            $k_beschreibung = substr($k_beschreibung, 0, 30);
            $k_beschreibung = ereg_replace ( "#", "&nbsp;", $k_beschreibung);

            $descString = ' - ' . $k_beschreibung;
        }

        $sizeString = ' ['.printHumanReadable(@filesize(CPO_BASEDIR.'_data/'.$db->v('datei'))).']';

        $optString = '<a href="../_data/'.$db->v('datei').'" target="_blank" title="'.$title.$sizeString.'">###</a>###'.$title.$sizeString;
        echo '<option value="';
        echo htmlspecialchars($optString, ENT_COMPAT, 'ISO-8859-15');
        echo '">';
        echo $fileString.$descString;
        echo '</option>';
    }
    echo '</select>';
}
Was ist da jetzt anders?

Hat man einen Text markiert, dann wird dieser mit einem Link versehen.
Hat man nichts markiert, dann wird ein Default-Text mit dem gleichen Link eingesetzt. Der Default-Text ist entweder der Dateiname oder die Beschreibung (wenn vorhanden) plus die Dateigröße.
Dieses wird in beiden Fällen auch als title-Attribut dem Link mitgegeben.

So habe ich mir das schon immer gewünscht... :wink:

Als netter Nebeneffekt können nun auch Snippets eine Markierung umschließen, wenn man sie in der Form
<code....>###</code...>
aufbaut. ### wird durch den markierten Text ersetzt.
Zuletzt geändert von MarkusR am 21.03.2014 21:34, insgesamt 2-mal geändert.
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
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Fantastisch!
Werde ich morgen gleich mal testen.

Danke sehr!

Gruß,
dutch
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7360
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

MarkusR hat geschrieben:Als netter Nebeneffekt können nun auch Snippets eine Markierung umschließen, wenn man sie in der Form
<code....>###</code...>
aufbaut. ### wird durch den markierten Text ersetzt.
Nochmal ausführlich:
An die Funktion encloseSelection() werden drei Teile in einem String übergeben, jeweils durch ### getrennt.
1. Start-Code
2. End-Code
3. Default-Text

So kann ein Snippet in der Form

Code: Alles auswählen

<div style="float: left; width: 100px; border: 1px solid red">###</div>###Dies ist ein linksbündiges DIV
einen markierten Text als links floatendes DIV formatieren oder ein neues DIV mit dem Default-Text erzeugen.

Hat man keine ### im übergebenen String, dann wird der String vor der Markierung bzw. an der Cursorposition eingefügt.
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
MarkusR
Handbuchversteher
Beiträge: 7360
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

dutch hat geschrieben:Fantastisch!
Werde ich morgen gleich mal testen.
Und? Stand der Testergebnisse?
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
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Mit dem "morgen" ist es leider nichts geworden... :oops:
Musste in den letzten Tagen leider anderweitig abschweifen.

Werde aber noch heute versuchen, es endlich zu testen.
Dann gebe ich auch direkt feedback, versprochen!

Gruß,
dutch
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

So, jetzt hab ich gerade getestet und wie erwartet: funktioniert einwandfrei!

Auch schön, dass der link gleich automatisch ein target="_blank" mitbekommt.

Nochmal danke, Markus!


Gruß,
dutch
Antworten