Diese Seite wurde vor mehr als 2 Jahren erstellt und vor über einem Monat zuletzt bearbeitet. Eventuell ist längst ihr Mindesthaltbarkeitsdatum überschritten!
Diese Plugin bietet über die PHP-Funktion file_exists() die Möglichkeit, in einem Twig-Template z.B. ein Header-Bild anzuzeigen, wenn die Bilddatei im Ordner der aktuellen Seite existiert. ebenso kann eine extern generierte (Include-)Datei eingebunden wird, wenn sie vorhanden ist.
Das Plugin reicht die bool
-Rückgabe (true/false) der PHP-Funktion 1:1 weiter, so dass im Twig mit if
auf einfache Art geprüft werden kann.
Lesen, verstehen, Pfade kontrollieren und anpassen
Das Plugin benötigt nur 2 Ordner und vier Dateien, die Pfadangaben relativ zum Grav-Wurzelverzeichnis sind:
Ordner user/plugins/file-exists/
Ordner user/plugins/file-exists/twig/
Datei user/plugins/file-exists/blueprints.yaml
Datei user/plugins/file-exists/file-exists.php
Datei user/plugins/file-exists/file-exists.yaml
Datei user/plugins/file-exists/twig/FileExistsTwigExtension.php
Diese Datei enthält die Informationen zum Plugin
name: File Exists
type: plugin
slug: fileexists
version: 1.0.0
description: "Provides a function to see if a file exists (e.g. 'if file_exists(file)')"
icon: map-marker
author:
name: Stefan Onderka
email: stefan@onderka.com
url: https://www.onderka.com/computer-und-netzwerk/grav-plugin-file_exists
Die Grundstruktur des Plugins, mit der das Plugin definiert wird
<?php
namespace Grav\Plugin;
use \Grav\Common\Plugin;
class FileExistsPlugin extends Plugin
{
public static function getSubscribedEvents()
{
return [
'onTwigExtensions' => ['onTwigExtensions', 0]
];
}
public function onTwigExtensions()
{
require_once(__DIR__ . '/twig/FileExistsTwigExtension.php');
$this->grav['twig']->twig->addExtension(new FileExistsTwigExtension());
}
}
Die Konfigurationsdatei des Plugins, speichert lediglich ob es aktiviert ist
enabled: true
Nach installation und Aktivierung ist das Plugin im Grav Plugin-Manager zu sehen:
Die eigentlich Funktions-Definition von fileExists
, die PHP file_exists()
ausführt
<?php
namespace Grav\Plugin;
class FileExistsTwigExtension extends \Twig_Extension
{
public function getName()
{
return 'FileExistsTwigExtension';
}
public function getFunctions()
{
return [
new \Twig_SimpleFunction('file_exists', [$this, 'fileExists'])
];
}
public function fileExists($file)
{
return file_exists($file);
}
}
Nach dem manuellen Anlegen dieser Ordner und Dateien ein chown www-data:www-data user/plugins/file-exists/ -R
nicht vergessen
Um an einer Stelle im Theme z.B. die Datei _header.jpg
einzubinden, falls diese im Ordner der aktuellen Seite vorhanden ist,
kann folgender Code im Twig-Template verwendet werden:
{# Needs plugin "File Exists" (https://github.com/noppingen/grav-plugin-file_exists) #}
{% set current_path = page.path() %}
{% if file_exists(current_path ~ "/_header.jpg") %}
<img title='Header - {{ page.title }}' src='{{ page.url }}/_header.jpg'>
{% endif %}
Dieser Code wird auch auf meinen Seiten verwendet.
Eine Lösung (für Bilder/Medien der aktuellen Seite, die sich innerhalb der Grav-Ordnerstruktur befinden) ohne Plugin ist mit dem folgenden Code möglich:
{% set header_image = page.media['_header.jpg'] %}
{% if header_image %}
<img title='Header - {{ page.title }}' src='{{ page.url }}/_header.jpg'>
{% endif %}