API für Entwickler

Wir <3 Menschen die programmieren.

Verzeichnisstruktur

Die folgenden Verzeichnisse sind in der Standardinstallation vorhanden:

├── content               = Inhaltsdateien
│   ├── 1-home            = Startseite
│   ├── 9-about           = Informationsseite
│   └── shared            = geteilte Dateien
├── media                 = Mediendateien
│   ├── downloads         = Dateien zum Herunterladen
│   ├── images            = Bilder für den Inhalt
│   └── thumbnails        = Miniaturbilder für den Inhalt
└── system                = Systemdateien
    ├── extensions        = installierte Erweiterungen und Konfigurationsdateien
    ├── layouts           = konfigurierbare Layoutdateien
    ├── themes            = konfigurierbare Themendateien
    └── trash             = gelöschte Dateien

Das content-Verzeichnis enthält die Inhaltsdateien der Webseite. Hier bearbeitet man die Webseite. Das media-Verzeichnis enthält die Mediendateien der Webseite. Hier speichert man Bilder und andere Dateien. Das system-Verzeichnis enthält die Systemdateien der Webseite. Hier passt man die Webseite an und entwickelt Erweiterungen.

Objekte

Die folgenden Objekte sind vorhanden:

$this->yellow->page = Zugang zur aktuellen Seite
$this->yellow->content = Zugang zu Inhaltsdateien
$this->yellow->media = Zugang zu Mediendateien
$this->yellow->system = Zugang zu Systemeinstellungen
$this->yellow->user = Zugang zu Benutzereinstellungen
$this->yellow->language = Zugang zu Spracheinstellungen
$this->yellow->extension = Zugang zu Erweiterungen
$this->yellow->toolbox = Zugang zur Werkzeugkiste mit Hilfsfunktionen

Mit Hilfe von $this->yellow kann man auf die Webseite zugreifen. Die API ist in mehrere Objekte aufgeteilt und spiegelt im Grunde genommen das Dateisystem wieder. In der Werkzeugkiste findet man Hilfsfunktionen und Dateioperationen für eigene Erweiterungen. Den Quellcode der gesamten API findet man in der Datei system/extensions/core.php.

Yellow-Page

Yellow-Page gibt Zugang zur aktuellen Seite:

page->get($key)
Hole eine Seiteneinstellung

page->getHtml($key)
Hole eine Seiteneinstellung, HTML-kodiert

page->getDate($key, $format = "")
Hole eine Seiteneinstellung als sprachspezifisches Datum

page->getDateHtml($key, $format = "")
Hole eine Seiteneinstellung als sprachspezifisches Datum, HTML-kodiert

page->getDateRelative($key, $format = "", $daysLimit = 30)
Hole eine Seiteneinstellung als sprachspezifisches Datum, relativ zu heute

page->getDateRelativeHtml($key, $format = "", $daysLimit = 30)
Hole eine Seiteneinstellung als sprachspezifisches Datum, relativ zu heute, HTML-kodiert

page->getDateFormatted($key, $format)
Hole eine Seiteneinstellung als Datum

page->getDateFormattedHtml($key, $format)
Hole eine Seiteneinstellung als Datum, HTML-kodiert

page->getContent($rawFormat = false, $sizeMax = 0)
Hole den Seiteninhalt, HTML-kodiert oder Rohformat

page->getParent()
Hole die übergeordnete Seite, null falls nicht vorhanden

page->getParentTop($homeFallback = false)
Hole die oberste übergeordnete Seite, null falls nicht vorhanden

page->getSiblings($showInvisible = false)
Hole eine Seitenkollektion mit Seiten auf dem selben Level

page->getChildren($showInvisible = false)
Hole eine Seitenkollektion mit untergeordneten Seiten

page->getChildrenRecursive($showInvisible = false, $levelMax = 0)
Hole eine Seitenkollektion mit untergeordneten Seiten rekursiv

page->getPages($key)
Hole eine Seitenkollektion mit zusätzlichen Seiten

page->getPage($key)
Hole eine geteilte Seite

page->getUrl()
Hole die URL der Seite

page->getBase($multiLanguage = false)
Hole die Basis der Seite

page->getLocation($absoluteLocation = false)
Hole den Ort der Seite

page->getRequest($key)
Hole das angefragte Argument der Seite

page->getRequestHtml($key)
Hole das angefragte Argument der Seite, HTML-kodiert

page->getHeader($key)
Hole den Antwort-Header der Seite

page->getExtra($name)
Hole Extradaten der Seite

page->getModified($httpFormat = false)
Hole das Änderungsdatum der Seite, Unix-Zeit oder HTTP-Format

page->getLastModified($httpFormat = false)
Hole das letzte Änderungsdatum der Seite, Unix-Zeit oder HTTP-Format

page->getStatusCode($httpFormat = false)
Hole den Statuscode der Seite, Zahl oder HTTP-Format

page->error($statusCode, $pageError = "")
Antworte mit Fehlerseite

page->clean($statusCode, location = "")
Antworte mit Statuscode, ohne Seiteninhalt

page->isAvailable()
Überprüfe ob die Seite vorhanden ist

page->isVisible()
Überprüfe ob die Seite sichtbar ist

page->isActive()
Überprüfe ob die Seite innerhalb der aktuellen HTTP-Anfrage ist

page->isCacheable()
Überprüfe ob die Seite cachebar ist

page->isError()
Überprüfe ob die Seite einen Fehler hat

page->isExisting($key)
Überprüfe ob die Seiteneinstellung existiert

page->isRequest($key)
Überprüfe ob das Anfrage-Argument existiert

page->isHeader($key)
Überprüfe ob der Antwort-Header existiert

page->isPage($key)
Überprüfe ob die geteilte Seite existiert

Hier ist ein Beispiel-Layout um den Seiteninhalt anzuzeigen:

<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<?php echo $this->yellow->page->getContent() ?>
</div>
</div>
<?php $this->yellow->layout("footer") ?>

Hier ist ein Beispiel-Layout um den Seiteninhalt und den Autor anzuzeigen:

<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<p><?php echo $this->yellow->page->getHtml("author") ?></p>
<?php echo $this->yellow->page->getContent() ?>
</div>
</div>
<?php $this->yellow->layout("footer") ?>

Hier ist ein Beispiel-Layout um den Seiteninhalt und das Änderungsdatum anzuzeigen:

<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<p><?php echo $this->yellow->page->getDateHtml("modified") ?></p>
<?php echo $this->yellow->page->getContent() ?>
</div>
</div>
<?php $this->yellow->layout("footer") ?>

Yellow-Page-Collection

Yellow-Page-Collection gibt Zugang zu mehreren Seiten:

pages->filter($key, $value, $exactMatch = true)
Filtere eine Seitenkollektion nach Seiteneinstellung

pages->match($regex = "/.*/")
Filtere eine Seitenkollektion nach Dateinamen

pages->sort($key, $ascendingOrder = true)
Sortiere eine Seitenkollektion nach Seiteneinstellung

pages->similar($page, $ascendingOrder = false)
Sortiere eine Seitenkollektion nach Einstellungsähnlichkeit

pages->merge($input)
Berechne Vereinigungsmenge, füge eine Seitenkollektion hinzu

pages->intersect($input)
Berechne Schnittmenge, entferne Seiten die nicht in einer anderen Seitenkollektion sind

pages->diff($input)
Berechne Restmenge, entferne Seiten die in einer anderen Seitenkollektion sind

pages->append($page)
Hänge an das Ende der Seitenkollektion

pages->prepend($page)
Stelle an den Anfang der Seitenkollektion

pages->limit($pagesMax)
Begrenze die Anzahl der Seiten in der Seitenkollektion

pages->reverse()
Drehe die Seitenkollektion um

pages->shuffle()
Mach die Seitenkollektion zufällig

pages->paginate($limit)
Erstelle eine Nummerierung für die Seitenkollektion

pages->getPaginationNumber()
Hole die aktuelle Seitennummer

pages->getPaginationCount()
Hole die höchste Seitennummer

pages->getPaginationLocation($absoluteLocation = true, $pageNumber = 1)
Hole den Ort einer Seite in der Nummerierung

pages->getPaginationPrevious($absoluteLocation = true)
Hole den Ort der vorherigen Seite in der Nummerierung

pages->getPaginationNext($absoluteLocation = true)
Hole den Ort der nächsten Seite in der Nummerierung

pages->getPagePrevious($page)
Hole die vorherige Seite in der Seitenkollektion, null falls nicht vorhanden

pages->getPageNext($page)
Hole die nächste Seite in der Seitenkollektion, null falls nicht vorhanden

pages->getFilter()
Hole den aktuellen Seitenfilter

pages->getModified($httpFormat = false)
Hole das Änderungsdatum der Seitenkollektion, Unix-Zeit oder HTTP-Format

pages->isPagination()
Überprüfe ob eine Nummerierung vorhanden ist

Hier ist ein Beispiel-Layout um drei zufällige Seiten anzuzeigen:

<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<?php $pages = $this->yellow->content->index()->shuffle()->limit(3) ?>
<?php $this->yellow->page->setLastModified($pages->getModified()) ?>
<ul>
<?php foreach ($pages as $page): ?>
<li><?php echo $page->getHtml("title") ?></li>
<?php endforeach ?>
</ul>
</div>
</div>
<?php $this->yellow->layout("footer") ?>

Hier ist ein Beispiel-Layout um die neusten Seiten anzuzeigen:

<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<?php $pages = $this->yellow->content->index()->sort("modified", false) ?>
<?php $this->yellow->page->setLastModified($pages->getModified()) ?>
<ul>
<?php foreach ($pages as $page): ?>
<li><?php echo $page->getHtml("title") ?></li>
<?php endforeach ?>
</ul>
</div>
</div>
<?php $this->yellow->layout("footer") ?>

Hier ist ein Beispiel-Layout um Entwurfseiten anzuzeigen:

<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<?php $pages = $this->yellow->content->index(true, true)->filter("status", "draft") ?>
<?php $this->yellow->page->setLastModified($pages->getModified()) ?>
<ul>
<?php foreach ($pages as $page): ?>
<li><?php echo $page->getHtml("title") ?></li>
<?php endforeach ?>
</ul>
</div>
</div>
<?php $this->yellow->layout("footer") ?>

Yellow-Content

Yellow-Content gibt Zugang zu Inhaltsdateien:

content->find($location, $absoluteLocation = false)
Hole eine Seite, null falls nicht vorhanden

content->index($showInvisible = false, $multiLanguage = false, $levelMax = 0)
Hole eine Seitenkollektion mit allen Seiten

content->top($showInvisible = false, $showOnePager = true)
Hole eine Seitenkollektion mit Hauptseiten der Navigation

content->path($location, $absoluteLocation = false)
Hole eine Seitenkollektion mit Pfad in der Navigation

content->multi($location, $absoluteLocation = false, $showInvisible = false)
Hole eine Seitenkollektion mit mehreren Sprachen im Mehrsprachen-Modus

content->clean()
Hole eine Seitenkollektion die leer ist

Hier ist ein Beispiel-Layout um alle Seiten anzuzeigen:

<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<?php $pages = $this->yellow->content->index(true, true) ?>
<?php $this->yellow->page->setLastModified($pages->getModified()) ?>
<ul>
<?php foreach ($pages as $page): ?>
<li><?php echo $page->getHtml("title") ?></li>
<?php endforeach ?>
</ul>
</div>
</div>
<?php $this->yellow->layout("footer") ?>

Hier ist ein Beispiel-Layout um Seiten unterhalb eines bestimmten Orts anzuzeigen:

<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<?php $pages = $this->yellow->content->find("/help/")->getChildren() ?>
<?php $this->yellow->page->setLastModified($pages->getModified()) ?>
<ul>
<?php foreach ($pages as $page): ?>
<li><?php echo $page->getHtml("title") ?></li>
<?php endforeach ?>
</ul>
</div>
</div>
<?php $this->yellow->layout("footer") ?>

Hier ist ein Beispiel-Layout um die Hauptseiten der Navigation anzuzeigen:

<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<?php $pages = $this->yellow->content->top() ?>
<?php $this->yellow->page->setLastModified($pages->getModified()) ?>
<ul>
<?php foreach ($pages as $page): ?>
<li><?php echo $page->getHtml("titleNavigation") ?></li>
<?php endforeach ?>
</ul>
</div>
</div>
<?php $this->yellow->layout("footer") ?>

Yellow-Media

Yellow-Media gibt Zugang zu Mediendateien:

media->find($location, $absoluteLocation = false)
Hole eine Seite mit Informationen über Mediendatei, null falls nicht vorhanden

media->index($showInvisible = false, $multiPass = false, $levelMax = 0)
Hole eine Seitenkollektion mit allen Mediendateien

media->clean()
Hole eine Seitenkollektion die leer ist

Hier ist ein Beispiel-Layout um alle Mediendateien anzuzeigen:

<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<?php $files = $this->yellow->media->index(true) ?>
<?php $this->yellow->page->setLastModified($files->getModified()) ?>
<ul>
<?php foreach ($files as $file): ?>
<li><?php echo $file->getLocation(true) ?></li>
<?php endforeach ?>
</ul>
</div>
</div>
<?php $this->yellow->layout("footer") ?>

Hier ist ein Beispiel-Layout um die neusten Mediendateien anzuzeigen:

<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<?php $files = $this->yellow->media->index()->sort("modified", false) ?>
<?php $this->yellow->page->setLastModified($files->getModified()) ?>
<ul>
<?php foreach ($files as $file): ?>
<li><?php echo $file->getLocation(true) ?></li>
<?php endforeach ?>
</ul>
</div>
</div>
<?php $this->yellow->layout("footer") ?>

Hier ist ein Beispiel-Layout um Mediendateien eines bestimmten Typen anzuzeigen:

<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<?php $files = $this->yellow->media->index()->filter("type", "pdf") ?>
<?php $this->yellow->page->setLastModified($files->getModified()) ?>
<ul>
<?php foreach ($files as $file): ?>
<li><?php echo $file->getLocation(true) ?></li>
<?php endforeach ?>
</ul>
</div>
</div>
<?php $this->yellow->layout("footer") ?>

Yellow-System

Yellow-System gibt Zugang zu Systemeinstellungen:

system->get($key)
Hole eine Systemeinstellung

system->getHtml($key)
Hole eine Systemeinstellung, HTML-kodiert

system->getSettings($filterStart = "", $filterEnd = "")
Hole Systemeinstellungen

system->getValues($key)
Hole die unterstützten Werte einer Systemeinstellung, leer falls nicht bekannt

system->getModified($httpFormat = false)
Hole das Änderungsdatum von Systemeinstellungen, Unix-Zeit oder HTTP-Format

system->isExisting($key)
Überprüfe ob die Systemeinstellung existiert

Hier ist ein Beispiel-Layout um den Webmaster anzuzeigen:

<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<p>
<?php echo "Name: ".$this->yellow->system->getHtml("author")."<br />" ?>
<?php echo "Email: ".$this->yellow->system->getHtml("email")."<br />" ?>
</p>
</div>
</div>
<?php $this->yellow->layout("footer") ?>

Hier ist ein Beispiel-Layout um zu überprüfen ob eine bestimmte Einstellung aktiviert ist:

<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<p>
<?php $multiLanguageMode = $this->yellow->system->get("coreMultiLanguageMode") ?>
Multi language mode is <?php echo htmlspecialchars($multiLanguageMode ? "on" : "off") ?>.
</p>
</div>
</div>
<?php $this->yellow->layout("footer") ?>

Hier ist ein Beispiel-Layout um die Core-Einstellungen anzuzeigen:

<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<p>
<?php foreach ($this->yellow->system->getSettings("core") as $key=>$value): ?>
<?php echo htmlspecialchars("$key: $value") ?><br />
<?php endforeach ?>
</p>
</div>
</div>
<?php $this->yellow->layout("footer") ?>

Yellow-User

Yellow-User gibt Zugang zu Benutzereinstellungen:

user->getUser($key, $email = "")
Hole eine Benutzereinstellung

user->getUserHtml($key, $email = "")
Hole eine Benutzereinstellung, HTML-kodiert

user->getSettings($email = "")
Hole Benutzereinstellungen

user->getModified($httpFormat = false)
Hole das Änderungsdatum von Benutzereinstellungen, Unix-Zeit oder HTTP-Format

user->isUser($key, $email = "")
Überprüfe ob die Benutzereinstellung existiert

user->isExisting($email)
Überprüfe ob der Benutzer existiert

Hier ist ein Beispiel-Layout um den aktuellen Benutzer anzuzeigen:

<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<p>
<?php echo "Name: ".$this->yellow->user->getUserHtml("name")."<br />" ?>
<?php echo "Email: ".$this->yellow->user->getUserHtml("email")."<br />" ?>
</p>
</div>
</div>
<?php $this->yellow->layout("footer") ?>

Hier ist ein Beispiel-Layout um zu überprüfen ob ein Benutzer angemeldet ist:

<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<?php $found = $this->yellow->user->isUser("name") ?>
<p>You are <?php echo htmlspecialchars($found? "" : "not") ?> logged in.</p>
</div>
</div>
<?php $this->yellow->layout("footer") ?>

Hier ist ein Beispiel-Layout um Benutzer und ihren Status anzuzeigen:

<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<p>
<?php foreach ($this->yellow->system->getValues("email") as $email): ?>
<?php echo $this->yellow->user->getUserHtml("name", $email) ?> - 
<?php echo $this->yellow->user->getUserHtml("status", $email) ?><br />
<?php endforeach ?>
</p>
</div>
</div>
<?php $this->yellow->layout("footer") ?>

Yellow-Language

Yellow-Language gibt Zugang zu Spracheinstellungen:

language->getText($key, $language = "")
Hole eine Spracheinstellung

language->getTextHtml($key, $language = "")
Hole eine Spracheinstellung, HTML encoded

language->getSettings($filterStart = "", $filterEnd = "", $language = "")
Hole Spracheinstellungen

language->getModified($httpFormat = false)
Hole das Änderungsdatum von Spracheinstellungen, Unix-Zeit oder HTTP-Format

language->isText($key, $language = "")
Überprüfe ob die Spracheinstellung existiert

language->isExisting($language)
Überprüfe ob die Sprache existiert

Hier ist ein Beispiel-Layout um eine Spracheinstellung anzuzeigen:

<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<p><?php echo $this->yellow->language->getTextHtml("wikiModified") ?> 
<?php echo $this->yellow->page->getDateHtml("modified") ?></p>
<?php echo $this->yellow->page->getContent() ?>
</div>
</div>
<?php $this->yellow->layout("footer") ?>

Hier ist ein Beispiel-Layout um zu überprüfen ob eine bestimmte Sprache existiert:

<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<?php $found = $this->yellow->language->isExisting("sv") ?>
<p>Swedish language <?php echo htmlspecialchars($found ? "" : "not") ?> installed.</p>
</div>
</div>
<?php $this->yellow->layout("footer") ?>

Hier ist ein Beispiel-Layout um Sprachen und Übersetzer anzuzeigen:

<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<p>
<?php foreach ($this->yellow->system->getValues("language") as $language): ?>
<?php echo $this->yellow->language->getTextHtml("languageDescription", $language) ?> - 
<?php echo $this->yellow->language->getTextHtml("languageTranslator", $language) ?><br />
<?php endforeach ?>
</p>
</div>
</div>
<?php $this->yellow->layout("footer") ?>

Yellow-Extension

Yellow-Extension gibt Zugang zu Erweiterungen:

extension->get($key)
Hole eine Erweiterung

extension->getModified($httpFormat = false)
Hole das Änderungsdatum von Erweiterungen, Unix-Zeit oder HTTP-Format

extension->isExisting($key)
Überprüfe ob die Erweiterung existiert

Hier ist ein Beispiel-Layout um Erweiterungen anzuzeigen:

<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<p>
<?php foreach($this->yellow->extension->data as $key=>$value): ?>
<?php echo htmlspecialchars($key." ".$value["version"]) ?><br />
<?php endforeach ?>
</p>
</div>
</div>
<?php $this->yellow->layout("footer") ?>

Hier ist ein Beispiel-Layout um zu überprüfen ob eine bestimmte Erweiterung existiert:

<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<?php $found = $this->yellow->extension->isExisting("search") ?>
<p>Search extension <?php echo htmlspecialchars($found ? "" : "not") ?> installed.</p>
</div>
</div>
<?php $this->yellow->layout("footer") ?>

Hier ist ein Beispiel-Code um eine Funktion aus einer anderen Erweiterung aufzurufen:

if ($this->yellow->extension->isExisting("image")) {
    $fileName = $this->yellow->system->get("coreImageDirectory")."photo.jpg";
    list($src, $width, $height) = $this->yellow->extension->get("image")->getImageInformation($fileName, "100%", "100%");
    echo "<img src=\"".htmlspecialchars($src)."\" width=\"".htmlspecialchars($width)."\" height=\"".htmlspecialchars($height)."\" />";
}

Yellow-Toolbox

Yellow-Toolbox gibt Zugang zur Werkzeugkiste mit Hilfsfunktionen:

toolbox->getCookie($key)
Hole das Browsercookie der aktuellen HTTP-Anfrage

toolbox->getServer($key)
Hole das Serverargument der aktuellen HTTP-Anfrage

toolbox->getDirectoryEntries($path, $regex = "/.*/", $sort = true, $directories = true, $includePath = true)
Hole Dateien und Verzeichnisse

toolbox->getDirectoryEntriesRecursive($path, $regex = "/.*/", $sort = true, $directories = true, $levelMax = 0)
Hole Dateien und Verzeichnisse rekursiv

toolbox->readFile($fileName, $sizeMax = 0)
Lese eine Datei, leerer String falls nicht vorhanden

toolbox->createFile($fileName, $fileData, $mkdir = false)
Erstelle eine Datei

toolbox->appendFile($fileName, $fileData, $mkdir = false)
Hänge an eine Datei an

toolbox->copyFile($fileNameSource, $fileNameDestination, $mkdir = false)
Kopiere eine Datei

toolbox->renameFile($fileNameSource, $fileNameDestination, $mkdir = false)
Benenne eine Datei um

toolbox->renameDirectory($pathSource, $pathDestination, $mkdir = false)
Benenne ein Verzeichnis um

toolbox->deleteFile($fileName, $pathTrash = "")
Lösche eine Datei

toolbox->deleteDirectory($path, $pathTrash = "")
Lösche ein Verzeichnis

toolbox->modifyFile($fileName, $modified)
Setze das Änderungsdatum von Datei/Verzeichnis, Unix-Zeit

toolbox->getFileModified($fileName)
Hole das Änderungsdatum von Datei/Verzeichnis, Unix-Zeit

toolbox->getFileType($fileName)
Hole den Typ der Datei

toolbox->getTextLines($text)
Hole die Zeilen eines Texts, einschließlich Zeilenumbruch

toolbox->getTextList($text, $separator, $size)
Hole ein Array mit bestimmter Grösse aus dem Text

toolbox->getTextArguments($text, $optional = "-", $sizeMin = 9)
Hole ein Array mit variabler Grösse aus dem Text, durch Leerzeichen getrennt

toolbox->createTextDescription($text, $lengthMax = 0, $removeHtml = true, $endMarker = "", $endMarkerText = "")
Erstelle eine Textbeschreibung, mit oder ohne HTML

toolbox->normaliseArguments($text, $appendSlash = true, $filterStrict = true)
Normalisiere Ortargumente

toolbox->normaliseData($text, $type = "html", $filterStrict = true)
Normalisiere Elemente und Attribute in HTML/SVG-Daten

toolbox->normalisePath($text)
Normalisiere relative Pfadanteile

Hier ist ein Beispiel-Code um Textzeilen von einer Datei zu lesen:

$fileName = $this->yellow->system->get("coreExtensionDirectory").$this->yellow->system->get("coreSystemFile");
$fileData = $this->yellow->toolbox->readFile($fileName);
foreach ($this->yellow->toolbox->getTextLines($fileData) as $line) {
    echo $line;
}

Hier ist ein Beispiel-Code um Dateien in einem Verzeichnis anzuzeigen:

$path = $this->yellow->system->get("coreExtensionDirectory");
foreach ($this->yellow->toolbox->getDirectoryEntries($path, "/.*/", true, false) as $entry) {
    echo "Found file $entry\n";
}

Hier ist ein Beispiel-Code um Text in mehreren Dateien zu ändern:

$path = $this->yellow->system->get("coreContentDirectory");
foreach ($this->yellow->toolbox->getDirectoryEntriesRecursive($path, "/^.*\.md$/", true, false) as $entry) {
    $fileData = $fileDataNew = $this->yellow->toolbox->readFile($entry);
    $fileDataNew = str_replace("I drink a lot of water", "I drink a lot of coffee", $fileDataNew);
    if ($fileData!=$fileDataNew && !$this->yellow->toolbox->createFile($entry, $fileDataNew)) {
        $this->yellow->log("error", "Can't write file '$entry'!");
    }
}

Ereignisse

Die folgenden Ereignisse sind vorhanden:

onLoad ───────▶ onStartup ───────────────────────────────────────────┐
                    │                                                │
                    ▼                                                │
                onRequest ───────────────────┐                       │
                    │                        │                       │
                    ▼                        ▼                       ▼
                onParseMeta              onEditContentFile       onCommand  
                onParseContentRaw        onEditMediaFile         onCommandHelp
                onParseContentShortcut   onEditSystemFile            │
                onParseContentHtml       onEditUserAccount           │
                onParsePageLayout            │                       ▼
                onParsePageExtra             │                   onUpdate
                onParsePageOutput            │                   onLog
                    │                        │                       │
                    ▼                        │                       │
                onShutDown ◀─────────────────┴───────────────────────┘

Wird eine Seite angezeigt, dann werden die Erweiterungen geladen und es wird onLoad aufgerufen. Sobald alle Erweiterungen geladen sind wird onStartup aufgerufen. Die Seite kann mit verschiedenen onParse-Ereignissen verarbeitet werden. Dann wird der Inhalt der Seite erzeugt. Sollte ein Fehler aufgetreten sein, wird eine Fehlerseite erzeugt. Zum Schluss wird die Seite ausgegeben und es wird onShutdown aufgerufen.

Wird eine Seite bearbeitet, dann werden die Erweiterungen geladen und es wird onLoad aufgerufen. Sobald alle Erweiterungen geladen sind wird onStartup aufgerufen. Änderungen an der Seite können mit verschiedenen onEdit-Ereignissen verarbeitet werden. Dann wird die Seite gespeichert. Zum Schluss wird ein Statuscode zum Neuladen der Seite ausgegeben und es wird onShutdown aufgerufen.

Wird ein Befehl ausgeführt, dann werden die Erweiterungen geladen und es wird onLoad aufgerufen. Sobald alle Erweiterungen geladen sind wird onStartup aufgerufen. Der Befehl kann mit onCommand verarbeitet werden. Sollte kein Befehl eingegeben worden sein, wird onCommandHelp aufgerufen und Erweiterungen können eine Hilfe zur Verfügung stellen. Zum Schluss wird ein Rückgabecode ausgegeben und es wird onShutdown aufgerufen.

Yellow-Core-Ereignisse

Yellow-Core-Ereignisse unterrichten wenn eine Seite angezeigt wird oder sich ein Zustand ändert:

public function onLoad($yellow)
Verarbeite die Initialisierung

public function onStartup()
Verarbeite das Hochfahren

public function onUpdate($action)
Verarbeite die Aktualisierung

public function onRequest($scheme, $address, $base, $location, $fileName)
Verarbeite die Anfrage

public function onParseMeta($page)
Verarbeite die Metadaten einer Seite

public function onParseContentRaw($page, $text)
Verarbeite den Seiteninhalt im Rohformat

public function onParseContentShortcut($page, $name, $text, $type)
Verarbeite den Seiteninhalt einer Abkürzung

public function onParseContentHtml($page, $text)
Verarbeite den Seiteninhalt im HTML-Format

public function onParsePageLayout($page, $name)
Verarbeite das Layout einer Seite

public function onParsePageExtra($page, $name)
Verarbeite die Extradaten einer Seite

public function onParsePageOutput($page, $text)
Verarbeite die Ausgabedaten einer Seite

public function onLog($action, $message)
Verarbeite das Logging

public function onShutdown()
Verarbeite das Runterfahren

Hier ist eine Beispiel-Erweiterung um eine [example]-Abkürzung zu verarbeiten:

<?php
class YellowExample {
    const VERSION = "0.1.1";
    public $yellow;         // access to API

    // Handle initialisation
    public function onLoad($yellow) {
        $this->yellow = $yellow;
    }

    // Handle page content of shortcut
    public function onParseContentShortcut($page, $name, $text, $type) {
        $output = null;
        if ($name=="example" && ($type=="block" || $type=="inline")) {
            $output = "<div class=\"".htmlspecialchars($name)."\">";
            $output .= "Add more HTML code here";
            $output .= "</div>";
        }
        return $output;
    }
}

Yellow-Edit-Ereignisse

Yellow-Edit-Ereignisse unterrichten wenn eine Seite bearbeitet wird:

public function onEditContentFile($page, $action, $email)
Verarbeite Änderungen an Inhaltsdatei

public function onEditMediaFile($file, $action, $email)
Verarbeite Änderungen an Mediendatei

public function onEditSystemFile($file, $action, $email)
Verarbeite Änderungen an Systemdatei

public function onEditUserAccount($action, $email, $password)
Verarbeite Änderungen am Benutzerkonto

Hier ist eine Beispiel-Erweiterung um eine Datei zu verarbeiten:

<?php
class YellowExample {
    const VERSION = "0.1.2";
    public $yellow;         // access to API

    // Handle initialisation
    public function onLoad($yellow) {
        $this->yellow = $yellow;
    }

    // Handle media file changes
    public function onEditMediaFile($file, $action, $email) {
        if ($action=="upload") {
            $fileName = $file->fileName;
            $fileType = $this->yellow->toolbox->getFileType($file->get("fileNameShort"));
            // Add more code here
        }
    }
}

Yellow-Command-Ereignisse

Yellow-Command-Ereignisse unterrichten wenn ein Befehl ausgeführt wird:

public function onCommand($command, $text)
Verarbeite Befehle

public function onCommandHelp()
Verarbeite Hilfe für Befehle

Hier ist eine Beispiel-Erweiterung um einen Befehl zu verarbeiten:

<?php
class YellowExample {
    const VERSION = "0.1.3";
    public $yellow;         // access to API

    // Handle initialisation
    public function onLoad($yellow) {
        $this->yellow = $yellow;
    }

    // Handle command
    public function onCommand($command, $text) {
        $statusCode = 0;
        if ($command=="example") {
            echo "Yellow $command: Add more text here\n";
            $statusCode = 200;
        }
        return $statusCode;
    }

    // Handle command help
    public function onCommandHelp() {
        return "example\n";
    }    
}

Verschiedenes

Die folgenden Funktionen erweitern PHP-Stringfunktionen:

strtoloweru($string)
Wandle String in Kleinschrift um, UTF-8 kompatibel

strtoupperu($string)
Wandle String in Großschrift um, UTF-8 kompatibel

strlenu($string) + strlenb($string)
Hole Stringlänge, UTF-8-Zeichen oder Bytes

strposu($string, $search) + strposb($string, $search)
Hole Stringposition des ersten Treffers, UTF-8-Zeichen oder Bytes

strrposu($string, $search) + strrposb($string, $search)
Hole Stringposition des letzten Treffers, UTF-8-Zeichen oder Bytes

substru($string, $start, $length) + substrb($string, $start, $length)
Hole Teilstring, UTF-8-Zeichen oder Bytes

strempty($string)
Überprüfe ob der String leer ist

Hier ist ein Beispiel-Code um verschiedene Stringfunktionen zu benutzen:

$string = "Datenstrom Yellow ist für Menschen die kleine Webseiten machen";
echo strtoloweru($string);    // datenstrom yellow ist für menschen die kleine webseiten machen
echo strtoupperu($string);    // DATENSTROM YELLOW IST FÜR MENSCHEN DIE KLEINE WEBSEITEN MACHEN

$string = "Text mit UTF-8-Zeichen åäö";
echo strlenu($string);        // 26
echo strposu($string, "UTF"); // 9
echo substru($string, -3, 3); // åäö

var_dump(strempty("text"));   // bool(false)
var_dump(strempty("0"));      // bool(false)
var_dump(strempty(""));       // bool(true)

Verwandte Informationen

Hast du Fragen? Hilfe finden und mitmachen.