personal-website/docs/www/blog/index.php

111 lines
2.5 KiB
PHP
Executable file

<?php
$COMMONS = $_SERVER['DOCUMENT_ROOT'] . "/../common";
include_once($COMMONS."/header.php");
display_header("Blogs");
/**
* Display a blog-preview div
*/
function display_blog_preview($blogpost_id, $title, $abstract,
$date_posted, $tags){
printf("
<div class=\"blog-preview\">
<a href=\"http://www.zdenekborovec-dev.cz/blog/article?guid=%s\">
<h3>
%s
</h3>
</a>
<div class=\"blog-metadata\">
", $blogpost_id, $title);
for($i = 0; $i < count($tags); $i++) {
$tag = $tags[$i];
printf("
<span class=\"blog-tag\" style=\"background-color: %s\">
%s
</span>", $tag["color"], $tag["name"]);
}
printf("
<span class=\"blog-publish-date\">
Published on: %s
</span>
</div>
<p>
%s
</p>
</div>
", date("Y-m-d", strtotime($date_posted)), $abstract);
}
/**
* Select all the blogposts from the database, their tags, then display them.
*/
function display_blog_previews(){
// Access global variables
global $conn;
// Check DB connection
if($conn == null){
printf("
<article>
<h1>Failed DB connection, cannot proceed!</h1>
If you see this error in production,
please shoot me an email with helpful details.
</article>");
return;
}
// Prepare statement for selecting all the blogposts
$stmt = $conn->prepare("SELECT blogpost_id, title, abstract, date_posted
FROM blogposts ORDER BY date_posted DESC;");
// Execute the statement
$stmt->execute();
// Fetch the blogposts
$blogposts_arr = $stmt->fetchall(PDO::FETCH_ASSOC);
// Prepare new statement for selecting the tags for a given blogpost
$stmt = $conn->prepare("SELECT name, color FROM
blogpost_tags INNER JOIN blogpost_has_tag ON
blogpost_tags.tag_id = blogpost_has_tag.tag_id WHERE
blogpost_id = :blogpost_id;");
// Go through all the blogposts, fetch their tags and display them
for($i = 0; $i < count($blogposts_arr); $i++) {
// Get info for the current blog
$blog = $blogposts_arr[$i];
// Bind and execute the tag select
$stmt->bindParam(":blogpost_id", $blog["blogpost_id"]);
$stmt->execute();
// Fetch the tags
$tags_arr = $stmt->fetchall(PDO::FETCH_ASSOC);
// Display the blog
display_blog_preview($blog["blogpost_id"], $blog["title"],
$blog["abstract"], $blog["date_posted"], $tags_arr);
}
}
?>
<article>
<h2>
My blogposts
</h2>
<p>
These can range from well thought out slow-burning blood-churning gems
to random brain farts in textual form, you can use tags to filter.
</p>
</article>
<hr>
<?php
display_blog_previews();
include_once($COMMONS."/footer.php");
?>