Language variables in <name> and <description> don't resolve during
installation because language files aren't deployed yet. Fixed across
all 5 package sub-extensions.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Category filtering (#13):
- Category site view with model filtering by junction table
- Category page template with color swatch and description
- Router routes for /category/alias URLs
Responsive design (#14):
- Dedicated storelocator.css with mobile-first grid layout
- Click-to-call phone styling on mobile
- Responsive video embeds and image gallery
Business hours (#15):
- Hours display on detail page with openingHours Schema.org
- CSS for structured hours table
Menu item types (#16):
- Router supports locations, location, and category views
- Menu item params via router configuration
SEO optimization (#17):
- Meta title and description set from location data
- Schema.org JSON-LD with full LocalBusiness markup
- Canonical SEF URLs for all views via Router
- Category URLs for filtered views
Admin list enhancements (#18):
- Already implemented: filters, search, pagination, batch ops
- (Covered in earlier commits)
Location photos gallery (#19):
- images field (newline-separated paths) in location form
- CSS grid gallery on detail page with lazy loading
Store video display (#20):
- video_url field in location form
- VideoHelper parses YouTube/Vimeo URLs to embed URLs
- Responsive iframe embed with youtube-nocookie.com
Email/contact form (#21):
- Noted for future plugin implementation
Multi-language (#22):
- All strings in en-GB and en-US language files
- (Full i18n already in place)
Access control (#23):
- Component uses Joomla core ACL (inherits from MVCComponent)
Performance and caching (#24):
- Category data loaded in single query with junction join
- Map module uses efficient bulk category query
- Lazy loading on images and video iframes
Print-friendly view (#25):
- Print button on location detail
- Print CSS hides map, buttons, navigation
- Static map image from OpenStreetMap for print output
CSV import enhancements (#27):
- Noted for future enhancement
Also:
- Database: added images and video_url columns
- Location detail template: category tags, gallery, video, print, custom fields
- Category color swatches on tags and legend
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Multi-category support (#1):
- Categories table with parent_id hierarchy, color, marker_icon
- Location-category junction table for many-to-many relationships
- Category CRUD: admin model, table, controller, view, form
- Categories list view with color swatch, parent, location count
- Category edit form with color picker and marker icon upload
- LocationCategoriesField: multi-select for assigning categories
- LocationModel saves/loads junction table on save/edit
- Categories submenu in admin
Custom map markers (#2):
- Category color field drives marker pin color (SVG data URI)
- Custom marker_icon media field overrides color-based marker
- Leaflet markers use createLeafletIcon() with category color/icon
- Map loads category data alongside locations (single extra query)
- Category legend below map with color swatches
- Marker preview on category edit form
Custom fields (#6):
- Component implements FieldsServiceInterface
- Two contexts: com_mokojoomstorelocator.location and .category
- getContexts(), validateSection(), getValidSections() implemented
- Joomla's com_fields can now define fields for locations and categories
Closes#1, #2, #6
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Synced from Template-Joomla: pre-release.yml and auto-release.yml now
handle Joomla package extensions (type="package" with sub-extensions).
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copies of en-GB language files for US English locale support.
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Geocoding (#12):
- Geocoder helper with Nominatim (free default) and Google API
- Auto-geocode on save when address present but no coordinates
- Batch geocoding support for imports
- Component params for provider selection and API key
Geolocation (#9):
- "Use My Location" button with browser Geolocation API
- Permission handling (denied, unavailable, timeout states)
- Auto-selects first radius option on location detection
- Status messages with auto-dismiss
Import (#10):
- CSV import controller with column mapping
- Geocode option during import
- Update-existing option (match by title)
- Import view with file upload form
- CSV template download
Export (#11):
- CSV export controller with filter support
- UTF-8 BOM for Excel compatibility
- Export button on locations list toolbar
Get Directions (#8):
- Links in map popups and list/detail views
- Opens Google Maps directions with destination coords
- "Get Directions" button on location detail page
Sample Data:
- 8 Tennessee store locations with real coordinates
- Inject via admin toolbar button
- Duplicate prevention by alias check
Also: component config for geocoding, import submenu, toolbar
buttons for export/sample data.
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Admin:
- LocationController (FormController for save/edit/cancel)
- LocationsController (AdminController for publish/delete/ordering)
- Location edit view with tabbed form and Leaflet coordinate picker
- Component extension implements RouterServiceInterface
Frontend:
- Single location detail view with Schema.org JSON-LD
- SEF URL router (locations list + location detail by alias)
- Location detail template with map, contact info, directions
- Locations list now links to detail pages with distance display
Map module:
- Full Leaflet.js rendering with OpenStreetMap tiles
- MarkerCluster plugin for dense marker areas
- DOM-based popup content (XSS-safe, no innerHTML)
- Google Maps provider with clustering support
- Auto-fit bounds to show all markers
- "Get Directions" link in popups
Package:
- Post-install script enables bundled modules automatically
- Fixed .gitignore to allow src/**/site/ paths
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>