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