Snapshots the project at the end of session 2, just before resetting to a Bricks-first orthodox architecture. RESTART-PLAN.md at the root explains why this approach is being abandoned and what the next session will look like. Why we restart - Three architectures got stacked: Custom PHP Templates → Gutenberg blocks in post_content → Bricks data in post meta. Each layer fights the next. - Bricks Builder UI does not load because our header.php / footer.php / page.php emit chrome that conflicts with Bricks' own template-parts. - CSS overrides multiplied (Gutenberg + Bricks variants) and still don't pixel-match the original PHP-rendered visual. - 8+ one-shot mu-plugins live in LocalWP to patch over inconsistencies. What survives the restart (preserved here on main) - BRIEF, both PDFs, .txt extracts (sources of truth) - assets/css/tokens.css (full design system, untouched) - assets/fonts/Inter-Variable*.woff2 (RGPD self-hosted) - inc/<section>-data.php files (text copy from PDF strategie, will become /content-source/ on next session for reuse as translation dictionary and as input to programmatic page generation) - The Git repo, remote, branch main - LocalWP site, Bricks v2.3.4, WPML 4.9.3 with active licenses - WPML EN + FR setup with directory URL strategy What gets wiped at the start of next session - wp-content/themes/asterion-bricks/header.php / footer.php / page.php / index.php / front-page.php / template-parts/ / templates/ - inc/render-blocks.php, inc/render-blocks-native.php, inc/render-bricks.php - inc/shortcodes.php, inc/i18n.php, inc/form-handler.php - 35+ WP pages created over the session - All one-shot mu-plugins in LocalWP/wp-content/mu-plugins/ Restart approach (detailed in RESTART-PLAN.md) - Minimalist child theme: style.css, functions.php, theme.json, tokens.css, trimmed utilities.css, fonts, inc/cpt.php — that's it. - No header.php / footer.php / page.php in child theme — Bricks Templates (Header / Footer / Single — Page) take over via Bricks' Conditions. - User builds 5-7 archetype Bricks templates visually (~1-2h each) then programmatic generation fills the variants from inc/*-data.php sources. - WPML duplication after EN is validated. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
105 lines
5.4 KiB
PHP
105 lines
5.4 KiB
PHP
<?php
|
|
/**
|
|
* Asterion Bricks — Global footer
|
|
*
|
|
* Per Design Handoff section 3.5 :
|
|
* - 5 columns desktop : Solutions / Industries / Why Asterion / Resources / Newsletter
|
|
* - Stack on mobile (could become accordions later)
|
|
* - Bottom strip : copyright · privacy · terms · cookies · social · language switcher
|
|
*
|
|
* @package AsterionBricks
|
|
*/
|
|
defined('ABSPATH') || exit;
|
|
|
|
$av_year = date_i18n('Y');
|
|
|
|
// Mirror the bail-out in header.php: don't emit our footer chrome inside
|
|
// the Bricks builder canvas/iframe.
|
|
if (function_exists('bricks_is_builder') && bricks_is_builder()) {
|
|
wp_footer();
|
|
echo '</body></html>';
|
|
return;
|
|
}
|
|
?>
|
|
</main><!-- /#main -->
|
|
|
|
<footer class="av-footer" role="contentinfo">
|
|
<div class="av-container">
|
|
|
|
<div class="av-footer__cols">
|
|
|
|
<div class="av-footer__brand">
|
|
<a href="<?php echo esc_url(home_url('/')); ?>" class="av-header__logo" aria-label="Asterion VR — home">
|
|
ASTERION VR
|
|
</a>
|
|
<p>
|
|
<?php echo esc_html(av_t('The modular, sovereign XR platform for European security forces. Train like the threat is now.', 'asterion-bricks')); ?>
|
|
</p>
|
|
</div>
|
|
|
|
<div class="av-footer__col">
|
|
<h2 class="av-footer__col-title"><?php echo esc_html(av_t('Solutions', 'asterion-bricks')); ?></h2>
|
|
<ul class="av-footer__list">
|
|
<li><a href="<?php echo esc_url(home_url('/solutions/my-proserve/')); ?>">MY PROSERVE</a></li>
|
|
<li><a href="<?php echo esc_url(home_url('/solutions/proserve-flex/')); ?>">PROSERVE FLEX</a></li>
|
|
<li><a href="<?php echo esc_url(home_url('/solutions/proserve-academy/')); ?>">PROSERVE ACADEMY</a></li>
|
|
<li><a href="<?php echo esc_url(home_url('/solutions/customization/')); ?>">PROSERVE+</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="av-footer__col">
|
|
<h2 class="av-footer__col-title"><?php echo esc_html(av_t('Industries', 'asterion-bricks')); ?></h2>
|
|
<ul class="av-footer__list">
|
|
<li><a href="<?php echo esc_url(home_url('/industries/police/')); ?>"><?php echo esc_html(av_t('Police', 'asterion-bricks')); ?></a></li>
|
|
<li><a href="<?php echo esc_url(home_url('/industries/special-forces/')); ?>"><?php echo esc_html(av_t('Special Forces', 'asterion-bricks')); ?></a></li>
|
|
<li><a href="<?php echo esc_url(home_url('/industries/military/')); ?>"><?php echo esc_html(av_t('Military', 'asterion-bricks')); ?></a></li>
|
|
<li><a href="<?php echo esc_url(home_url('/industries/firefighters/')); ?>"><?php echo esc_html(av_t('Firefighters', 'asterion-bricks')); ?></a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="av-footer__col">
|
|
<h2 class="av-footer__col-title"><?php echo esc_html(av_t('Why Asterion', 'asterion-bricks')); ?></h2>
|
|
<ul class="av-footer__list">
|
|
<li><a href="<?php echo esc_url(home_url('/about/')); ?>"><?php echo esc_html(av_t('Our story', 'asterion-bricks')); ?></a></li>
|
|
<li><a href="<?php echo esc_url(home_url('/customers/')); ?>"><?php echo esc_html(av_t('Customers', 'asterion-bricks')); ?></a></li>
|
|
<li><a href="<?php echo esc_url(home_url('/trust/')); ?>"><?php echo esc_html(av_t('Trust & Compliance', 'asterion-bricks')); ?></a></li>
|
|
<li><a href="<?php echo esc_url(home_url('/partners/')); ?>"><?php echo esc_html(av_t('Partners', 'asterion-bricks')); ?></a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="av-footer__newsletter">
|
|
<h2 class="av-footer__col-title"><?php echo esc_html(av_t('Newsletter', 'asterion-bricks')); ?></h2>
|
|
<p style="color:var(--color-text-on-dark-muted);font-size:var(--text-body-sm);">
|
|
<?php echo esc_html(av_t('Insights from the front of immersive training. One email per month. No spam.', 'asterion-bricks')); ?>
|
|
</p>
|
|
<form class="av-footer__newsletter-form" method="post" action="#" aria-label="<?php esc_attr_e('Newsletter signup', 'asterion-bricks'); ?>">
|
|
<label for="av-newsletter-email" class="av-sr-only"><?php echo esc_html(av_t('Your email', 'asterion-bricks')); ?></label>
|
|
<input type="email" id="av-newsletter-email" name="email" class="av-input" placeholder="<?php esc_attr_e('your@email.com', 'asterion-bricks'); ?>" required>
|
|
<button type="submit" class="av-btn av-btn--primary av-btn--md"><?php echo esc_html(av_t('Subscribe', 'asterion-bricks')); ?></button>
|
|
</form>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="av-footer__bottom">
|
|
<div>© <?php echo esc_html($av_year); ?> Asterion VR. <?php echo esc_html(av_t('All rights reserved.', 'asterion-bricks')); ?></div>
|
|
<div class="av-footer__bottom-links">
|
|
<a href="<?php echo esc_url(home_url('/legal/privacy/')); ?>"><?php echo esc_html(av_t('Privacy', 'asterion-bricks')); ?></a>
|
|
<a href="<?php echo esc_url(home_url('/legal/terms/')); ?>"><?php echo esc_html(av_t('Terms', 'asterion-bricks')); ?></a>
|
|
<a href="<?php echo esc_url(home_url('/legal/cookies/')); ?>"><?php echo esc_html(av_t('Cookies', 'asterion-bricks')); ?></a>
|
|
<a href="<?php echo esc_url(home_url('/legal/notice/')); ?>"><?php echo esc_html(av_t('Legal notice', 'asterion-bricks')); ?></a>
|
|
</div>
|
|
<div class="av-footer__social">
|
|
<a href="https://www.linkedin.com/company/asterion-vr/" rel="noopener" aria-label="LinkedIn">LinkedIn</a>
|
|
·
|
|
<a href="https://www.youtube.com/" rel="noopener" aria-label="YouTube">YouTube</a>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</footer>
|
|
|
|
<?php wp_footer(); ?>
|
|
</body>
|
|
</html>
|