Files
MokoOnyx/source/html/layouts/mokoonyx/article-metadata.php
T
2026-06-20 19:59:39 +00:00

77 lines
2.5 KiB
PHP

<?php
/**
* Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
*
* This file is part of a Moko Consulting project.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
* FILE INFORMATION
* DEFGROUP: Joomla.Template.Site
* INGROUP: MokoOnyx.Layouts
* REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx
* PATH: /src/html/layouts/mokoonyx/article-metadata.php
* VERSION: 02.23.01
* BRIEF: Article metadata footer layout -- renders jcfields grouped by field group
*/
defined('_JEXEC') or die;
/**
* Layout: mokoonyx.article-metadata
*
* Renders custom fields as a styled metadata footer, mirroring the
* MokoStandards wiki metadata footer pattern. Fields are grouped
* by their field group and rendered dynamically -- adding new fields
* or groups requires no template changes.
*
* @var array $displayData Expects ['item' => ArticleObject]
*/
$item = $displayData['item'] ?? null;
if (!$item || empty($item->jcfields)) {
return;
}
// Group fields by their group title. Fields without a group go under "Article Metadata".
$groups = [];
foreach ($item->jcfields as $field) {
// Skip fields with no value set
if ($field->rawvalue === '' || $field->rawvalue === null) {
continue;
}
$groupTitle = $field->group_title ?: 'Article Metadata';
$groups[$groupTitle][] = $field;
}
if (empty($groups)) {
return;
}
?>
<div class="article-metadata-footer">
<?php foreach ($groups as $groupTitle => $fields) : ?>
<div class="article-metadata-footer__group">
<h6 class="article-metadata-footer__group-title"><?php echo $this->escape($groupTitle); ?></h6>
<dl class="article-metadata-footer__fields">
<?php foreach ($fields as $field) : ?>
<div class="article-metadata-footer__field" data-field-name="<?php echo $this->escape($field->name); ?>" data-field-type="<?php echo $this->escape($field->type); ?>">
<dt class="article-metadata-footer__label"><?php echo $this->escape($field->label); ?></dt>
<dd class="article-metadata-footer__value">
<?php if ($field->type === 'url' && !empty($field->rawvalue)) : ?>
<a href="<?php echo $this->escape($field->rawvalue); ?>" target="_blank" rel="noopener noreferrer"><?php echo $this->escape($field->rawvalue); ?></a>
<?php elseif ($field->type === 'textarea') : ?>
<?php echo nl2br($this->escape($field->rawvalue)); ?>
<?php else : ?>
<?php echo $this->escape($field->rawvalue); ?>
<?php endif; ?>
</dd>
</div>
<?php endforeach; ?>
</dl>
</div>
<?php endforeach; ?>
</div>