Höchste aktuelle Objekt ID ausgeben.

Hier können Sie Fragen bezüglich des Datenbank-/Objektmoduls stellen.
Andreas Pitsch

Höchste aktuelle Objekt ID ausgeben.

Beitragvon Andreas Pitsch » Fr 13. Feb 2009, 11:03

Hallo an alle,

wenn ich bei WE ein Objekt erstelle, wird diesem eine ID gegeben, die eine fortlaufende Nummer ist. Meine Frage ist nun: Webedition weiß ja, welchen Wert die nächste ID haben wird, kann man das irgendwie Abfragen? Gibt es da einen PHP Befehl? Ich bedanke mich mal im Vorraus.

Andreas Pitsch

mobby
Senior Member
Beiträge: 1164
Registriert: Do 1. Sep 2005, 05:07

Beitragvon mobby » Fr 13. Feb 2009, 13:54

Moin,
so aus der Hüfte
Code: Alles auswählen
<we:field name="WE_ID" />
Viele Grüße
Mobby

webEdition 8.1.0 (Ahlberg) (8.1.0.0, Revision: 10599)

Andreas Pitsch

Beitragvon Andreas Pitsch » Fr 13. Feb 2009, 14:01

Damit kann ich die ID des Objekts ausgeben, dass ich im moment über eine Listview angesteuert habe. Das such ich leider nicht. Ich such den Wert, den Webedition dem nächsten Objekt, das ich erstellen werde übergeben wird. Also: ich möchte im Voraus wissen, welche ID das Objekt waben wird, was ich jetzt über Frontendedit erstellen werde.

deemes

Beitragvon deemes » Fr 13. Feb 2009, 14:06

Naja, er meinte sicher die ID des Objektes das als nächstes erstellt wird. Also praktisch den Wert auto_increment+1 der entsprechenden Tabelle.

Also sowas hier z.B. http://de.php.net/manual/en/function.my ... .php#81129

Wenn man nur eine einzige Klasse hat kann man auch ein we:listview hernehmen und nach der ID sortieren, mit rows=1. Dann die ID um 1 erhöhen. Dieser Wert entspricht allerdings nicht 100%ig dem auto_increment-Wert. Beim löschen vom Objekt mit der höchsten ID wird der auto_increment-Wert meines Wissens nach nicht zurückgesetzt.

Je nachdem was Du vorhast ist das sowieso eine riskante Sache. Wenn mehrere Redakteure parallel Objekte anlegen kommt es da auch schnell zu Problemen.

Beschreibe doch mal wofür Du das brauchst. Den einzigen Fall den ich mir momentan vorstellen kann, sollte man besser mit einem Hook lösen.

Andreas Pitsch

Beitragvon Andreas Pitsch » Fr 13. Feb 2009, 14:14

Es geht um eine Tabelle, die von ungefähr 20 Personen bearbeitet wird. Also eine Online Tabelle über TableKit. Ein paar wenige dieser Personen dürfen Einträge anlegen. Dabei wird über ein DOM Script eine Zeile hinzugefügt in der die ID des Objektes (Eintrag) als ID des <tr> Tags verwendet wird. Das objekt wird über ein HTTPRequest erzeugt (PHP Script im Hintergrund).

Also es würde mir auch helfen, wenn ich die ID von einem Frisch erzeugten Objekt auslesen könnte.

deemes

Beitragvon deemes » Fr 13. Feb 2009, 14:26

Andreas Pitsch;51036 hat geschrieben:Also es würde mir auch helfen, wenn ich die ID von einem Frisch erzeugten Objekt auslesen könnte.
Das dachte ich mir. :) Und das kannst Du ganz leicht mit Hooks umsetzen.
Mit AJAX kannst Du dort nicht mehr arbeiten, da die Hooks nicht direkt im Browser laufen, aber Du kannst Dein PHP Script ja auch so ansprechen bzw. die entsprechenden Aktionen direkt im Hook definieren.

Kleiner Tip noch, um nur eine bestimmte Klasse im Hook zu behandeln kannst Du in der Hook-Funktion die Klasse so abfragen:

Code: Alles auswählen

if([COLOR="Magenta"]$we_doc->TableID[/COLOR] && $we_doc->TableID==[COLOR="DarkOrange"]2[/COLOR]) {...}
* Schliesst Dokumente aus
* ID der zu behandelnden Klasse

Wie Du dann an die ID kommst, steht grob beschrieben hier: http://forum.webedition.de/showpost.php ... ostcount=2

mobby
Senior Member
Beiträge: 1164
Registriert: Do 1. Sep 2005, 05:07

Sorry

Beitragvon mobby » Fr 13. Feb 2009, 14:37

Ach, *ichnixlesenkann
Habe das mit der nächsten überlesen.
Viele Grüße
Mobby

webEdition 8.1.0 (Ahlberg) (8.1.0.0, Revision: 10599)

Andreas Pitsch

Beitragvon Andreas Pitsch » Fr 13. Feb 2009, 17:07

@mobby: NP

@deemes: Ich versteh die Hooks noch nicht ganz....
Ich versteh nur, dass , wenn ich ein Objekt speicher oder lösche oder so eine Funktion ausgeführt wird?! Ist das diese weCustomHook_AKTION();? Muss ich diese Funktion dann in der PHP definieren, in der der we:write-Tag steht?
Wenn das alles so korrekt ist:

Code: Alles auswählen

<?php
function mysql_next_id($table) {
    $result = mysql_query('SHOW TABLE STATUS LIKE "'.$table.'"');
    $rows = mysql_fetch_assoc($result);
    return $rows['auto_increment'];
}
?>
Was ist bei mir Table bzw. wie kann ich es herausfinden?

Danke
Andreas

deemes

Beitragvon deemes » Fr 13. Feb 2009, 17:20

Andreas Pitsch;51039 hat geschrieben:Ich versteh nur, dass , wenn ich ein Objekt speicher oder lösche oder so eine Funktion ausgeführt wird?! Ist das diese weCustomHook_AKTION();?
Exakt.
Und "AKTION" ersetzt Du durch die entsprechende Aktion, wie z.B. "publish" Wann immer dann ein Dokument/Objekt veröffentlich wird, wird dieser Hook aufgerufen.

Wir bleiben mal beim Beispiel "publish", kannst das ja beliebig anpassen.
Muss ich diese Funktion dann in der PHP definieren, in der der we:write-Tag steht?
Du erstellst eine Datei namens "weCustomHook_publish.inc.php" und definierst darin die gleichnamige Funktion

Code: Alles auswählen

function weCustomHook_publish($we_doc, $appName='') {

}
Die Datei muss unter /webEdition/we/include/we_hook/custom_hooks/ abgelegt werden.
Wenn das alles so korrekt ist:

Code: Alles auswählen

<?php
function mysql_next_id($table) {
    $result = mysql_query('SHOW TABLE STATUS LIKE "'.$table.'"');
    $rows = mysql_fetch_assoc($result);
    return $rows['auto_increment'];
}
?>
Was ist bei mir Table bzw. wie kann ich es herausfinden?
Das brauchst Du alles gar nicht. Die ID des gespeicherten Objekts befindet sich irgendwo in der Variable $we_doc. Mach eine Testausgabe, so wie ich es im anderen Thread beschrieben habe. $we_doc ist ein Objekt, die ID ist vermutlich in $we_doc->ID oder $we_doc->OF_ID gespeichert. Das musst Du aber selbst verifizieren/rausfinden.


Zurück zu „DB-/Objektmodul“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast