JReviews logo Docs
Menu
Version

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.

Existing Customizations?
If you have template, language, or hook customizations for listing detail pages or forms, review the migration checklist before enabling Early Access features.

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 $data variable (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.php extension 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.php templates in fields_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.

Action Required if You Use Custom Field Formatting
This change only affects custom fields where you have added custom code in the field's Advanced Settings using the **"PHP output format"** editor or **"Field output template"** dropdown. If you have customized any fields this way, those customizations will not work when you enable Early Access - the fields will fall back to their "Output format" setting instead. Plan time to migrate these specific fields to Blade syntax (using the new "Blade template code" and "Field output Blade template" settings) before enabling Early Access on production sites. Fields without custom code in these settings are unaffected. See Early Access Features for more information.

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"
                    }
                ]
            }
        }
    ]
}