Files
tcms/app/View.php
T
2026-07-04 19:41:44 -04:00

55 lines
1.5 KiB
PHP

<?php
declare(strict_types=1);
namespace NeonBlog;
final class View
{
public static function e(mixed $value): string
{
return htmlspecialchars((string) $value, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
}
/** @param array<string, mixed> $query */
public static function url(string $path = '', array $query = []): string
{
$path = '/' . ltrim($path, '/');
if ($path !== '/' && str_ends_with($path, '/')) {
$path = rtrim($path, '/');
}
return $query === [] ? $path : $path . '?' . http_build_query($query);
}
/** @param array<string, mixed> $item */
public static function itemUrl(array $item): string
{
$slug = (string) ($item['slug'] ?? '');
return ($item['type'] ?? 'post') === 'page'
? self::url($slug)
: self::url('post/' . $slug);
}
public static function asset(string $path): string
{
return self::url('themes/neon/assets/' . ltrim($path, '/'));
}
public static function date(string $iso, string $format = 'M j, Y'): string
{
$time = strtotime($iso);
return $time ? date($format, $time) : $iso;
}
public static function month(string $yearMonth): string
{
$time = strtotime($yearMonth . '-01');
return $time ? date('F Y', $time) : $yearMonth;
}
public static function classIf(bool $condition, string $class): string
{
return $condition ? ' ' . $class : '';
}
}