HJW hat geschrieben:Version 0.3.1 ist zum Download bereit.
1a!
An dieser Stelle ein erster Verbesserungsvorschlag zu deinem
Kalender allgemein:
Du beschreibst in einem Modul, welche Template-Dateien ein Forenbetreiber wie ändern soll, damit diverse Blöcke nicht oder an anderere Stelle angezeigt werden.
Das ist für eine Beta-Version okay, aber das lässt sich auch mit Einstellungen in einem Exstension-ACP-Modul auch steuern. Und zwar:
Option erstellen, ob und wenn ja wo ein Block angezeigt werden soll.
Dann im Listener diese Option in Bedingungen verwenden und entsprechende Daten an das Template-System übergeben.
Die Template-Datenen für die Template-Events kann man dann allesamt erstellen, diese aber komplett mit
Code: Alles auswählen
<!-- IF S_FILE_ON -->
// Inhalt des Template-Files
<!-- ENDIF -->
entsprechend anzeigen oder nicht.
Beispiel:
Im ACP wurde (mit eben einer neuen Optionsseite) angegeben, dass die aktuelle Woche als Kalenderzeile angezeigt werden soll. Sagen wir mal mit dem Konfig-EIntrag 'hjw_cal_weekblock_on', welche in der Board-Config dann gespeichert wird.
Im Event Listener steht die Board-Konfig über $this->config (für alle enthaltenen Methoden im Listener) zur Verfügung wenn man zumindst den Listener so definiert:
Code: Alles auswählen
public function __construct($root_path, $php_ext, $table_prefix, \phpbb\extension\manager $phpbb_extension_manager, \phpbb\path_helper $phpbb_path_helper, Container $phpbb_container, \phpbb\db\driver\driver_interface $db, \phpbb\config\config $config, \phpbb\controller\helper $helper, \phpbb\auth\auth $auth, \phpbb\template\template $template, \phpbb\user $user)
{
$this->root_path = $root_path;
$this->php_ext = $php_ext;
$this->table_prefix = $table_prefix;
$this->phpbb_extension_manager = $phpbb_extension_manager;
$this->phpbb_path_helper = $phpbb_path_helper;
$this->phpbb_container = $phpbb_container;
$this->db = $db;
$this->config = $config;
$this->helper = $helper;
$this->auth = $auth;
$this->template = $template;
$this->user = $user;
}
(Enthalten sind jetzt auch diverse andere Objekte, ist eben das Beispiel aus der Download Extension).
Damit lässt sich das meiste, was das Forum bereitstellen kann, schon ohne den Befehl global in allen Listener-Methoden (Funktionen) verwenden.
$this->config beinhaltet dabei nun auch den (neuen) Konfig-Wert für 'hjw_cal_weekblock_on', also
Somit lässt sich dann steuern, dass der Kalenderblock angezeigt wird oder nicht, in dem man folgendes schreibt:
Code: Alles auswählen
if ($this->config['hjw_cal_weekblock_on'])
{
$this->template->assign_var('S_HJW_CAL_WEEK_ON', true);
}
Und im betreffenden Event-Template kommt dann an den Anfang der Daten
und an das Ende nach allem anderen HTML-Code
Damit wäre die Daten dann per Option sichtbar oder unsichtbar.
Und auch steuern liese sich, wo der Block angezeigt werden soll.
Nehmen wir man an, über dem Board, unter der Board-Navi im Board-Kopf, über dem Board-Fuß oder unter dem Board (sofern es alle Events gibt, das habe ich jetzt nicht geprüft).
Dann könnte man das als 2. Option dem Admin zur Auswahl geben (Dropdown bietet sich hier an).
Die 2. Option würde dann z. B. lauten: 'hjw_cal_weekblock_position'
Und dazu auch die passende Bedingung in Listener:
Code: Alles auswählen
if ($this->config['hjw_cal_weekblock_on'])
{
switch($this->config['hjw_cal_weekblock_position'])
{
case 1:
$this->template->assign_var('S_HJW_CAL_WEEK_TOP', true);
break;
case 2:
$this->template->assign_var('S_HJW_CAL_WEEK_NAVI', true);
break;
case 3:
$this->template->assign_var('S_HJW_CAL_WEEK_FOOTER', true);
break;
case 4:
$this->template->assign_var('S_HJW_CAL_WEEK_BOTTOM', true);
break;
}
}
Dann wären auch alle 4 Event-Template-Dateien zu erstellen (mit jeweils selben Inhalt, aber halt den entsprechenden Dateinamen für die Template-Events) und in jeder dieser 4 Event-Template-Dateien dann der bereits zuvor genannte Switch nur eben wie folgt:
Code: Alles auswählen
<!-- IF S_S_HJW_CAL_WEEK_TOP -->
// Inhalt der Template-Datei
<!-- ENDIF -->
Hier mal nur das Beispiel für die Anzeige der Kalenderwoche oberhalb des Forums. Der Rest sollte nun verständlich sein.
Klar müssten dann immer alle 4 Template-Dateien vorhanden sein und bei Änderungen müsste man alle 4 Dateien gleichermaßen bearbeiten, je nach verwendeter Entwicklungsumgebung/Testeditor geht das aber dennoch recht zügig.
Vorteil: Der Admin muss nicht die Template-Dateien selber anpassen, wenn er etwas nicht oder woanders angezeigt bekommen will und im Falle eines Extension-Updates wäre ggf. eh wieder alles auf Standard zurückgesetzt und der Admin müsste erneut die Dateien anpassen.
Das nur mal als Vorschlag von mir.
Ich weiß, der
Kalender hat Beta-Status und ist aktuell schon sehr gut geworden, aber mit der zuvor genannten Erweiterung könnte man das Leben des Admins deutlich erleichern, auch wenn man beim Programmieren klar mehr Aufwand hat.
Und wenn diese Einstellungsseite auch mit eigenen Zugriffsrechten versieht, könnte man die Anzeigepositionen der Kalenderelemente auch noch gezielt bestimmten Personen erlauben (z. B. nur Forengründer oder einem User, der für das Forumlayout als solches zuständig ist). Das aber nur mal am Rande erwähnt...