Seite 24 von 42

Re: [3.2] [3.3][Fork] Recent Topics

Verfasst: 25.11.2023 23:44
von chris1278
Luke auf dein Beispiel zu kommen das hier:

$ext_list_order = $config_text['order'] ?? [];

Das heißt entweder ist in dem Array text_list_order der eintrag der in der $config_text['order'] enthalten drinne oder der bleibt leer.

Sprich das ?? stet für oder bezogen auf die if Abfrage struktur.

Re: [3.2] [3.3][Fork] Recent Topics

Verfasst: 26.11.2023 12:25
von Dr.Death

Code: Alles auswählen

$ext_list_order = $config_text['order'] ?? [];
Die Variable $ext_list_order wird gefüllt mit:
wenn vorhanden bzw, definiert mit dem Inhalt von $config_text['order'], wenn nicht, dann mit []

Re: [3.2] [3.3][Fork] Recent Topics

Verfasst: 26.11.2023 13:16
von LukeWCS
@chris1278
Der NCO ist eine Kombination von isset() und einem normalen Ternary. Wird vielleicht verständlicher, wenn man das mit einem normalen Ternary notiert und beides übereinander stellt:

Code: Alles auswählen

$ext_list_order = $config_text['order'] ?? [];					// NCO
$ext_list_order = isset($config_text['order']) ? $config_text['order'] : [];	// Ternary
Da wird der NCO genutzt um abzufragen, ob die Variable - in dem Fall ein Array-Element - überhaupt vorhanden ist.

Im ConfirmBox JS nutze ich den NCO, um mir umständliche if/else zu sparen, weil ich der betreffenden Funktion im Prinzip nur true/false übergeben muss, aber zusätzlich noch einen dritten Zustand brauche:

https://github.com/IMC-GER/RecentTopics ... ics.js#L72

Da wird der NCO also nicht genutzt um abzufragen ob die Variable existiert, sondern ob die Variable den Wert null hat.

Re: [3.2] [3.3][Fork] Recent Topics

Verfasst: 26.11.2023 13:42
von IMC
Dem wäre noch hinzuzufügen das der NCO mehrfach verkettet werden kann. Der erste Wert der nicht null ist wird der Variablen zugewiesen.

In einer Extension von mir habe ich ein dreifach if / else if Konstrukt. Mit dem NCO hätte ich nur eine Zeile benötigt.
var = eleExist ?? eleExist ?? eleExist;

Re: [3.2] [3.3][Fork] Recent Topics

Verfasst: 27.11.2023 16:09
von LukeWCS
IMC hat geschrieben: 25.11.2023 17:50 Das neue Releases mache ich am Montag.
Kollege, warte bitte noch damit. Beim Einbau der neuen ConfirmBox Klasse ist mir im Template etwas aufgefallen, das aber zwischenzeitlich kurz wieder in Vergessenheit geriet.

Thema PullDown's im ACP und UCP, das wurde ein bisschen umständlich realisiert. Zum einen wird im PHP zuerst pro Menü ein Array gebildet, welches dann mit einer Schleife abgearbeitet wird. Das ist unnötig, weil wir im Template eh schon eine Twig Schleife haben. Also einmal Schleife reicht, da kann man alles erledigen. ^^ Des Weiteren wird in PHP ein HTML Attribut gesetzt, nämlich selected, genau das fiel mir im Template auf, weil es dort fehlte in unserem Makro. HTML im PHP sehen die Valis eh nicht gerne, sowas gehört ins Template. Sowas macht man nur, wenn's anderweitig (im Template) gar nicht oder nur sehr umständlich ginge.

https://github.com/IMC-GER/RecentTopics ... #L100-L130

Ich würde da die EMP Methode nehmen: a) weniger Code (13 statt 31 Zeilen), b) alles da wo es hingehört und c) trotzdem einfach zu ändern/erweitern. Und so nebenbei passt das select() Makro dann auch zum switch() Makro bez. Parameter.

Re: [3.2] [3.3][Fork] Recent Topics

Verfasst: 27.11.2023 17:55
von IMC
LukeWCS hat geschrieben: 27.11.2023 16:09... warte bitte noch damit.
Das kann ich.
LukeWCS hat geschrieben: 27.11.2023 16:09 HTML im PHP sehen die Valis eh nicht gerne, sowas gehört ins Template. Sowas macht man nur, wenn's anderweitig (im Template) gar nicht oder nur sehr umständlich ginge.
So etwas ein ähnliches Sachverhalt habe ich im Moment. Da muss im ACP eine Benutzereingabe an einer Stelle eingefügt werden, an der es kein Event dazu gibt.
Da bleibt mir nur ein Element zu erstellen und mit JS zu positionieren bzw. HTML-Code an der entsprechenden Stelle mit JS einzufügen.

Re: [3.2] [3.3][Fork] Recent Topics

Verfasst: 27.11.2023 18:55
von LukeWCS
Des Weiteren habe ich auch <input type="number"... und <input type="text"... durch Standard Makros von WWH ersetzt. Ausserdem hatten wir bei RT switch() und select() redundant sowohl im ACP als auch im UCP Template. Stattdessen habe ich die beiden bisherigen Makros und die beiden neuen als eine Art Makro Library eingerichtet, so das man diese universell in allen Frontends ACP/MCP/UCP inkludieren kann. Somit fällt die Redundanz weg und man kann zentral in nur einer Datei die ganzen Input Elemente anpassen.
IMC hat geschrieben: 27.11.2023 17:55 So etwas ein ähnliches Sachverhalt habe ich im Moment. Da muss im ACP eine Benutzereingabe an einer Stelle eingefügt werden, an der es kein Event dazu gibt.
Da bleibt mir nur ein Element zu erstellen und mit JS zu positionieren bzw. HTML-Code an der entsprechenden Stelle mit JS einzufügen.
Hmm, aber da hab ich was im Hinterkopf gespeichert. Meines Wissens gibt es für die ACP Seiten eine standardisierte Methode, zusätzliche Optionen und Elemente einfügen zu können. Also bevor du mit JS irgendwelche DOM Injections versuchst, recherchiere mal danach.

Re: [3.2] [3.3][Fork] Recent Topics

Verfasst: 27.11.2023 20:42
von IMC
LukeWCS hat geschrieben: 27.11.2023 18:55 Hmm, aber da hab ich was im Hinterkopf gespeichert. Meines Wissens gibt es für die ACP Seiten eine standardisierte Methode, zusätzliche Optionen und Elemente einfügen zu können. Also bevor du mit JS irgendwelche DOM Injections versuchst, recherchiere mal danach.
Ich kenne die Möglichkeit über die Events. Ich habe auch schon Arrays gesehen aus denen die ACP Seite generiert wird.
Da wo ich rein will gibt es nach meiner Recherche nur die Event Methode.

Bei den folgenden Code muss ich in der Datei acp_forums.html in das fieldset von #forum_cat_options. Ich bin mir sicher, dass dies nur über den DOM funktioniert. Lasse mich aber auch gern eines besseren belehren.

Code: Alles auswählen

	</dl>
	<!-- EVENT acp_forums_main_settings_append -->
	</fieldset>

	<div id="forum_cat_options">
		<fieldset>
			<legend>{L_GENERAL_FORUM_SETTINGS}</legend>
		<dl>
			<dt><label for="display_active">{L_DISPLAY_ACTIVE_TOPICS}{L_COLON}</label><br /><span>{L_DISPLAY_ACTIVE_TOPICS_EXPLAIN}</span></dt>
			<dd><label><input type="radio" class="radio" name="display_active" value="1"<!-- IF S_ENABLE_ACTIVE_TOPICS --> id="display_active" checked="checked"<!-- ENDIF --> /> {L_YES}</label>
				<label><input type="radio" class="radio" name="display_active" value="0"<!-- IF not S_ENABLE_ACTIVE_TOPICS --> id="display_active" checked="checked"<!-- ENDIF --> /> {L_NO}</label></dd>
		</dl>
		</fieldset>
	</div>

	<div id="forum_post_options">
		<fieldset>
			<legend>{L_GENERAL_FORUM_SETTINGS}</legend>
		<!-- EVENT acp_forums_normal_settings_prepend -->
		<dl>

Re: [3.2] [3.3][Fork] Recent Topics

Verfasst: 27.11.2023 20:49
von LukeWCS
IMC hat geschrieben: 27.11.2023 20:42 Da wo ich rein will gibt es nach meiner Recherche nur die Event Methode.
Falls du HTML Events meinst, da biste nicht auf dem richtigen Gleis, hier sind die PHP Events relevant.

Inzwischen hab ich das wiedergefunden, das war die Ext Light Box wo ich das gesehen habe:

https://www.phpbb.com/customise/db/extension/lightbox/

Guckst du dort: event\listener.php ab dem Kommentar "Add Lightbox settings to the ACP".

Re: [3.2] [3.3][Fork] Recent Topics

Verfasst: 27.11.2023 21:14
von IMC
Genau das meinte ich mit meiner Aussage.
Ich habe auch schon Arrays gesehen aus denen die ACP Seite generiert wird.
Die Seite Forum bearbeiten :: xxx funkioniert so nicht. Dort gibt es auch nicht das Event core.acp_board_config_edit_add. Die ist sozusagen, altbacken.