values-space — switch between value namespaces
| Attribute | Pos. | Req. | Default | Description |
|---|---|---|---|---|
| name | Yes |
|
Switch namespace. Empty value (name="") switches
back to the main namespace. |
|
| copy-all | 0 | Copy all values from the current namespace to the new one before switching to it? (dereference on nested data structures is not performed). | ||
| copy | Copy only specified, space-separated values. | |||
| clear | 0 | Clear all values in the target namespace before switching to it? | ||
| show | 0 | Return name of the current namespace, then switch to a new one? | ||
| interpolate | 0 | interpolate output? | ||
| hide | 0 | Hide the tag return value? |
This tag switches the values namespace for the duration of the page.
To switch back to the default namespace, use
[values-space name=''].
The current namespace is kept in the $Vend::ValuesSpace
variable.
Example: Switch and display namespaces
Current namespace is: [values-space]
Switching to namespace 'basket': [values-space basket]
Switching [values-space name=checkout show=1 clear=1] to clear [values-space]
Interchange 5.9.0:
Source: code/UserTag/values_space.tag
Lines: 49
# Copyright 2004-2007 Interchange Development Group and others
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version. See the LICENSE file for details.
#
# $Id: values_space.tag,v 1.5 2007-03-30 23:40:57 pajamian Exp $
UserTag values-space Order name
UserTag values-space addAttr
UserTag values-space Version $Revision: 1.5 $
UserTag values-space Routine <<EOR
sub {
my ($name, $opt) = @_;
return $Vend::ValuesSpace unless defined $name;
my $old_name = $Vend::ValuesSpace;
my $old_ref;
if ($old_name eq '') {
$old_ref = $Vend::Session->{values};
}
else {
$old_ref = $Vend::Session->{values_repository}{$old_name} ||= {};
}
if ($name eq '') {
$::Values = $Vend::Session->{values};
}
else {
$::Values = $Vend::Session->{values_repository}{$name} ||= {};
}
$Vend::ValuesSpace = $name;
%$::Values = () if $opt->{clear};
my @copy;
if ($opt->{copy_all}) {
@copy = keys %$old_ref;
}
elsif ($opt->{copy}) {
@copy = grep /\S/, split / /, $opt->{copy};
}
$::Values->{$_} = $old_ref->{$_} for @copy;
#Debug("changed values space from $old_name to $name; new contents:\n" . ::uneval($::Values));
return $opt->{show} ? $old_name : '';
}
EOR