mit Hooks Daten während des Speicherns manipulieren
mit Hooks Daten während des Speicherns manipulieren
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?
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.
Ehemals im Vorstand des webEdition e.V.
-
- Senior Member
- Beiträge: 919
- Registriert: Fr 22. Mai 2009, 21:40
- Wohnort: Berlin
- Kontaktdaten:
Re: mit Hooks Daten während des Speicherns manipulieren
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)
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
-
- Senior Member
- Beiträge: 3735
- Registriert: Do 1. Jan 1970, 02:00
- Wohnort: Karlsruhe
- Kontaktdaten:
Re: mit Hooks Daten während des Speicherns manipulieren
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
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
Re: mit Hooks Daten während des Speicherns manipulieren
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.
Kann ich dann mit
dieses Feld updaten?
das dachte ich mir schon so ähnlich, hatte nur insgeheim gehofft man könne da vielleicht noch vorher dran drehen
![Neutral :|](./images/smilies/icon_neutral.gif)
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
)
Code: Alles auswählen
setElement('teaserBlockWidthblk_teaser__3','Hier steht was neues');
webEdition Partner - https://www.blickfang-media.com
Ehemals im Vorstand des webEdition e.V.
Ehemals im Vorstand des webEdition e.V.
-
- Senior Member
- Beiträge: 919
- Registriert: Fr 22. Mai 2009, 21:40
- Wohnort: Berlin
- Kontaktdaten:
Re: mit Hooks Daten während des Speicherns manipulieren
Das sollte funktionieren. Zur not einfach selbst das Array manipulieren. Mehr macht setElement nämlich auch nicht.
![Smile :)](./images/smilies/icon_e_smile.gif)
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
-
- Senior Member
- Beiträge: 919
- Registriert: Fr 22. Mai 2009, 21:40
- Wohnort: Berlin
- Kontaktdaten:
Re: mit Hooks Daten während des Speicherns manipulieren
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:
Master-Template ganz am Ende:
Regulärer Ausdruck wurde schon auf einstellige DE-Domains angepasst. ![Wink ;-)](./images/smilies/icon_e_wink.gif)
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();
?>
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;
?>
![Wink ;-)](./images/smilies/icon_e_wink.gif)
EOF; //totally retired
Re: mit Hooks Daten während des Speicherns manipulieren
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...
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!
![Question :?:](./images/smilies/icon_question.gif)
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);
}
Danke!
webEdition Partner - https://www.blickfang-media.com
Ehemals im Vorstand des webEdition e.V.
Ehemals im Vorstand des webEdition e.V.
Re: mit Hooks Daten während des Speicherns manipulieren
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.
Ehemals im Vorstand des webEdition e.V.
-
- Senior Member
- Beiträge: 919
- Registriert: Fr 22. Mai 2009, 21:40
- Wohnort: Berlin
- Kontaktdaten:
Re: mit Hooks Daten während des Speicherns manipulieren
Nein. Aber da muss noch ein echo $output; hin. Sorry, hab ich nur schnell zusammenge-c&p'ed. ![Wink ;)](./images/smilies/icon_e_wink.gif)
![Wink ;)](./images/smilies/icon_e_wink.gif)
EOF; //totally retired
Re: mit Hooks Daten während des Speicherns manipulieren
ok, das hätte ich auch selbst sehen können...
jetzt gibt er die Seite zwar aus, die Email wird aber dennoch nicht ersetzt
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.
Ehemals im Vorstand des webEdition e.V.
-
- Senior Member
- Beiträge: 919
- Registriert: Fr 22. Mai 2009, 21:40
- Wohnort: Berlin
- Kontaktdaten:
Re: mit Hooks Daten während des Speicherns manipulieren
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"
![Wink ;)](./images/smilies/icon_e_wink.gif)
"/((?:(?:(?:[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
Re: mit Hooks Daten während des Speicherns manipulieren
hm, leider nein, gibt wieder ne weiße Seite..
webEdition Partner - https://www.blickfang-media.com
Ehemals im Vorstand des webEdition e.V.
Ehemals im Vorstand des webEdition e.V.
-
- Senior Member
- Beiträge: 919
- Registriert: Fr 22. Mai 2009, 21:40
- Wohnort: Berlin
- Kontaktdaten:
Re: mit Hooks Daten während des Speicherns manipulieren
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
Re: mit Hooks Daten während des Speicherns manipulieren
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.
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.
Ehemals im Vorstand des webEdition e.V.
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 28 Gäste