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




(3)

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

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

{assign var=number value=0}

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

{$number++}

أو

{++$number}

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

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


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

{$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