[pmwiki-users] Subfolders in "Uploads"? Esp. for Mini recipe

Rogutės Sparnuotos rogutes at googlemail.com
Wed Feb 3 05:26:21 CST 2010

Mike (2010-02-02 18:04):
> Hello again,
> just trying again - would anybody be able to provide some help here?
> Basically, I'm trying to make the Mini recipe work with images clustered 
> in subfolders - but all of the same PmWiki group. If possible, I'd also 
> love to see subfolders for PmWiki attachments in general, but this would 
> probably require a bit more reprogramming.
> Changing the Mini recipe to take subfolders as an argument should be 
> easily possible thought... but when I tried, I failed as the folder 
> structure is deeply coded into the Mini recipe...

Hey, Mike,

I have attached an excerpt from "config.php" as "up_pref_by_fname.php".
It is probably not what you are searching for, but it shows what is
possible with PmWiki's $*Fmt variables and the FmtPageName() function.
Note that this example might be incompatible with some recipes and
I haven't tested it much, although it is heavily used on a rather big wiki
with the Mini recipe.

Look for a comment in the attached file to find out what it does and
sorry if I misunderstood your request and this doesn't help you at all.

--  Rogutės Sparnuotos
-------------- next part --------------


## The name of every uploaded file determines where it will go in $UploadDir.
## If the name starts with a-z letters, all these letters up to the first
## non-letter character will be used to check if a directory with such a name 
## exists under $UploadDir/. If the directory will be found, the uploaded file 
## will land in it, otherwise it will go under $UploadDir/$MyUploadPrefix/. 
## This is controlled by the custom function FmtUploadPrefixByName down below.

$MyUploadPrefix = '/00_others';

$FmtP['#\\$FmtUpPrefByName\\b#e'] = 'FmtUploadPrefixByName($pagename, $fmt)';
$UploadFileFmt = $UploadDir.'$FmtUpPrefByName';
$UploadPrefixFmt = $MyUploadPrefix;
$LinkFunctions['Attach:'] = 'LinkUploadByName';
$MarkupTable['Mini:']['rep'] = str_replace('(LinkMini(', '(LinkUploadByName(', $MarkupTable['Mini:']['rep']);

function LinkUploadByName($pagename, $imap, $path, $alt, $txt, $fmt=NULL) {
  global $UploadPrefixFmt;
  $UploadPrefixFmt = FmtUploadPrefixByName($pagename, $path);

  if (ucfirst($imap)=='Mini:') $linkfu = 'LinkMini';
  else $linkfu = 'LinkUpload';

  return $linkfu($pagename, $imap, $path, $alt, $txt, $fmt);

function FmtUploadPrefixByName($pagename, $fmt) {
  global $UploadDir, $MyUploadPrefix;
  $upname = basename($fmt);
  if (preg_match("#^(th\d+---)?([[:alpha:]]+)[^/]+$#", $upname, $m))
    if (is_dir("$UploadDir/$m[2]"))

  return $res;

More information about the pmwiki-users mailing list