[development] module names and namespaces
Aaron Winborn
winborn at advomatic.com
Sun Oct 17 14:01:33 UTC 2010
With several modules I collaborate on, such as Media, Media: YouTube,
Node Reference / Embed Media Browser (nrembrowser), etc, we are using a
customized version of the proposed variable API that didn't make it into d7:
http://drupalcode.org/viewvc/drupal/contributions/modules/media/includes/media.variables.inc?revision=1.11&view=markup&pathrev=MAIN
Prepends all variables with media__ (note the double underscore). Also,
by defining all definitions, allows for an easy uninstall, with:
foreach (media_variable_default() as $name => $value {
media_variable_del($name);
}
This allows modules to use similar namespacing (as the problem is not
simply going to go away). Also defines variable defaults, so that vars
are called like:
media_variable_get('file_extensions');
which is easier to deal with on many levels than
variable_get('media__file_extensions', 'jpg jpeg gif png txt doc xls pdf
ppt pps odt ods odp mp3 mov m4v mp4 mpeg avi ogg wmv ico');
and can also be overridden as usual with
media_variable_get('file_extensions', 'jpg jpeg gif png');
For updating modules from an old scheme to the new scheme, look at
http://drupalcode.org/viewvc/drupal/contributions/modules/media_brightcove/media_brightcove.install?revision=1.1.2.8.2.2&view=markup&pathrev=DRUPAL-6--2
/**
* Convert variables to the Media: Brightcove variable namespace.
*/
function media_brightcove_update_6102() {
$ret = array();
$variables = array(
'brightcove_publisher_id' => 'publisher_id',
'brightcove_player_id' => 'full_player_id',
'brightcove_player_preview' => 'preview_player_id',
'emvideo_brightcove_token' => 'read_token',
'emvideo_brightcove_write_token' => 'write_token',
);
foreach ($variables as $old_variable => $new_variable) {
_media_brightcove_migrate_variable($old_variable, $new_variable);
}
$ret[] = array('success' => TRUE, 'query' => "Converted variables to
the Media: Brightcove variable namespace.");
// Add the new settings page to the menu.
menu_rebuild();
$ret[] = array('success' => TRUE, 'query' => "Rebuilt the menu for
the new administrative settings page.");
return $ret;
}
/**
* Migrate a variable from the old namespace.
*/
function _media_brightcove_migrate_variable($old_variable, $new_variable) {
$value = variable_get($old_variable,
media_brightcove_variable_default($new_variable));
if (media_brightcove_variable_get($new_variable) != $value) {
media_brightcove_variable_set($new_variable, $value);
}
variable_del($old_variable);
}
On 10/16/2010 12:34 PM, David Cohen wrote:
> Hey, I'm wondering what the community thinks about this...
>
> I feel that if I have modules/foo/foo.module checked into drupal.org CVS
> and drupal.org/project/foo, then this module stakes a claim to the
> foo_... namespace. That is, I can name my functions foo_whatever
> without worrying that some other module out there already defines the
> same function. Similarly, I can name my variables foo_whatever,
> database tables, and so on.
>
> Now, let's say someone else checks in a module called foo_bar. And say
> both modules define the same function, variable or other namespace
> collision. What then? Is that a bug, and if so which module is
> responsible for fixing it?
>
> If you want a concrete example, both fb.module and fb_social.module
> define variables starting with "fb_", and specifically I wonder how to
> respond to http://drupal.org/node/943462.
>
> I don't want to start a flame war. I'm curious if there is community
> consensus or official policy. Personally I think its a bad idea to name
> any module with an underscore. That is, drupal.org/project/foo_bar
> should instead be drupal.org/project/foobar, as this avoids any
> confusion.
>
> -Dave
>
--
Aaron Winborn
Advomatic, LLC
http://advomatic.com/
Drupal Multimedia available in September!
http://www.packtpub.com/create-multimedia-website-with-drupal/book
My blog:
http://aaronwinborn.com/
More information about the development
mailing list