• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Tooltip ?

voumi

Neues Mitglied
Meine Datei sieht aktuell so aus:

HTML:
<?php
defined('_JEXEC') or die('Restricted access');
?>

<head>

    <link rel="stylesheet" type="text/css" href="css/tooltipster.bundle.min.css" />

    <script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
    <script type="text/javascript" src="js/tooltipster.bundle.min.js"></script>

</head>

    <img src="tmp/10000.jpg" class="tooltipster">
 

<script>
        $('.tooltipster').tooltipster({
            // Tooltipster anweisen, den Inhalt des Tooltipps als HTML zu interpretieren:
            contentAsHTML: true,
            // Gleich bei der Initialisierung setzen wir den Inhalt für jeden Tooltipp:
            functionInit: function (instance, helper) {
                // Diese Funktion wird für jedes Element mit der Klasse "tooltipster"
                // aufgerufen, d. h. Tooltipster erledigt die Schleife intern.
                const
                    // Die URL des großen Bildes bekommen wir, indem wir in der URL
                    // des kleinen Bildes das Verzeichnis austauschen:
                    imgUrl = helper.origin.src.replace('tmp', 'img');
                // Jetzt können wir den Inhalt des Tooltipps als HTML
                // mit einem img-Tag festlegen:
                $(helper.origin).tooltipster('content', $(`<img src="${imgUrl}">`));
            }
        });
</script>
 
Zuletzt bearbeitet:

Sclero2004

Mitglied
Das ist schon mal sehr aufschlussreich. Da liegt noch einiges anderes im argen aber wir sollten uns erst Mal auf den Kern der Sache konzentrieren. Da ist irgend wie ein Schrägstrich in den Code hinein geraten, hier:
Code:
  $(helper.origin).tooltipster('content', $(`<img src="/${imgUrl}">`));
Vor dem dritten $, lösche den und beobachte ob es dann besser funktioniert.
 

voumi

Neues Mitglied
Da liegt noch einiges anderes im argen
Das tönt nicht gerade beruhigend.... :oops:

Da stellst Du mir aber eine schöne Denksportaufgabe. :wink: Ich habe keine Ahnung, wie ich etwas löschen kann, was im Code gar nicht da ist...

Ohne zu wissen, was ich genau mache, habe ich dann dort 'mal die beiden " durch ' ersetzt. Und siehe da, das grosse Bild wird nun angezeigt. :smile::smile::smile: Nun kann ich versuchen, diese Lösung auf die 'richtige' Seite zu adaptieren. Oder sollte ich mich vorher besser noch um das Arge kümmern?
 
Zuletzt bearbeitet:

Sclero2004

Mitglied
Das hatte ich schon befürchtet, dass das irgend wie durch die Erweiterung hinein gelangt ist. Du hast ja schon eine Lösung gefunden, sehr gut!

Das mit dem "Argen" ist nicht so dramatisch: Auf deiner Testseite sah man schon, dass der Code in einer größeren Seite eingebettet ist wo es schon ein Grundgerüst mit Doctype, html und head gibt. D. h. die head-Tags in deinem Code löschst Du besser.

Weiter wird jQuery anscheinend schon durch Joomla eingebunden. Versuche ob Tooltipster auch funktioniert, wenn Du das Einbinden durch diese Zeile weg lässt:
Code:
<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>

Außerdem habe ich selbst mal einen Blick auf deine Erweiterung php-bridge geworfen
und dort unter 3.1 gesehen, dass man auch in den Einstellungen eine CSS- und JS-Datei angeben kann. Wahrscheinlich ist es besser, das dort zu tun, dann kannst Du die beiden Anweisungen in deinem Code weg lassen.
 

voumi

Neues Mitglied
- Ok, die head-Tags sind gelöscht. Es funktioniert immer noch.
- Wenn ich die Zeile mit jquery weg lasse, funktioniert es nicht mehr.
- Bei meiner Version der php-bridge (Leider noch jene für die Joomla-Version 3....) scheint es noch keine Möglichkeit für css- und js-Dateien zu geben.

Nun habe ich den Code in die 'richtige' Datei übertragen. Beim Hoovern erscheint aber keine Reaktion. Da keine Fehlermeldung betreffend jquery in der Konsole aufgeführt ist, denke ich, dass tooltipster gar nicht aufgerufen wird.

Analog zum Test-Code:

HTML:
<img src="tmp/10000.jpg" class="tooltipster">

Habe ich den Bild-Teil entsprechend angepasst.

HTML:
<img src="admidio/adm_program/modules/profile/profile_photo_zeigen.php?user_uuid=<?=$zeile->usr_uuid;?>" class="tooltipster">

Irgend etwas muss ich aber übersehen haben.... :rolleyes:
 

Sclero2004

Mitglied
Alles klar, Du hast das Javascript vor der Mitgliederliste eingefügt, deshalb sind die Elemente noch nicht vorhanden wenn es abläuft. Platziere es hinter das HTML mit den Mitgliedern.
 

voumi

Neues Mitglied
Ich habe nun den tooltipster-Code ganz am Schluss angehängt. Nun erscheint beim Hoovern wenigstens wieder ein Balken. Beim Netzwerk wird jeweils auch der Bildpfad angezeigt. Ich habe auch die beiden ' wieder in " umgeändert. Jedoch ohne Erfolg. Füge ich den Code an einer anderen Stelle ein, erscheinen unter Elemente beim Hoovern ganz viele Div-Einträge. Wenn der Code ganz am Schluss ist, nur einer - So, wie es auf der Test-Seite auch ist. Irgendwie scheint die Lösung ganz nah und doch so fern.... Ich danke Dir herzlich für die unendliche Geduld mit mir.
 

Sclero2004

Mitglied
Die gute Nachricht dabei ist, dass das Bild erfolgreich geladen wird. Aber Tooltipster hat da ein Problem mit Bildern:

Eine Maßnahme, statt eines HTML-Textes ein jQuery-Objekt zu verwenden, hatte ich schon umgesetzt, hilft aber offensichtlich nicht.

Zwei Möglichkeiten, es zu lösen:
Dem Bild Höhe und Breite explizit zuweisen, dies sollte laut FAQ die bevorzugte Lösung sein:
Code:
    <script>
        $('.tooltipster').tooltipster({
            // Tooltipster anweisen, den Inhalt des Tooltipps als HTML zu interpretieren:
            contentAsHTML: true,
            // Gleich bei der Initialisierung setzen wir den Inhalt für jeden Tooltipp:
            functionInit: function (instance, helper) {
                const
                    // Die URL des großen Bilders bekommen wir, indem wir in der URL
                    // des kleinen Bildes das Verzeichnis austauschen:
                    imgUrl = helper.origin.src.replace('thumbs', 'images'),
                    // Wir erzeugen hilfsweise ein Image-Objekt
                    // um das Bild vorzuladen:
                    img = new Image();
                img.onload = event => {
                    // Das Bild ist fertig geladen,
                    // jetzt weisen wir ihm Breite und Höhe zu, damit Tooltipster
                    // Position und Abmessungen rechtig berechnet:
                    $(helper.origin).tooltipster('content', $(`<img src='${imgUrl}' width='${img.naturalWidth}' height='${img.naturalHeight}'>`));
                }
                img.src = imgUrl;
            }
        });
    </script>

Oder alternativ die Parameter nach dem Laden neu berechnen lassen:
Code:
    <script>
        $('.tooltipster').tooltipster({
            // Tooltipster anweisen, den Inhalt des Tooltipps als HTML zu interpretieren:
            contentAsHTML: true,
            // Gleich bei der Initialisierung setzen wir den Inhalt für jeden Tooltipp:
            functionInit: function (instance, helper) {
                const
                    // Die URL des großen Bilders bekommen wir, indem wir in der URL
                    // des kleinen Bildes das Verzeichnis austauschen:
                    imgUrl = helper.origin.src.replace('thumbs', 'images');
                // Jetzt können wir den Inhalt des Tooltipps als HTML
                // mit einem img-Tag festlegen:
                $(helper.origin).tooltipster('content', $(`<img src='${imgUrl}'>`));
            },
            // Nachdem das HTML des Tooltipps in das DOM eingehängt wurde:
            functionReady: function (instance, helper) {
                // Wenn das Bild fertig geladen ist:
                $(helper.origin).on('load', function () {
                    // Größe und Positionierung neu berechnen:
                    $(this).tooltipster('reposition');
                });
            }
        });
    </script>
 
Zuletzt bearbeitet:

voumi

Neues Mitglied
Super!!!!! Dein erster Lösungsvorschlag hat voll ins Schwarze getroffen. VIELEN DANK für Deine endlose Geduld mit mir und Deine Unterstützung.
Ich weiss nicht, ob Du die Autodoktoren von VOX kennst. Die beiden genehmigen sich nach einem gelösten Problem jeweils ein Bier... Hast Du irgendwo einen "Bierknopf"? Ich würde Dir sehr gerne einen Kneipengang auf meine Kosten ermöglichen.
 

Sclero2004

Mitglied
Freut mich, dass es funktioniert.
VIELEN DANK für Deine endlose Geduld mit mir und Deine Unterstützung.
Ja, beim Programmieren braucht es schon Geduld und Beharrlichkeit.

Nein, einen Bierknopf habe ich nicht. Ich mache das ja hier aus Spaß an der Sache und beim Thema deiner Site handelt es sich offensichtlich um eine Freizeitbeschäftigung wo es nicht ums Geld geht.
Das unterstütze ich dann besonders gern.

Dann wünsche ich einen schönen Feiertag morgen und ein angenehmes verlängertes Wochenende!
 

voumi

Neues Mitglied
Es ist schön, dass es hier Leute wie Dich gibt. :smile: Danke - Danke - Danke :smile:

Ich wünsche Dir auch ein angenehmes, langes und hoffentlich sonniges Wochenende möglichst weit weg vom Stau :wink:
 
Werbung:
Oben