JReviews 3 is the culmination of many months of work to create an even better version of JReviews. It is more modern on the surface with a refreshed theme, but most importantly, it is much better under-the-hood. There is a monumental amount of changes in JReviews 3, which implements several new software design patterns that make the code more robust, modular, easier to develop, and faster. All the JReviews Add-ons have also been upgraded with new versions for compatibility with JReviews 3.
The best Directory & Reviews solution for Joomla and WordPress sites just got better!
Below you can read more about just some of the areas where JReviews 3 is better.
A Modern & Clean Look
One of the goals in JReviews 3 was to give it a makeover to deliver a modern and clean look in both desktop and mobile devices. To achieve this goal the new theme has fewer borders, boxes, and backgrounds. Buttons are larger, icons are bigger and all the forms have been completely overhauled with a much cleaner design.
The review layout also changed to give more prominence to the reviewer with a dedicated reviewer sidebar.
A new default user letter avatar system was also developed for sites that don't use a community extension or sites using the UserProfiles Add-on for community profiles. You can explore the updated JReviews demo site to see what the different pages look like.
Posting Moderated Submissions to Facebook
One of the first feature improvements that take advantage of the underlying code changes is Facebook posting. This functionality was taken a step further and now also works on moderated submissions. This was accomplished by generating a long-expiring access token once users authorize posting to their accounts. This long expiring access token is what allows JReviews to post to the user account even when the user is offline.
Listing Detail Page Canonical Tag
Joomla generates canonicals out of the box through the core SEF plugin, but these are wrong because it only mimics the address URL on the browser. So, visiting the same page with two different URLs, Search Engine Friendly (SEF) and non-SEF, results in two different canonical URLs, instead of having them both point to the SEF URL. WordPress doesn't output a canonical tag by default. This has been a much sought after feature and now JReviews 3 can automatically generate correct canonical tag URLs for listing detail pages in both Joomla and WordPress.
PHP 7 Required
We introduced compatibility with PHP 7 back in 2016 which allowed clients to double site speeds. Starting with JReviews 3 we are no longer supporting PHP 5. This is a logical step now that PHP 7 is widely available and offers much better performance. It also allows us to take advantage of code and frameworks developed specifically for PHP 7.
As a side note, Joomla itself is dropping PHP 5 support starting with Joomla 4 and WordPress recommends on their website using PHP 7.2+.
Application Service Container
The new services implementation allows sharing application-level services (like asset loading, configuration, authorization, notifications, storage, ...) across JReviews, modules & widgets, and Add-ons. This results in simpler, shorter code, elimination of duplicate queries and improved performance.
Application Events System
The new events implementation is a great way to decouple many parts of the application, because a single event can have multiple listeners that do not depend on each other. For example, when a review is submitted JReviews may send several notification emails, Tweet the review, and post it to Facebook. Instead of coupling the review submission code with all of these actions, a single "review submitted" event is triggered, and multiple listeners can receive this event and process it to perform all these different actions (notifications, Twitter, Facebook). The system is extendable so you can also create your own listeners for existing events. You can find a complete list of existing events and examples of adding new listeners in the documentation.
Application Filters System
The new filters implemtation is a great way to extend or modify the existing functionality without having to touch or override core files. Filters can modify data by binding a callback function to a filter hook. When the filter is executed, each callback function is run in order of priority, and can modify the filtered data by returning a new value.
There are many filter hooks strategically placed in the code at points where you may want override the value of a variable at runtime. For example, you can use a filter to: change the page title and metatags of different pages, override the permissions of specific users or user groups for different actions (creating listings, reviews, etc.), add or remove CSS and scripts loaded on the page. You can find a complete list of existing filters with several useful examples of how to use them in the documentation.
Queue Add-on For Asynchronous Event Processing
The Queue Add-on takes the new Events System to a whole new level by allowing you to process the events asynchronously and independent of the main program flow. This has a couple of important benefits. First, user interaction with the site will be much faster because the user doesn't have to wait for all event listeners to finish processing when submitting a review, listing, etc. Instead these actions are added to a queue and processed in the background. Second, the code is less prone to failure because an error in one of the post-submit events will not interfere with the submission itself since these actions are processed independent of each other. For example, when a review is submitted, if the email events are queued and there's an error sending emails, the review form will not hang and it won't affect the user experience.
Upgrading to JReviews 3
I have prepared a detailed guide that explains how to upgrade from JReviews 2 to JReviews 3. Given the number of code changes in this new version it is important that you read the guide and follow the instructions.