cx_require('lib', 'db.php');
cx_require('lib', 'setup.php');
-cx_require('third_party', 'parsedown', 'Parsedown.php');
+cx_require('lib', 'markdown.php');
-function mk_markdown($markdown) {
- static $Parsedown = new Parsedown();
+class PostMetadata {
+ public $hero_image;
+ public $hero_image_alt;
- return $Parsedown->text($markdown);
+ public function __construct($dict) {
+ $this->hero_image = isset($dict['post_hero_image']) ? $dict['post_hero_image'] : null;
+ $this->hero_image_alt = isset($dict['post_hero_image_alt']) ? $dict['post_hero_image_alt'] : null;
+ }
}
class Post {
$this->date = $dict['post_date'];
$this->is_draft = $dict['post_is_draft'];
$this->data = $dict['post_data'];
- $this->html_content = mk_markdown($this->data);
+ $this->html_content = cx_markdown_generate_html($this->data);
$this->html_excerpt = null;
// Read more...
$segments = explode('---', $this->data, 2);
if (count($segments) > 1) {
- $this->html_excerpt = mk_markdown($segments[0]);
+ $this->html_excerpt = cx_markdown_generate_html($segments[0]);
}
}
+
+ public function get_metadata() {
+ $data = [];
+
+ $doc = new DOMDocument();
+ $doc->loadHTML($this->html_content);
+
+ $image_tag = $doc->getElementsByTagName('img')[0];
+
+ if ($image_tag != null) {
+ $data['post_hero_image'] = $image_tag->getAttribute('src');
+ $data['post_hero_image_alt'] = htmlspecialchars($image_tag->getAttribute('alt'));
+ }
+
+ return new PostMetadata($data);
+ }
}
function cx_post_make_slug($title) {
cx_db_exec($sql, $post_id);
}
-function cx_posts_get(int $limit = 0, bool $include_drafts = false) {
+function cx_posts_get(int $limit = 0, int $offset = 0, bool $include_drafts = false) {
$sql = 'SELECT
post_id,
post_slug,
if ($limit > 0) {
$sql .= ' LIMIT ' . $limit;
}
+
+ if ($offset > 0) {
+ $sql .= ' OFFSET ' . $offset;
+ }
$sql .= ';';