Templates in Themes

Post Reply
User avatar
jlandt
Ssr. Bludit
Posts: 16
Joined: Mon Feb 22, 2021 10:56 am
Location: Berlin

Hallo erst mal.
Ich versuche mich gerade an mein erstes Theme und möchte gern die Möglichkeit nutzen, einer Page ein bestimmtes Template zuzuweisen.

Ich weiss, es wurde bereits mehrfach in der Vergangenheit angefragt. Ich möchte allerdings ungern eine Weiche in der index.php in Abhängigkeit des Slugs nutzen sondern die Möglichkeit bei den erweiterten Einstellungen einer Seite ein Template anzugeben.

In der Vergangenheit hieß es dazu, dass das Feature noch nicht implementiert ist. In der aktuellen Version ist zumindest das Feld verfügbar. Ist das Feature derzeit trotz Vorhandensein des Feldes immer noch nicht verfügbar?

Weiterhin heisst es als Hint unter dem Feld: "Wenn das Theme das unterstützt" (sinngemäß). Das heisst was genau? Eine Doku dazu konnte ich leider nicht finden.
User avatar
Edi
Site Admin
Posts: 2551
Joined: Sun Aug 09, 2015 5:01 pm
Location: Zurich
Contact:

jlandt wrote: Mon Feb 22, 2021 11:11 am Ich möchte allerdings ungern eine Weiche in der index.php in Abhängigkeit des Slugs nutzen sondern die Möglichkeit bei den erweiterten Einstellungen einer Seite ein Template anzugeben.
Du könntest auch ein benutzerdefiniertes Feld verwenden.
Ist das Feature derzeit trotz Vorhandensein des Feldes immer noch nicht verfügbar?
Nein, das Feld "Template" kann derzeit noch nicht verwendet werden.
Weiterhin heisst es als Hint unter dem Feld: "Wenn das Theme das unterstützt" (sinngemäß). Das heisst was genau? Eine Doku dazu konnte ich leider nicht finden.
Damit verschiedene Templates verwendet werden könnten, müsste ein Theme über verschiedene Templates verfügen.
Image
User avatar
jlandt
Ssr. Bludit
Posts: 16
Joined: Mon Feb 22, 2021 10:56 am
Location: Berlin

OK, vielen Dank erst eimal. Dann baue ich das wie gehabt per Logik (slug) in die index.php ein.

Schade. Und etwas verwirrend. Dann warte ich gespannt auf die Implementierung des Features und ändere dann das Theme nochmal ab...

Vielleicht noch als Hinweis:

Der Hint unter dem Feld ist ebenfalls etwas verwirrend. Vielleicht geht es mir auch nur so.... Der Hinweis suggeriert eher, dass im Theme bestimmter Code (Hook, etc.) vorhanden sein muss, damit es funktioniert.

Weiterhin wurde von anderer Usern ebenfalls die Frage gestellt, ob man das Template mit oder ohne File-Extension angeben muss.

Vielleicht kann man, wenn das Feature umgesetzt wurde, den Hinweistext nochmal dahingehend anpassen.
User avatar
Edi
Site Admin
Posts: 2551
Joined: Sun Aug 09, 2015 5:01 pm
Location: Zurich
Contact:

Das werden wir sicher machen.
Image
User avatar
novafacile
Sr. Bludit
Posts: 46
Joined: Sat Oct 06, 2018 4:47 pm
Contact:

Es gibt eine Möglichkeit, die Template-Einstellung bei den Pages aber auch bei den Kategorien zu nutzen. Der Wert wird ja in der Seite/Kategorie gespeichert, man muss es nur selbst im Theme einbauen. Verwende ich produktiv für ein Theme von mir.

Die Variablen dazu heißen:
  • $page->template()
  • $page->categoryTemplate()
Ich hab die Unterscheidung in der index.php vom Theme eingebaut.

Code: Select all

switch ($WHERE_AM_I) {
  case 'page':
    if ($page->template()) {
      include(THEME_DIR_PHP.$page->template().'.php');
    } elseif($page->categoryTemplate()){
      include(THEME_DIR_PHP.$page->categoryTemplate().'.php');
    } else {
      include(THEME_DIR_PHP.'page.php');
    }
  break;
  default:
    include(THEME_DIR_PHP.'home.php');
  break;
}
Die einzige Einschränkung ist, dass man das Template exakt richtig geschrieben per Hand eintragen muss. Es gibt keine Auswahlmöglichkeit. Zur Fehlervermeidung nutze ich deswegen dafür u.a. die Kategorien. Einmal in der Config eingestellt, wird immer das passende Template verwendet. Ob man das über die Kategorien verwenden kann, ist aber eine sehr individuelle Frage, je nach Inhaltsstruktur & Anforderungen.

Die Abfrage zum $WHERE_AM_I hab ich als switch umgebaut, da ich diese Variable gerne für individuelle Template- & Plugin-Lösungen nutze und dadurch beliebig viele "Cases" verwenden kann ohne mich in der If-Then-Else-Schleife zu verheddern.
User avatar
jlandt
Ssr. Bludit
Posts: 16
Joined: Mon Feb 22, 2021 10:56 am
Location: Berlin

Funktioniert super :-) Ich habs noch etwas modifiziert.

---

Code: Select all

### DYNAMIC TEMPLATE LOADING ##########################################

$templLoading = '';
$templDefault = 'home_video.php';
$errorFile    = 'error_loading.txt';
$errorMessage = 'ERROR: Template file not found.';

#######################################################################

switch ($WHERE_AM_I) {
    case 'page':
        if ($page->template()) {
            $templLoading = $page->template().'.php';
        } elseif($page->categoryTemplate()) {
            $templLoading = $page->categoryTemplate().'.php';
        } else {
            $templLoading = 'page.php';
        }
    break;
    default:
        $templLoading = $templDefault;
    break;
}

if(!file_exists(THEME_DIR_PHP.$templLoading)) {
    $errorMessage .= ' ('.$templLoading.')';
    file_put_contents(THEME_DIR_PHP.$errorFile, $errorMessage);
    $templLoading = $errorFile;
}

#######################################################################
?><!DOCTYPE html>
.
.
.
... an der entsprechenden Stelle im Theme:

Code: Select all


<?php include(THEME_DIR_PHP . $templLoading); ?>

User avatar
jlandt
Ssr. Bludit
Posts: 16
Joined: Mon Feb 22, 2021 10:56 am
Location: Berlin

Die error Datei könnte man vielleicht noch ins Temp schreiben lassen. Oder nach /dev/shm. :D
Post Reply