Toggle Control
Autor:
LukeWCS
Aktuelle Version der Erweiterung:
1.1.1
Voraussetzungen:
- phpBB 3.3.0 - 3.3.x
- PHP 7.4.0 - 8.4.x
Ermöglicht es, bei Erweiterungen zentral entscheiden zu können, welcher visuelle Stil für Ja/Nein-Schalter verwendet werden soll, sofern Erweiterungen kompatibel mit Toggle Control sind. Dabei werden andere Erweiterungen nicht direkt beeinflusst, sondern es wird lediglich eine Schnittstelle zur Verfügung gestellt, die Entwickler nutzen können. Zur Auswahl stehen folgende Stile:
- Schiebeschalter (Toggle)
- Kontrollkästchen (Checkbox)
- Radio Knöpfe (phpBB Standard)
- Eine Konfig-Variable per Migration anlegen.
- Einen Schalter im ACP Template einbauen.
- Den Schalter im ACP Controller behandeln.
- Sprachvariablen anlegen.
Die grundsätzliche Idee zu dieser Erweiterung hatte ich, als ich begonnen hatte in meine Erweiterungen die Kirk-Toggles einzubauen. Inzwischen werden diese Toggles auch von anderen Entwicklern eingesetzt. Bei den bisherigen Erweiterungen, wo Toggles verwendet werden, gibt es a) entweder eine direkte Möglichkeit im ACP Modul die Toggles auf klassische Ja/Nein Radio Buttons umstellen zu können, b) eine "hardcoded" Möglichkeit im Template oder c) gar keine Möglichkeit. Mit Toggle Control werden alle 3 Szenarien quasi standardisiert und eine zentrale Möglichkeit zur Umschaltung geboten.
Ein weiterer Grund ist der Umstand, dass es Menschen mit visuellen oder motorischen Störungen gibt. Solche Menschen haben unter Umständen also gewisse Handicaps bei der Bedienung einer GUI (Graphical User Interface = Grafische Benutzer-Oberfläche). Radio Buttons für simple Ja/Nein Schalter sind eigentlich ein Relikt aus der Web Steinzeit, haben aber einen Vorteil gegenüber Checkboxen und Toggles: ein gewünschter Zustand kann explizit ausgewählt werden und der Schalter ändert dann auch bei erneutem Klick darauf nicht mehr seinen Zustand. Wir haben hier also eine direkte Zustandsänderung. Bei Checkboxen/Toggles kann dagegen ein Zustand nicht gezielt ausgewählt werden, weil der vorherige Zustand des Schalters relevant ist. Deswegen haben wir hier eine indirekte Zustandsänderung.
Enthaltene Sprachen:
- de
- de_x_sie
- en
GitHub Releases (mit Changelog)
Für Administratoren: Liste der kompatiblen Erweiterungen
- 07.12.2023 Adressverwaltung Tourziele (Mike-on-Tour)
- 09.12.2023 Extension bridge for “Statistics Block” (chris1278)
- 09.12.2023 Stats Permissions (Rechte für den Statistik-Bereich) (LukeWCS)
- 09.12.2023 Disable Emojis (Emojis im Board deaktivieren) (LukeWCS)
- 13.12.2023 Image upload use ImageMagick (IMC)
- 13.12.2023 Recent Topics NG (IMC & LukeWCS)
- 15.12.2023 Hangman Spiel (Mike-on-Tour)
- 19.12.2023 Extension Manager Plus (verbesserte Erweiterungsverwaltung) (LukeWCS)
- 01.01.2024 BBCode Page (Kirk)
- 06.01.2024 Newest X Users (Kirk)
- 08.01.2024 LF who was here 2 (Wer war da?) (LukeWCS)
- 09.01.2024 Usermap for phpBB (Mike-on-Tour)
- 12.01.2024 DSGVO/GDPR Private Download´s (chris1278)
- 13.01.2024 Sidebar (Kirk)
- 10.02.2024 Top Posters (Kirk)
- 21.02.2024 Collapse Quote (IMC)
- 06.03.2024 Userreminder (Mike-on-Tour)
- 13.03.2024 Sudoku (Mike-on-Tour)
- 23.03.2024 Sitelogo responsive (Kirk)
- 25.03.2024 Force Account Reactivation (Konto-Reaktivierung erzwingen) (LukeWCS)
- 31.03.2024 Average Daily Posts and Topics on Index (adptstatistics) (Kirk)
- 15.04.2024 Delete Inactive Members (Mike-on-Tour)
- 06.05.2024 No quote in last post (Kirk)
- 13.05.2024 Style Changer (Kirk)
- 23.06.2024 Limit Multiple Replies (Mehrfachantworten begrenzen) (LukeWCS)
- 26.06.2024 STK Link (Kirk)
- 14.07.2024 Spamsecure (69bruno & chris1278)
- 14.07.2024 Jumpbox on Index (Kirk)
- 04.10.2024 External Links (IMC)
- 08.01.2025 Current Time a world clock (IMC)
- 16.03.2025 CF Welcome Post Topic (fork) (chris1278)
Für Entwickler: Anpassung an Toggle Control
Wer bereits die Kirk-Toggles nutzt, zusammen mit meinem Twig Makro
switch()
, muss lediglich das Makro durch eine neue Version ersetzen, das auch Checkboxen und Radio Buttons generieren kann. Dann genügt das Hinzufügen einer Twig Zeile am Anfang des Templates, sowie die Twig Variable switch_type
bei jedem switch()
Aufruf als dritten Parameter zu notieren. Nachfolgend alle benötigten Komponenten und Details dazu.Übersicht
- Lokale Twig Variable definieren
- Generierung des Schalter-HTMLs per Makro-Aufruf
- Das Twig Makro
- Die Kirk-Toggles (CSS)
- Vollständiges Beispiel
- Link zu Toggle Control
Platzierung: Am Anfang des Templates
Anpassung nötig: Nein. Nur wenn man vom Standard abweichen will: Neben
toggle
gibt es noch checkbox
und radio
.Code: Alles auswählen
{% set switch_type = TOGGLECTRL_TYPE ?? 'toggle' %}
switch_type
mit dem Inhalt der globalen Template Variable TOGGLECTRL_TYPE
definiert, sofern diese vorhanden ist. Wenn Toggle Control nicht installiert ist oder wenn der Hauptschalter von Toggle Control deaktiviert ist, dann wird auch die globale Template Variable nicht generiert. In diesem Fall gilt das, was hinter ??
definiert wurde. Wer also lieber Radio Buttons als Standard vorgeben möchte, ersetzt in der oben gezeigten Twig Zeile einfach toggle
durch radio
.Zusatz:
Der Umstand, dass die globale Template Variable nur bei aktviertem Hauptschalter generiert wird, kann auch dazu genutzt werden, um im Template darauf reagieren zu können. Möchte man zum Beispiel einen Twig Block nur dann ausführen, wenn Toggle Control aktiviert ist, kann man das wie folgt erreichen:
Code: Alles auswählen
{% if TOGGLECTRL_TYPE is defined %}
...
{% endif %}
is defined
durch is not defined
.2. Generierung des Schalter-HTMLs per Makro-Aufruf
Platzierung: Anstelle des bisherigen Schalter-HTMLs bzw. Makro-Aufruf, sofern schon vorhanden.
Anpassung nötig: Ja. Hier sind die Namen der Formular-Elemente und Template-Variablen der jeweiligen Erweiterung relevant.
Code: Alles auswählen
{{ _self.switch('name_des_formular_elements', TEMPLATE_VARIABLE_DES_FORMULAR_ELEMENTS, switch_type) }}
Code: Alles auswählen
<dl>
<dt>
<label>{{ lang('TOGGLECTRL_ENABLED') ~ lang('COLON') }}</label><br>
<span>{{ lang('TOGGLECTRL_ENABLED_EXP') }}</span>
</dt>
<dd>
{{ _self.switch('togglectrl_enabled', TOGGLECTRL_ENABLED, switch_type) }}
</dd>
</dl>
Platzierung: Am Ende des Templates.
Anpassung nötig: Nein. Es sei denn, es werden andere Toggles als die Kirk-Toggles benutzt, dann muss das Makro eventuell angepasst werden.
Code: Alles auswählen
{% macro switch(name, checked = false, type = 'toggle') -%}
{% if type == 'toggle' || type == 'checkbox' -%}
<input type="checkbox" class="{{ type }}" name="{{ name }}" value="1"{{ checked ? ' checked' }}>
{%- elseif type == 'radio' -%}
<label><input type="radio" class="radio" name="{{ name }}" value="1"{{ checked ? ' checked' }}> {{ lang('YES') }}</label>
<label><input type="radio" class="radio" name="{{ name }}" value="0"{{ !checked ? ' checked' }}> {{ lang('NO') }}</label>
{%- endif %}
{%- endmacro %}
Platzierung: Einfach im bestehenden CSS des ACP Moduls einfügen. Optional wäre auch eine separate CSS Datei denkbar.
Anpassung nötig: Nein. Das ist aber eine Frage des Geschmacks.
Code: Alles auswählen
/*
* phpBB ACP Toggles - A CSS class that makes it easy to display checkboxes as toggles.
* Source : https://danklammer.com/articles/simple-css-toggle-switch/
* Revision by: Kirk (customization and optimization), LukeWCS (optimization)
*/
.toggle {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
width: 38px;
height: 17px;
position: relative;
border-radius: 50px;
cursor: pointer;
font-family: FontAwesome;
transition: background-color 0.2s;
}
.toggle:before {
position: absolute;
width: 14px;
height: 13px;
background-color: #ffffff;
top: 2px;
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
left: 22px;
content: "\f00d";
transition: 0.2s;
}
.toggle,
.toggle:hover,
.toggle:focus {
background-color: #cccccc;
border: none;
color: #000000;
}
.toggle:checked {
background-color: #3b87ab;
}
.toggle:checked:before {
left: 2px;
content: "\f00c";
}
Wer die einzelnen Komponenten als Ganzes sehen möchte, kann dazu die Dateien von Toggle Control sichten:
adm/style/acp_togglectrl_settings.html zeigt:
- Die Zeile mit der
set
Anweisung. - Den Aufruf des
switch()
Makros. - Das
switch()
Makro selbst.
- Das CSS für die Kirk-Toggles.
Wer seine Erweiterung kompatibel zu Toggle Control gestaltet hat und darauf hinweisen möchte, könnte dazu den folgenden BBcode verwenden:
Code: Alles auswählen
Kompatibel mit [url=https://www.phpbb.de/community/viewtopic.php?t=246978]Toggle Control (Schalter-Stil zentral festlegen)[/url]