Aug 312014
 

One of the features quietly introduced in Zen Cart v1.5.3 is auto-loaded observers.  If you’re developing a plugin that uses an observer-class, you normally have to provide two files in your plugin’s distribution to get that class loaded and instantiated:

  1. /includes/auto_loaders/config.your_plugin.php
  2. /includes/classes/observers/class.your_plugin.php

Starting with Zen Cart v1.5.3, built-in functionality will do the “heavy lifting” to get your class-file loaded and instantiated — so long as your class doesn’t have any special requirements on its load point (auto-loaded classes are loaded at point 175, after all other system dependencies are loaded).   Here are the requirements (as pulled from the file /includes/init_includes/init_observers.php):

  1. The file is in the /includes/classes/observers folder and named auto.your_plugin.php.  All files in this directory that start with auto. will be included (i.e. loaded).
  2. The file defines a class named zcObserver + the CamelCased filename, e.g. a file named auto.your_plugin.php will contain a class named zcObserverYourPlugin.  A myDEBUG*.log file will be generated if a properly-named file is loaded, but the class name doesn’t conform to these rules.

Here’s an example that displays a message in the header, but only on the index (main) page; the file is /includes/classes/observers/auto.test_observer.php:

<?php
// -----
// An example of an auto-loaded observer, based on a feature introduced in Zen Cart v1.5.3.
//
// Displays a header-message *only* on the index page.
//
class zcObserverTestObserver extends base {

  function __construct() {
    $this->attach($this, array('NOTIFY_HEADER_START_INDEX'));
    
  }

  function update (&$class, $eventID, $paramsArray = array()) {
    global $messageStack;
    $messageStack->add ('header', 'The auto-loaded observer is loaded!', 'success');
    
  }
}

Happy auto-loading!

Sorry, the comment form is closed at this time.