php - كيف يمكنك زيادة متغير معين في smarty دون عرضها




(3)

لذلك لدي متغير معين في smarty:

{assign var=number value=0}

الآن يمكنني زيادة ذلك باستخدام

{$number++}

أو

{++$number}

وهو بالضبط ما أحتاج إليه ، المشكلة الوحيدة هي أنه يعرض قيمة رقم $ على الصفحة. هل هناك طريقة يمكنني زيادة القيمة ولكن لا يمكنني عرضها؟

لا يتم استخدام هذا داخل حلقة وإلا يمكنني استخدام شيء مثل التكرار أو الفهرس.


إذا اضطررت للقيام بذلك ، فسوف أفعل شيئًا مما يلي: {php}$number++{/php} لكن من القبيح جدًا استخدام php في قالب ذكي. قد يشير هذا إلى أن هناك طريقة أفضل للقيام بما تخطط للقيام به.


انها أنظف فقط للقيام بذلك مثل هذا ...

{$number = $number +1}

يمكنك القيام بذلك:

{assign var=val value=1}
{assign var=val value=$val+1}
{$val} // displays 2

سيتم تجميع ما سبق إلى:

$this->assign('val', 1);
$this->assign('val', $this->_tpl_vars['val']+1);
echo $this->_tpl_vars['val'];

أو

{assign var=var value=1}
{capture assign=var}{$var+1}{/capture}
{$var} // displays 2

والتي بدورها سيتم تجميعها على النحو التالي:

$this->assign('var', 1);
ob_start();
echo $this->_tpl_vars['var']+1;
$this->_smarty_vars['capture']['default'] = ob_get_contents();
$this->assign('var', ob_get_contents());
ob_end_clean();
echo $this->_tpl_vars['var'];

هناك طريقة أخرى تتمثل في كتابة ملحق صغير:

// plugins/function.inc.php
function smarty_function_inc($params, Smarty &$smarty)
{
   $params['step'] = empty($params['step']) ? 1 : intval($params['step']);

   if (empty($params['var'])) {
      trigger_error("inc: missing 'var' parameter");
      return;
   }
   if (!in_array($params['var'], array_keys($smarty->_tpl_vars))) {
      trigger_error("inc: trying to increment unassigned variable ".$params['var']);
      return;
   }
   if (isset($smarty->_tpl_vars[$params['var']])) {
      $smarty->assign($params['var'],
      $smarty->_tpl_vars[$params['var']] + $params['step']);
   }
}

ستتم تسمية الوظيفة على هذا النحو ، لاحظ أن step اختيارية وإذا لم يتم إعطاء المتغير سيتم زيادتها بواحد:

{assign var=var value=0}
{inc var=var step=2}
{$var} // displays 2

مرجع
Smarty {assign}
Smarty {capture}
تمديد Smarty مع الإضافات







smarty