'; } // Static Sitemap file path if ($wantsSitemap) { $sitemapFolder = ''; $sitemapFilename = 'sitemap.xml' !== '' ? 'sitemap.xml' : 'sitemap.xml'; // Get the current script's directory as base for relative paths $currentScriptDir = dirname($_SERVER['SCRIPT_FILENAME']); // If no folder selected, use current page directory if (empty($sitemapFolder)) { $absoluteSitemapDir = $currentScriptDir; } else { // Resolve relative path (e.g., "../") from current script directory $absoluteSitemapDir = realpath($currentScriptDir . '/' . $sitemapFolder); if ($absoluteSitemapDir === false) { // Directory doesn't exist yet, construct the path manually $absoluteSitemapDir = $currentScriptDir . '/' . $sitemapFolder; } } $absoluteSitemapPath = rtrim($absoluteSitemapDir, '/') . '/' . $sitemapFilename; // Calculate the web-accessible path from document root $sitemapFilePath = str_replace($_SERVER['DOCUMENT_ROOT'], '', $absoluteSitemapPath); echo ''; } })(); ?>
Faltplan.mp4
is_array($_GET['tags'] ?? '') ? $_GET['tags'] : array_filter(array_map('trim', explode(',', $_GET['tags'] ?? ''))), default => array_filter(array_map('trim', explode(',', ''))) }; if (!empty($tags)) { $filters['tags'] = implode(',', $tags); } } // Author filtering $filterAuthor = "all"; if ($filterAuthor !== 'all') { $author = match ($filterAuthor) { 'url' => is_array($_GET['author'] ?? '') ? $_GET['author'] : array_filter(array_map('trim', explode(',', $_GET['author'] ?? ''))), default => array_filter(array_map('trim', explode(',', ''))) }; if (!empty($author)) { $filters['author'] = implode(',', $author); } } // Featured filtering $filterFeatured = "all"; if ($filterFeatured !== 'all') { $filters['featured'] = $filterFeatured === 'true' ? 'true' : 'false'; } // Status filtering $filterStatus = "published"; if ($filterStatus !== 'all') { $filters['status'] = $filterStatus; } else { $filters['status'] = 'published'; // Default to published only } // Date filtering - handled via API query parameters $filterDate = "past"; if ($filterDate === 'past') { $filters['date_before'] = date('Y-m-d H:i:s'); } elseif ($filterDate === 'future') { $filters['date_after'] = date('Y-m-d H:i:s'); } $orderBy = "date"; $orderDirection = "desc"; // Build collection query using fluent API with URL configuration $ECMS_options = [ 'resources' => [ 'path' => 'resources' ] ]; $query = cms($ECMS_options)->collection($collectionPath) ->pagePath($pagePath) ->tagPagePath('') ->authorPagePath('') ->prettyUrls($prettyUrls) ->orderBy($orderBy, $orderDirection) ->offset($paginationOffset); // Generate static RSS file if enabled $rssURL = null; $sitemapURL = null; if ('false' === 'true') { $rssFolder = ''; $rssFilename = 'feed.xml' !== '' ? 'feed.xml' : 'feed.xml'; // Get the current script's directory as base for relative paths $currentScriptDir = dirname($_SERVER['SCRIPT_FILENAME']); // If no folder selected, use current page directory if (empty($rssFolder)) { $absoluteRssDir = $currentScriptDir; } else { // Resolve relative path (e.g., "../") from current script directory $absoluteRssDir = realpath($currentScriptDir . '/' . $rssFolder); if ($absoluteRssDir === false) { // Directory doesn't exist yet, construct the path manually $absoluteRssDir = $currentScriptDir . '/' . $rssFolder; } } $absoluteRssPath = rtrim($absoluteRssDir, '/') . '/' . $rssFilename; // Calculate the web-accessible relative path from document root $rssRelativePath = str_replace($_SERVER['DOCUMENT_ROOT'], '', $absoluteRssPath); // Time-based cache expiration (24 hours = 86400 seconds) $rssCacheMaxAge = 86400; $needsRegeneration = false; // Force regeneration via query param: ?regenerate_rss=1 $forceRegenerate = isset($_GET['regenerate_rss']); if ($forceRegenerate) { $needsRegeneration = true; } elseif (!file_exists($absoluteRssPath)) { $needsRegeneration = true; } else { // Check if file is older than max age $fileAge = time() - filemtime($absoluteRssPath); if ($fileAge > $rssCacheMaxAge) { $needsRegeneration = true; } } if ($needsRegeneration) { // Generate RSS content using the query builder $rssContent = $query->limit(20)->rss( '3dG Website - ', 'RSS feed for ', 'https://3dgrafik.info' ); // Ensure directory exists $rssDir = dirname($absoluteRssPath); if (!is_dir($rssDir)) { mkdir($rssDir, 0755, true); } file_put_contents($absoluteRssPath, $rssContent); } $rssURL = $rssRelativePath; } if ('false' === 'true') { $sitemapFolder = ''; $sitemapFilename = 'sitemap.xml' !== '' ? 'sitemap.xml' : 'sitemap.xml'; // Get the current script's directory as base for relative paths $currentScriptDir = dirname($_SERVER['SCRIPT_FILENAME']); // If no folder selected, use current page directory if (empty($sitemapFolder)) { $absoluteSitemapDir = $currentScriptDir; } else { // Resolve relative path (e.g., "../") from current script directory $absoluteSitemapDir = realpath($currentScriptDir . '/' . $sitemapFolder); if ($absoluteSitemapDir === false) { // Directory doesn't exist yet, construct the path manually $absoluteSitemapDir = $currentScriptDir . '/' . $sitemapFolder; } } $absoluteSitemapPath = rtrim($absoluteSitemapDir, '/') . '/' . $sitemapFilename; // Calculate the web-accessible relative path from document root $sitemapRelativePath = str_replace($_SERVER['DOCUMENT_ROOT'], '', $absoluteSitemapPath); // Time-based cache expiration (24 hours = 86400 seconds) $sitemapCacheMaxAge = 86400; $needsSitemapRegeneration = false; // Force regeneration via query param: ?regenerate_sitemap=1 $forceSitemapRegenerate = isset($_GET['regenerate_sitemap']); if ($forceSitemapRegenerate) { $needsSitemapRegeneration = true; } elseif (!file_exists($absoluteSitemapPath)) { $needsSitemapRegeneration = true; } else { // Check if file is older than max age $sitemapFileAge = time() - filemtime($absoluteSitemapPath); if ($sitemapFileAge > $sitemapCacheMaxAge) { $needsSitemapRegeneration = true; } } if ($needsSitemapRegeneration) { // Generate sitemap content using the query builder $sitemapContent = $query->limit(1000)->sitemap('https://3dgrafik.info'); // Ensure directory exists $sitemapDir = dirname($absoluteSitemapPath); if (!is_dir($sitemapDir)) { mkdir($sitemapDir, 0755, true); } file_put_contents($absoluteSitemapPath, $sitemapContent); } $sitemapURL = $sitemapRelativePath; } // Apply all filters foreach ($filters as $key => $value) { switch ($key) { case 'tags': $query = $query->tags($value); break; case 'author': $query = $query->author($value); break; case 'featured': $query = $query->featured($value === 'true'); break; case 'status': $query = $query->status($value); break; case 'date_before': $query = $query->before($value); break; case 'date_after': $query = $query->after($value); break; } } // Execute query with pagination try { $collection = $query ->paginate($currentPage, $itemsPerPage) ->get(); $items = $collection->items; $pagination = $collection->pagination; } catch (Exception $e) { $items = []; $pagination = (object) [ 'current_page' => 1, 'total_pages' => 1, 'total_items' => 0, 'items_per_page' => $itemsPerPage, 'has_prev' => false, 'has_next' => false ]; } // Create collection-like object for backward compatibility $collectionObj = new class($items, $pagination, $rssURL, $sitemapURL) { public $items; public $pagination; public $rssURL; public $sitemapURL; public function __construct($items, $pagination, $rssURL, $sitemapURL) { $this->items = $items; $this->pagination = $pagination; $this->rssURL = $rssURL; $this->sitemapURL = $sitemapURL; } public function each($callback) { foreach ($this->items as $item) { $callback($item); } } }; // Collection data is now available in template scope $collection = $collectionObj; ?> $collection->pagination, 'items' => $collection->items, 'collection' => $collection, 'filters' => $filters, 'orderBy' => $orderBy, 'orderDirection' => $orderDirection, 'collectionPath' => $collectionPath, 'pagePath' => $pagePath, 'itemsPerPage' => $itemsPerPage, 'paginationOffset' => $paginationOffset, 'prettyUrls' => $prettyUrls, 'collectionItemTemplateId' => $collectionItemTemplateId ?? null ]); ?>
each(function ($item) use ($collection, $collectionItemTemplate, $filters, $orderBy, $orderDirection, $collectionPath, $pagePath, $itemsPerPage, $paginationOffset, $prettyUrls, $collectionItemTemplateId) { echo renderTemplate($collectionItemTemplate, [ 'item' => $item, 'collection' => $collection, 'filters' => $filters, 'orderBy' => $orderBy, 'orderDirection' => $orderDirection, 'collectionPath' => $collectionPath, 'pagePath' => $pagePath, 'itemsPerPage' => $itemsPerPage, 'paginationOffset' => $paginationOffset, 'prettyUrls' => $prettyUrls, 'collectionItemTemplateId' => $collectionItemTemplateId ]); }); // Output the template for use in frontend Alpine components echo ''; ?>
$collection->pagination, 'items' => $collection->items, 'collection' => $collection, 'filters' => $filters, 'orderBy' => $orderBy, 'orderDirection' => $orderDirection, 'collectionPath' => $collectionPath, 'pagePath' => $pagePath, 'itemsPerPage' => $itemsPerPage, 'paginationOffset' => $paginationOffset, 'prettyUrls' => $prettyUrls, 'collectionItemTemplateId' => $collectionItemTemplateId ]); ?>