From 47e77f9fac1155c536b2b87fec552c7fcce66fa6 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Mon, 01 Jun 2026 18:06:34 +0000
Subject: [PATCH] =Timeline block fixes. Next up: adding article schema classes
---
inc/blocks/TimelineBlock.php | 70 ++++++++++++++++++++--------------
1 files changed, 41 insertions(+), 29 deletions(-)
diff --git a/inc/blocks/TimelineBlock.php b/inc/blocks/TimelineBlock.php
index 90cf469..3f2666c 100644
--- a/inc/blocks/TimelineBlock.php
+++ b/inc/blocks/TimelineBlock.php
@@ -1,12 +1,11 @@
<?php
namespace JVBase\blocks;
-use JVBase\managers\CacheManager;
-use JVBase\forms\TaxonomySelector;
-use JVBase\meta\MetaManager;
-use JVBase\utility\Features;
+use JVBase\managers\Cache;
+use JVBase\meta\Meta;
+use JVBase\registrar\Registrar;
+use JVBase\base\Site;
use WP_Block;
-use WP_Query;
if (!defined('ABSPATH')) {
exit; // Exit if accessed directly
@@ -14,7 +13,7 @@
class TimelineBlock
{
- protected CacheManager $cache;
+ protected Cache $cache;
protected string $config;
protected string $type;
protected string $path = JVB_DIR . '/build/timeline';
@@ -31,12 +30,12 @@
public function __construct()
{
- $this->cache = CacheManager::for('timelines', WEEK_IN_SECONDS)->connectTo('post', 'timeline');
+ $this->cache = Cache::for('timelines', WEEK_IN_SECONDS)->connect('post');
if (JVB_TESTING){
- $this->cache->clear();
+ $this->cache->flush();
}
add_action('init', [ $this, 'registerBlock' ]);
- add_action('wp_footer', 'jvbRenderGallery');
+ add_action('wp_footer', [$this, 'renderGallery']);
}
public function registerBlock()
@@ -49,7 +48,8 @@
public function render(array $attributes, string $content, WP_Block $block)
{
global $post;
- if (!$post || !Features::forContent(jvbNoBase($post->post_type))->has('is_timeline') ) {
+ $registrar = Registrar::getInstance($post->post_type);
+ if (!$post || !$registrar || !$registrar->hasFeature('is_timeline') ) {
return '';
}
$this->parentID = $post->ID;
@@ -79,6 +79,9 @@
{
$this->renderHeader();
$this->renderTimeline();
+ ?>
+ <ul class="buttons"><li><a href="<?= get_post_type_archive_link(BASE.$this->content) ?>">See All Before & Afters</a></li></ul>
+ <?php
}
protected function get_field(string $fieldName, array $fields) {
@@ -89,7 +92,7 @@
}
protected function renderHeader():void
{
- $meta = new MetaManager($this->parentID, 'post');
+ $meta = Meta::forPost($this->parentID);
$sharedFields = JVB()->routes('content')->getTimelineSharedFields($this->content);
$fields = $meta->getAll($sharedFields);
$extra = $meta->getAll();
@@ -102,15 +105,15 @@
if ($value === '' || $slug === 'person') {
continue;
}
- $config = JVB_TAXONOMY[$slug];
+ $registrar = Registrar::getInstance($slug);
$taxSlug = jvbCheckBase($slug);
$terms = get_the_terms($this->parentID, $taxSlug);
if ($terms && !is_wp_error($terms)) {
$many = count($terms) > 1;
?>
<li class="<?=$slug?>">
- <span title="<?= $config['singular']?>" class="term tldr" data-short="" data-long="<?= $config['singular']?>">
- <?=jvbIcon($config['icon']??jvbDefaultIcon())?>
+ <span title="<?= $registrar->getSingular()?>" class="term tldr" data-short="" data-long="<?= $registrar->getSingular()?>">
+ <?=jvbIcon($registrar->getIcon())?>
<span></span>
</span>
<?php
@@ -122,7 +125,7 @@
?>
<?= $open ?>
- <a href="<?=$link?>" rel="tag"><?=$term->name?></a>
+ <a href="<?=$link?>" rel="tag"><?=html_entity_decode($term->name)?></a>
<?= $close ?>
<?php }
if ($many) { echo '</ul>'; }
@@ -133,17 +136,8 @@
}
?>
</ul>
+ <ul class="buttons"><li><a href="<?= get_post_type_archive_link(BASE.$this->content) ?>">See All Before & Afters</a></li></ul>
</header>
- <section id="at-a-glance" class="row nowrap">
- <div class="before">
- <h3>Before</h3>
- <?= jvbFormatImage(get_post_thumbnail_id($this->parentID), 'tiny', 'large', false) ?>
- </div>
- <div class="after">
- <h3>After <?=$this->total?> Treatment<?= $this->total > 1 ? 's' : '' ?></h3>
- <?= jvbFormatImage(get_post_thumbnail_id($this->children[count($this->children)-1]), 'tiny', 'large', false) ?>
- </div>
- </section>
<section id="info">
<?php
$content = $this->get_field('post_content', $extra);
@@ -152,6 +146,18 @@
}
?>
</section>
+ <section id="at-a-glance" class="row nowrap">
+ <div class="before">
+ <h3>Before</h3>
+ <?= jvbFormatImage(get_post_thumbnail_id($this->parentID), 'tiny', 'large', false) ?>
+ </div>
+ <div class="after">
+ <?php if (!empty($this->children)) :?>
+ <h3>After <?=$this->total?> Treatment<?= $this->total > 1 ? 's' : '' ?></h3>
+ <?= jvbFormatImage(get_post_thumbnail_id($this->children[count($this->children)-1]), 'tiny', 'large', false) ?>
+ <?php endif; ?>
+ </div>
+ </section>
<?php
}
@@ -174,18 +180,18 @@
$uniqueFields = JVB()->routes('content')->getTimelineUniqueFields($this->content);
foreach ($all as $i => $ID) {
- $meta = new MetaManager($ID, 'post');
+ $meta = Meta::forPost($ID);
$fields = $meta->getAll($uniqueFields);
$plural = ($i>1) ? 's': '';
$title = ($i === 0) ? 'Before Laser Tattoo Removal' : 'After '.$i.' Treatment'.$plural;
$title = ($i > 0 && !str_contains('Treatment', $fields['post_title'])) ? $fields['post_title'] : $title;
?>
- <section id="<?= $i === 0 ? 'before-treatment' : 'treatment-'.$i ?>" class="timeline-point row a-start nowrap">
+ <section id="<?= $i === 0 ? 'before-treatment' : 'treatment-'.$i ?>" class="timeline-point row top nowrap">
<?php
$img = $this->get_field('post_thumbnail', $fields);
if (is_int($img)) {
- echo jvbFormatImage($img);
+ echo str_replace('<img', '<img data-caption=".info header"', jvbFormatImage($img));
}
?>
<div class="info">
@@ -219,11 +225,17 @@
return '';
}
$out = '<ul class="term-list">';
+ $registrar = Registrar::getInstance('timeline');
foreach ($timeline as $term) {
$link = get_term_link($term->term_id, BASE.'timeline');
- $out .= '<li><a href="'.$link.'" rel="tag" title="See more progressions at this timeline">'.jvbIcon(JVB_TAXONOMY['timeline']['icon']??'hourglass').$term->name.'</a><small>from the last treatment</small></li>';
+ $out .= '<li><small><a href="'.$link.'" rel="tag" title="See more progressions at this timeline">'.jvbIcon($registrar->getIcon('hourglass')).html_entity_decode($term->name).'</a> after the treatment</small></li>';
}
$out .='</ul>';
return $out;
}
+
+ public function renderGallery():void
+ {
+ jvbRenderGallery(true);
+ }
}
--
Gitblit v1.10.0