Add JEM component overrides with mobile-first design
Co-authored-by: jmiller-moko <230051081+jmiller-moko@users.noreply.github.com>
This commit is contained in:
@@ -35,7 +35,7 @@ This document provides a comprehensive guide to all mobile-responsive module and
|
|||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
MokoCassiopeia includes **16 mobile-responsive module overrides** and **7 component view overrides** designed to enhance the mobile user experience for third-party extensions and the Main Menu navigation.
|
MokoCassiopeia includes **16 mobile-responsive module overrides** and **12 component view overrides** designed to enhance the mobile user experience for third-party extensions and the Main Menu navigation.
|
||||||
|
|
||||||
**Important**: Following Cassiopeia template best practices, MokoCassiopeia avoids overriding standard Joomla core modules (such as mod_search, mod_login, mod_breadcrumbs) to ensure proper language loading and compatibility. **Exception**: mod_menu "Main Menu" override provides essential Bootstrap 5 collapsible dropdown functionality.
|
**Important**: Following Cassiopeia template best practices, MokoCassiopeia avoids overriding standard Joomla core modules (such as mod_search, mod_login, mod_breadcrumbs) to ensure proper language loading and compatibility. **Exception**: mod_menu "Main Menu" override provides essential Bootstrap 5 collapsible dropdown functionality.
|
||||||
|
|
||||||
@@ -361,6 +361,79 @@ Login page with remember me and helper links.
|
|||||||
- CSRF token support
|
- CSRF token support
|
||||||
- Responsive padding adjustments
|
- Responsive padding adjustments
|
||||||
|
|
||||||
|
### 5. JEM (Joomla Event Manager) Components
|
||||||
|
|
||||||
|
Five comprehensive component view overrides for JEM event management.
|
||||||
|
|
||||||
|
#### com_jem
|
||||||
|
**Location**: `src/templates/html/com_jem/`
|
||||||
|
|
||||||
|
Mobile-responsive views for JEM event listings, details, calendar, venues, and categories.
|
||||||
|
|
||||||
|
##### eventslist
|
||||||
|
Event listing with card-based layout.
|
||||||
|
|
||||||
|
**Features**:
|
||||||
|
- Event cards with date, time, and venue
|
||||||
|
- Category badges with color coding
|
||||||
|
- Responsive event grid layout
|
||||||
|
- Event description excerpts
|
||||||
|
- Read more buttons with clear calls-to-action
|
||||||
|
- Pagination support
|
||||||
|
- Empty state messaging
|
||||||
|
|
||||||
|
##### event
|
||||||
|
Single event details view with comprehensive information.
|
||||||
|
|
||||||
|
**Features**:
|
||||||
|
- Large event image display (responsive)
|
||||||
|
- Date and time with structured data
|
||||||
|
- Venue information with maps link
|
||||||
|
- Event description with full content
|
||||||
|
- Category display with badges
|
||||||
|
- Registration information (if enabled)
|
||||||
|
- Contact information display
|
||||||
|
- Back to events navigation
|
||||||
|
- Meta information with icons
|
||||||
|
|
||||||
|
##### calendar
|
||||||
|
Monthly calendar view with event indicators.
|
||||||
|
|
||||||
|
**Features**:
|
||||||
|
- Month navigation (previous/next)
|
||||||
|
- Calendar grid with weekday headers
|
||||||
|
- Event indicators on dates with events
|
||||||
|
- Responsive calendar layout
|
||||||
|
- Today highlighting
|
||||||
|
- Event list for selected month
|
||||||
|
- Event count per day display
|
||||||
|
- Touch-friendly navigation buttons
|
||||||
|
|
||||||
|
##### venue
|
||||||
|
Venue details with location and upcoming events.
|
||||||
|
|
||||||
|
**Features**:
|
||||||
|
- Venue image display
|
||||||
|
- Complete address information
|
||||||
|
- Website link (external)
|
||||||
|
- Google Maps integration
|
||||||
|
- Venue description
|
||||||
|
- Upcoming events at venue
|
||||||
|
- Location coordinates display
|
||||||
|
- Back navigation
|
||||||
|
|
||||||
|
##### categories
|
||||||
|
Event category listing with descriptions.
|
||||||
|
|
||||||
|
**Features**:
|
||||||
|
- Category cards with images
|
||||||
|
- Category descriptions
|
||||||
|
- Event count per category
|
||||||
|
- View category buttons
|
||||||
|
- Responsive grid layout
|
||||||
|
- Empty state messaging
|
||||||
|
- Pagination support
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## CSS Architecture
|
## CSS Architecture
|
||||||
@@ -402,6 +475,13 @@ All module styles are located in `src/media/css/template.css` with dedicated sec
|
|||||||
- Login pages
|
- Login pages
|
||||||
- Tab interfaces
|
- Tab interfaces
|
||||||
|
|
||||||
|
6. **JEM COMPONENT STYLES** (Lines ~22000+)
|
||||||
|
- Event list cards
|
||||||
|
- Event details layout
|
||||||
|
- Calendar grid
|
||||||
|
- Venue information
|
||||||
|
- Category displays
|
||||||
|
|
||||||
### CSS Variables Integration
|
### CSS Variables Integration
|
||||||
|
|
||||||
All modules integrate with template CSS variables:
|
All modules integrate with template CSS variables:
|
||||||
|
|||||||
1
src/templates/html/com_jem/calendar/index.html
Normal file
1
src/templates/html/com_jem/calendar/index.html
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<!DOCTYPE html><title></title>
|
||||||
167
src/templates/html/com_jem/calendar/mobile.php
Normal file
167
src/templates/html/com_jem/calendar/mobile.php
Normal file
@@ -0,0 +1,167 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @package JEM
|
||||||
|
* @subpackage com_jem
|
||||||
|
*
|
||||||
|
* @copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||||
|
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||||
|
*
|
||||||
|
* Mobile responsive override for JEM calendar view
|
||||||
|
*/
|
||||||
|
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
use Joomla\CMS\Language\Text;
|
||||||
|
use Joomla\CMS\Router\Route;
|
||||||
|
use Joomla\CMS\HTML\HTMLHelper;
|
||||||
|
|
||||||
|
$events = $this->rows ?? [];
|
||||||
|
$date = $this->date ?? null;
|
||||||
|
$year = $this->year ?? date('Y');
|
||||||
|
$month = $this->month ?? date('m');
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="jem-calendar-responsive jem-component">
|
||||||
|
<div class="jem-calendar__container">
|
||||||
|
|
||||||
|
<!-- Calendar Header -->
|
||||||
|
<div class="jem-calendar__header">
|
||||||
|
<h1 class="jem-calendar__title">
|
||||||
|
<?php echo Text::_('COM_JEM_CALENDAR'); ?>
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Calendar Navigation -->
|
||||||
|
<div class="jem-calendar__navigation">
|
||||||
|
<a href="<?php echo Route::_('index.php?option=com_jem&view=calendar&year=' . ($month == 1 ? $year - 1 : $year) . '&month=' . ($month == 1 ? 12 : $month - 1)); ?>"
|
||||||
|
class="jem-calendar__nav-button jem-calendar__nav-prev"
|
||||||
|
aria-label="<?php echo Text::_('COM_JEM_PREVIOUS_MONTH'); ?>">
|
||||||
|
<span aria-hidden="true">‹</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<h2 class="jem-calendar__current-month">
|
||||||
|
<?php echo HTMLHelper::_('date', $year . '-' . $month . '-01', 'F Y'); ?>
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<a href="<?php echo Route::_('index.php?option=com_jem&view=calendar&year=' . ($month == 12 ? $year + 1 : $year) . '&month=' . ($month == 12 ? 1 : $month + 1)); ?>"
|
||||||
|
class="jem-calendar__nav-button jem-calendar__nav-next"
|
||||||
|
aria-label="<?php echo Text::_('COM_JEM_NEXT_MONTH'); ?>">
|
||||||
|
<span aria-hidden="true">›</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Calendar Grid -->
|
||||||
|
<div class="jem-calendar__grid">
|
||||||
|
<!-- Weekday Headers -->
|
||||||
|
<div class="jem-calendar__weekdays">
|
||||||
|
<?php
|
||||||
|
$weekDays = [
|
||||||
|
Text::_('SUN'),
|
||||||
|
Text::_('MON'),
|
||||||
|
Text::_('TUE'),
|
||||||
|
Text::_('WED'),
|
||||||
|
Text::_('THU'),
|
||||||
|
Text::_('FRI'),
|
||||||
|
Text::_('SAT')
|
||||||
|
];
|
||||||
|
foreach ($weekDays as $day) : ?>
|
||||||
|
<div class="jem-calendar__weekday">
|
||||||
|
<?php echo $day; ?>
|
||||||
|
</div>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Calendar Days -->
|
||||||
|
<div class="jem-calendar__days">
|
||||||
|
<?php
|
||||||
|
// Generate calendar days
|
||||||
|
$firstDay = mktime(0, 0, 0, $month, 1, $year);
|
||||||
|
$daysInMonth = date('t', $firstDay);
|
||||||
|
$dayOfWeek = date('w', $firstDay);
|
||||||
|
|
||||||
|
// Empty cells before first day
|
||||||
|
for ($i = 0; $i < $dayOfWeek; $i++) : ?>
|
||||||
|
<div class="jem-calendar__day jem-calendar__day--empty"></div>
|
||||||
|
<?php endfor;
|
||||||
|
|
||||||
|
// Days with events
|
||||||
|
for ($day = 1; $day <= $daysInMonth; $day++) :
|
||||||
|
$currentDate = sprintf('%04d-%02d-%02d', $year, $month, $day);
|
||||||
|
$hasEvents = false;
|
||||||
|
$dayEvents = [];
|
||||||
|
|
||||||
|
// Check for events on this day
|
||||||
|
if (!empty($events)) {
|
||||||
|
foreach ($events as $event) {
|
||||||
|
if (!empty($event->dates) && date('Y-m-d', strtotime($event->dates)) == $currentDate) {
|
||||||
|
$hasEvents = true;
|
||||||
|
$dayEvents[] = $event;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$isToday = ($currentDate == date('Y-m-d'));
|
||||||
|
$classes = 'jem-calendar__day';
|
||||||
|
if ($hasEvents) {
|
||||||
|
$classes .= ' jem-calendar__day--has-events';
|
||||||
|
}
|
||||||
|
if ($isToday) {
|
||||||
|
$classes .= ' jem-calendar__day--today';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<div class="<?php echo $classes; ?>" data-date="<?php echo $currentDate; ?>">
|
||||||
|
<div class="jem-calendar__day-number">
|
||||||
|
<?php echo $day; ?>
|
||||||
|
</div>
|
||||||
|
<?php if ($hasEvents) : ?>
|
||||||
|
<div class="jem-calendar__day-events">
|
||||||
|
<span class="jem-calendar__event-indicator"
|
||||||
|
aria-label="<?php echo Text::sprintf('COM_JEM_EVENTS_COUNT', count($dayEvents)); ?>">
|
||||||
|
<?php echo count($dayEvents); ?>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
<?php endfor; ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Events List for Selected/Current Day -->
|
||||||
|
<?php if (!empty($events)) : ?>
|
||||||
|
<div class="jem-calendar__events-list">
|
||||||
|
<h3 class="jem-calendar__events-title">
|
||||||
|
<?php echo Text::_('COM_JEM_UPCOMING_EVENTS'); ?>
|
||||||
|
</h3>
|
||||||
|
<div class="jem-calendar__events">
|
||||||
|
<?php foreach ($events as $event) : ?>
|
||||||
|
<div class="jem-calendar__event-item">
|
||||||
|
<div class="jem-calendar__event-date">
|
||||||
|
<?php if (!empty($event->dates)) : ?>
|
||||||
|
<time datetime="<?php echo $this->escape($event->dates); ?>">
|
||||||
|
<?php echo HTMLHelper::_('date', $event->dates, Text::_('DATE_FORMAT_LC4')); ?>
|
||||||
|
</time>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
<h4 class="jem-calendar__event-title">
|
||||||
|
<?php if (!empty($event->slug)) : ?>
|
||||||
|
<a href="<?php echo Route::_('index.php?option=com_jem&view=event&id=' . $event->slug); ?>"
|
||||||
|
class="jem-calendar__event-link">
|
||||||
|
<?php echo $this->escape($event->title); ?>
|
||||||
|
</a>
|
||||||
|
<?php else : ?>
|
||||||
|
<?php echo $this->escape($event->title); ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
</h4>
|
||||||
|
<?php if (!empty($event->venue)) : ?>
|
||||||
|
<div class="jem-calendar__event-venue">
|
||||||
|
📍 <?php echo $this->escape($event->venue); ?>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
1
src/templates/html/com_jem/categories/index.html
Normal file
1
src/templates/html/com_jem/categories/index.html
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<!DOCTYPE html><title></title>
|
||||||
111
src/templates/html/com_jem/categories/mobile.php
Normal file
111
src/templates/html/com_jem/categories/mobile.php
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @package JEM
|
||||||
|
* @subpackage com_jem
|
||||||
|
*
|
||||||
|
* @copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||||
|
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||||
|
*
|
||||||
|
* Mobile responsive override for JEM categories view
|
||||||
|
*/
|
||||||
|
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
use Joomla\CMS\Language\Text;
|
||||||
|
use Joomla\CMS\Router\Route;
|
||||||
|
|
||||||
|
$categories = $this->categories ?? [];
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="jem-categories-responsive jem-component">
|
||||||
|
<div class="jem-categories__container">
|
||||||
|
|
||||||
|
<!-- Categories Header -->
|
||||||
|
<div class="jem-categories__header">
|
||||||
|
<h1 class="jem-categories__title">
|
||||||
|
<?php echo Text::_('COM_JEM_CATEGORIES'); ?>
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php if (!empty($categories)) : ?>
|
||||||
|
<div class="jem-categories__list">
|
||||||
|
<?php foreach ($categories as $category) : ?>
|
||||||
|
<div class="jem-categories__item">
|
||||||
|
<div class="jem-categories__item-inner">
|
||||||
|
|
||||||
|
<!-- Category Image -->
|
||||||
|
<?php if (!empty($category->image)) : ?>
|
||||||
|
<div class="jem-categories__image-wrapper">
|
||||||
|
<img src="<?php echo $this->escape($category->image); ?>"
|
||||||
|
alt="<?php echo $this->escape($category->catname); ?>"
|
||||||
|
class="jem-categories__image"
|
||||||
|
loading="lazy">
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- Category Content -->
|
||||||
|
<div class="jem-categories__content">
|
||||||
|
|
||||||
|
<!-- Category Title -->
|
||||||
|
<h2 class="jem-categories__category-title">
|
||||||
|
<?php if (!empty($category->slug)) : ?>
|
||||||
|
<a href="<?php echo Route::_('index.php?option=com_jem&view=category&id=' . $category->slug); ?>"
|
||||||
|
class="jem-categories__link">
|
||||||
|
<?php echo $this->escape($category->catname); ?>
|
||||||
|
</a>
|
||||||
|
<?php else : ?>
|
||||||
|
<?php echo $this->escape($category->catname); ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<!-- Category Description -->
|
||||||
|
<?php if (!empty($category->catdescription)) : ?>
|
||||||
|
<div class="jem-categories__description">
|
||||||
|
<?php echo $category->catdescription; ?>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- Event Count -->
|
||||||
|
<?php if (isset($category->eventcount)) : ?>
|
||||||
|
<div class="jem-categories__meta">
|
||||||
|
<span class="jem-categories__event-count">
|
||||||
|
<?php echo Text::sprintf('COM_JEM_EVENTS_COUNT_FULL', (int) $category->eventcount); ?>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- View Category Button -->
|
||||||
|
<?php if (!empty($category->slug)) : ?>
|
||||||
|
<div class="jem-categories__actions">
|
||||||
|
<a href="<?php echo Route::_('index.php?option=com_jem&view=category&id=' . $category->slug); ?>"
|
||||||
|
class="jem-categories__button btn btn-primary"
|
||||||
|
aria-label="<?php echo Text::sprintf('COM_JEM_VIEW_CATEGORY', $this->escape($category->catname)); ?>">
|
||||||
|
<?php echo Text::_('COM_JEM_VIEW_CATEGORY'); ?>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Pagination -->
|
||||||
|
<?php if (!empty($this->pagination)) : ?>
|
||||||
|
<div class="jem-categories__pagination">
|
||||||
|
<?php echo $this->pagination->getPagesLinks(); ?>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<?php else : ?>
|
||||||
|
<div class="jem-categories__empty">
|
||||||
|
<p class="jem-categories__empty-message">
|
||||||
|
<?php echo Text::_('COM_JEM_NO_CATEGORIES'); ?>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
1
src/templates/html/com_jem/event/index.html
Normal file
1
src/templates/html/com_jem/event/index.html
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<!DOCTYPE html><title></title>
|
||||||
212
src/templates/html/com_jem/event/mobile.php
Normal file
212
src/templates/html/com_jem/event/mobile.php
Normal file
@@ -0,0 +1,212 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @package JEM
|
||||||
|
* @subpackage com_jem
|
||||||
|
*
|
||||||
|
* @copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||||
|
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||||
|
*
|
||||||
|
* Mobile responsive override for JEM event details view
|
||||||
|
*/
|
||||||
|
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
use Joomla\CMS\Language\Text;
|
||||||
|
use Joomla\CMS\Router\Route;
|
||||||
|
use Joomla\CMS\HTML\HTMLHelper;
|
||||||
|
|
||||||
|
$item = $this->item ?? null;
|
||||||
|
$params = $this->params ?? null;
|
||||||
|
|
||||||
|
if (!$item) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="jem-event-responsive jem-component">
|
||||||
|
<div class="jem-event__container">
|
||||||
|
|
||||||
|
<!-- Event Header -->
|
||||||
|
<div class="jem-event__header">
|
||||||
|
<h1 class="jem-event__title">
|
||||||
|
<?php echo $this->escape($item->title); ?>
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Event Image -->
|
||||||
|
<?php if (!empty($item->datimage)) : ?>
|
||||||
|
<div class="jem-event__image-wrapper">
|
||||||
|
<img src="<?php echo $this->escape($item->datimage); ?>"
|
||||||
|
alt="<?php echo $this->escape($item->title); ?>"
|
||||||
|
class="jem-event__image"
|
||||||
|
loading="lazy">
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- Event Meta Information -->
|
||||||
|
<div class="jem-event__meta">
|
||||||
|
|
||||||
|
<!-- Date and Time -->
|
||||||
|
<div class="jem-event__meta-item jem-event__date">
|
||||||
|
<span class="jem-event__meta-icon" aria-hidden="true">📅</span>
|
||||||
|
<div class="jem-event__meta-content">
|
||||||
|
<strong class="jem-event__meta-label">
|
||||||
|
<?php echo Text::_('COM_JEM_DATE'); ?>:
|
||||||
|
</strong>
|
||||||
|
<?php if (!empty($item->dates)) : ?>
|
||||||
|
<time datetime="<?php echo $this->escape($item->dates); ?>"
|
||||||
|
class="jem-event__datetime">
|
||||||
|
<?php echo HTMLHelper::_('date', $item->dates, Text::_('DATE_FORMAT_LC3')); ?>
|
||||||
|
</time>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<?php if (!empty($item->enddates) && $item->enddates != $item->dates) : ?>
|
||||||
|
<span class="jem-event__date-separator"> - </span>
|
||||||
|
<time datetime="<?php echo $this->escape($item->enddates); ?>"
|
||||||
|
class="jem-event__datetime">
|
||||||
|
<?php echo HTMLHelper::_('date', $item->enddates, Text::_('DATE_FORMAT_LC3')); ?>
|
||||||
|
</time>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Time -->
|
||||||
|
<?php if (!empty($item->times)) : ?>
|
||||||
|
<div class="jem-event__meta-item jem-event__time">
|
||||||
|
<span class="jem-event__meta-icon" aria-hidden="true">🕐</span>
|
||||||
|
<div class="jem-event__meta-content">
|
||||||
|
<strong class="jem-event__meta-label">
|
||||||
|
<?php echo Text::_('COM_JEM_TIME'); ?>:
|
||||||
|
</strong>
|
||||||
|
<span class="jem-event__time-value">
|
||||||
|
<?php echo $this->escape($item->times); ?>
|
||||||
|
<?php if (!empty($item->endtimes)) : ?>
|
||||||
|
- <?php echo $this->escape($item->endtimes); ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- Venue -->
|
||||||
|
<?php if (!empty($item->venue)) : ?>
|
||||||
|
<div class="jem-event__meta-item jem-event__venue">
|
||||||
|
<span class="jem-event__meta-icon" aria-hidden="true">📍</span>
|
||||||
|
<div class="jem-event__meta-content">
|
||||||
|
<strong class="jem-event__meta-label">
|
||||||
|
<?php echo Text::_('COM_JEM_VENUE'); ?>:
|
||||||
|
</strong>
|
||||||
|
<?php if (!empty($item->venueslug)) : ?>
|
||||||
|
<a href="<?php echo Route::_('index.php?option=com_jem&view=venue&id=' . $item->venueslug); ?>"
|
||||||
|
class="jem-event__venue-link">
|
||||||
|
<?php echo $this->escape($item->venue); ?>
|
||||||
|
</a>
|
||||||
|
<?php else : ?>
|
||||||
|
<span class="jem-event__venue-name">
|
||||||
|
<?php echo $this->escape($item->venue); ?>
|
||||||
|
</span>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<?php if (!empty($item->street) || !empty($item->city)) : ?>
|
||||||
|
<div class="jem-event__address">
|
||||||
|
<?php if (!empty($item->street)) : ?>
|
||||||
|
<span class="jem-event__street">
|
||||||
|
<?php echo $this->escape($item->street); ?>
|
||||||
|
</span>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if (!empty($item->city)) : ?>
|
||||||
|
<span class="jem-event__city">
|
||||||
|
<?php echo $this->escape($item->city); ?>
|
||||||
|
</span>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- Categories -->
|
||||||
|
<?php if (!empty($item->categories)) : ?>
|
||||||
|
<div class="jem-event__meta-item jem-event__categories">
|
||||||
|
<span class="jem-event__meta-icon" aria-hidden="true">🏷️</span>
|
||||||
|
<div class="jem-event__meta-content">
|
||||||
|
<strong class="jem-event__meta-label">
|
||||||
|
<?php echo Text::_('COM_JEM_CATEGORIES'); ?>:
|
||||||
|
</strong>
|
||||||
|
<div class="jem-event__category-list">
|
||||||
|
<?php foreach ($item->categories as $category) : ?>
|
||||||
|
<span class="jem-event__category-badge">
|
||||||
|
<?php echo $this->escape($category->catname); ?>
|
||||||
|
</span>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Event Description -->
|
||||||
|
<?php if (!empty($item->fulltext)) : ?>
|
||||||
|
<div class="jem-event__description">
|
||||||
|
<h2 class="jem-event__description-title">
|
||||||
|
<?php echo Text::_('COM_JEM_DESCRIPTION'); ?>
|
||||||
|
</h2>
|
||||||
|
<div class="jem-event__description-content">
|
||||||
|
<?php echo $item->fulltext; ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- Event Registration -->
|
||||||
|
<?php if (!empty($item->registra) && $item->registra == 1) : ?>
|
||||||
|
<div class="jem-event__registration">
|
||||||
|
<h2 class="jem-event__registration-title">
|
||||||
|
<?php echo Text::_('COM_JEM_REGISTRATION'); ?>
|
||||||
|
</h2>
|
||||||
|
<?php if (!empty($item->maxplaces)) : ?>
|
||||||
|
<p class="jem-event__capacity">
|
||||||
|
<strong><?php echo Text::_('COM_JEM_MAX_PLACES'); ?>:</strong>
|
||||||
|
<?php echo (int) $item->maxplaces; ?>
|
||||||
|
</p>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if (!empty($item->waitinglist)) : ?>
|
||||||
|
<p class="jem-event__waitinglist">
|
||||||
|
<?php echo Text::_('COM_JEM_WAITING_LIST_ENABLED'); ?>
|
||||||
|
</p>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- Event Contact -->
|
||||||
|
<?php if (!empty($item->contactname)) : ?>
|
||||||
|
<div class="jem-event__contact">
|
||||||
|
<h2 class="jem-event__contact-title">
|
||||||
|
<?php echo Text::_('COM_JEM_CONTACT'); ?>
|
||||||
|
</h2>
|
||||||
|
<p class="jem-event__contact-info">
|
||||||
|
<strong><?php echo Text::_('COM_JEM_NAME'); ?>:</strong>
|
||||||
|
<?php echo $this->escape($item->contactname); ?>
|
||||||
|
</p>
|
||||||
|
<?php if (!empty($item->contactemail)) : ?>
|
||||||
|
<p class="jem-event__contact-info">
|
||||||
|
<strong><?php echo Text::_('COM_JEM_EMAIL'); ?>:</strong>
|
||||||
|
<a href="mailto:<?php echo $this->escape($item->contactemail); ?>"
|
||||||
|
class="jem-event__contact-link">
|
||||||
|
<?php echo $this->escape($item->contactemail); ?>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- Back Button -->
|
||||||
|
<div class="jem-event__actions">
|
||||||
|
<a href="<?php echo Route::_('index.php?option=com_jem&view=eventslist'); ?>"
|
||||||
|
class="jem-event__button btn btn-secondary">
|
||||||
|
<?php echo Text::_('COM_JEM_BACK_TO_EVENTS'); ?>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
1
src/templates/html/com_jem/eventslist/index.html
Normal file
1
src/templates/html/com_jem/eventslist/index.html
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<!DOCTYPE html><title></title>
|
||||||
147
src/templates/html/com_jem/eventslist/mobile.php
Normal file
147
src/templates/html/com_jem/eventslist/mobile.php
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @package JEM
|
||||||
|
* @subpackage com_jem
|
||||||
|
*
|
||||||
|
* @copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||||
|
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||||
|
*
|
||||||
|
* Mobile responsive override for JEM events list view
|
||||||
|
*/
|
||||||
|
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
use Joomla\CMS\Language\Text;
|
||||||
|
use Joomla\CMS\Router\Route;
|
||||||
|
use Joomla\CMS\HTML\HTMLHelper;
|
||||||
|
|
||||||
|
// Load JEM helper if available
|
||||||
|
if (file_exists(JPATH_SITE . '/components/com_jem/helpers/helper.php')) {
|
||||||
|
require_once JPATH_SITE . '/components/com_jem/helpers/helper.php';
|
||||||
|
}
|
||||||
|
|
||||||
|
$items = $this->items ?? [];
|
||||||
|
$params = $this->params ?? null;
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="jem-eventslist-responsive jem-component">
|
||||||
|
<div class="jem-eventslist__container">
|
||||||
|
|
||||||
|
<?php if (!empty($this->pageheading)) : ?>
|
||||||
|
<div class="jem-eventslist__header">
|
||||||
|
<h1 class="jem-eventslist__title">
|
||||||
|
<?php echo $this->escape($this->pageheading); ?>
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<?php if (!empty($items)) : ?>
|
||||||
|
<div class="jem-eventslist__list">
|
||||||
|
<?php foreach ($items as $item) : ?>
|
||||||
|
<div class="jem-eventslist__item">
|
||||||
|
<div class="jem-eventslist__item-inner">
|
||||||
|
|
||||||
|
<!-- Event Date -->
|
||||||
|
<div class="jem-eventslist__date">
|
||||||
|
<?php if (!empty($item->dates)) : ?>
|
||||||
|
<time datetime="<?php echo $this->escape($item->dates); ?>"
|
||||||
|
class="jem-eventslist__datetime">
|
||||||
|
<?php echo HTMLHelper::_('date', $item->dates, Text::_('DATE_FORMAT_LC4')); ?>
|
||||||
|
</time>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<?php if (!empty($item->enddates) && $item->enddates != $item->dates) : ?>
|
||||||
|
<span class="jem-eventslist__date-separator"> - </span>
|
||||||
|
<time datetime="<?php echo $this->escape($item->enddates); ?>"
|
||||||
|
class="jem-eventslist__datetime">
|
||||||
|
<?php echo HTMLHelper::_('date', $item->enddates, Text::_('DATE_FORMAT_LC4')); ?>
|
||||||
|
</time>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Event Title -->
|
||||||
|
<h2 class="jem-eventslist__event-title">
|
||||||
|
<?php if (!empty($item->slug)) : ?>
|
||||||
|
<a href="<?php echo Route::_('index.php?option=com_jem&view=event&id=' . $item->slug); ?>"
|
||||||
|
class="jem-eventslist__link">
|
||||||
|
<?php echo $this->escape($item->title); ?>
|
||||||
|
</a>
|
||||||
|
<?php else : ?>
|
||||||
|
<?php echo $this->escape($item->title); ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<!-- Event Venue -->
|
||||||
|
<?php if (!empty($item->venue)) : ?>
|
||||||
|
<div class="jem-eventslist__venue">
|
||||||
|
<span class="jem-eventslist__venue-icon" aria-hidden="true">📍</span>
|
||||||
|
<?php if (!empty($item->venueslug)) : ?>
|
||||||
|
<a href="<?php echo Route::_('index.php?option=com_jem&view=venue&id=' . $item->venueslug); ?>"
|
||||||
|
class="jem-eventslist__venue-link">
|
||||||
|
<?php echo $this->escape($item->venue); ?>
|
||||||
|
</a>
|
||||||
|
<?php else : ?>
|
||||||
|
<span class="jem-eventslist__venue-name">
|
||||||
|
<?php echo $this->escape($item->venue); ?>
|
||||||
|
</span>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<?php if (!empty($item->city)) : ?>
|
||||||
|
<span class="jem-eventslist__city">
|
||||||
|
, <?php echo $this->escape($item->city); ?>
|
||||||
|
</span>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- Event Description -->
|
||||||
|
<?php if (!empty($item->introtext)) : ?>
|
||||||
|
<div class="jem-eventslist__description">
|
||||||
|
<?php echo $item->introtext; ?>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- Event Categories -->
|
||||||
|
<?php if (!empty($item->categories)) : ?>
|
||||||
|
<div class="jem-eventslist__categories">
|
||||||
|
<?php foreach ($item->categories as $category) : ?>
|
||||||
|
<span class="jem-eventslist__category-badge">
|
||||||
|
<?php echo $this->escape($category->catname); ?>
|
||||||
|
</span>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- Read More Button -->
|
||||||
|
<?php if (!empty($item->slug)) : ?>
|
||||||
|
<div class="jem-eventslist__actions">
|
||||||
|
<a href="<?php echo Route::_('index.php?option=com_jem&view=event&id=' . $item->slug); ?>"
|
||||||
|
class="jem-eventslist__button btn btn-primary"
|
||||||
|
aria-label="<?php echo Text::sprintf('COM_JEM_READ_MORE_ABOUT', $this->escape($item->title)); ?>">
|
||||||
|
<?php echo Text::_('COM_JEM_READ_MORE'); ?>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Pagination -->
|
||||||
|
<?php if (!empty($this->pagination)) : ?>
|
||||||
|
<div class="jem-eventslist__pagination">
|
||||||
|
<?php echo $this->pagination->getPagesLinks(); ?>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<?php else : ?>
|
||||||
|
<div class="jem-eventslist__empty">
|
||||||
|
<p class="jem-eventslist__empty-message">
|
||||||
|
<?php echo Text::_('COM_JEM_NO_EVENTS'); ?>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
1
src/templates/html/com_jem/index.html
Normal file
1
src/templates/html/com_jem/index.html
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<!DOCTYPE html><title></title>
|
||||||
1
src/templates/html/com_jem/venue/index.html
Normal file
1
src/templates/html/com_jem/venue/index.html
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<!DOCTYPE html><title></title>
|
||||||
188
src/templates/html/com_jem/venue/mobile.php
Normal file
188
src/templates/html/com_jem/venue/mobile.php
Normal file
@@ -0,0 +1,188 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @package JEM
|
||||||
|
* @subpackage com_jem
|
||||||
|
*
|
||||||
|
* @copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||||
|
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||||
|
*
|
||||||
|
* Mobile responsive override for JEM venue view
|
||||||
|
*/
|
||||||
|
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
use Joomla\CMS\Language\Text;
|
||||||
|
use Joomla\CMS\Router\Route;
|
||||||
|
use Joomla\CMS\HTML\HTMLHelper;
|
||||||
|
|
||||||
|
$venue = $this->venue ?? null;
|
||||||
|
$events = $this->rows ?? [];
|
||||||
|
|
||||||
|
if (!$venue) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="jem-venue-responsive jem-component">
|
||||||
|
<div class="jem-venue__container">
|
||||||
|
|
||||||
|
<!-- Venue Header -->
|
||||||
|
<div class="jem-venue__header">
|
||||||
|
<h1 class="jem-venue__title">
|
||||||
|
<?php echo $this->escape($venue->venue); ?>
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Venue Image -->
|
||||||
|
<?php if (!empty($venue->locimage)) : ?>
|
||||||
|
<div class="jem-venue__image-wrapper">
|
||||||
|
<img src="<?php echo $this->escape($venue->locimage); ?>"
|
||||||
|
alt="<?php echo $this->escape($venue->venue); ?>"
|
||||||
|
class="jem-venue__image"
|
||||||
|
loading="lazy">
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- Venue Information -->
|
||||||
|
<div class="jem-venue__info">
|
||||||
|
|
||||||
|
<!-- Address -->
|
||||||
|
<?php if (!empty($venue->street) || !empty($venue->city) || !empty($venue->postalCode)) : ?>
|
||||||
|
<div class="jem-venue__info-item jem-venue__address">
|
||||||
|
<span class="jem-venue__info-icon" aria-hidden="true">📍</span>
|
||||||
|
<div class="jem-venue__info-content">
|
||||||
|
<strong class="jem-venue__info-label">
|
||||||
|
<?php echo Text::_('COM_JEM_ADDRESS'); ?>:
|
||||||
|
</strong>
|
||||||
|
<address class="jem-venue__address-content">
|
||||||
|
<?php if (!empty($venue->street)) : ?>
|
||||||
|
<div class="jem-venue__street">
|
||||||
|
<?php echo $this->escape($venue->street); ?>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if (!empty($venue->postalCode) || !empty($venue->city)) : ?>
|
||||||
|
<div class="jem-venue__city-line">
|
||||||
|
<?php if (!empty($venue->postalCode)) : ?>
|
||||||
|
<span class="jem-venue__postal">
|
||||||
|
<?php echo $this->escape($venue->postalCode); ?>
|
||||||
|
</span>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if (!empty($venue->city)) : ?>
|
||||||
|
<span class="jem-venue__city">
|
||||||
|
<?php echo $this->escape($venue->city); ?>
|
||||||
|
</span>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if (!empty($venue->state)) : ?>
|
||||||
|
<div class="jem-venue__state">
|
||||||
|
<?php echo $this->escape($venue->state); ?>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if (!empty($venue->country)) : ?>
|
||||||
|
<div class="jem-venue__country">
|
||||||
|
<?php echo $this->escape($venue->country); ?>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
</address>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- Website -->
|
||||||
|
<?php if (!empty($venue->url)) : ?>
|
||||||
|
<div class="jem-venue__info-item jem-venue__website">
|
||||||
|
<span class="jem-venue__info-icon" aria-hidden="true">🌐</span>
|
||||||
|
<div class="jem-venue__info-content">
|
||||||
|
<strong class="jem-venue__info-label">
|
||||||
|
<?php echo Text::_('COM_JEM_WEBSITE'); ?>:
|
||||||
|
</strong>
|
||||||
|
<a href="<?php echo $this->escape($venue->url); ?>"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
class="jem-venue__link">
|
||||||
|
<?php echo $this->escape($venue->url); ?>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- Description -->
|
||||||
|
<?php if (!empty($venue->locdescription)) : ?>
|
||||||
|
<div class="jem-venue__description">
|
||||||
|
<h2 class="jem-venue__description-title">
|
||||||
|
<?php echo Text::_('COM_JEM_DESCRIPTION'); ?>
|
||||||
|
</h2>
|
||||||
|
<div class="jem-venue__description-content">
|
||||||
|
<?php echo $venue->locdescription; ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Map -->
|
||||||
|
<?php if (!empty($venue->latitude) && !empty($venue->longitude)) : ?>
|
||||||
|
<div class="jem-venue__map">
|
||||||
|
<h2 class="jem-venue__map-title">
|
||||||
|
<?php echo Text::_('COM_JEM_LOCATION'); ?>
|
||||||
|
</h2>
|
||||||
|
<div class="jem-venue__map-container">
|
||||||
|
<!-- Map would be rendered here by JEM's map functionality -->
|
||||||
|
<div class="jem-venue__map-placeholder">
|
||||||
|
<p><?php echo Text::_('COM_JEM_MAP_VIEW'); ?></p>
|
||||||
|
<p>
|
||||||
|
<a href="https://www.google.com/maps?q=<?php echo $venue->latitude; ?>,<?php echo $venue->longitude; ?>"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
class="jem-venue__map-link btn btn-primary">
|
||||||
|
<?php echo Text::_('COM_JEM_VIEW_ON_MAP'); ?>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- Events at this Venue -->
|
||||||
|
<?php if (!empty($events)) : ?>
|
||||||
|
<div class="jem-venue__events">
|
||||||
|
<h2 class="jem-venue__events-title">
|
||||||
|
<?php echo Text::_('COM_JEM_EVENTS_AT_VENUE'); ?>
|
||||||
|
</h2>
|
||||||
|
<div class="jem-venue__events-list">
|
||||||
|
<?php foreach ($events as $event) : ?>
|
||||||
|
<div class="jem-venue__event-item">
|
||||||
|
<div class="jem-venue__event-date">
|
||||||
|
<?php if (!empty($event->dates)) : ?>
|
||||||
|
<time datetime="<?php echo $this->escape($event->dates); ?>">
|
||||||
|
<?php echo HTMLHelper::_('date', $event->dates, Text::_('DATE_FORMAT_LC4')); ?>
|
||||||
|
</time>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
<h3 class="jem-venue__event-title">
|
||||||
|
<?php if (!empty($event->slug)) : ?>
|
||||||
|
<a href="<?php echo Route::_('index.php?option=com_jem&view=event&id=' . $event->slug); ?>"
|
||||||
|
class="jem-venue__event-link">
|
||||||
|
<?php echo $this->escape($event->title); ?>
|
||||||
|
</a>
|
||||||
|
<?php else : ?>
|
||||||
|
<?php echo $this->escape($event->title); ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- Back Button -->
|
||||||
|
<div class="jem-venue__actions">
|
||||||
|
<a href="<?php echo Route::_('index.php?option=com_jem&view=eventslist'); ?>"
|
||||||
|
class="jem-venue__button btn btn-secondary">
|
||||||
|
<?php echo Text::_('COM_JEM_BACK_TO_EVENTS'); ?>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
Reference in New Issue
Block a user