API for developers
We <3 people who code.
- 1. Folder structure
- 2. Tools
- 2.1. Web editor
- 2.2. Web server
- 2.3. Web generator
- 2.4. Extensions
- 2.5. Layouts
- 3. Objects
- 3.1. Yellow
- 3.2. Yellow content
- 3.3. Yellow media
- 3.4. Yellow system
- 3.5. Yellow language
- 3.6. Yellow user
- 3.7. Yellow extension
- 3.8. Yellow lookup
- 3.9. Yellow toolbox
- 3.10. Yellow page
- 3.11. Yellow page collection
- 3.12. Yellow string
- 4. Events
- 4.1. Yellow core events
- 4.2. Yellow parse events
- 4.3. Yellow edit events
- 4.4. Yellow command events
- 4.5. Yellow update events
- 5. Related information
Folder structure
You can change everything in the file manager on your computer. The content
folder contains the content files of the website. You can edit your website here. The media
folder contains the media files of the website. You can store your images and files here. The system
folder contains the system files of the website. You can find installed extensions, configuration files and the log file here.
The following configuration files and system files are available:
system/extensions/yellow-system.ini
= file with system settings
system/extensions/yellow-language.ini
= file with language settings
system/extensions/yellow-user.ini
= file with user settings
system/extensions/yellow-website.log
= log file of the website
Tools
Web editor
You can edit your website in a web browser. The login page is available on your website as http://website/edit/
. Log in with your user account. You can use the normal navigation, make some changes and see the result immediately. The built-in web editor allows you to edit content files and upload media files. It is a great way to update your website. Text formatting with Markdown is supported. HTML and shortcuts are also supported. Learn more about the web editor.
Web server
You can start a web server at the command line. The built-in web server is convenient for developers, designers and translators. This allows you to display web pages on your computer, check them and upload them to the external web server later. Open a terminal window. Go to your installation folder, where the file yellow.php
is. Type php yellow.php serve
, you can optionally add a URL. Open a web browser and go to the URL shown. Learn more about the web server.
Web generator
You can generate a static website at the command line. The static site generator makes the entire website in advance, instead of waiting for a file to be requested. Open a terminal window. Go to your installation folder, where the file yellow.php
is. Type php yellow.php generate
, you can optionally add a folder and a location. This will generate a static website in the public
folder. Upload the static website to your web server and generate a new one when needed. Learn more about the web generator.
Extensions
You can customise the features of your website. There is a core and everything else is an extension. The installed extensions are stored in your system/extensions
folder. The idea is that the standard installation only includes the most important things to make small websites. There are methods like onLoad()
and onParseContentShortcut()
, which allow you to handle events. With this system you have the complete control. Install some extensions and see how they are working. Learn more about extensions.
Layouts
You can customise the look of your website. The layout files are stored in your system/layouts
folder. The layout system does not really care what's in layout files. It will leave HTML code unchanged. There are methods like getHtml()
and getContentHtml()
, which allow you to output the current page as you like. It's possible to use loops and create control structures. You don't have to learn a special web framework, but can use normal PHP. Learn more about layouts.
Objects
With the help of the API you can access files, settings and more. A fundamental object is $this->yellow->page
to access the current page. The API is divided into several objects and basically reflects the file system. There's $this->yellow->content
to access content files, $this->yellow->media
to access media files and $this->yellow->system
to access system settings. The source code of the entire API can be found in file system/extensions/core.php
.
The following objects are available:
$this->yellow
= access to API
$this->yellow->content
= access to content files
$this->yellow->media
= access to media files
$this->yellow->system
= access to system settings
$this->yellow->language
= access to language settings
$this->yellow->user
= access to user settings
$this->yellow->extension
= access to extensions
$this->yellow->lookup
= access to lookup and normalisation methods
$this->yellow->toolbox
= access to toolbox with helper methods
$this->yellow->page
= access to current page
Yellow
The class Yellow
gives access to the API. The following methods are available:
command
getLayoutArguments
layout
load
request
Description of methods and arguments:
yellow->load(): void
Handle initialisation
yellow->request(): int
Handle request from web browser
yellow->command($line = ""): int
Handle command from command line
yellow->layout($name, $arguments = null): void
Include layout
yellow->getLayoutArguments($sizeMin = 9): array
Return layout arguments
Layout file with header and footer:
<?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->getContentHtml() ?>
</div>
</div>
<?php $this->yellow->layout("footer") ?>
Yellow content
The class YellowContent
gives access to content files. The following methods are available:
clean
find
index
multi
path
top
Description of methods and arguments:
content->find($location, $absoluteLocation = false): YellowPage|null
Return page, null if not found
content->index($showInvisible = false, $multiLanguage = false, $levelMax = 0): YellowPageCollection
Return page collection with all pages
content->top($showInvisible = false, $showOnePager = true): YellowPageCollection
Return page collection with top-level navigation
content->path($location, $absoluteLocation = false): YellowPageCollection
Return page collection with path ancestry
content->multi($location, $absoluteLocation = false, $showInvisible = false): YellowPageCollection
Return page collection with multiple languages in multi language mode
content->clean(): YellowPageCollection
Return page collection that is empty
Layout file for showing all pages:
<?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") ?>
Layout file for showing pages below a specific location:
<?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") ?>
Layout file for showing top-level navigation pages:
<?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
The class YellowMedia
gives access to media files. The following methods are available:
clean
index
find
Description of methods and arguments:
media->find($location, $absoluteLocation = false): YellowPage|null
Return page with media file information, null if not found
media->index($showInvisible = false, $multiPass = false, $levelMax = 0): YellowPageCollection
Return page collection with all media files
media->clean(): YellowPageCollection
Return page collection that is empty
Layout file for showing all media files:
<?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") ?>
Layout file for showing latest media files:
<?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") ?>
Layout file for showing media files of a specific type:
<?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
The class YellowSystem
gives access to system settings. The following methods are available:
get
getAvailable
getDifferent
getHtml
getModified
getSettings
isExisting
save
set
setDefault
Description of methods and arguments:
system->save($fileName, $settings): bool
Save system settings to file
system->setDefault($key, $value): void
Set default system setting
system->set($key, $value): void
Set system setting
system->get($key): string
Return system setting
system->getHtml($key): string
Return system setting, HTML encoded
system->getDifferent($key): string
Return different value for system setting
system->getAvailable($key): array
Return available values for system setting
system->getSettings($filterStart = "", $filterEnd = ""): array
Return system settings
system->getModified($httpFormat = false): int|string
Return system settings modification date, Unix time or HTTP format
system->isExisting($key): bool
Check if system setting exists
Layout file for showing webmaster:
<?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") ?>
Layout file for checking if a specific setting is activated:
<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<p>
<?php $debugMode = $this->yellow->system->get("coreDebugMode") ?>
Debug mode is <?php echo htmlspecialchars($debugMode ? "on" : "off") ?>.
</p>
</div>
</div>
<?php $this->yellow->layout("footer") ?>
Layout file for showing core settings:
<?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 language
The class YellowLanguage
gives access to language settings. The following methods are available:
getDateFormatted
getDateRelative
getDateStandard
getModified
getSettings
getText
getTextHtml
isExisting
isText
setDefaults
setText
Description of methods and arguments:
language->setDefaults($lines): void
Set default language settings
language->setText($key, $value, $language): void
Set language setting
language->getText($key, $language = ""): string
Return language setting
language->getTextHtml($key, $language = ""): string
Return language setting, HTML encoded
page->getDateStandard($text, $language = ""): string
Return text as language specific date, convert to one of the standard formats
page->getDateRelative($timestamp, $format, $daysLimit, $language = ""): string
Return Unix time as date, relative to today
page->getDateFormatted($timestamp, $format, $language = ""): string
Return Unix time as date
language->getSettings($filterStart = "", $filterEnd = "", $language = ""): array
Return language settings
language->getModified($httpFormat = false): int|string
Return language settings modification date, Unix time or HTTP format
language->isText($key, $language = ""): bool
Check if language setting exists
language->isExisting($language): bool
Check if language exists
Layout file for showing a language setting:
<?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->getContentHtml() ?>
</div>
</div>
<?php $this->yellow->layout("footer") ?>
Layout file for checking if a specific language exists:
<?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") ?>
Layout file for showing languages and translators:
<?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->getAvailable("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 user
The class YellowUser
gives access to user settings. The following methods are available:
getModified
getSettings
getUser
getUserHtml
isExisting
isUser
remove
save
setUser
Description of methods and arguments:
user->save($fileName, $email, $settings): bool
Save user settings to file
user->remove($fileName, $email): bool
Remove user settings from file
user->setUser($key, $value, $email): void
Set user setting
user->getUser($key, $email = ""): string
Return user setting
user->getUserHtml($key, $email = ""): string
Return user setting, HTML encoded
user->getSettings($email = ""): array
Return user settings
user->getModified($httpFormat = false): int|string
Return user settings modification date, Unix time or HTTP format
user->isUser($key, $email = ""): bool
Check if user setting exists
user->isExisting($email): bool
Check if user exists
Layout file for showing current user:
<?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") ?>
Layout file for checking if a user is logged in:
<?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") ?>
Layout file for showing users and their status:
<?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->getAvailable("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 extension
The class YellowExtension
gives access to extensions. The following methods are available:
get
getModified
isExisting
Description of methods and arguments:
extension->get($key): object
Return extension
extension->getModified($httpFormat = false): int|string
Return extensions modification date, Unix time or HTTP format
extension->isExisting($key): bool
Check if extension exists
Layout file for showing extensions:
<?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") ?>
Layout file for checking if a specific extension exists:
<?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") ?>
Code for calling a function from another extension:
if ($this->yellow->extension->isExisting("image")) {
$fileName = "media/images/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 lookup
The class YellowLookup
gives access to lookup and normalisation methods. The following methods are available:
findContentLocationFromFile
findFileFromContentLocation
findFileFromMediaLocation
findMediaDirectory
findMediaLocationFromFile
getUrlInformation
isCommandLine
isContentFile
isFileLocation
isMediaFile
isSystemFile
isValidFile
normaliseArguments
normaliseData
normaliseHeaders
normaliseLocation
normaliseName
normalisePath
normaliseUrl
Description of methods and arguments:
lookup->findContentLocationFromFile($fileName): string
Return content location from file path
lookup->findFileFromContentLocation($location, $directory = false): string
Return file path from content location
lookup->findMediaLocationFromFile($fileName): string
Return media location from file path
lookup->findFileFromMediaLocation($location): string
Return file path from media location
lookup->findMediaDirectory($key): string
Return media directory from a system setting
lookup->normaliseName($text, $removePrefix = false, $removeExtension = false, $filterStrict = false): string
Normalise name
lookup->normaliseData($text, $type = "html", $filterStrict = true): string
Normalise elements and attributes in HTML/SVG data
lookup->normaliseHeaders($input, $type = "mime", $filterStrict = true): string
Normalise fields in MIME headers
lookup->normalisePath($text): string
Normalise relative path tokens
lookup->normaliseLocation($location, $pageLocation, $filterStrict = true): string
Normalise location, make absolute location
lookup->normaliseArguments($text, $appendSlash = true, $filterStrict = true): string
Normalise location arguments
lookup->normaliseUrl($scheme, $address, $base, $location, $filterStrict = true): string
Normalise URL, make absolute URL
lookup->getUrlInformation($url): string
Return URL information
lookup->isFileLocation($location): bool
Check if location is specifying file or directory
lookup->isValidFile($fileName): bool
Check if file is valid
lookup->isContentFile($fileName): bool
Check if content file
lookup->isMediaFile($fileName): bool
Check if media file
lookup->isSystemFile($fileName): bool
Check if system file
lookup->isCommandLine(): bool
Check if running at command line
Layout file for showing image paths:
<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<p>
<?php $pathInstall = $this->yellow->system->get("coreServerInstallDirectory") ?>
<?php $pathImages = $this->yellow->lookup->findMediaDirectory("coreImageLocation") ?>
<?php $pathThumbs = $this->yellow->lookup->findMediaDirectory("coreThumbnailLocation") ?>
<?php echo "Image files: ".htmlspecialchars($pathInstall.$pathImages)."<br />" ?>
<?php echo "Image thumbnails: ".htmlspecialchars($pathInstall.$pathThumbs)."<br />" ?>
</p>
</div>
</div>
<?php $this->yellow->layout("footer") ?>
Layout file for showing page type:
<?php $this->yellow->layout("header") ?>
<div class="content">
<div class="main" role="main">
<h1><?php echo $this->yellow->page->getHtml("titleContent") ?></h1>
<?php $fileLocation = $this->yellow->lookup->isFileLocation($this->yellow->page->location) ?>
<p>Page is <?php echo htmlspecialchars($fileLocation? "file" : "directory") ?>.</p>
</div>
</div>
<?php $this->yellow->layout("footer") ?>
Code for breaking up a URL:
if (!is_string_empty($url)) {
list($scheme, $address, $base) = $this->yellow->lookup->getUrlInformation($url);
echo "Found scheme:$scheme address:$address base:$base\n";
}
Yellow toolbox
The class YellowToolbox
gives access to toolbox with helper methods. The following methods are available:
appendFile
copyFile
createFile
createTextDescription
deleteDirectory
deleteFile
getCookie
getDirectoryEntries
getDirectoryEntriesRecursive
getFileModified
getFileType
getLocationArguments
getServer
getTextArguments
getTextLines
getTextList
log
mail
modifyFile
readFile
renameDirectory
renameFile
Description of methods and arguments:
toolbox->getCookie($key): string
Return browser cookie from from current HTTP request
toolbox->getServer($key): string
Return server argument from current HTTP request
toolbox->getLocationArguments(): string
Return location arguments from current HTTP request
toolbox->getDirectoryEntries($path, $regex = "/.*/", $sort = true, $directories = true, $includePath = true): array
Return files and directories
toolbox->getDirectoryEntriesRecursive($path, $regex = "/.*/", $sort = true, $directories = true, $levelMax = 0): array
Return files and directories recursively
toolbox->readFile($fileName, $sizeMax = 0): string
Read file, empty string if not found
toolbox->createFile($fileName, $fileData, $mkdir = false): bool
Create file
toolbox->appendFile($fileName, $fileData, $mkdir = false): bool
Append file
toolbox->copyFile($fileNameSource, $fileNameDestination, $mkdir = false): bool
Copy file
toolbox->renameFile($fileNameSource, $fileNameDestination, $mkdir = false): bool
Rename file
toolbox->renameDirectory($pathSource, $pathDestination, $mkdir = false): bool
Rename directory
toolbox->deleteFile($fileName, $pathTrash = ""): bool
Delete file
toolbox->deleteDirectory($path, $pathTrash = ""): bool
Delete directory
toolbox->modifyFile($fileName, $modified): bool
Set file/directory modification date, Unix time
toolbox->getFileModified($fileName): int
Return file/directory modification date, Unix time
toolbox->getFileType($fileName): string
Return file type
toolbox->getTextLines($text): array
Return lines from text, including newline
toolbox->getTextList($text, $separator, $size): array
Return array of specific size from text
toolbox->getTextArguments($text, $optional = "-", $sizeMin = 9): array
Return array of variable size from text, space separated
toolbox->createTextDescription($text, $lengthMax = 0, $removeHtml = true, $endMarker = "", $endMarkerText = ""): string
Create text description, with or without HTML
toolbox->mail($action, $headers, $message): bool
Send email message
toolbox->log($action, $message): void
Write information to log file
Code for reading text lines from file:
$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;
}
Code for showing files in a folder:
$path = $this->yellow->system->get("coreExtensionDirectory");
foreach ($this->yellow->toolbox->getDirectoryEntries($path, "/.*/", true, false) as $entry) {
echo "Found file $entry\n";
}
Code for changing text in multiple files:
$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->toolbox->log("error", "Can't write file '$entry'!");
}
}
Yellow page
The class YellowPage
gives access to a page and its page settings. The following methods are available:
error
get
getBase
getChildren
getChildrenRecursive
getContentHtml
getContentRaw
getDate
getDateFormatted
getDateFormattedHtml
getDateHtml
getDateRelative
getDateRelativeHtml
getExtraHtml
getHeader
getHtml
getLastModified
getLocation
getModified
getPage
getPages
getParent
getParentTop
getRequest
getRequestHtml
getSiblings
getStatusCode
getUrl
isActive
isAvailable
isCacheable
isError
isExisting
isHeader
isPage
isRequest
isVisible
set
status
Description of methods and arguments:
page->set($key, $value): void
Set page setting
page->get($key): string
Return page setting
page->getHtml($key): string
Return page setting, HTML encoded
page->getDate($key, $format = ""): string
Return page setting as language specific date
page->getDateHtml($key, $format = ""): string
Return page setting as language specific date, HTML encoded
page->getDateRelative($key, $format = "", $daysLimit = 30): string
Return page setting as language specific date, relative to today
page->getDateRelativeHtml($key, $format = "", $daysLimit = 30): string
Return page setting as language specific date, relative to today, HTML encoded
page->getDateFormatted($key, $format): string
Return page setting as date
page->getDateFormattedHtml($key, $format): string
Return page setting as date, HTML encoded
page->getContentRaw(): string
Return page content data, raw format
page->getContentHtml(): string
Return page content data, HTML encoded
page->getExtraHtml($name): string
Return page extra data, HTML encoded
page->getParent(): YellowPage|null
Return parent page, null if none
page->getParentTop($homeFallback = false): YellowPage|null
Return top-level parent page, null if none
page->getSiblings($showInvisible = false): YellowPageCollection
Return page collection with pages on the same level
page->getChildren($showInvisible = false): YellowPageCollection
Return page collection with child pages
page->getChildrenRecursive($showInvisible = false, $levelMax = 0): YellowPageCollection
Return page collection with child pages recursively
page->getPages($key): YellowPageCollection
Return page collection with additional pages
page->getPage($key): YellowPage
Return shared page
page->getUrl(): string
Return page URL
page->getBase($multiLanguage = false): string
Return page base
page->getLocation($absoluteLocation = false): string
Return page location
page->getRequest($key): string
Return page request argument
page->getRequestHtml($key): string
Return page request argument, HTML encoded
page->getHeader($key): string
Return page response header
page->getModified($httpFormat = false): int|string
Return page modification date, Unix time or HTTP format
page->getLastModified($httpFormat = false): int|string
Return last modification date, Unix time or HTTP format
page->getStatusCode($httpFormat = false): int|string
Return page status code, number or HTTP format
page->status($statusCode, $location = ""): void
Respond with status code, no page content
page->error($statusCode, $errorMessage = ""): void
Respond with error page
page->isAvailable(): bool
Check if page is available
page->isVisible(): bool
Check if page is visible
page->isActive(): bool
Check if page is within current HTTP request
page->isCacheable(): bool
Check if page is cacheable
page->isError(): bool
Check if page with error
page->isExisting($key): bool
Check if page setting exists
page->isRequest($key): bool
Check if request argument exists
page->isHeader($key): bool
Check if response header exists
page->isPage($key): bool
Check if shared page exists
Layout file for showing page content:
<?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->getContentHtml() ?>
</div>
</div>
<?php $this->yellow->layout("footer") ?>
Layout file for showing page content and author:
<?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->getContentHtml() ?>
</div>
</div>
<?php $this->yellow->layout("footer") ?>
Layout file for showing page content and modification date:
<?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->getContentHtml() ?>
</div>
</div>
<?php $this->yellow->layout("footer") ?>
Yellow page collection
The class YellowPageCollection
gives access to multiple pages. The following methods are available:
append
diff
filter
getFilter
getModified
getPageNext
getPagePrevious
getPaginationCount
getPaginationLocation
getPaginationNext
getPaginationNumber
getPaginationPrevious
group
intersect
isEmpty
isPagination
limit
match
merge
paginate
prepend
remove
reverse
shuffle
similar
sort
Description of methods and arguments:
pages->append($page): void
Append page to end of page collection
pages->prepend($page): void
Prepend page to start of page collection
pages->remove($page): YellowPageCollection
Remove page from page collection
pages->filter($key, $value, $exactMatch = true): YellowPageCollection
Filter page collection by page setting
pages->match($regex = "/.*/", $filterByLocation = true): YellowPageCollection
Filter page collection by location or file
pages->similar($page: YellowPageCollection
Sort page collection by settings similarity
pages->sort($key, $ascendingOrder = true): YellowPageCollection
Sort page collection by page setting
pages->group($key, $ascendingOrder = true, $format = ""): array
Group page collection by page setting, return array with multiple collections
pages->merge($input): YellowPageCollection
Calculate union, merge page collection
pages->intersect($input): YellowPageCollection
Calculate intersection, remove pages that are not present in another page collection
pages->diff($input): YellowPageCollection
Calculate difference, remove pages that are present in another page collection
pages->limit($pagesMax): YellowPageCollection
Limit the number of pages in page collection
pages->reverse(): YellowPageCollection
Reverse page collection
pages->shuffle(): YellowPageCollection
Randomize page collection
pages->paginate($limit): YellowPageCollection
Paginate page collection
pages->getPaginationNumber(): int
Return current page number in pagination
pages->getPaginationCount(): int
Return highest page number in pagination
pages->getPaginationLocation($absoluteLocation = true, $pageNumber = 1): string
Return location for a page in pagination
pages->getPaginationPrevious($absoluteLocation = true): string
Return location for previous page in pagination
pages->getPaginationNext($absoluteLocation = true): string
Return location for next page in pagination
pages->getPagePrevious($page): YellowPage|null
Return previous page in collection, null if none
pages->getPageNext($page): YellowPage|null
Return next page in collection, null if none
pages->getFilter(): string
Return current page filter
pages->getModified($httpFormat = false): int|string
Return page collection modification date, Unix time or HTTP format
pages->isPagination(): bool
Check if there is a pagination
pages->isEmpty(): bool
Check if page collection is empty
Layout file for showing three random pages:
<?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") ?>
Layout file for showing latest pages:
<?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") ?>
Layout file for showing latest pages with pagination:
<?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)->paginate(10) ?>
<?php $this->yellow->page->setLastModified($pages->getModified()) ?>
<ul>
<?php foreach ($pages as $page): ?>
<li><?php echo $page->getHtml("title") ?></li>
<?php endforeach ?>
</ul>
<?php $this->yellow->layout("pagination", $pages) ?>
</div>
</div>
<?php $this->yellow->layout("footer") ?>
Yellow string
The following functions extend PHP string functions and array functions:
is_array_empty
is_string_empty
strlenu
strposu
strrposu
strtoloweru
strtoupperu
substru
Description of functions and arguments:
strtoloweru($string): string
Make string lowercase, UTF-8 compatible
strtoupperu($string): string
Make string uppercase, UTF-8 compatible
strlenu($string): int
+ strlenb($string): int
Return string length, UTF-8 characters or bytes
strposu($string, $search): int|false
+ strposb($string, $search): int|false
Return string position of first match, UTF-8 characters or bytes
strrposu($string, $search): int|false
+ strrposb($string, $search): int|false
Return string position of last match, UTF-8 characters or bytes
substru($string, $start, $length): string
+ substrb($string, $start, $length): string
Return part of a string, UTF-8 characters or bytes
is_string_empty($string): bool
Check if string is empty
is_array_empty($array): bool
Check if array is empty
Code for converting strings:
$string = "For people and machines";
echo strtoloweru($string); // for people and machines
echo strtoupperu($string); // FOR PEOPLE AND MACHINES
Code for accessing strings:
$string = "Text with UTF-8 characters åäö";
echo strlenu($string); // 30
echo strposu($string, "UTF"); // 10
echo substru($string, -3, 3); // åäö
Code for checking if strings are empty:
var_dump(is_string_empty("")); // bool(true)
var_dump(is_string_empty("text")); // bool(false)
var_dump(is_string_empty("0")); // bool(false)
Code for checking if arrays are empty:
var_dump(is_array_empty(array())); // bool(true)
var_dump(is_array_empty(new ArrayObject())); // bool(true)
var_dump(is_array_empty(array("entry"))); // bool(false)
Events
With help of events the website informs you when something happens. First extensions are loaded and onLoad
will be called. As soon as all extensions are loaded onStartup
will be called. A request from the web browser can be handled with various events. In most cases the page content will be generated. If an error has occurred, an error page will be generated. Finally the page is output and onShutdown
will be called.
The following events are available:
onCommand
onCommandHelp
onEditContentFile
onEditMediaFile
onEditSystemFile
onEditUserAccount
onLoad
onLog
onMail
onParseContentHtml
onParseContentRaw
onParseContentShortcut
onParseMetaData
onParsePageExtra
onParsePageLayout
onParsePageOutput
onRequest
onShutdown
onStartup
onUpdate
Yellow core events
Yellow core events notify when a state has changed:
public function onLoad($yellow)
Handle initialisation
public function onStartup()
Handle startup
public function onRequest($scheme, $address, $base, $location, $fileName)
Handle request
public function onShutdown()
Handle shutdown
Extension for handling the initialisation:
<?php
class YellowExample {
const VERSION = "0.1.1";
public $yellow; // access to API
// Handle initialisation
public function onLoad($yellow) {
$this->yellow = $yellow;
}
}
Yellow parse events
Yellow parse events notify when a page is displayed:
public function onParseMetaData($page)
Handle page meta data
public function onParseContentRaw($page, $text)
Handle page content in raw format
public function onParseContentShortcut($page, $name, $text, $type)
Handle page content of shortcut
public function onParseContentHtml($page, $text)
Handle page content in HTML format
public function onParsePageLayout($page, $name)
Handle page layout
public function onParsePageExtra($page, $name)
Handle page extra data
public function onParsePageOutput($page, $text)
Handle page output data
Extension for creating a shortcut:
<?php
class YellowExample {
const VERSION = "0.1.2";
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;
}
}
Extension for creating a HTML header:
<?php
class YellowExample {
const VERSION = "0.1.3";
public $yellow; // access to API
// Handle initialisation
public function onLoad($yellow) {
$this->yellow = $yellow;
}
// Handle page extra data
public function onParsePageExtra($page, $name) {
$output = null;
if ($name=="header") {
$extensionLocation = $this->yellow->system->get("coreServerBase").$this->yellow->system->get("coreExtensionLocation");
$output = "<link rel=\"stylesheet\" type=\"text/css\" media=\"all\" href=\"{$extensionLocation}example.css\" />\n";
$output .= "<script type=\"text/javascript\" defer=\"defer\" src=\"{$extensionLocation}example.js\"></script>\n";
}
return $output;
}
}
Yellow edit events
Yellow edit events notify when a page is edited:
public function onEditContentFile($page, $action, $email)
Handle content file changes
public function onEditMediaFile($file, $action, $email)
Handle media file changes
public function onEditSystemFile($file, $action, $email)
Handle system file changes
public function onEditUserAccount($action, $email, $password)
Handle user account changes
Extension for handling content file changes:
<?php
class YellowExample {
const VERSION = "0.1.4";
public $yellow; // access to API
// Handle initialisation
public function onLoad($yellow) {
$this->yellow = $yellow;
}
// Handle content file changes
public function onEditContentFile($page, $action, $email) {
if ($action=="edit") {
$title = $page->get("title");
$name = $this->yellow->user->getUser("name", $email);
$this->yellow->toolbox->log("info", "Edit page by user '".strtok($name, " ")."'");
}
}
}
Extension for handling media file changes:
<?php
class YellowExample {
const VERSION = "0.1.5";
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"));
$name = $this->yellow->user->getUser("name", $email);
$this->yellow->toolbox->log("info", "Upload file by user '".strtok($name, " ")."'");
}
}
}
Yellow command events
Yellow command events notify when a command is executed:
public function onCommand($command, $text)
Handle command
public function onCommandHelp()
Handle command help
Extension for handling a command:
<?php
class YellowExample {
const VERSION = "0.1.6";
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";
}
}
Extension for handling multiple commands:
<?php
class YellowExample {
const VERSION = "0.1.7";
public $yellow; // access to API
// Handle initialisation
public function onLoad($yellow) {
$this->yellow = $yellow;
}
// Handle command
public function onCommand($command, $text) {
switch ($command) {
case "hello": $statusCode = $this->processCommandHello($command, $text); break;
case "goodbye": $statusCode = $this->processCommandGoodbye($command, $text); break;
default: $statusCode = 0;
}
return $statusCode;
}
// Handle command help
public function onCommandHelp() {
return array("hello [name]", "goodbye [name]");
}
// Handle command for hello
public function processCommandHello($command, $text) {
if (is_string_empty($text)) $text = "World";
echo "Hello $text\n";
return 200;
}
// Handle command for goodbye
public function processCommandGoodbye($command, $text) {
if (is_string_empty($text)) $text = "World";
echo "Goodbye $text\n";
return 200;
}
}
Yellow update events
Yellow update events notify when an update happens:
public function onUpdate($action)
Handle update
public function onMail($action, $headers, $message)
Handle email
public function onLog($action, $message)
Handle logging
Extension for handling an update event:
<?php
class YellowExample {
const VERSION = "0.1.8";
public $yellow; // access to API
// Handle initialisation
public function onLoad($yellow) {
$this->yellow = $yellow;
}
// Handle update
public function onUpdate($action) {
if ($action=="install") {
$this->yellow->toolbox->log("info", "Install event");
}
}
}
Extension for handling a daily event:
<?php
class YellowExample {
const VERSION = "0.1.9";
public $yellow; // access to API
// Handle initialisation
public function onLoad($yellow) {
$this->yellow = $yellow;
}
// Handle update
public function onUpdate($action) {
if ($action=="daily") {
$this->yellow->toolbox->log("info", "Daily event");
}
}
}
Related information
Do you have questions? Get help.