[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Probleme mit Aufruf von Extension ART_META_UPDATED - REDAXO Forum
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/
Bene
Beiträge: 123
Registriert: 20. Jan 2007, 00:42

Probleme mit Aufruf von Extension ART_META_UPDATED

6. Mai 2008, 11:21

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

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

6. Mai 2008, 13:01

Hi Benedikt,

du müsstest ja die File Id haben und somit kannst du dir doch die Daten aus der DB Selektieren (oder via OOMedia auslesen)...?

Gruß,
Markus

Bene
Beiträge: 123
Registriert: 20. Jan 2007, 00:42

6. Mai 2008, 16:03

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

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

6. Mai 2008, 19:47

Hej,

nur noch einmal zum Verständnis:

Deine Funktion wird aufgerufen, _BEVOR_ die Daten in der DB aktualisiert wurden?

vg Thomas


PS: @Markus. Was meinst du mit File Id? Er schreibt nicht von einem Medium.

Bene
Beiträge: 123
Registriert: 20. Jan 2007, 00:42

6. Mai 2008, 21:07

Hallo,

jetzt bin ich halbwegs verwirrt.
Deine Funktion wird aufgerufen, _BEVOR_ die Daten in der DB aktualisiert wurden?
Wenn das eine Frage ist, dann kann ich die mit JA beantworten. Ist dieses Verhalten normal/gewünscht/einstellbar?

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

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

6. Mai 2008, 21:25

Hi Bene,

vermutlich reicht es schon, wenn du ein rex_generateArticle() Aufrufst, bevor du das OOF Objekt erstellst..

Gruß,
Markus

@Thomas: Ich hatten den EP falsch gelesen... Du hast natürlich recht :-)

Bene
Beiträge: 123
Registriert: 20. Jan 2007, 00:42

6. Mai 2008, 22:37

Hi Markus,
vermutlich reicht es schon, wenn du ein rex_generateArticle() Aufrufst, bevor du das OOF Objekt erstellst..
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.

Danke für eure Hilfe
Bene

zehbaeh
Beiträge: 556
Registriert: 17. Okt 2006, 11:52
Wohnort: Solingen

7. Mai 2008, 01:09

Dieses kaum nachvollziehbare Verhalten ist mir auch schon unangenehm aufgefallen.

Eine einfache Methode zu diesem Zeitpunkt an die Daten zu kommen, ist
diese schlicht per "rex_post('art_url','string')" aus den Formulardaten abzufragen.

Bene
Beiträge: 123
Registriert: 20. Jan 2007, 00:42

7. Mai 2008, 09:13

Hallo,

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.
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:

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);
  }
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

zehbaeh
Beiträge: 556
Registriert: 17. Okt 2006, 11:52
Wohnort: Solingen

7. Mai 2008, 13:28

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?
Da die EP's in einer foreach-Schleife abgearbeitet werden, und diese per
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');

Bene
Beiträge: 123
Registriert: 20. Jan 2007, 00:42

7. Mai 2008, 13:49

Hallo zehbaeh,

Danke für die Hintergrundinfos. Sehr aufschlussreich!

Viele Grüße
Bene

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

7. Mai 2008, 16:06

Hi zusammen,

muss ich mir bei Zeit ansehen..

Gruß,
Markus

Benutzeravatar
Gregor.Harlan
Entwickler
Beiträge: 1130
Registriert: 4. Jun 2007, 10:35
Wohnort: Frankfurt am Main

12. Jun 2008, 00:28

Hallo,

wollte nur kurz sagen: Bin jetzt auf das gleiche Problem gestoßen. Ebenfalls bei ART_META_UPDATED, aber auch bei CAT_UPDATED! Liest man in der eingehängten Funktion die Metadaten aus der DB, so erhält man noch die alten.

Gruß, Gregor

Zurück zu „Sonstiges“