rendered paste bodytry{ $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 '<hr>'; echo $product->getPk().' '.$product->prodname.'<br>'; var_dump($product->discounts); }}catch(Exception $e){ echo $e->getMessage().'<br>';}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()).'<br>'; 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); }