Hallo,
ich möchte auf Basis von Änderungen in den Metadaten eine Funktion ausführen. Nun hab ich das Problem, dass die Extension aufgerufen wird, bevor die Änderungen in den Metadaten in die DB übernommen wurden, d.h. die Funktion arbeitet mit alten Daten. Gibt es eine Möglichkeit dies zu ändern?
Danke und Viele Grüße
Benedikt Allkemper
Hallo,
Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.
Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.
Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
Hallo Markus,
danke für die schnelle Antwort.
Ich hab etwas anderes gemeint: die Metadaten in den Artikeln. Ich habe dort über das Addon Meta Infos ein neues Feld hinzugefügt. In der Funktion die ich mit dem Extension Point ART_META_UPDATED registriert habe tritt dann das beschriebene Verhalten auf. Wenn ich die Daten ein zweites mal absende (ohne Änderungen) funktioniert es, da ja dann die alten Daten identisch mit den neuen sind.
Viele Grüße
Bene
danke für die schnelle Antwort.
Ich hab etwas anderes gemeint: die Metadaten in den Artikeln. Ich habe dort über das Addon Meta Infos ein neues Feld hinzugefügt. In der Funktion die ich mit dem Extension Point ART_META_UPDATED registriert habe tritt dann das beschriebene Verhalten auf. Wenn ich die Daten ein zweites mal absende (ohne Änderungen) funktioniert es, da ja dann die alten Daten identisch mit den neuen sind.
Viele Grüße
Bene
- Thomas.Blum
- Entwickler
- Beiträge: 5063
- Registriert: 24. Aug 2004, 22:11
- Wohnort: Dresden
- Kontaktdaten: Website
Hallo,
jetzt bin ich halbwegs verwirrt.
Zur genaueren Erklärung versuch ich die Sache etwas ausführlicher zu beschreiben:
Ich möchte das Addon url_rewrite so ändern, dass ich auch völlig unabhängig URLs definieren kann. Meine Idee war dazu ein neues Feld art_url über das MetaInfo Addon anzulegen und in der Datei class.rewrite_fullnames.inc.php den extensionPoint ART_META_UPDATED in die Liste aufzunehmen.
Die Funktion rex_rewriter_generate_pathnames hab ich dann so angepasst, dass zu jedem Artikel über da OO-Framework das Feld art_url ausgelesen wird. Dieser Wert enthält dann aber nicht den neu in das Feld eingegebenen Wert, sondern den alten Wert.
danke und viele Grüße
Bene
jetzt bin ich halbwegs verwirrt.
Wenn das eine Frage ist, dann kann ich die mit JA beantworten. Ist dieses Verhalten normal/gewünscht/einstellbar?Deine Funktion wird aufgerufen, _BEVOR_ die Daten in der DB aktualisiert wurden?
Zur genaueren Erklärung versuch ich die Sache etwas ausführlicher zu beschreiben:
Ich möchte das Addon url_rewrite so ändern, dass ich auch völlig unabhängig URLs definieren kann. Meine Idee war dazu ein neues Feld art_url über das MetaInfo Addon anzulegen und in der Datei class.rewrite_fullnames.inc.php den extensionPoint ART_META_UPDATED in die Liste aufzunehmen.
Die Funktion rex_rewriter_generate_pathnames hab ich dann so angepasst, dass zu jedem Artikel über da OO-Framework das Feld art_url ausgelesen wird. Dieser Wert enthält dann aber nicht den neu in das Feld eingegebenen Wert, sondern den alten Wert.
Code: Alles auswählen
function rex_rewriter_generate_pathnames($params = array ())
{
global $REX;
$db = new rex_sql();
$result = $db->getArray('SELECT id,name,clang,path FROM rex_article');
if (is_array($result))
{
foreach ($result as $var)
{
$article_url = $var['name'];
$article = OOArticle::getArticleById($var['id']);
$artikel_special_url = $article->getValue('art_url');
if(trim($artikel_special_url) != "")
{
$article_url = $artikel_special_url;
echo $article_url;
}
$article_names[$var['id']][$var['clang']]['name'] = rex_parse_article_name($article_url);
}
}
...
...
...
}
danke und viele Grüße
Bene
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
Hi Markus,
Danke für eure Hilfe
Bene
leider nein! Es bleibt alles beim alten. Dann wird mir wohl nix anderes übrig bleiben, als die Metadaten zweimal zu aktualisieren?! Ist ja letztlich auch kein Drama.vermutlich reicht es schon, wenn du ein rex_generateArticle() Aufrufst, bevor du das OOF Objekt erstellst..
Danke für eure Hilfe
Bene
Hallo,
Danke für den Hinweis. Nach vielen Versuchen hab ich es jetzt hinbekommen: Ich habe für den Extension Point ART_META_UPDATED eine weitere Funktion angemeldet, in der ich die Daten aus der URL per SQL-Update in die Datenbank schreibe und dann ein rex_generateArticle aufgerufen wird.
Es funktioniert allerdings nur wenn ich die Anmeldung der Funktion am Extension Point vor den anderen Anmeldungen vornehme, also so:
Ich bin also von der Reihenfolge in der die angemeldeten Funktionen aufgerufen werden abhängig. Ist diese Reihenfolge (last in first out oder first in first out) klar definiert? In meinen Augen würde es auch Sinn machen die Doku (http://www.redaxo.de/195-0-rexregisterextension.html) dahingehend zu ergänzen.
Viele Grüße
Bene
Code: Alles auswählen
Eine einfache Methode zu diesem Zeitpunkt an die Daten zu kommen, ist
diese schlicht per "rex_post('art_url','string')" aus den Formulardaten abzufragen.
Es funktioniert allerdings nur wenn ich die Anmeldung der Funktion am Extension Point vor den anderen Anmeldungen vornehme, also so:
Code: Alles auswählen
// Die Pathnames bei folgenden Extension Points aktualisieren
$extension = 'rex_rewriter_generate_pathnames';
$extensionPoints = array(
'CAT_ADDED', 'CAT_UPDATED', 'CAT_DELETED',
'ART_ADDED', 'ART_UPDATED', 'ART_DELETED',
'CLANG_ADDED', 'CLANG_UPDATED', 'CLANG_DELETED',
'ALL_GENERATED', 'ART_META_UPDATED');
rex_register_extension('ART_META_UPDATED', 'writeArtUrlToDB');
foreach($extensionPoints as $extensionPoint)
{
rex_register_extension($extensionPoint, $extension);
}
Viele Grüße
Bene
Da die EP's in einer foreach-Schleife abgearbeitet werden, und diese perIch bin also von der Reihenfolge in der die angemeldeten Funktionen aufgerufen werden abhängig. Ist diese Reihenfolge (last in first out oder first in first out) klar definiert?
eparray[] = ep angehängt werden, ist die Reihenfolge eindeutig (FIFO).
Eine mögliche Lösung mit EPs und aktiven MetaInfo-Addon wäre:
im MetaInfo-Addon in der Datei extension_common.inc.php in
der Zeile 451 (nach rex_generateArticle($params['id']) )
rex_register_extension_point(REX_EP_METAINFO_UPDATED, '', $params, TRUE);
einzufügen.
Ausserdem zb. in rex_extensions.inc.php
define(REX_EP_METAINFO_UPDATED, 'METAINFO_UPDATED');
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
- Gregor.Harlan
- Entwickler
- Beiträge: 1130
- Registriert: 4. Jun 2007, 10:35
- Wohnort: Frankfurt am Main