You've already forked framexEngine-pro
153 lines
4.2 KiB
PHP
153 lines
4.2 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Enhanced version with additional features
|
|
* usage:
|
|
* echo asset('css/style.css');
|
|
* asset('js/plugins.js', ['prefix' => 'framex', 'hash' => true])
|
|
* echo asset('js/app.js', ['absolute' => true, 'hash' => true]);
|
|
* echo asset('images/logo.png', ['fallback' => '/images/default-logo.png']);
|
|
*/
|
|
function asset($path, $options = []) {
|
|
// Default options
|
|
$defaults = [
|
|
'absolute' => false,
|
|
'fallback' => null, // Fallback URL if file doesn't exist
|
|
'prefix' => 'v', // Version parameter prefix
|
|
'hash' => false // Use file hash instead of timestamp
|
|
];
|
|
|
|
$options = array_merge($defaults, $options);
|
|
|
|
// Remove leading slash
|
|
$path = ltrim($path, '/');
|
|
|
|
$documentRoot = $_SERVER['DOCUMENT_ROOT'];
|
|
$fullPath = $documentRoot . '/' . $path;
|
|
|
|
// Generate version parameter
|
|
$version = '';
|
|
if (file_exists($fullPath)) {
|
|
if ($options['hash']) {
|
|
// Use file hash (more reliable for cache busting)
|
|
$version = '?' . $options['prefix'] . '=' . substr(md5_file($fullPath), 0, 8);
|
|
} else {
|
|
// Use modification time
|
|
$version = '?' . $options['prefix'] . '=' . filemtime($fullPath);
|
|
}
|
|
} elseif ($options['fallback']) {
|
|
// Return fallback URL if provided
|
|
return $options['fallback'];
|
|
} else {
|
|
error_log("Asset not found: " . $fullPath);
|
|
}
|
|
|
|
// Build URL
|
|
if ($options['absolute']) {
|
|
$protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http';
|
|
$host = $_SERVER['HTTP_HOST'];
|
|
return $protocol . '://' . $host . '/' . $path . $version;
|
|
} else {
|
|
return '/' . $path . $version;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* Get Partials
|
|
*
|
|
* @param string $name The name of the partial to include.
|
|
* @throws Exception If the partial does not exist.
|
|
*/
|
|
function partial(string $name): void {
|
|
$path = TEMPLATES . '/partials/' . $name . '.php';
|
|
if (file_exists($path)) {
|
|
include $path;
|
|
} else {
|
|
throw new Exception("Partial '{$name}' doesn't exist");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function codeBlock($code, $language = 'php') {
|
|
// 1. Convert special characters to HTML entities to prevent execution/bugs
|
|
$safe_code = htmlspecialchars($code, ENT_QUOTES, 'UTF-8');
|
|
|
|
// 2. Wrap in <pre> and <code> tags with the appropriate class
|
|
$output = '<pre class="line-numbers rounded"><code class=" code-font language-' . $language . '">';
|
|
$output .= $safe_code;
|
|
$output .= '</code></pre>';
|
|
|
|
return $output;
|
|
}
|
|
|
|
|
|
/**
|
|
* Pre Helper
|
|
*
|
|
* @param mixed $array The data to print.
|
|
* @param bool|null $die Whether to stop execution after printing.
|
|
* @param bool $report Whether to echo the data directly.
|
|
*/
|
|
function pre($array, ?bool $die = null, bool $report = false): void {
|
|
if ($report) {
|
|
echo $array;
|
|
}
|
|
echo '<pre>' . print_r($array, true) . '</pre>';
|
|
if ($die) {
|
|
die();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get Random Image
|
|
*
|
|
* @param int $width The width of the image.
|
|
* @param int $height The height of the image.
|
|
* @return string The URL of the random image.
|
|
*/
|
|
function image(int $width = 960, int $height = 576): string {
|
|
return 'https://picsum.photos/' . $width . '/' . $height . '?v=' . rand();
|
|
}
|
|
|
|
/**
|
|
* Sanitize Input
|
|
*
|
|
* @param string $data The data to sanitize.
|
|
* @return string The sanitized data.
|
|
*/
|
|
function e(string $data): string {
|
|
return htmlspecialchars($data, ENT_QUOTES, 'UTF-8');
|
|
}
|
|
|
|
/**
|
|
* Summarize Text
|
|
*
|
|
* @param string $text The text to summarize.
|
|
* @param int $maxLength The maximum length of the summary.
|
|
* @return string The summarized text.
|
|
*/
|
|
function summarize(string $text, int $maxLength = 100): string {
|
|
if (strlen($text) <= $maxLength) {
|
|
return $text;
|
|
}
|
|
$summary = substr($text, 0, $maxLength);
|
|
return $summary . '...';
|
|
}
|
|
|
|
function urlSlug($value, $transliteration = true)
|
|
{
|
|
if (extension_loaded('intl') && $transliteration == true) {
|
|
$transliterator = \Transliterator::create('Any-Latin; Latin-ASCII');
|
|
$value = $transliterator->transliterate($value);
|
|
}
|
|
$slug = html_entity_decode($value, ENT_QUOTES, 'UTF-8');
|
|
$slug = preg_replace('~[^\pL\d]+~u', '-', $slug);
|
|
$slug = trim($slug, '-');
|
|
$slug = strtolower($slug);
|
|
return $slug;
|
|
}
|
|
|