ConPresso Community

Fragen, Antworten, Diskussionen rund um das Content Management System ConPresso

 
Hochgeladene Dateien im Editor verlinken

 
Neue Antwort erstellen    ConPresso Community Foren-Übersicht -> laufender Betrieb ConPresso 4
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
dutch
ConPresso-Experte


Anmeldungsdatum: 04.07.2007
Beiträge: 529

BeitragVerfasst am: 21.03.2014 12:01    Titel: Hochgeladene Dateien im Editor verlinken Antworten mit Zitat

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
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MarkusR
Handbuchversteher


Anmeldungsdatum: 01.01.1970
Beiträge: 7009

BeitragVerfasst am: 21.03.2014 12:52    Titel: Antworten mit Zitat

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
ConPresso und PHP 7
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dutch
ConPresso-Experte


Anmeldungsdatum: 04.07.2007
Beiträge: 529

BeitragVerfasst am: 21.03.2014 13:04    Titel: Antworten mit Zitat

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
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MarkusR
Handbuchversteher


Anmeldungsdatum: 01.01.1970
Beiträge: 7009

BeitragVerfasst am: 21.03.2014 15:45    Titel: Antworten mit Zitat

Vielleicht willst Du ja mal folgendes testen:

Ersetze in editor.js die komplette Funktion encloseSelection() durch
Code:
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:
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
ConPresso und PHP 7

 
Für dieses Posting bedanken sich die folgenden User: Mr. Magpie
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dutch
ConPresso-Experte


Anmeldungsdatum: 04.07.2007
Beiträge: 529

BeitragVerfasst am: 21.03.2014 16:08    Titel: Antworten mit Zitat

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

Vielen Dank!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MarkusR
Handbuchversteher


Anmeldungsdatum: 01.01.1970
Beiträge: 7009

BeitragVerfasst am: 21.03.2014 20:15    Titel: Antworten mit Zitat

Hier nochmal ein gepimpte Version:

Ersetze in editor.js die komplette Funktion encloseSelection() durch
Code:
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:
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.

_________________
Ciao Markus
ConPresso-Module
ConPresso und PHP 7


Zuletzt bearbeitet von MarkusR am 21.03.2014 21:34, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dutch
ConPresso-Experte


Anmeldungsdatum: 04.07.2007
Beiträge: 529

BeitragVerfasst am: 21.03.2014 21:32    Titel: Antworten mit Zitat

Fantastisch!
Werde ich morgen gleich mal testen.

Danke sehr!

Gruß,
dutch
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MarkusR
Handbuchversteher


Anmeldungsdatum: 01.01.1970
Beiträge: 7009

BeitragVerfasst am: 21.03.2014 21:45    Titel: Antworten mit Zitat

MarkusR hat Folgendes 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:
<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
ConPresso und PHP 7
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MarkusR
Handbuchversteher


Anmeldungsdatum: 01.01.1970
Beiträge: 7009

BeitragVerfasst am: 26.03.2014 12:26    Titel: Antworten mit Zitat

dutch hat Folgendes geschrieben:
Fantastisch!
Werde ich morgen gleich mal testen.

Und? Stand der Testergebnisse?

_________________
Ciao Markus
ConPresso-Module
ConPresso und PHP 7
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dutch
ConPresso-Experte


Anmeldungsdatum: 04.07.2007
Beiträge: 529

BeitragVerfasst am: 26.03.2014 12:31    Titel: Antworten mit Zitat

Mit dem "morgen" ist es leider nichts geworden... Embarassed
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

 
Für dieses Posting bedanken sich die folgenden User: MarkusR
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dutch
ConPresso-Experte


Anmeldungsdatum: 04.07.2007
Beiträge: 529

BeitragVerfasst am: 26.03.2014 16:08    Titel: Antworten mit Zitat

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

 
Für dieses Posting bedanken sich die folgenden User: MarkusR
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neue Antwort erstellen    ConPresso Community Foren-Übersicht -> laufender Betrieb ConPresso 4 Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen