Release Notes
Changes and improvements in JReviews v6
JReviews 6 is a seamless upgrade from JReviews 5 with no backward-breaking changes. Your existing site continues working exactly as before, while giving you access to powerful new features when you're ready.
Version 6.0.0 (02-11-2026)
Early Access Features
The following early access settings are available:
- Listing detail page
- Listing form
The development work required to rewrite just these two frontend areas was substantial. The listing detail page includes numerous core features—such as comments, favorites, manage actions, media layouts, and related listings—along with integrations for multiple addons: AssistAI, EngageUsers, ListingResources, Maps, MyLists, and PaidListings.
To learn more detail about the early access features and other important changes related to template customizations and hooks read the Early Access features article.
Blade Template Formatting for Custom Fields (Early Access)
When the Early Access listing detail page is enabled, custom field output formatting uses a new Blade template-based system with different syntax and variables:
- Use Blade directives (
@foreach,@if, etc.) instead of PHP tags (<?php ?>) - Field data is available in the
$datavariable (pre-parsed for FormBuilder fields) - Use
{{ $variable }}for output instead of<?php echo $variable; ?> - Declare expected variables with
@props(['data', 'listing']) - Template files use
.blade.phpextension instead of.thtml
The system supports both inline code and template files:
- "Blade template code" setting - Write Blade syntax directly in the field settings
- "Field output Blade template" setting - Select from
.blade.phptemplates infields_phpformat/
Migration Note: When you enable Early Access, the legacy PHP format system (php_format, php_format_theme) is replaced by the Blade template system. Existing PHP format customizations will be ignored and fields will fall back to their default Output Format until migrated to Blade syntax. The standard PHP format system continues to work when Early Access is disabled.
See the Custom Field PHP Formatting documentation for complete examples and step-by-step migration guidance.
PHP 8.2
Minimum PHP 8.2 required (upgrade from 8.1)
JSON Query Builder
JReviews 6 introduces a new JSON Query Builder that replaces the legacy Custom Where/Order SQL system with a secure, structured, and validated approach. The JSON Query Builder prevents SQL injection vulnerabilities, works across different modules/pages, and is easier to maintain.
In this version the feature is only available in detail page related listing widgets.
See the JSON Query Builder documentation for complete usage details.
Migrating from Legacy Custom Where/Order
If you're currently using Custom Where/Order settings in JReviews 5, you can migrate them to the new JSON Query Builder using the patterns below. These patterns show common SQL queries and their JSON equivalents.
Pattern 1: Simple WHERE Condition
Legacy (Joomla):
Listing.state = 1
JSON:
{
"where": [
{
"column": "state",
"operator": "=",
"value": 1
}
]
}
Pattern 2: Multiple AND Conditions
Legacy (Joomla):
Listing.state = 1 AND Listing.catid = 5 AND Field.jr_price >= 100
JSON:
{
"where": [
{
"column": "state",
"operator": "=",
"value": 1
},
{
"column": "catid",
"operator": "=",
"value": 5
},
{
"column": "field_data.jr_price",
"operator": ">=",
"value": 100
}
]
}
Pattern 3: OR Conditions
Legacy (Joomla):
Listing.state = 1 AND (Field.jr_city = 'New York' OR Field.jr_city = 'Los Angeles')
JSON:
{
"where": [
{
"column": "state",
"operator": "=",
"value": 1
},
{
"logic": "OR",
"conditions": [
{
"column": "field_data.jr_city",
"operator": "=",
"value": "New York"
},
{
"column": "field_data.jr_city",
"operator": "=",
"value": "Los Angeles"
}
]
}
]
}
Pattern 4: IN Operator
Legacy (Joomla):
Listing.catid IN (5, 6, 7, 8)
JSON:
{
"where": [
{
"column": "catid",
"operator": "IN",
"value": [5, 6, 7, 8]
}
]
}
Pattern 5: LIKE Pattern
Legacy (Joomla):
Listing.title LIKE '%hotel%'
JSON:
{
"where": [
{
"column": "title",
"operator": "LIKE",
"value": "%hotel%"
}
]
}
Pattern 6: Date Functions
Legacy (Joomla):
Listing.created >= DATE_SUB(NOW(), INTERVAL 30 DAY)
JSON:
{
"where": [
{
"column": "created",
"operator": ">=",
"value": "DATE_SUB(NOW(), INTERVAL 30 DAY)"
}
]
}
Pattern 7: Date Extraction
Legacy (Joomla):
MONTH(Field.jr_eventdate) = MONTH(NOW()) AND YEAR(Field.jr_eventdate) = YEAR(NOW())
JSON:
{
"where": [
{
"column": "MONTH(field_data.jr_eventdate)",
"operator": "=",
"token": "current_month"
},
{
"column": "YEAR(field_data.jr_eventdate)",
"operator": "=",
"token": "current_year"
}
]
}
Pattern 8: Dynamic Tokens
Legacy (Joomla):
Listing.created_by = {user_id}
JSON:
{
"where": [
{
"column": "created_by",
"operator": "=",
"token": "user_id"
}
]
}
Pattern 9: Ratings/Aggregates
Legacy (Joomla):
Totals.user_rating >= 4.5 AND Totals.user_rating_count >= 10
JSON:
{
"where": [
{
"column": "aggregates.user_rating",
"operator": ">=",
"value": 4.5
},
{
"column": "aggregates.user_rating_count",
"operator": ">=",
"value": 10
}
]
}
Pattern 10: ORDER BY
Legacy Custom Order (Joomla):
Totals.user_rating_rank DESC, Listing.created DESC
JSON:
{
"order": [
{
"column": "aggregates.user_rating_rank",
"direction": "desc"
},
{
"column": "created",
"direction": "desc"
}
]
}
Pattern 11: Subqueries (Same Author)
Legacy (Joomla):
Listing.id != {listing_id} AND Listing.created_by = (SELECT created_by FROM #__content WHERE id = {listing_id})
JSON:
{
"where": [
{
"column": "id",
"operator": "!=",
"token": "listing_id"
},
{
"column": "created_by",
"operator": "=",
"subquery": {
"select": "created_by",
"from": "#__content",
"where": [
{
"column": "id",
"operator": "=",
"token": "listing_id"
}
]
}
}
]
}