Thickbox: Wurde der Link gedrückt?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Thickbox: Wurde der Link gedrückt?

    Hallo Liebe Community,

    ich bastel mal wieder nach langer Zeit an einem Projekt! Da ich von JavaScript und Ajax nicht so viel Erfahrung haben frage ich mal lieber, vielleicht kennt einer eine einfache Lösung.

    Ich benutzte Folgendes JavaScript Lib jquery.com/demo/thickbox/ um damit auf der Webseite Bilder schöner darzustellen. Nun möchte ich wenn einer auf einen Link klickt und z.B. ein Bild anschaut, dass diese Information in die Datenbank geschrieben wird (Counter) Hier mal der Orginal Link wie er in der Webseite aufgerufen wird.

    Quellcode

    1. <a href="bilder/me_grade.jpg?KeepThis=true&TB_iframe=true&height=400&width=600" title="add a caption to title attribute / or leave blank" class="thickbox"><img src="bilder/test_close.jpg" width="100" height="100" alt="bild1" /></a>


    könnte man da was einfaches basteln?

    LG
    Stephan
  • hmm verstehe ich nicht ganz, ich habe das mal versucht :

    Quellcode

    1. <a href="test.php?KeepThis=true&TB_iframe=true&height=400&width=600" title="add a caption to title attribute / or leave blank" class="thickbox"><img src="bilder/test_close.jpg" width="100" height="100" alt="bild1" /></a>


    aber er führt die php Datei nicht noch mal aus :(

    Es soll nicht gezählt werden wie oft das Link-Bild angezeigt wird, sondern wie oft er auf das Bild angeklickt wird!

    jquery.com/demo/thickbox/ und dabei Examples für Bilder soll es aussehen!
  • Gleiches Problem andere Herangehensweise

    Moin Moin zusammen,

    die Idee von Phillippgerard hört sich Interessant an, aber ist für meine Lösung nicht so Pratikabel, den es werden auch verschieden Datei später eingebunden. Die Anwendung soll später auch auf verscheiden Webangeboten laufen können.
    Ich werden mal versuchen meine Idee wozu ich das Brauch mal zubeschreiben, vielleicht gibt es ja eine andere Möglichkeit das Problem zubeheben.

    Jeder von euch kennt eine Weihnachtskalender, oder gibt es Türen. Hinter jeder Tür soll mit Hilfe von der Tickbox Bilder, Text oder auch eine Wünschformular auf den Bildschirm gezaubert werden. Um das zu realisieren überprüft eine PHP-Skipt das Datum und baut die Erlaubten Links zusammen. So ein Link sieht dann aus wie Anfangs schon beschrieben. Jede Tür hat zwei Zustände "Open" und "Close" diesen zustand muss das PHP-Skript kenne um entsprechend das passende Bild für den Link einzubauen. Das ganze liegt eine MySQL Datenbank zugrunde. Wo der Zustand abgelegt werden soll und genau da liegt das Problem!

    Ich könnte natürlich sagen, offne die Türen schon von alleine! Aber schöner wäre es wenn der Benutzer erst das Bilder einer Offenen Tür bekommt wenn er sich den Inhalt auch schon angesehen hat :)

    Ich hoffe einer hat einen Kreative Lösungsansatz, ich habe nähmlich nicht mehr viel Zeit bis zum 1.12.08 :(

    Liebe Grüße
    Stephan
  • Oh dann drängt wirklich die Zeit ^^
    Ich weiß nicht wie die Tickbox Bilder funktionieren aber du rufst doch in dem link die test.php auf. Kann man in der nicht ganz am Anfang das Datum prüfen und je nachdem den Code ausführen?

    Quellcode

    1. <a href="test.php?KeepThis=true&TB_iframe=true&height=400&width=600" title="add a caption to title attribute / or leave blank" class="thickbox"><img src="bilder/test_close.jpg" width="100" height="100" alt="bild1" /></a>
  • Oh sorry, da war ich im falschen Feld.
    Was ist, wenn Du je nach Datum einen bestimmten link aufrufst z.B. mit PHP:

    Quellcode

    1. <?php
    2. if ($datum_jetzt > $datum_kalendar){
    3. ?>
    4. <a href="bilder/me_grade.jpg?KeepThis=true&TB_iframe=true&height=400&width=600" title="add a caption to title attribute / or leave blank" class="thickbox"><img src="bilder/test_close.jpg" width="100" height="100" alt="bild1" /></a>
    5. <?php
    6. } else {
    7. ?>
    8. <a href="bilder/NOCH_NICHT_ERLAUBT.jpg?KeepThis=true&TB_iframe=true&height=400&width=600" title="add a caption to title attribute / or leave blank" class="thickbox"><img src="bilder/test_close.jpg" width="100" height="100" alt="bild1" /></a>
    9. <?php
    10. }
  • Das Problem ist nicht das Datum erkennung, das habe ich gelöst ob ein Link funktionieren darf oder nicht. Der Knackpunkt ist der das wenn eine Tür noch nicht Angeklickt wurde,soll eine anders Bild erscheinen. Als wenn der Benutzer eine Tür schon geöffnet hat. Diese Information wird soll in der Datenbank festgehalten werden, so das man dieses Auswerten kann und mit PHP Steuern kann ob eine Tür schon offen ist oder nicht.
  • ok irgendwie steh ich heute aufm Schlauch^^
    Für mein Beispiel gerade eben:

    Ich nehme an, du hast in der Datenbank ein Tabelle mit 'User'. Dann brauchst du noch die Tabelle 'clicked' mit clicked_id,user_id, kalendard_tuer_id (1-31).
    $userid ist der aktuelle Benutzer, $door_id ist die geklickte Tür

    Quellcode

    1. <?php
    2. if ($datum_jetzt > $datum_kalendar){
    3. if(mysql_num_rows(mysql_query("SELECT clicked_id FROM clicked WHERE userid = '".$userid." AND kalendar_tuer_id = '".$door_id."'')) > 0){
    4. //bereits geklickt
    5. echo '<a href="bilder/BEREITS_GEKLICKT.jpg?KeepThis=true&TB_iframe=true&height=400&width=600" title="add a caption to title attribute / or leave blank" class="thickbox"><img src="bilder/test_close.jpg" width="100" height="100" alt="bild1" /></a>';
    6. } else {
    7. //Noch nicht geklickt
    8. echo '<a href="bilder/me_grade.jpg?KeepThis=true&TB_iframe=true&height=400&width=600" title="add a caption to title attribute / or leave blank" class="thickbox"><img src="bilder/test_close.jpg" width="100" height="100" alt="bild1" /></a>';
    9. //als geklickt kennzeichnen
    10. mysql_query("INSERT INTO clicked (user_id,kalendar_tuer_id) VALUES ('$userid','$door_id')");
    11. }
    12. } else {
    13. echo '<a href="bilder/NOCH_NICHT_ERLAUBT.jpg?KeepThis=true&TB_iframe=true&height=400&width=600" title="add a caption to title attribute / or leave blank" class="thickbox"><img src="bilder/test_close.jpg" width="100" height="100" alt="bild1" /></a>';
    14. }
    Alles anzeigen


    Falls du wirklich sobald die Tür einmal geklickt wurde für alle die später drauf klicken ein anderes Bild zeigen willst, brauchst du in der Datenbank den Benutzer nicht mit abspeichern, sondern kannst die Tabelle 'clicked' einfach ohne User machen.

    Sorry für die schlimme Formatierung

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von student2312 ()

  • Wenn ich das richtig sehe ist auch hier ein Denkfehler drin, du unterscheidest nach dem Status in der Tabelle "clicked" ob eine Tür schon angeclickt werden darf! Darf die Tür anklicken werden, wird der richtig Link ausgeben und in die Datenbank geschrieben das der Status sich geändert hat . Aber hat der Benutzer auch wirklich auf den Link geclickt? Ich denke mal das die Lösung eine komibation aus JavaScript und PHP sein muss! Da die HTML seite schon ausgeliefert ist und dann der Benutzer den Link anschaut und dadurch sein Geschenk erst sieht :) ! Dann soll in der Datenbank der Status geändert werden!

    Ich hoffe ich kann meine Problem etwas deutlicher machen.

    LG
    Stephan
  • nene, das müsste schon so gehen. Die Struktur noch einmal übersichtlicher:

    Quellcode

    1. if($richtigesDatum){ // Der User klickt auf eine Tür, und das Datum ist heute oder Vergangenheit
    2. if(mysql_num_rows($query)>0){
    3. /* Der User hatte schon einmal auf diese Tür geklickt und bekommt, wie du meintest ein anderes Bild */
    4. <a href = 'bild_bereits_geklickt.jpg'><img /></a>
    5. } else {
    6. /* Der User hatte noch nie auf diese Tür geklickt und bekommt das Bild hinter Tür X */
    7. <a href = 'tür_24_12.jpg'><img /></a>
    8. /* Jetzt wird das gespeichert, beim nächsten Mal ist mysql_num_rows($query)>0 */
    9. mysql_query("Insert into clicked Values ($userid,$tür)");
    10. }
    11. } else {
    12. // Das Datum liegt noch in der Zukunft
    13. <a href = 'noch_nicht_erlaubt.jpg'><img /></a>
    14. }
    Alles anzeigen

    Es wird sicher auch mit JS gehen, aber so hast du (wenn ich dich richtig verstanden habe) alle Variationen drin. Die Tabelle 'clicked' zeigt an welcher User auf welche Tür schon geklicht hatte.
  • Entwerder wir reden einander vorbei oder ich ckeck das nicht :(

    ich habe mal eine HTML Seite fertig gemacht die später von PHP erzeugt wird!

    muetzeswelt.de/test/test1.html# ist die Seite ausgeliefert steht fest welche Links aufgerufen werden dürfen und welche nicht, da regele ich über PHP! So nun klickt die Frau auf das erste Tür und sieht ein Bild von mir!

    Dannach soll die Tür z.B. dieses Logo Tragen und in die Datenbank wird der Status geändert so das ab den zeitpunkt immer nur diese Logo erscheint! Wenn man den Link betätigt kommt wieder das Bild von mir *g*

    [Blockierte Grafik: http://www.muetzeswelt.de/test/bilder/test_open.jpg]
  • Im Prinzip spiegelt die test1.html genau das output der PHP Datei wieder wo das Problem liegt! Der Code selber ist Objektorientiert aufgebaut und ist momentan ziehmlich durcheinander :) Ich bastel grade eine Notlösung die so aussieht das es eine zwischen Seite gibt nach den Klicken auf dir Tür. Dort steht nix anders als Bitte hier Geschenk öffnen und dann kommt der Inhalt! Das hat den Vorteil das ich das so machen kann wie z.B. student2312 beschrieben hat! Nicht schön das der User zweimal klicken muss, bis der eigentlich Inhalt zu sehen ist.
  • Hm ah ich glaub ich verstehe das Problem, da die Seite nicht neu geladen wird kann natürlich PHP nicht die Datenbank checken. Also wenn du ein anderes Bild haben willst, wenn der User 2 mal direkt hintereinander auf den Kalendar drückt, kommst du wirklich nicht um eine Ajax Abfrage rum. Falls es ausreichend ist, wenn der User beim nächsten Betreten der Seite ein anderes Bild bekommt würde die PHP Version ausreichen.

    Hm evtl könnte man das mit Ajax so machen (ohne zu wissen, wie thickbox genau funktioniert):

    Quellcode

    1. <a href="javascript:ajax_weiterleitung(userid,kalendartag)"><img /></a>

    Quellcode

    1. function ajax_weiterleitung(userid,Tag) {
    2. var req;
    3. try {
    4. req = window.XMLHttpRequest ? new XMLHttpRequest(): new ActiveXObject("Microsoft.XMLHTTP");
    5. } catch (e) {
    6. // browser does not have ajax support
    7. }
    8. req.onreadystatechange = function() {
    9. if (req.readyState == 4 && req.status == 200) {
    10. link_weiterleitung = req.responseText;
    11. window.location.href = link_weiterleitung;
    12. }
    13. };
    14. req.open('GET', 'ajax.php?userid='+userid+'Tag='+Tag, true);
    15. req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    16. req.send(null);
    17. return false;
    18. }
    Alles anzeigen

    ajax.php:

    Quellcode

    1. $user = $_GET['userid'];$tag = $_GET['tag'];
    2. if($richtigesDatum){
    3. if(mysql_num_rows($query)>0){
    4. $bild = 'Bilder/bild_bereits_geklickt.jpg';
    5. } else {
    6. $bild = 'Bilder/bild_24_12.jpg';
    7. mysql_query("Insert into clicked Values ($userid,$tag)");
    8. }
    9. } else {
    10. $bild = 'Bilder/bild_zu_früh.jpg';
    11. }
    12. echo $bild;
    Alles anzeigen



    Allerdings wie gesagt, ich bin mir nicht sicher wie diese Thickbox Links funktionieren. Evtl funktionier das mit window.location.href nicht... Ich drücke die Daumen (T - 2 Tage)

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von student2312 ()