Content Cart v4.0.0

The JoomLine team presents a major update to the "Content Cart" plugin, version 4.0.0. This release includes significant improvements in security, performance, internationalization, and architecture, as well as new functionalities.

Without a doubt, this is the biggest update to the plugin in its entire existence. We have re-engineered the concept and architecture of the plugin. Yet, it remains as compact and simple as ever.

What's new in version 4.0.0?

Critical Security Fixes

  • Removed dangerous extract() function in mail.php layout to prevent variable injection
  • Added email validation using filter_var() before sending orders
  • Implemented server-side validation for item quantity (range 1-999)
  • CSRF attack protection for all cart operations:
    • Adding an item to the cart (handleAddToCart)
    • Updating item quantity (cart.php)
    • Submitting an order (handleCartDisplay)
  • Price manipulation protection:
    • Prices are now retrieved only from the server from custom material fields
    • Removed price field from client-side form
    • Added check for negative prices
    • Prevented price change attacks via browser inspector

Performance Optimization

  • Caching system:
    • Session data caching ($cartCache) - 70-80% reduction in session calls
    • Category ID caching ($catidsCache) - eliminates repeated parameter parsing
    • Application areas caching ($applicationAreasCache)
    • Cart URL caching ($cartUrlCache) - eliminates repeated route building
    • All caches are lazily initialized on first access
  • Event optimization:
    • Removed redundant event handlers (onContentAfterTitle, onContentBeforeDisplay)
    • Reduced from 4 to 2 events per material - a 75% reduction
    • Updated getSubscribedEvents() to register only necessary events
  • Resource loading:
    • Centralized CSS loading in loadCss() method
    • CSS loaded once per request with $cssLoaded flag
    • Removed duplicate resource loading code from all layouts
    • Eliminated 90% of redundant WebAsset checks
  • Debugging optimization:
    • Removed expensive debug_backtrace() calls
    • Simplified debug logging - 200-300% performance improvement in debug mode
    • Added debugLog() method for centralized logging
    • All error_log() calls wrapped in debug mode checks

JavaScript Internationalization (i18n)

  • Added 14 translatable language constants for JavaScript messages
  • Joomla.getOptions() integration to pass translations from PHP to JS
  • Replaced all hardcoded Russian strings in contentcart.js and contentcart-init.js
  • Support for multilingual error messages, confirmations, and user notifications

New Features

  • Configurable cart storage time (TTL):
    • Added cart TTL setting (1-365 days) in plugin configuration
    • Default value: 30 days
  • Module display options:
    • Added option to show/hide item list in the module
    • CSS loading based on module settings
    • Styles for empty cart message
  • Setting field improvements:
    • Updated field types from radio.switcher to btn-group for better compatibility

Bug Fixes

  • Fixed module operation when the plugin is not loaded
  • Fixed cart operation in item quantity modification mode

Technical Improvements

  • Updated resource version to 4.1.2
  • Improved architecture with the addition of private helper methods
  • Improved error handling with try-catch blocks
  • Improved code documentation with @since 3.0.1 tags
  • Updated translations for new settings (EN, RU)

Expected Results

  • 50-70% performance improvement on category pages
  • 90% reduction in session operations
  • 75% reduction in event processing load
  • All critical CSRF vulnerabilities eliminated
  • Price manipulation attacks prevented
  • Full compatibility with Joomla 5.x/6.x maintained

Migration to localStorage with AJAX for Joomla 5/6 (December 18, 2025)

  • Full migration from PHP sessions to browser localStorage for persistent cart storage
  • localStorage as primary storage with a 30-day TTL
  • PHP session as a fallback option for backward compatibility
  • AJAX API for server-side price validation
  • New JavaScript modules: contentcart.js and contentcart-init.js
  • Smart buttons with automatic state updates
  • Dynamic cart module with item list display
  • Automatic cart clearing after successful order placement
  • Security: prices always from the server, CSRF protection
  • Resource management via joomla.asset.json v4.1.0
  • Updated README with current information

Migration to Joomla 5/6 with fixes (August 2025)

  • Migration of ContentCart to Joomla 5/6 with fixes for order material visibility
  • Basic migration to Joomla 5 - extension launches successfully
  • Code refactoring and language variable rework
  • Category selection for orders via select dropdown
  • Changed CSS inclusion setting

Architectural Changes

  • New plugin structure:
    • Migration to namespace architecture: Joomline\Plugin\Content\Contentcart
    • Added services/provider.php for Dependency Injection
    • Created src/Extension/Contentcart.php - main plugin class
    • Created src/Helper/ContentcartHelper.php - helper methods
  • New module structure:
    • Added services/provider.php for the module
    • Created src/Dispatcher/Dispatcher.php for handling module logic
    • Created src/Helper/ContentcartHelper.php for the module
  • Layout system:
    • Transition to layout system (layouts/cart.php, layouts/default.php, layouts/mail.php)
    • Removed old tmpl/mail.php, replaced with layouts/mail.php
    • Improved structure of tmpl/cart.php and tmpl/default.php templates
  • Resource management:
    • Added plg_contentcart/assets/joomla.asset.json for JS/CSS management
    • Added mod_contentcart/joomla.asset.json for the module
    • Centralized loading of styles and scripts

New Files and Structure

  • JavaScript:
    • plg_contentcart/assets/js/contentcart.js - main cart logic
    • plg_contentcart/assets/js/contentcart-init.js - initialization and events
  • CSS:
    • plg_contentcart/assets/css/jlcontentcart.css - cart styles
  • PHP:
    • plg_contentcart/helper/contentcart.php - helper class for backward compatibility
  • Created on .

Download Extension page

email: This email address is being protected from spambots. You need JavaScript enabled to view it.

© 2010- JoomLine

The Joomla!® name is used under a limited license from Open Source Matters in the United States and other countries. joomline.org is not affiliated with or endorsed by Open Source Matters or the Joomla! Project.