[development] low hanging fruit for Drupal 6: variable defaults

Larry Garfield larry at garfieldtech.com
Fri May 4 14:26:44 UTC 2007

On Friday 04 May 2007, Dries Buytaert wrote:

> Anyway, let's step back for a bit. It seems like we're trying to
> solve two problems in this thread:
>   1. For convenience, we want a central place to define a variable's
> default value.
>   2. Out of necessity, we want a mechanism to let the locale system
> translate variables that have dynamic content shown on the UIs (i.e.
> the footer message).
> 1 and 2 are somewhat related -- if we had a mechanism to introspect
> what variables are available, we might be able to extract their
> default value from a central place, and the locale system could
> figure out what variables need to be translated.
> So, each variable should have two properties: (i) a default value and
> (2) a "dynamic translation"-flag (TRUE if translatable, FALSE if not)
> and we should be able to poll both.  Gabor's original question was:
> what would be the best implementation?

Because the variables could change at runtime, I think a hook_variables() (or 
similar) would be the best approach.  Core may not use more than just node 
type, but I know some contribs do, like form IDs.

hook_variables() {
  $items = array();
  $items['mymod_num_things'] = array(
    '#default_value' => 2,  // Same syntax as FAPI uses
    '#realm' => 'mymod', // optional
    '#translatable' => FALSE, // probably default false
    '#cacheable' => TRUE, // default to TRUE if under X chars when serialized
    '#serialize' => FALSE, // default to true for object/array, else false 
  foreach (node_get_types('name') as $type) {
    $items['mymod_things_for_' . $type] = array(
      '#default_value' => array(),  

  return $items;

I kinda like the idea of using FAPI syntax here, as then 
system_settings_form() can fill in defaults for us if they're not specified.  
(I suppose it could anyway, but meh. <g>)  I leave that to Gabor to decide.

I'm undecided on whether non-cached big variables should still be considered 
variables or should have some other namespace/table.  I guess that depends on 
how expensive it would be to make variable_get() handle both cases.

Larry Garfield			AIM: LOLG42
larry at garfieldtech.com		ICQ: 6817012

"If nature has made any one thing less susceptible than all others of 
exclusive property, it is the action of the thinking power called an idea, 
which an individual may exclusively possess as long as he keeps it to 
himself; but the moment it is divulged, it forces itself into the possession 
of every one, and the receiver cannot dispossess himself of it."  -- Thomas 

More information about the development mailing list