Writing a Factory Function
A factory function creates other functions.
- Suppose we want a function that creates links to Drupal project pages. It will allow us to refer to the project writeup using $writeup by creating the definition:
$writeup=[[https://www.drupal.org/project/writeup writeup]]
Solution 1
- Our first attempt at the factory function $projectmight look like this:
$parameters $project projid
$project={ // create shortcut for Drupal project
  ${$projid}=[[https://www.drupal.org/project/$projid $projid]]
  -_setting \$$projid=${$projid}.litdoc_         //this line is for testing purposes
}
It works fine with one project, but the function contains a reference to the project name, so because of lazy evaluation, $projid will pick up the value from the most recent factory function call. E.g.
$project writeup
- setting $writeup=[[https://www.drupal.org/project/$projid $projid]]
$project views
- setting $views=[[https://www.drupal.org/project/$projid $projid]]
Two very important Drupal projects are views (views) and writeup (views) —the writeup link is picking up the variable from views.
Solution 2: use $setval to force evaluation of project name
$parameters $project projid
$project={ // create shortcut for Drupal project
  $setval ${$projid}="[[https://www.drupal.org/project/$projid $projid]]"
  -_setting \$$projid=${$projid}.litdoc_          //this line is for testing purposes
}
$project writeup
- setting $writeup=26;writeup</a>
$project views
- setting $views=31;views</a>
Two very important Drupal projects are views (views) and writeup (writeup).
Final Solution allowing an optional extra project title
$parameters $project projid projtitle_line
$project={ // create shortcut for Drupal project
  $if !$projtitle_line
    $setval ${$projid}="[[https://www.drupal.org/project/$projid $projid]]"
  $else
    $setval ${$projid}="[[https://www.drupal.org/project/$projid $projtitle_line]] ([[https://www.drupal.org/project/$projid $projid]])"
  $endif
}
$project urllogin URL Login
$project views
$project writeup Writeup
Three very important Drupal projects are URL Login (urllogin), views and Writeup (writeup).
Extended Solution allowing project title on mouseover
$parameters $project projid projtitle_line
$project={ // create shortcut for Drupal project
 $if !$projtitle_line
   $projtitle_line=$projid
 $endif
 $set ${$projid}="$set $a_title='" $concatv $projtitle_line $concat "' [[https://www.drupal.org/project/" $concatv "$projid $projid" $concat "]]"
}
$project urllogin URL Login
$project views
$project writeup Writeup
Three very important Drupal projects are urllogin, views and writeup.
- Login to post comments
