JavaScript Bildverlinkungen

Hallo Hackerboard Community,

Ich habe mir auf meiner Seite eine Funktion eingebaut die es mir und den Registrierten Community Mitgliedern erlaubt "Markierungen" auf Bildern abzulegen und mit einem Text zu versehen.

Das würde ich jetzt gerne erweitern und zwar um den Punkt:

Bei Klick auf die Markierung auf eine andere Seite verlinkt zu werden (Idealerweise das Profil der Verlinkten Person)

zusehen Hier zB.

Wenn ich eine Notiz erstelle das schaut dann folgendermaßen aus:

picture.php


Das ganze wird in einer MySql Datenbank Gespeichert (also die Koordinaten, in Verbindung mit der Bild ID)

Jetzt möchte ich das ganze noch ein wenig "aufpeppen" viele kennen sicherlich die MeinVZ Option wo man seine Freunde verlinken kann und wenn man dann auf diese Verlinkung klickt auf das Profil des Freundes geleitet wird. Und genau diese Funktion möchte Ich gerne nachbauen.

Mein ganzes Script basiert größtenteils auf http://www.takaitra.com/projects/photonotes php photonotes (habe schon einige Änderungen eingebaut um es an mein CMS anzupassen)

Bisher gibt es 1 PHP Script was in einer ajax Javscript Datei includiert wird.

PHP:
<?php
include("_mysql.php");
include("_settings.php");
include("_functions.php");

$mysqli = new mysqli(DBHOST, DBUSER, DBPASS, DBNAME);
if (mysqli_connect_errno()) {
    // TODO handle connection error
    printf('Connect failed: %s\n', mysqli_connect_error());
    exit();
}
// Hiermit lese ich die Freunde aus
        $ergebnis=safe_query("SELECT buddy FROM ".PREFIX."buddys WHERE userID='$userID'");
        $user='';
        while($ds=mysql_fetch_array($ergebnis)) {
            $user.='<option value="'.$ds['buddy'].'">'.getnickname($ds['buddy']).'</option>';
        }
        if($user=="") $user='<option value="">Du hast keine Freunde</option>'; 
        else $user  = '<option value="" selected="selected">---</option>'.$user;
// Freunde auslesen Ende        

if ($_POST['action'] == 'load') {
    // Load notes for the given photo
    $photoIds = explode('~', $_POST['photo_ids']);
    reset($photoIds);
    foreach($photoIds as $key => $photoId)
        $photoIds[$key] = $mysqli->real_escape_string($photoId);
    $sqlIn = "('" . implode("','", $photoIds) . "')";
    $sql = 'SELECT `photo_id`, `note_id`, `left`, `top`, `width`, `height`, `text` FROM ' . TBLNAME . " WHERE photo_id IN $sqlIn";
    $results = $mysqli->query($sql);
    while ($note = $results->fetch_object()) {
        echo "var note = new PhotoNote('$note->text', $note->note_id, new PhotoNoteRect($note->left, $note->top, $note->width, $note->height));\n";
        echo "note.onsave = saveNote;\n";
        echo "note.ondelete = deleteNote;\n";
        echo "containers['$note->photo_id'].AddNote(note);\n";
    }
}
else if ($_POST['action'] == 'save') {
    // Save action
    $photoId = $mysqli->real_escape_string($_POST['photo_id']);
    $text    = $mysqli->real_escape_string($_POST['text']);
    $left    = intval($_POST['left']);
    $top     = intval($_POST['top']);
    $width   = intval($_POST['width']);
    $height  = intval($_POST['height']);

    if ($_POST['note_id'] == -1) {
        // Insert new note
        $sql = 'INSERT INTO ' . TBLNAME . " (`photo_id`, `note_id`, `left`, `top`, `width`, `height`, `text`)
            VALUES ('$photoId', NULL, $left, $top, $width, $height, '$text')";
        if ($mysqli->query($sql)) {
            $noteId = $mysqli->insert_id;
        } else {
            // TODO handle insert error ($mysqli->error)
            $noteId = "0"; // error
        }
    } else {
        // Update existing note
        $noteId = intval($_POST['note_id']);
        $sql = 'UPDATE ' . TBLNAME . " SET `left` = $left, `top` = $top, `width` = $width, `height` = $height, `text` = '$text'
            WHERE photo_id = '$photoId' AND note_id = $noteId";
        if (!$mysqli->query($sql)) {
            // TODO handle delete error ($mysqli->error)
            $noteId = "0"; // error
        }
    }
    // Return note ID to calling page
    echo $noteId;
}
else if ($_POST['action'] == 'delete') {
    // Delete action
    $photoId = $mysqli->real_escape_string($_POST['photo_id']);
    $noteId  = $mysqli->real_escape_string($_POST['note_id']);
    $sql = 'DELETE FROM ' . TBLNAME . " WHERE photo_id = '$photoId' AND note_id = $noteId";
    if (!$mysqli->query($sql)) {
        // TODO handle delete error ($mysqli->error)
        echo "0"; // error
    }
    echo "1"; // success
}
?>
In diesem Code hab ich schon // Freunde auslesen
den Code eingefügt mittels der Ich die Freunde auslesen kann.
Was dann als Variable $user ausgegeben wird.

Das Ganze soll dann als "Drop Down" angezeigt werden wenn ich eine Verlinkung in einem Bild erstelle sprich:

Code:
<select name="freund" size="1">$user</select>
Nur wie bekomme ich diese $user Variable mit in den JavaScript Code?

Code:
var ajax = new sack();
var statusDiv = document.getElementById('PhotoNoteStatus');
var containers = []; // Array of PhotoNoteContainers

function resetAjax() {
    ajax.resetData();
    ajax.requestFile = "gallerynotizen.php";
    ajax.method = 'post';
    ajax.element = 'DebugDiv';
}

function loadNotes(photoIds) {
    // Create the containers
    for (var i = 0; i<photoIds.length; i++) {
        var photoId = photoIds[i];
        containers[photoId] = new PhotoNoteContainer(document.getElementById(photoId));
    }
    // Now load the associated notes
    resetAjax();
    ajax.setVar('action', 'load');
    ajax.setVar('photo_ids', photoIds.join('~'));
    ajax.runAJAX();
    ajax.onCompletion = loadNotesComplete;
}

function loadNotesComplete() {
    ajax.runResponse();
    statusDiv.innerHTML = "Notiz geladen";
}

function addNote(photoId)
{
    var newNote = new PhotoNote('Notiz..', -1, new PhotoNoteRect(50,50,50,50));
    newNote.onsave = saveNote;
    newNote.ondelete = deleteNote;
    containers[photoId].AddNote(newNote);
    newNote.Select();
}

function saveNote (note) {
    resetAjax();
    var photoId = note.container.element.id;
    ajax.setVar('action', 'save');
    ajax.setVar('photo_id', photoId);
    ajax.setVar('note_id', note.id);
    ajax.setVar('left', note.rect.left);
    ajax.setVar('top', note.rect.top);
    ajax.setVar('width', note.rect.width);
    ajax.setVar('height', note.rect.height);
    ajax.encVar('text', note.gui.TextBox.value);
    ajax.runAJAX();
    ajax.onCompletion = function () {statusDiv.innerHTML = "Verlinkung gespeichert!"; }
    return 1;
}

function deleteNote (note) {
    resetAjax();
    var photoId = note.container.element.id;
    ajax.setVar('action', 'delete');
    ajax.setVar('photo_id', photoId);
    ajax.setVar('note_id', note.id);
    ajax.runAJAX();
    ajax.onCompletion = function () {statusDiv.innerHTML = "Verlinkung entfernt!"; }
    return 1;
}

function whenLoading() {
    var element = document.getElementById('PhotoNoteStatus');
    if (element)
        element.innerHTML = "<p>Sending Data...</p>";
}

function whenLoaded() {
    var element = document.getElementById('PhotoNoteStatus');
    if (element)
        element.innerHTML = "<p>Data Sent...</p>";
}

function whenInteractive() {
    var element = document.getElementById('PhotoNoteStatus');
    element.innerHTML = "<p>Getting data...</p>";
}

ajax.onLoading = whenLoading;
ajax.onLoaded = whenLoaded;
ajax.onInteractive = whenInteractive;
Das ist die Ajax Javascript Datei (Gibt noch einige mehr) Ich vermute aber das der Hauptteil in dieser Datei ist.

Ich komm bei dem Teil einfach nicht weiter :/
Zudem muss ich dann am Ende auch noch im Javascript anzeigen das wenn eine Verlinkung auf einen Freund ist, auch der Link, durch den Klick auf eben diese Freundes Verlinkung, den "Klicker" weiterleitet.

Kann mir Jemand Helfen? Gerne auch per ICQ oÄ

Danke & Gruß,

Fabian
 
Ich hab mir mal das Script von der Takaitra.com-Seite angeschaut. In der Js-Datei PhotoNotes-1.5.js gibts eine Methode der Klasse PhotoNote die CreateElements heisst. In dieser Methode müsstest Du von dem newAreaInner-Div-Container den click-Event abonnieren und dann halt den User auf die entsprechende Seite weiterleiten.
 
Ich hab mir mal das Script von der Takaitra.com-Seite angeschaut. In der Js-Datei PhotoNotes-1.5.js gibts eine Methode der Klasse PhotoNote die CreateElements heisst. In dieser Methode müsstest Du von dem newAreaInner-Div-Container den click-Event abonnieren und dann halt den User auf die entsprechende Seite weiterleiten.

Soetwas?

var onclick = showPopup;
//NOTE: showPopup();
//or showPopup(param);
//will NOT work here.
//Must be a reference to a function,
//not a function call.

function showPopup() {
var popup = window.open(this.href, "popup", "height=800,width=600");
popup.focus();
return false;
}

Kenne mich mit JavaScript leider noch nicht sehr viel mit aus darum :/ Habe das unter:

// add the notes area
var noteArea = document.createElement('div');
noteArea.className = 'fn-note';

Eingefügt nur ohne Funktion. Oder kennt jemand eine andere Methode um Objekte auf Bildern zu markieren die dann auch Verlinkt sind.
 
Habs eher so gemeint:

HTML:
//Davor wird ja der Container erzeugt
addEvent(newAreaInner, 'click', function() {
    //Hier kannst Du dann auf den click-Event reagieren.
});
//Hier stehen die mouseover/out events

Natürlich musst Du noch die ID oder sonst was zu dem Benutzer speichern, damit Du beim click-Event den Benutzer weiterleiten kannst. Dazu musst Du deine AddNotes/Speichern-Methode anpassen.
 
Habs eher so gemeint:

HTML:
//Davor wird ja der Container erzeugt
addEvent(newAreaInner, 'click', function() {
    //Hier kannst Du dann auf den click-Event reagieren.
});
//Hier stehen die mouseover/out events
Natürlich musst Du noch die ID oder sonst was zu dem Benutzer speichern, damit Du beim click-Event den Benutzer weiterleiten kannst. Dazu musst Du deine AddNotes/Speichern-Methode anpassen.

Da ich das ganze mit dem JavaScript nicht sooo Verstanden habe habe ich eine andere viel Versprechende Variante entdeckt.

PHP:
$dsql = "SELECT `note_id`, `left`, `top`, `link`, `text` FROM ".PREFIX."gallery_notes WHERE photo_id=".$_GET['picID']."";
$dresult = mysql_query ($dsql);
while($array = mysql_fetch_assoc($dresult))
{
$gallery_verlinkungen = '<div id="'.$array['note_id'].'" style="position:absolute; left:'.$array['left'].'px; top:'.$array['top'].'px;"><a href="index.php?site=profile&id='.$array['link'].'"><img src="/images/icons/markierung.gif" border="0" title="'.$array['text'].'"/></a></div>';
}

Jedoch funktioniert mein array nicht :( da es ja auch pro Foto mehrere Verlinkungen geben kann. Die Verlinkungen werden Gespeichert gebunden an die photo_id, und jede Verlinkung erhält eine fortlaufende note_id

Beispiel:

Foto 2601 hat die note_id 37
Foto 2601 hat 2 Verlinkungen diese haben als note_id 38 & note_id 39

denn auf http://www.tuningschmiede-nrw.de/index.php?site=gallery&picID=2694#picture Diesem Bild sind mehere Verlinkungen. Nur wird nur 1 angezeigt. Kann mir wer bei diesem Problem bitte helfen?

Danke & Gruß,
Fabi
 
So hab hier lange nicht mehr geschrieben ;) war so am "Basteln" habs jetzt Quasi ohne Javascript gelöst der einzigste Javascript Part ist jetzt der mir die Markierten Punkte auf dem Bild als &x= etc in meine Url übergibt
den rest erledige ich nun per php Script und gebe die Verlinkungen als div absolute Aus.

Funktioniert recht gut ;)

Für diejenigen die das mal Live sehen möchten:
http://www.tuningschmiede-nrw.de/index.php?site=gallery&picID=2694

Auf diesem Bild sieht man die Vielen Verlinkungen.
 
Zurück
Oben