Das Standard-Skin im Detail

Die Dateien des Standard-Skins "Quiwi" des Kickstart-Basis-Plugins sind im Unterordner skins/default des Kickstart-Plugin-Verzeichnisses zu finden:

.../wp-content/plugins/immonex-kickstart/skins/default

Ebenso verhält es sich bei Add-on-Standard-Skins, wobei hier der jeweilige Add-on-Plugin-Ordner (.../wp-content/plugins/ADD-ON-ORDNERNAME) der Ausgangspunkt ist. Beispiel Team Add-on:

.../wp-content/plugins/immonex-kickstart-team/skins/default

Die Verwendung dieser Ordner als Vorlage für die Entwicklung eigener, sogenannter Custom Skins ist grundsätzlich möglich, besser hierfür eignen sich allerdings die aktuellen Quelldateien im jeweiligen Dev-Repository (Kickstart-Basis-Plugin bei GitHub). Diese enthalten zusätzlich u. a. die für das Skin relevanten JavaScript- und SCSS-Quellcodes.

default
…
╷
├── index.php
│
├── /assets ← ab Plugin-Version 1.8: kompilierte CSS- und JS-Dateien (nach Build-Kommando)
│   ╷
│   ├── index.css
│   └── index.js
│
├── /js ← ab Plugin-Version 1.8: nur JS-Quelldatei
│   ╷
│   └── index.js
│
├── /scss ← (S)CSS-Quelldateien
│   ╷
│   ├── /blocks
│   │   ╷
│   │   ├── _immonex-widget.scss
│   │   ├── …
│   │   └── _inx-video-iframe.scss
│   │
│   ├── _base.scss
│   ├── _config.scss
│   ├── _mixins.scss
│   ├── _uikit-custom.scss
│   └── index.scss
│
├── /fonts
│   ╷
│   ├── _flaticon.scss
│   ├── …
│   └── Flaticon.woff
…

Skin-Name

Die Datei index.php enthält lediglich den Namen des Skins, der im WP-Backend angezeigt wird, in der folgenden Form:

/**
 * Skin Name: Quiwi
 */

CSS & Sass

Die Datei assets/index.css (bis Plugin-Version 1.8: css/index.css) enthält alle für das Skin relevanten CSS-Stile und wird im Website-Frontend automatisch eingebunden. Beim Standard-Skin wird diese auf Basis der Daten im Ordner scss mit dem CSS-Präprozessor Sass kompiliert.

!> Wird das Git-Repository des Plugins als Grundlage für die Entwicklung eines eigenen Skins verwendet, wird der Ordner assets beim erstmaligen Aufruf eines Build-Befehls angelegt (z. B. npm run build oder npm run watch).

Hier wurde ein komponentenbasierter Ansatz verfolgt, der weitgehend der BEM-Methodik (Block, Element, Modifier) mit der Namenskonvention Two Dashes style entspricht.

Alle skinspezifischen Module (blocks) sowie Konfigurationsvariablen, Mixins und Grundelemente werden über die Einstiegsdatei index.scss eingebunden.

Ab der Plugin-Version 1.8 gehören hierzu nicht mehr die (S)CSS-Dateien folgender externer Libraries, die im Frontend zum Einsatz kommen:

Diese werden stattdessen über das Kern-Plugin eingebunden, um Inkompatibilitäten nach Updates zu vermeiden.

Auch die im Unterordner fonts enthaltenen Schriftarten werden seit Kickstart 1.8 nicht mehr via index.scss eingebunden, sondern über die JavaScript-Einstiegsdatei index.js (siehe unten).

Die für die Blöcke und Elemente verwendeten CSS-Klassennamen sind übrigens nicht nur in den PHP-Dateien des Skins enthalten, sondern (teilweise) auch in den skinübergreifenden Vue.js-Komponenten, die vom Kickstart-Plugin bereitgestellt werden (Standortkarten/-Autovervollständigung, spezielle Elemente des Suchformulars…). Die Benennung sollte also in eigenen Skins beibehalten werden, sofern diese Komponenten auch hier zum Einsatz kommen.

?> Bei der Entwicklung eines Custom Skins ist der Einsatz eines CSS-Präprozessors optional. Die Produktivversion des Skins, die im Child-Theme-Ordner hinterlegt ist, muss nur die Datei assets/index.css bzw. css/index.css enthalten.

JavaScript

…
╷
├── /assets
│   ╷
│   ├── …
│   └── index.js ← ab Plugin-Version 1.8: kompilierte JS-Datei im Ordner assets
│
├── /js
│   ╷
│   └── index.js ← ab Plugin-Version 1.8: Quelldatei im Ordner js

Auch der JavaScript-Code, der für das Skin eingebunden werden soll, ist in einer einzelnen Datei gebündelt: assets/index.js (ab Plugin-Version 1.8, vorher js/index.js).

Beim Standard-Skin sowie allen weiteren Skins, die (zukünftig) mit Kickstart oder hierauf basierenden Add-ons ausgeliefert werden, wird diese Bündelung im Rahmen der Entwicklung automatisiert mit dem "JavaScript-Modul-Packer" webpack umgesetzt.

Die Quelldateien befinden sich im Unterordner js (ab Plugin-Version 1.8, vorher js/src).

Beim Standard-Skin enthält die Einstiegs-Quelldatei index.js auch Anweisungen für die Einbindung eines Skin-Symbolfonts sowie der o. g. SCSS-Hauptdatei:

// Vendor specific styles & fonts
import '../fonts/_flaticon.css';
// (S)CSS
import '../scss/index.scss';
````
?> Auch hier gilt: Ein *Custom Skin* kann auch **ohne** den Einsatz eines solchen Bundlers entwickelt werden. Sofern überhaupt spezieller JavaScript-Code hierfür benötigt wird, ist eine Datei `index.js` ausreichend. (Im Regelfall wird sich der Umfang des Skin-JS-Codes ohnehin in einem überschaubaren Rahmen bewegen.)
## Frontend-Komponenten
?> Alle folgenden Abschnitte beziehen sich nur auf das Standard-Skin des **Basis-Plugins**, Add-ons bringen im Regelfall ihre eigenen Komponenten und benutzerdefinierten Beitragsarten (*Custom Post Types*) mit.
### Archiv & Listenansicht
<pre class="tree">
…
╷
├── archive-property.php
├── /property-list
│   ╷
│   ├── filters-sort.php
│   ├── list-item.php
│   ├── map.php
│   ├── pagination.php
│   └── properties.php
…
</pre>
Das Template für die Standard-Archivseite der [Immobilien-Beitragsart](/beitragsarten-taxonomien) ist in der Datei `archive-property.php` enthalten. Die Komponenten - [Karte](/komponenten/karte), [Suchformular](/komponenten/suchformular), [Sortierauswahl](/komponenten/sortierung), [Listenansicht](/komponenten/liste) und [Seitennavigation](/komponenten/seitennavigation) - werden über die entsprechenden [Rendering Actions](filters-actions.html#rendering) eingebunden:
```php
if ( $immonex_kickstart->property_list_map_display_by_default ) {
    do_action( 'inx_render_property_map' );
}
do_action( 'inx_render_property_search_form' );
do_action( 'inx_render_property_filters_sort' );
do_action( 'inx_render_property_list', array(
    'is_regular_archive_page' => true
) );
do_action( 'inx_render_pagination', array(
    'is_regular_archive_page' => true
) );

Der Ordner property-list enthält die Vorlagen (Templates) für Immobilienlisten (properties.php und list-item.php), Standortkarte (map.php), Sortierauswahl (filters-sort.php und Seitennavigation (pagination.php).

?> Bei allen Templates werden die zu rendernden Daten jeweils im Array $template_data bereitgestellt.

Suchformular

…
╷
├── property-search.php
├── /property-search
│   ╷
│   ├── element-checkbox.php
│   ├── …
│   └── element-text.php
…

Das Template property-search.php dient der Einbindung der vorgegebenen Elemente des Suchformulars, deren Vorlagen – separat pro Elementart – im Ordner property-search hinterlegt sind.

Detailansicht

…
╷
├── single-property.php
├── /single-property
│   ╷
│   ├── contact-person.php
│   ├── …
│   ├── element-hub.php
│   ├── …
│   └── virtual-tour.php
│
└── /images
    ╷
    └── location-pin.png

Die Datei single-property.php enthält das Standard-Template für die Einzelansicht eines Immobilien-Beitrags.

Wie bei der Suche wurden die Templates der einzelnen Elementarten in einem Unterordner zusammengefasst: single-property (Jede dieser Vorlagen kann übrigens auch für mehrere, gleichartige Elemente der Detailansicht eingesetzt werden.)

Eine zentrale Bedeutung kommt hier der Vorlage single-property/element-hub.php zu: Hierüber wird die Einbindung und – beim Standard-Skin teilweise tabbasierte – Gruppierung und Darstellung der Elemente gesteuert. Hierbei handelt es sich auch um das vorausgewählte Template, wenn die Detail-Render-Action ohne explizite Angabe einer Vorlage ausgeführt wird:

while ( have_posts() ) {
    the_post();
    do_action( 'inx_render_property_contents' );
}