try{ $customer = new inspired_customer(); $customer->setPk(9); $customer->read(); // product ids to test $ids = array(15,20,25); foreach($ids as $id) { $object = new inspired_product(); $object->set('productid', $id); $object->read(); $objects[] = $object; } // Setup the decorators $decorator = new decorator( array( new inspired_product_decorator_discount_group($customer), new inspired_product_decorator_discount_category(), ) ); $decorator->setObjects($objects); $decorator->decorate(); foreach($decorator->getObjects() as $product){ echo '
'; echo $product->getPk().' '.$product->prodname.'
'; var_dump($product->discounts); } }catch(Exception $e) { echo $e->getMessage().'
'; } class inspired_product_decorator_discount_group extends decorator_base implements decorator_interface{ function __construct(inspired_customer $customer) { $this->customer = $customer; } function &getData() { /* * Lookup the customer group & assicoated discount rules. */ /* * Note, can perform IN() queries based on these Ids; */ echo 'Calculating group discounts for productIds: '.implode(', ', $this->getObjectIds()).'
'; foreach($this->objects as $o) { $data[$o->getPk()] = 5 + $o->getPk(); } return $data; } function addData(&$object, &$data) { $object->discounts['group'] = $data; } } interface decorator_interface { function decorate(); function &getData(); function addData(&$object, &$data); }