Index: kernel/application.php =================================================================== --- kernel/application.php (revision 13128) +++ kernel/application.php (working copy) @@ -1756,7 +1756,7 @@ list ($prefix) = explode('.', $prefix_special); $url_parts = Array (); - $listener = $this->RewriteListeners[$prefix]; + $listener = $this->RewriteListeners[$prefix][0]; $ret = $listener[0]->$listener[1](REWRITE_MODE_BUILD, $prefix_special, $params, $url_parts, $keep_events); Index: kernel/utility/unit_config_reader.php =================================================================== --- kernel/utility/unit_config_reader.php (revision 13128) +++ kernel/utility/unit_config_reader.php (working copy) @@ -466,14 +466,22 @@ // collect rewrite listeners if (array_key_exists('RewriteListener', $config) && $config['RewriteListener']) { - $rewrite_listener = $config['RewriteListener']; - if (strpos($rewrite_listener, ':') === false) { - $rewrite_listener = $prefix . '_EventHandler:' . $rewrite_listener; + $rewrite_listeners = $config['RewriteListener']; + + if (!is_array($rewrite_listeners)) { + // when one method is used to build and parse url + $rewrite_listeners = Array ($rewrite_listeners, $rewrite_listeners); } + foreach ($rewrite_listeners as $index => $rewrite_listener) { + if (strpos($rewrite_listener, ':') === false) { + $rewrite_listeners[$index] = $prefix . '_EventHandler:' . $rewrite_listener; + } + } + $rewrite_priority = array_key_exists('RewritePriority', $config) ? $config['RewritePriority'] : false; - $this->Application->RewriteListeners[$prefix] = Array ('listener' => $rewrite_listener, 'priority' => $rewrite_priority); + $this->Application->RewriteListeners[$prefix] = Array ('listener' => $rewrite_listeners, 'priority' => $rewrite_priority); } } } Index: units/helpers/mod_rewrite_helper.php =================================================================== --- units/helpers/mod_rewrite_helper.php (revision 13128) +++ units/helpers/mod_rewrite_helper.php (working copy) @@ -209,7 +209,7 @@ $this->_partsFound[] = 'parsePage'; } - foreach ($this->Application->RewriteListeners as $prefix => $listener) { + foreach ($this->Application->RewriteListeners as $prefix => $listeners) { // set default page $vars[$prefix . '_Page'] = 1; // will override page in session in case, when none is given in url @@ -219,7 +219,8 @@ $vars[$prefix . '_Page'] = $page_number; } - $listener_result = $listener[0]->$listener[1](REWRITE_MODE_PARSE, $prefix, $vars, $url_parts); + // $listeners[1] - listener, used for parsing + $listener_result = $listeners[1][0]->$listeners[1][1](REWRITE_MODE_PARSE, $prefix, $vars, $url_parts); if ($listener_result === false) { // will not proceed to other methods return true; @@ -943,10 +944,12 @@ } foreach ($this->Application->RewriteListeners as $prefix => $listener_data) { - list ($listener_prefix, $listener_method) = explode(':', $listener_data['listener']); - $listener =& $this->Application->recallObject($listener_prefix); + foreach ($listener_data['listener'] as $index => $rewrite_listener) { + list ($listener_prefix, $listener_method) = explode(':', $rewrite_listener); + $listener =& $this->Application->recallObject($listener_prefix); - $this->Application->RewriteListeners[$prefix] = Array (&$listener, $listener_method); + $this->Application->RewriteListeners[$prefix][$index] = Array (&$listener, $listener_method); + } } $init_done = true;