77 lines
2.5 KiB
PHP
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>
|