Hey,
das ist jetzt nicht direkt ein Tutorial, sondern eher eine 'Erweiterung' zu Huendchen's Tut. (evtl. koennte man es auch in den Beitrag mit rein schreiben, wenn's Huendchen erlaubt?)
Genau gesagt: es sind 2 kleine Aenderungen, die mich in SQL Buddy ziemlich genervt haben (Beides nur mit Version 1.3.2 getestet).
Allerdings ist das schon eine Weile her, wo ich die geschrieben habe - deswegen koennte es sein, dass ich das ein oder andere versehentlich vergessen habe.
Die erste fuegt auf der Seite 'browse' (anzeigen der Tabellen Inhalten) ein Link ein, mit dem man direkt zur edit-Seite der entsprechnden Zeile kommt. (Nicht mehr ueber den 'Umweg' Checkbox -> Bearbeiten..
Ich bin faul.
Das gleich koennte man eig. mit loeschen machen - allerdings loesche ich selten Inhalte ueber den Datenbank Manager, deswegen habe ich dafuer gerade nichts da.
so schauts aus:[img]http://nixseite.de/knuddels/sql_buddy1.jpg[/img]
Als erstes schieben wir die Spalten-Namen weiter nach Rechts.
Zeile 198 wie gefolge aendern:
echo '<div class="emptyvoid" style="width: 47px"> </div>';
Dann muessen wir die Spalte fuer die Checkbox, Info & den neuen Link vergroessern.
Zeile 278 sieht dann so aus:
echo '<div class="leftchecks" style="width: 55px;">';
Nun kommt der Link dazu ~ Zeile 307
echo '<dd style="width: 30px;"><a onclick="editRow(\'' . addslashes($queryBuilder) . '\')" class="editRow" style="float: left;">e</a><a onclick="fullTextWindow(' . $m . ')" class="info" style="float: left;"></a><div style="clear:both; font-size: 1px; line-height: 1px; height: 1px;"></dd>';
Zum schluss dann noch die Tabelle nach Rechts schieben, sonst verschwinden ein paar Inhalte:
Zeile 320 wie gefolge aendern:
echo '<div class="gridscroll" style="margin-left: 55px;">';
Das wars dann auch schon mit dem Markup & Style. Jetzt noch die Javascript-Funktion & ein wenig CSS:
Die Javascript-Funktion kommt in 'helpers.js', wo genau ist eigentlich egal - die 'richtige' Stelle waere allerdings nach Zeile 332. (Vom aufbau her)
function editRow(query) {
var grid = sb.grid;
if (f(grid)) {
sb.topTabs[sb.topTabSet].addTab("Edit", "edit.php", true);
sb.page = "edit.php";
var x = new XHR({url: "edit.php", onSuccess: finishTabLoad}).send("editParts=" + query);
}
}
So, non fuegen wir noch die Klasse 'editRow' ein, und aendern ein wenig an dem vorhanen Stylesheet:
Dazu ersetzen wir den Code von Zeile 267-276 mit diesem:
.manip dd a.info {
background: url(../images/info.png) no-repeat;
width: 13px;
height: 13px;
display: block;
cursor: default;
}
.manip dd a.info:hover {
background: url(../images/infoHover.png) no-repeat;
}
.manip dd a.editRow {
background: url(../images/edit.png) no-repeat;
width: 13px;
height: 13px;
display: block;
cursor: default;
}
.manip dd a.editRow:hover {
background: url(../images/editHover.png) no-repeat;
}
Hier dann noch die 2 Bilder die gebraucht werden:
Edit: [img]http://nixseite.de/knuddels/edit.png[/img]
editHover: [img]http://nixseite.de/knuddels/editHover.png[/img]
Soa, das 2. Ding ist eine bearbeiten-Funktion fuer Tabellen wo kein Primaerschluessel definiert wurde.
Dazu allerdings 3 Sachen, die ich vorher erwaehnen moechte:
1. sollte eig. IMMER ein Schluessel angegeben werden, besser noch: eine ID (
MySQL auto_increment)
2. Wenn es Zwei Spalten gibt, die genau den gleichen Inhalt in allen Spalten haben, werden BEIDE veraendert! (Wenn es Drei sind, werden halt alle Drei geaendert.. etc.)
3. Konnte ich das nun nur mit Text & int-Feldern testen, wie das dann mit BLOB etc aussieht.. Weiss ich nicht. Also vorher besser die Datei sichern.
Als erstes aendern wir eine kleine if-Klausel, die schon vorhanden ist.
Diese beginnt in Zeile 319 (wenn nicht in den naechsten Zeilen angaben immer die Anzahl drauf Rechnen oder abziehen) uns sieht so aus:
if (isset($primaryKeys) && count($primaryKeys))
echo '<div class="gridscroll" style="margin-left: 55px;">';
else
echo '<div class="gridscroll">';
Daraus machen wir:
if (isset($primaryKeys) && count($primaryKeys)){
$setWhere = false;
echo '<div class="gridscroll" style="margin-left: 55px;">';
}
else {
$setWhere = true;
echo '<div class="gridscroll">';
}
$where = '';
.. hier setzen wir nur eine Variable die uns spaeter sagt, ob wir das benoetigen (wenn wir einen Primaerschluessel haben, haben wir ja schon vorhin den Button eingefuegt).
Nach der if-Klausel setzen wir noch eine leere Variable, die wir spaeter mit Inhalt fuellen.
Wenn das dann geaendert ist, geht es zur Zeile 330, die dieses beinhaltet:
while (($dataRow = $conn->fetchArray($dataSql)) && ($m < $displayLimit)) {
NACH dieser Zeile wird das eingefuegt:
if($setWhere==true) {
$where = 'WHERE ';
foreach($fieldList as $key => $value) {
if($dataRow[$key]!='') {
if ($conn->getAdapter() == "sqlite") {
$where .= $value . ' = \'' . $dataRow[$key] .'\' AND ';
} else {
$where .= '`' . $value . '` = \'' . $dataRow[$key] .'\' AND ';
}
}
}
$where = substr($where, 0, -5);
$where = ' onclick="editRow(\''. addslashes($where) .';\')"';
}
Hier stezen wir dann unsere WHERE-Bedingung zusammen, die wir dann spaeter an die Javascript Funktion 'editRow' senden.
Als erstes wird ueberprueft, ob der Inhalt der Variable setWhere war oder falsch ist. Das haben wir vorhin in der if-Klausel gesetzt. Wenn der wahr ist, gehen wir in eine Schleife, in der wir dann wieder eine Ueberpruefung haben. In dieser Ueberpruefung gucken wir ob die aktuelle Spalte auch einen Wert hat, wenn nicht wird diese nicht gebraucht und koennte nur zu einem Fehler fuehren.
Anschliessend wird unsere WHERE-Bedingung nach Verbindungsart zusammen gebaut, wieder verkleinert und in ein Javascript-Eventhandler gepackt.
zu guter Letzt noch den Eventhandler an die richtige Stelle platzieren (Zeile 357):
echo '<tr ' . $where . '>';