Issue status update for http://drupal.org/node/29428 Post a follow up: http://drupal.org/project/comments/add/29428 Project: Drupal Version: cvs Component: module system Category: feature requests Priority: normal Assigned to: Anonymous Reported by: nedjo Updated by: chx Status: patch (code needs review) Attachment: http://drupal.org/files/issues/extend.patch (1.42 KB) I think this method would be a better way to extend pretty much anything. Based on $_GET['q'] and the arguments from theme() you can determine which theme function called you and can add anything. This won't allow override but would allow extension. If we want override then simply replace both hooks with one at the end and use $function() syntax to enable references. chx Previous comments: ------------------------------------------------------------------------ Mon, 22 Aug 2005 22:47:09 +0000 : nedjo Attachment: http://drupal.org/files/issues/module-extension-and-override.patch (1.38 KB) A frequently requested functionality is the ability to override or extend core module functions. This small patch is an initial take on how to enable function extension and overriding. It takes the existing module_invoke() function and adds tests for override and extension functions, in the forms modulename_originalfunction_override() and modulename_originalfunction_extension(). So, for example, an override function for the core taxonomy_node_form() function as defined by a module named testmodule would be called testmodule_taxonomy_node_form_override(), and would be run instead of taxonomy_node_form(). And testmodule_taxonomy_node_form_extension() would be run every time taxonomy_node_form() was called, hence "extending" it. Of course, this approach would only be useful if we converted most - or all! - of our current module function calls to use module_invoke()... ------------------------------------------------------------------------ Tue, 23 Aug 2005 11:35:06 +0000 : stefan nagtegaal I'm not sure I get this.. Am I right when I think we can override (and change) any function in drupal with this patch, which would give us the possibility to: - override forms; - override functions which generates the node links, so they (finally) could be hidden instead of always displayed; - any other advantages which i'm missing atm? (probably a lot, but can't think of any right now, right here) Stefan ------------------------------------------------------------------------ Wed, 24 Aug 2005 00:15:09 +0000 : drumm -1 This will just encourage hacks and create weird bugs as the code interactions become more complex. The example form will be themeable when the new form API is in place. ------------------------------------------------------------------------ Wed, 24 Aug 2005 00:37:49 +0000 : nedjo Thanks for the comments. I'm throwing this out not because I think the solution I've suggested is full or even sound, but to try to stimulate a better solution. (The example I gave was random and not designed as one particularly needing overriding or extending.) Basically, the problem is: because we don't use PHP's class object functionality or some substitute, we don't have a way of overriding or extending object methods -- in Drupal, core functions -- beyond the limited functionality explicitly exposed through hooks. This problem has fairly significant impacts. Consider the taxonomy system and contributed modules. We've seen various approaches to enhancing taxonomy display, e.g., taxonomy_menu. But, because they can't (readily) add to the existing (core) taxonomy system, they tend to bypass and replace it, e.g., by creating new urls and displays. So we get a variety of competing approaches, each implementing its own limited set of functionality, often replicating code. As site admins, we have to choose between one or another implementation, rather than being able to seamlessly combine them all. Ideally, we'd to be able to add just the specific enhancement we want. Is there another, better way to emulate object method overrides and extension? Or should we simply accept this limitation and work on improving extendability through hooks and theming?