mit Hooks Daten während des Speicherns manipulieren

Hooks ermöglichen Ihnen die Ausführung beliebigen PHP-Codes während des Speicherns, Parkens, Veröffentlichens und Löschens jeglicher Inhaltstypen in webEdition.
Benutzeravatar
blickfang
webEdition Partner
webEdition Partner
Beiträge: 812
Registriert: Mo 15. Dez 2003, 16:00
Kontaktdaten:

mit Hooks Daten während des Speicherns manipulieren

Beitragvon blickfang » Do 29. Okt 2009, 13:43

Hallo,

beschäftige mich derzeit zum ersten mal genauer mit den Hooks. Kann man damit Daten eines Dokuments beim Speichern manipulieren (z.B. $we_doc)? Oder lassen sich nur zusätzliche Funktionen bei bestimmten Vorgängen ausführen, die ursprünglichen Eingaben eines Redeakteurs jedoch nicht abfangen?
webEdition Partner - https://www.blickfang-media.com
Ehemals im Vorstand des webEdition e.V.

we:willRockYou
Senior Member
Beiträge: 919
Registriert: Fr 22. Mai 2009, 21:40
Wohnort: Berlin
Kontaktdaten:

Re: mit Hooks Daten während des Speicherns manipulieren

Beitragvon we:willRockYou » Do 29. Okt 2009, 14:06

Die Hooks kommen nach dem (z.B.) Speichern zum Einsatz. D.h. Du kannst die Inhalte von $we_doch nicht einfach so ändern. Jedenfalls würde es keine Auswirkungen auf das Dokument/Objekt haben. Da Du ja aber die ID des Dokuments/Objekts hast, kannst Du das Dokument/Objekt öffnen und manipulieren. Nur ein Abfangen von Fehleingaben des Redakteurs ist so leider nicht möglich.

Die ID des Objekts/Dokuments steht in $we_doc (bzw. in dem Parameter den der Hook empfängt) drin. Wie man ein Objekt/Dokument per PHP manipulieren kann steht z.B. hier: http://documentation.webedition.de/de/w ... a7fbe46fc7 (in den Beispielen unten)
EOF; //totally retired

Dirk Einecke
Senior Member
Beiträge: 3735
Registriert: Do 1. Jan 1970, 02:00
Wohnort: Karlsruhe
Kontaktdaten:

Re: mit Hooks Daten während des Speicherns manipulieren

Beitragvon Dirk Einecke » Do 29. Okt 2009, 14:35

Hi,

hier auch noch zwei Beispiele zum Verändern von Dokumenten/Objekten:

http://documentation.webedition.de/de/w ... -using-php
http://documentation.webedition.de/de/w ... t-with-php

Dirk

Benutzeravatar
blickfang
webEdition Partner
webEdition Partner
Beiträge: 812
Registriert: Mo 15. Dez 2003, 16:00
Kontaktdaten:

Re: mit Hooks Daten während des Speicherns manipulieren

Beitragvon blickfang » Do 29. Okt 2009, 15:43

Hi,

das dachte ich mir schon so ähnlich, hatte nur insgeheim gehofft man könne da vielleicht noch vorher dran drehen :|
Ich möchte Email Adressen die von Redakteuren eingegeben werden umschreiben. Nun hat ja aber jedes Template andere Felder, darunter auch we: Blocks.
Wie komme ich denn nun geschickt an den exakten Name der Felder, um über setElement('feldname','value') den Wert nachträglich zu manipulieren?

Wenn ich mir im Hook $we_doc abhole komme ich mit $we_doc['0']->elements an die Inhalte, welche alle offenbar einzelne Arrays sind. Wenn ich im template Einen Block mit name "teaser" habe und darin ein Feld "teaserBlockWidth" finde ich dieses Array in $we_doc.

Code: Alles auswählen

    [teaserBlockWidthblk_teaser__3] => Array
        (
            [id] => 71943
            [bdid] => 0
            [dat] => Hier steht was
            [isbinary] => 0
            [autobr] => 
            [languageid] => 0
            [cid] => 48371
            [type] => txt
            [documenttable] => tblFile
            [table] => we_tblContent
        )
Kann ich dann mit

Code: Alles auswählen

setElement('teaserBlockWidthblk_teaser__3','Hier steht was neues');
dieses Feld updaten?
webEdition Partner - https://www.blickfang-media.com
Ehemals im Vorstand des webEdition e.V.

we:willRockYou
Senior Member
Beiträge: 919
Registriert: Fr 22. Mai 2009, 21:40
Wohnort: Berlin
Kontaktdaten:

Re: mit Hooks Daten während des Speicherns manipulieren

Beitragvon we:willRockYou » Do 29. Okt 2009, 15:55

Das sollte funktionieren. Zur not einfach selbst das Array manipulieren. Mehr macht setElement nämlich auch nicht. :)

Code: Alles auswählen

	function setElement($name,$data,$type="txt",$id=0,$autobr=0){
		$this->elements[$name]["dat"]=$data;
		$this->elements[$name]["type"]=$type;
		if($id) $this->elements[$name]["id"]=$id;
		if($autobr) $this->elements[$name]["autobr"]=$autobr;
	}
EOF; //totally retired

we:willRockYou
Senior Member
Beiträge: 919
Registriert: Fr 22. Mai 2009, 21:40
Wohnort: Berlin
Kontaktdaten:

Re: mit Hooks Daten während des Speicherns manipulieren

Beitragvon we:willRockYou » Do 29. Okt 2009, 16:26

Mir kommt da gerade noch ne Idee. Geht es nur um die Verschlüsselung der Mail-Adressen? Z.B Umleitung auf ein Formular oder ersetzung des @?

In dem Fall würde ich die Daten lassen wie Sie sind. Das ist sowieso ratsam. In der DB sollte nach Möglichkeit wirklich immer das stehen was der Redakteur eingegeben hat. Die Umwandlung würde ich bei der Ausgabe in Angriff nehmen.

Master-Template ganz am Anfang:

Code: Alles auswählen

<?php
   ob_start();
?>
Master-Template ganz am Ende:

Code: Alles auswählen

<?php
   function parseMail($mail) {
   	return 'wird verschlüsselt ausgegeben';
   }

   $wholeSite=ob_get_clean();
   if($GLOBALS['we_editmode'] != true) {
      $output=preg_replace(
         "/^((?:(?:(?:[a-zA-Z0-9][\.\-\+_]?)*)[a-zA-Z0-9])+)\@((?:(?:(?:[a-zA-Z0-9][\.\-_]?){0,62})[a-zA-Z0-9])+)\.([a-zA-Z0-9]{1,6})$/eis",
         "parseMail('\\1')",
         $wholeSite
      );
   }
   else
      echo $wholeSite;
?>
Regulärer Ausdruck wurde schon auf einstellige DE-Domains angepasst. ;-)
EOF; //totally retired

Benutzeravatar
blickfang
webEdition Partner
webEdition Partner
Beiträge: 812
Registriert: Mo 15. Dez 2003, 16:00
Kontaktdaten:

Re: mit Hooks Daten während des Speicherns manipulieren

Beitragvon blickfang » Do 29. Okt 2009, 17:01

hatte deine Antwort noch nicht gesehen, bevor ich mein weiteres Problem gepostet hatte, sorry. Auch ne coole Idee, dennoch würde mich interessieren warums nicht geht :?:


Supi, das ist im Prinzip das was ich machen möchte - tut nur leider nicht. Ich bekomme die Felder die ich ändern möchte zwar angezeigt, aber sobald ich $doc->we_save(); und $doc->we_publish(); einbinde fällt das ganze auf die Nase (Seiten lassen sich nith mehr veröffentlichen) - eine wirkliche Ausgabe gibts bei Hooks ja leider keine...

Code: Alles auswählen

	function weCustomHook_publish($we_doc) {
		
		ob_start();
		$contentArray = $we_doc['0']->elements;	
		foreach($contentArray as $key => $value){
			foreach($value as $key2 => $data){
				if($key2 == 'dat'){
					if(strstr($data,'1@1') !== false){
						// @ Zeichen ersetzen - wird noch überarbeitet
						$updateField[$key] = str_replace('1@1','||',$data);
					}	
				}
			}	
		}

		print_r($updateField);

		$docID = $we_doc['0']->ID;
		$doc = new we_webEditionDocument();
		$doc->initByID($docID);

		foreach($updateField as $key => $value){
			$doc->setElement($key, $value);
		}	

		$doc->we_save();
		$doc->we_publish();

		$we_doc = ob_get_contents();
		ob_end_clean();

		mail('meine@domain.de', 'we_doc', $we_doc);
	}
muss ich die we.inc.php und we_classes/we_webEditionDocument.inc.php auch einbinden? Wäre super wenn Ihr mir da nochmal einen Schupps geben könntet.
Danke!
webEdition Partner - https://www.blickfang-media.com
Ehemals im Vorstand des webEdition e.V.

Benutzeravatar
blickfang
webEdition Partner
webEdition Partner
Beiträge: 812
Registriert: Mo 15. Dez 2003, 16:00
Kontaktdaten:

Re: mit Hooks Daten während des Speicherns manipulieren

Beitragvon blickfang » Do 29. Okt 2009, 20:51

hm, das mit dem output Buffering habe ich nun auch mal versucht: Ergebnis => weiße Seite, dann kommt garnichts mehr. Benötigt der Server hierfür besondere Einstellungen?
webEdition Partner - https://www.blickfang-media.com
Ehemals im Vorstand des webEdition e.V.

we:willRockYou
Senior Member
Beiträge: 919
Registriert: Fr 22. Mai 2009, 21:40
Wohnort: Berlin
Kontaktdaten:

Re: mit Hooks Daten während des Speicherns manipulieren

Beitragvon we:willRockYou » Do 29. Okt 2009, 21:25

Nein. Aber da muss noch ein echo $output; hin. Sorry, hab ich nur schnell zusammenge-c&p'ed. ;)
EOF; //totally retired

Benutzeravatar
blickfang
webEdition Partner
webEdition Partner
Beiträge: 812
Registriert: Mo 15. Dez 2003, 16:00
Kontaktdaten:

Re: mit Hooks Daten während des Speicherns manipulieren

Beitragvon blickfang » Fr 30. Okt 2009, 09:50

ok, das hätte ich auch selbst sehen können...
jetzt gibt er die Seite zwar aus, die Email wird aber dennoch nicht ersetzt
webEdition Partner - https://www.blickfang-media.com
Ehemals im Vorstand des webEdition e.V.

we:willRockYou
Senior Member
Beiträge: 919
Registriert: Fr 22. Mai 2009, 21:40
Wohnort: Berlin
Kontaktdaten:

Re: mit Hooks Daten während des Speicherns manipulieren

Beitragvon we:willRockYou » Fr 30. Okt 2009, 10:17

Grrr. ;) Sorry, wie gesagt, war schnell zusammenkopiert. Der RegExp findet so nur Mails ohne Zeichen aussenrum, also ne Prüfung auf gültige Mail-Adressen. Versuchs mal so:

"/((?:(?:(?:[a-zA-Z0-9][\.\-\+_]?)*)[a-zA-Z0-9])+)\@((?:(?:(?:[a-zA-Z0-9][\.\-_]?){0,62})[a-zA-Z0-9])+)\.([a-zA-Z0-9]{2,6})/eis"
EOF; //totally retired

Benutzeravatar
blickfang
webEdition Partner
webEdition Partner
Beiträge: 812
Registriert: Mo 15. Dez 2003, 16:00
Kontaktdaten:

Re: mit Hooks Daten während des Speicherns manipulieren

Beitragvon blickfang » Fr 30. Okt 2009, 10:56

hm, leider nein, gibt wieder ne weiße Seite..
webEdition Partner - https://www.blickfang-media.com
Ehemals im Vorstand des webEdition e.V.

we:willRockYou
Senior Member
Beiträge: 919
Registriert: Fr 22. Mai 2009, 21:40
Wohnort: Berlin
Kontaktdaten:

Re: mit Hooks Daten während des Speicherns manipulieren

Beitragvon we:willRockYou » Fr 30. Okt 2009, 11:10

Sorry, dann musst Du selbst mal nach nem Regulären Ausdruck für Mails recherchieren, da gibts auch Archive. Der ist eignetlich dafür entworfen die Gültigkeit von Mail-Adressen zu prüfen und ist für Deinen Fall wohl zu "greedy".
EOF; //totally retired

Benutzeravatar
blickfang
webEdition Partner
webEdition Partner
Beiträge: 812
Registriert: Mo 15. Dez 2003, 16:00
Kontaktdaten:

Re: mit Hooks Daten während des Speicherns manipulieren

Beitragvon blickfang » So 1. Nov 2009, 14:28

Hi,
habe nun die Variante mit dem Outputpuffering realisiert. Allerdings funktioniert das mitdem regulären Ausdruck nicht (auch nicht in der einfachsten Form), da tut er einfach garnichts. Ersetzte nun mit einemeinfach str_replace() die Email Adressen @meinedomain.de mit @xxxcralerdomain.de bei der Ausgabe. nach dom:loaded werden diesen dann via javascript wieder zurückgewandelt.

Im Seitenquelltext des Browsers stehen die fake-Adresssen, in der Browseranzeige die korrekten.
webEdition Partner - https://www.blickfang-media.com
Ehemals im Vorstand des webEdition e.V.


Zurück zu „Hooks“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste