Larry Garfield wrote:
On Sun, 10 Jun 2007 22:13:04 -0400, Moshe Weitzman <weitzman@tejasa.com> wrote:
I ran into this issue in the context of "which file do we need to include so that this function becomes available". The file was module-dependent. The function then did not exist yet, so module_implements() and function_exists() won't work. many keep saying that, but there is an easy fix. just use module_invoke('og', 'vocab') if thats what is meant. then module_invoke can do the needed includes. module invoke makes explicit the module that owns the function.
That again assumes that the code running that line knows which part of the function is the module and which isn't. If you are given the string:
"foo_bar_baz_ugh_agh"
Is that the foo module, function bar_baz_ugh_agh? Or the foo_bar_baz module function ug_agh? Or foo_bar_baz_ugh module function agh? That cannot be determined without a guess-and-check method. That's precisely why I didn't go that route for the menu-split patch.
You are assuming that I am assuming :). I hadn't spelled it all out yet ... Right now, hook_menu() accepts only a string as the value of 'page callback' element. lets say we allow a simple array with 2 values. the values will be the first two arguments of module_invoke(). in this case menu_execute_active_item() would then perform a module_invoke() instead of a direct call_user_func_array(). then the including of the right file gets done in module_invoke(), not directly specified in the menu item definition. here is an example from current HEAD and how I propose. Note that 'file' element is gone, and we know definitively that it belongs to system.module based on the page callback value. CURRENT $items['admin/build'] = array( 'title' => 'Site building', 'page callback' => 'system_admin_menu_block_page', 'file' => 'system.admin.inc', PROPOSED $items['admin/build'] = array( 'title' => 'Site building', 'page callback' => array('system, 'admin_menu_block_page'), ( Note that we may still have to support a string as a page callback (i think) for non module defined callbacks.