libs/sysplugins/smarty_internal_compile_assign.php Quellcode

smarty_internal_compile_assign.php
gehe zur Dokumentation dieser Datei
1 <?php
18 {
28  public function compile($args, $compiler, $parameter)
29  {
30  // the following must be assigned at runtime because it will be overwritten in Smarty_Internal_Compile_Append
31  $this->required_attributes = array('var', 'value');
32  $this->shorttag_order = array('var', 'value');
33  $this->optional_attributes = array('scope');
34  $_nocache = 'null';
35  $_scope = Smarty::SCOPE_LOCAL;
36  // check and get attributes
37  $_attr = $this->getAttributes($compiler, $args);
38  // nocache ?
39  if ($compiler->tag_nocache || $compiler->nocache) {
40  $_nocache = 'true';
41  // create nocache var to make it know for further compiling
42  if (isset($compiler->template->tpl_vars[trim($_attr['var'], "'")])) {
43  $compiler->template->tpl_vars[trim($_attr['var'], "'")]->nocache = true;
44  } else {
45  $compiler->template->tpl_vars[trim($_attr['var'], "'")] = new Smarty_Variable(null, true);
46  }
47  }
48  // scope setup
49  if (isset($_attr['scope'])) {
50  $_attr['scope'] = trim($_attr['scope'], "'\"");
51  if ($_attr['scope'] == 'parent') {
52  $_scope = Smarty::SCOPE_PARENT;
53  } elseif ($_attr['scope'] == 'root') {
54  $_scope = Smarty::SCOPE_ROOT;
55  } elseif ($_attr['scope'] == 'global') {
56  $_scope = Smarty::SCOPE_GLOBAL;
57  } else {
58  $compiler->trigger_template_error('illegal value for "scope" attribute', $compiler->lex->taglineno);
59  }
60  }
61  // compiled output
62  if (isset($parameter['smarty_internal_index'])) {
63  $output = "<?php \$_smarty_tpl->createLocalArrayVariable($_attr[var], $_nocache, $_scope);\n\$_smarty_tpl->tpl_vars[$_attr[var]]->value$parameter[smarty_internal_index] = $_attr[value];";
64  } else {
65  // implement Smarty2's behaviour of variables assigned by reference
66  if ($compiler->template->smarty instanceof SmartyBC) {
67  $output = "<?php if (isset(\$_smarty_tpl->tpl_vars[$_attr[var]])) {\$_smarty_tpl->tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]];";
68  $output .= "\n\$_smarty_tpl->tpl_vars[$_attr[var]]->value = $_attr[value]; \$_smarty_tpl->tpl_vars[$_attr[var]]->nocache = $_nocache; \$_smarty_tpl->tpl_vars[$_attr[var]]->scope = $_scope;";
69  $output .= "\n} else \$_smarty_tpl->tpl_vars[$_attr[var]] = new Smarty_Variable($_attr[value], $_nocache, $_scope);";
70  } else {
71  $output = "<?php \$_smarty_tpl->tpl_vars[$_attr[var]] = new Smarty_Variable($_attr[value], $_nocache, $_scope);";
72  }
73  }
74  if ($_scope == Smarty::SCOPE_PARENT) {
75  $output .= "\nif (\$_smarty_tpl->parent != null) \$_smarty_tpl->parent->tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]];";
76  } elseif ($_scope == Smarty::SCOPE_ROOT || $_scope == Smarty::SCOPE_GLOBAL) {
77  $output .= "\n\$_ptr = \$_smarty_tpl->parent; while (\$_ptr != null) {\$_ptr->tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]]; \$_ptr = \$_ptr->parent; }";
78  }
79  if ($_scope == Smarty::SCOPE_GLOBAL) {
80  $output .= "\nSmarty::\$global_tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]];";
81  }
82  $output .= '?>';
83 
84  return $output;
85  }
86 }




Korrekturen, Hinweise und Ergänzungen

Bitte scheuen Sie sich nicht und melden Sie, was auf dieser Seite sachlich falsch oder irreführend ist, was ergänzt werden sollte, was fehlt usw. Dazu bitte oben aus dem Menü Seite den Eintrag Support Forum wählen. Es ist eine kostenlose Anmeldung erforderlich, um Anmerkungen zu posten. Unpassende Postings, Spam usw. werden kommentarlos entfernt.