Simple virtual page
Add an ad-hoc virtual page quickly via a simple route
Using Kirby's router, you can quickly create a new page from a route pattern:
<?php
return [
'routes' => [
[
'pattern' => 'virtual',
'action' => function () {
return Page::factory([
'slug' => 'virtual',
'template' => 'virtual',
'model' => 'virtual',
'content' => [
'title' => 'This is not a real page',
'date' => '2019-05-01',
'text' => 'The Big Oxmox advised her not to do so, because there were thousands of bad Commas, wild Question Marks and devious Semikoli, but the Little Blind Text didn’t listen.'
]
]);
}
]
]
];
Create a virtual.php
template to output the content of the virtual page:
<?php snippet('header') ?>
<main>
<article class="note">
<header class="note-header intro">
<h1><?= $page->title() ?></h1>
<time class="note-date"><?= $page->date()->toDate('d F Y') ?></time>
</header>
<div class="note-text text">
<?= $page->text()->kt() ?>
</div>
</article>
</main>
<?php snippet('footer') ?>
If you now open http://yourdomain.com/virtual
in the browser, you will see the new page.
It's also possible to create a multi-language version of this page, by adding the translations
array with the content for every language version.
<?php
return [
'languages' => true,
'routes' => [
[
'pattern' => '(de|en)/virtual',
'action' => function ($lang) {
$data = [
'slug' => 'virtual',
'parent' => page('notes'),
'template' => 'default',
'num' => '20190501',
'translations' => [
'en' => [
'code' => 'en',
'content' => [
'title' => 'This is not a real page',
'date' => '2019-05-01',
'text' => 'The Big Oxmox advised her not to do so, because there were thousands of bad Commas, wild Question Marks and devious Semikoli, but the Little Blind Text didn’t listen.'
]
],
'de' => [
'code' => 'de',
'content' => [
'title' => 'Das ist keine Seite',
'date' => '2019-05-01',
'text' => 'Weit hinten, hinter den Wortbergen, fern der Länder Vokalien und Konsonantien leben die Blindtexte. Abgeschieden wohnen sie in Buchstabhausen an der Küste des Semantik, eines großen Sprachozeans.'
]
]
],
];
$page = Page::factory($data);
site()->visit($page, $lang);
return $page;
}
]
]
];
These hard coded examples are not that useful yet, but they should already give you an idea how the factory
method helps us to create pages from whatever content we pass to it.