= htmlspecialchars($post['title']) ?>
= htmlspecialchars($post['summary']) ?>
query("SELECT id, name, slug FROM categories WHERE status = 1 ORDER BY name ASC")->fetchAll();
$query_parts = "
FROM posts p
LEFT JOIN categories c ON p.category_id = c.id
LEFT JOIN users u ON p.author_id = u.id
WHERE p.status = 'published'
";
$params = [];
if (!empty($search_query)) {
$query_parts .= " AND (p.title LIKE :query OR p.content LIKE :query)";
$params[':query'] = "%{$search_query}%";
}
if (!empty($filter_category_slug)) {
$query_parts .= " AND c.slug = :cat_slug";
$params[':cat_slug'] = $filter_category_slug;
}
$count_stmt = $conn->prepare("SELECT COUNT(*) " . $query_parts);
$count_stmt->execute($params);
$total_results = $count_stmt->fetchColumn();
$total_pages = ceil($total_results / $limit);
$sql = "
SELECT p.*, c.name as category_name, c.slug as category_slug, u.name as author_name
" . $query_parts . "
ORDER BY p.published_at DESC
LIMIT :limit OFFSET :offset
";
$stmt = $conn->prepare($sql);
$stmt->bindValue(':limit', $limit, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
foreach ($params as $key => $val) {
$stmt->bindValue($key, $val);
}
$stmt->execute();
$results = $stmt->fetchAll();
function get_search_pagination_url($page)
{
$qs = $_GET;
$qs['page'] = $page;
return BASE_URL . "/search?" . http_build_query($qs);
}
$page_title = $search_query ? "Search: " . $search_query : "Search Articles";
require_once 'layouts/header.php';
?>
Found = number_format($total_results) ?> results
for "= htmlspecialchars($search_query) ?>"
= htmlspecialchars($post['summary']) ?>
We couldn't find any articles for "= htmlspecialchars($search_query) ?>". Try different keywords or check your spelling.
Search Results
= htmlspecialchars($post['title']) ?>
No matches found