Seite 2 von 3

Re: Hook zum Aufrufen einer Datei

Verfasst: Mi 28. Dez 2022, 00:48
von Finn
Ich denke der Ansatz ist af jeden Fall einen FR wert, die Kategorien sind sehr mächtig, aber z.T. von der Usability nicht mehr zeitgemäß.

Re: Hook zum Aufrufen einer Datei

Verfasst: Mo 9. Jan 2023, 15:39
von mtbrmatze
Ein gutes Neues Jahr.

Wie versprochen darf ich mich nochmals melden.
Ich habe den Hook mit dem entsprechenden Dateinamen gespeichert.
Ich habe nun ausprobiert, in den Kategorien werden die Werte nicht gespeichert, es werden dafür aber 2 Fehlermeldungen ausgegeben, siehe weiter unten.

Darf ich nochmals um Hilfe bitten, danke
Matze

Fehlermeldung 1:

Code: Alles auswählen

Warning

Error message: 	Illegal string offset 'resave'

Script name: 	webEdition/custom/hook/we_hook_preSave.class.php

Line number: 	29

Backtrace: 	
#0 we_base_errorHandler::errorHandler called at [webEdition/custom/hook/we_hook_preSave.class.php:29]
#1 we_hook_preSave->__construct called at [webEdition/we/classes/hook/we_hook_handler.class.php:60]
#2 we_hook_handler->__construct called at [webEdition/we/classes/document/we_document_textContent.class.php:173]
#3 we_document_textContent->we_save called at [webEdition/we/classes/document/we_document_webEdition.class.php:578]
#4 we_document_webEdition->we_save called at [webEdition/we/classes/editor/we_editor_functions.class.php:601]
#5 we_editor_functions::saveDocument called at [webEdition/we_cmd.php:177]
#6 findInclude called at [webEdition/we_cmd.php:418]

Request: 	

[we_cmd] => Array
	(
	    [0] => save_document
	    [1] => 45c18fc937482de8f097689585341bd3
	    [2] => 0
	    [3] => 1
	    [4] => 0
	    [5] => W1sicHVibGlzaFdoZW5TYXZlIl1d
	    [6] => 
	)

[we_transaction] => 45c18fc937482de8f097689585341bd3
[we_fac3dae91ef03ebfbc36583fdd852950_select] => Array
	(
	    [doccats#multiple] => Array
	        (
	            [0] => 3
	            [1] => 2
	            [2] => 4
	        )

	)

[we_fac3dae91ef03ebfbc36583fdd852950_txt] => Array
	(
	    [myue] => 
	    [leer] => 
	)

[we_complete_request] => 1



Die zweite Fehlermeldung:

Code: Alles auswählen

Error type: 	

Warning

Error message: 	

Use of undefined constant param - assumed 'param' (this will throw an Error in a future version of PHP)

Script name: 	

webEdition/custom/hook/we_hook_preSave.class.php

Line number: 	

29

Re: Hook zum Aufrufen einer Datei

Verfasst: Mo 16. Jan 2023, 20:33
von mtbrmatze
Hallo

kann ich vielleicht noch etwas beisteuern, damit eine Lösung gefunden werden könnte?

Matze

Re: Hook zum Aufrufen einer Datei

Verfasst: Di 17. Jan 2023, 19:49
von Finn
Moin Matze, eventuell ist das als Bugeintrag mit vollständigen Errorlogs besser aufgehoben.

https://qa.webedition.org

Re: Hook zum Aufrufen einer Datei

Verfasst: Mi 18. Jan 2023, 11:02
von mokraemer
nein, das ist kein Bug.
Das ist ein FR, und es sollte hier ein Diskussionsbeitrag über dessen Relevanz gemacht werden.
Ich hatte ja das grundsätzliche Gerüst gepostet, aber nicht getestet. Hab aber auch grad keinen Kopf dafür.

Re: Hook zum Aufrufen einer Datei

Verfasst: Do 19. Jan 2023, 14:28
von Finn
Okay, dann entsprechend formuliert als FR hier im Forum

Re: Hook zum Aufrufen einer Datei

Verfasst: Fr 20. Jan 2023, 12:51
von mtbrmatze
Hallo Leute.

Ich wollte nicht unhöflich sein, aber ich denke das Forum ist doch dazu da, Lösungen zu finden.

Ich habe nach meinem Können probiert nachzuvollziehen, wieso dieses Script nicht funktioniert. Da die Fehler

Code: Alles auswählen

Illegal string offset 'resave'
und

Code: Alles auswählen

Undefined constant param assumed 'param'
teile des WE Codes sind, dachte ich mir, ich frage nochmals nach.

Es gibt hier im Forum eine Demo einer der alten WE Version, wenn jemand etwas Neueres zu bieten kann, wäre mir halt sehr geholfen.

Schönes Weekend
Matze

Re: Hook zum Aufrufen einer Datei

Verfasst: Fr 20. Jan 2023, 12:59
von mtbrmatze
Hab euch für die Mühen trotzdem mal eine Spende zukommen lassen.

Re: Hook zum Aufrufen einer Datei

Verfasst: Fr 20. Jan 2023, 17:55
von WBTMagnum
Hallo Matze,

Ich denke du musst folgende Codezeile tauschen:

Code: Alles auswählen

- $this->resave = param['resave'];
+ $this->resave = $params['resave'];
HTH,
Sascha

Re: Hook zum Aufrufen einer Datei

Verfasst: Fr 20. Jan 2023, 23:31
von mtbrmatze
Danke Sascha.

Die Fehlermeldungen sind weg.
Aber es werden keine Änderungen vorgenommen.

Hier nochmals der Code we_hook_preSave.class.php ich habe auch die Datei we_hook_publish.class.php angelegt.

Code: Alles auswählen

<?php
declare(strict_types=1);
class we_hook_preSave extends we_hook_base{
	protected $resave;
	protected $object;

	public function __construct(we_hook_handler $handler, array $params){
		parent::__construct($handler, $params);
		$this->resave = $param['resave'];
		$this->object = $params['obj'];
	}

	public function execute(): bool{
		if($this->resave){//rebuild brauch nix gemacht zu werden
			return true;
		}
		switch(get_class($this->object)){
			case 'we_webEditionDocument':						
					$new_categories = $this->object->getElements('doccats'); // Die ausgewählten Kategorien liegen in doccats
					$this->object->temp_category = $new_categories;
					$this->object->Category = $new_categories;
					
					$static = "123456";
				        $this->object->newstatic = $static;
					$newleer = $this->object->getElements('myue');
					$this->object->leer = $newleer;
		}
		return true;
	}
}
Für Hilfe, hier liegt auch zur Sicherheit mein Template Code

Code: Alles auswählen

Kategorien gewählt/alle anzeigen:<br>
<we:listview type="category" order="Title" desc="false" >
	<we:ifFound>
		<we:select name="doccats" multiple="true" class="my-select-big" style="height: 500px!important;">
			<we:repeat>
				<option value='<we:field name="we_id"/>'><we:field name="we_title"/></option>
			</we:repeat>
		</we:select>
	</we:ifFound>
</we:listview>
<hr>
Variable doccats ausgeben = <we:var type="document" name="doccats" />
<hr>
KatIDs des Dokuments:     <we:category field="ID" multiple="true" />   <br>
KatTitle des Dokuments:   <we:category field="Title" multiple="true" /><br>
<hr>
myue = <we:input type="text" name="myue" />  <br>
leer = <we:input type="text" name="leer" />  <br>
new-static = <we:input type="text" name="newstatic" />

In tblContent stehen genau die IDs der ausgewählten Kategorien:

tblFile 8 txt doccats NULL 6,9,8,7,3,2

Weiss noch jemand Rat?

Matze

Re: Hook zum Aufrufen einer Datei

Verfasst: Sa 21. Jan 2023, 11:42
von mokraemer
hast du denn den FR im Forum zur Diskussion gestellt? Das dies ein Kernfeature wird?
viewtopic.php?t=42257

Wenn man Hooks einsetzt, sollte man sich ansich auch etwas mit PHP/WE intern auskennen. Das ist eben eine interne Schnittstelle.

Re: Hook zum Aufrufen einer Datei

Verfasst: Do 26. Jan 2023, 10:59
von maurus.g
Hallo

Ich darf mich in diese Diskussion einmischen. Den Gedankengang finde ich recht interessant, da auch ich viele Kategorien habe.
Funktioniert der Hook nun zuverlässig, bzw. könnte Jemand den fertigen Code nochmals posten?

Danke
Maurus

Re: Hook zum Aufrufen einer Datei

Verfasst: Fr 27. Jan 2023, 10:44
von mtbrmatze
Wenn man Hooks einsetzt, sollte man sich ansich auch etwas mit PHP/WE intern auskennen. Das ist eben eine interne Schnittstelle.
Eben deshalb frage ich hier ja um Hilfe und ich dachte dafür ist dieses Forum da.

Re: Hook zum Aufrufen einer Datei

Verfasst: Sa 28. Jan 2023, 14:08
von mokraemer
Eben deshalb frage ich hier ja um Hilfe und ich dachte dafür ist dieses Forum da.
Im Grunde ja, nur sollten Hooks von ehesten von Leuten verwendet werden, die php verstehen und sich auch etwas mit den internas von WE auskennen.

Ich kann nur Wiederholen, das du dies als Feature-Request im Forum einstellen solltest, damit darüber diskutiert wird, ob wir das als Feature realisieren und was andere davon halten.

Re: Hook zum Aufrufen einer Datei

Verfasst: Sa 28. Jan 2023, 22:49
von WBTMagnum
Hallo Matze,

Hier im Forum wird tendenziell sehr viel geholfen. Um dein konkretes Problem zu testen und zu beheben müsste das jetzt aber jemand erst mal nachbauen. Das kostet Zeit und verursacht nicht unerheblichen Aufwand. Fakt ist, es können hier einfach nicht für alle Probleme kostenfreie Lösungen gefunden werden. Dafür gibt es dann eben Firmen und Leute die das professionell anbieten, z.B. webEdition Partner (sh. https://www.webedition.org/de/partner/).

Liebe Grüße,
Sascha

PS: Was mir jetzt doch noch ins Auge gesprungen ist: "$param['resave'];" sollte "$params['resave'];" heißen.