Update Composer packages
This commit is contained in:
parent
67c3d8b307
commit
83cb211fe6
219 changed files with 6487 additions and 4444 deletions
123
kirby/src/Template/Slot.php
Normal file
123
kirby/src/Template/Slot.php
Normal file
|
@ -0,0 +1,123 @@
|
|||
<?php
|
||||
|
||||
namespace Kirby\Template;
|
||||
|
||||
use Kirby\Exception\LogicException;
|
||||
|
||||
/**
|
||||
* The slot class catches all content
|
||||
* between the beginning and the end of
|
||||
* a slot. Slot content is then stored
|
||||
* in the Slots collection.
|
||||
*
|
||||
* @package Kirby Template
|
||||
* @author Bastian Allgeier <bastian@getkirby.com>
|
||||
* @link https://getkirby.com
|
||||
* @copyright Bastian Allgeier
|
||||
* @license https://getkirby.com/license
|
||||
*/
|
||||
class Slot
|
||||
{
|
||||
/**
|
||||
* The captured slot content
|
||||
* @internal
|
||||
*/
|
||||
public string|null $content;
|
||||
|
||||
/**
|
||||
* The name that was declared during
|
||||
* the definition of the slot
|
||||
*/
|
||||
protected string $name;
|
||||
|
||||
/**
|
||||
* Keeps track of the slot state
|
||||
*/
|
||||
protected bool $open = false;
|
||||
|
||||
/**
|
||||
* Creates a new slot
|
||||
*/
|
||||
public function __construct(string $name, string|null $content = null)
|
||||
{
|
||||
$this->name = $name;
|
||||
$this->content = $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the slot content or an empty string
|
||||
* if the slot is empty.
|
||||
*/
|
||||
public function __toString(): string
|
||||
{
|
||||
return $this->render() ?? '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Used in the slot helper
|
||||
*/
|
||||
public static function begin(string $name = 'default'): static|null
|
||||
{
|
||||
return Snippet::$current?->slot($name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Closes a slot and catches all the content
|
||||
* that has been printed since the slot has
|
||||
* been opened
|
||||
*/
|
||||
public function close(): void
|
||||
{
|
||||
if ($this->open === false) {
|
||||
throw new LogicException('The slot has not been opened');
|
||||
}
|
||||
|
||||
$this->content = ob_get_clean();
|
||||
$this->open = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used in the endslot() helper
|
||||
*/
|
||||
public static function end(): void
|
||||
{
|
||||
Snippet::$current?->endslot();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the slot is currently
|
||||
* open and being buffered
|
||||
*/
|
||||
public function isOpen(): bool
|
||||
{
|
||||
return $this->open;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the slot name
|
||||
*/
|
||||
public function name(): string
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Opens the slot and starts
|
||||
* output buffering
|
||||
*/
|
||||
public function open(): void
|
||||
{
|
||||
$this->open = true;
|
||||
|
||||
// capture the output
|
||||
ob_start();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the slot content
|
||||
*/
|
||||
public function render(): string|null
|
||||
{
|
||||
return $this->content;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue