PHP Smarty - الحصول على قائمة بجميع المتغيرات في القالب؟

StackOverflow https://stackoverflow.com/questions/1629701

سؤال

أنا أستخدم Smarty وPHP.إذا كان لدي قالب (إما كملف أو كسلسلة)، فهل هناك طريقة ما لتصبح ذكيًا لتحليل هذا الملف/السلسلة وإرجاع مصفوفة تحتوي على جميع المتغيرات الذكية في هذا القالب؟

على سبيل المثال:أريد شيئا من هذا القبيل:

$mystring = "Hello {$name}. How are you on this fine {$dayofweek} morning";
$vars = $smarty->magically_parse( $string );
// $vars should now be array( "name", "dayofweek" );

سبب رغبتي في القيام بذلك هو أنني أريد أن يتمكن المستخدمون من إدخال النماذج بأنفسهم ثم ملؤها في وقت لاحق.ومن ثم أحتاج إلى أن أكون قادرًا على الحصول على قائمة بالمتغيرات الموجودة في هذه القوالب.

لنفترض أنني أقوم فقط بمتغيرات بسيطة (على سبيل المثال:لا يوجد "{$object.method}" أو "{$varaible|function}")، وأنني لا أقوم بتضمين أي قوالب أخرى.

هل كانت مفيدة؟

المحلول 2

ويبدو ان ليس هناك وسيلة يحمل في ثناياه عوامل للقيام بذلك.

نصائح أخرى

إذا كنت تحتاج المتغيرات مخبأة في أشياء مثل {if $var%2} كنت اذهب مع هذا النوع من التعليمات البرمجية:

preg_match_all('`{[^\\$]*\\$([a-zA-Z0-9]+)[^\\}]*}`', $string, $result);
$vars = $result[1];

إذا كنت تريد أيضا للقبض على اشياء من هذا القبيل: {if $var != $var2} أفضل إصدار يتبع

function getSmartyVars($string){
  // regexp
  $fullPattern = '`{[^\\$]*\\$([a-zA-Z0-9]+)[^\\}]*}`';
  $separateVars = '`[^\\$]*\\$([a-zA-Z0-9]+)`';

  $smartyVars = array();
  // We start by extracting all the {} with var embedded
  if(!preg_match_all($fullPattern, $string, $results)){
    return $smartyVars;
  }
  // Then we extract all smarty variables
  foreach($results[0] AS $result){
    if(preg_match_all($separateVars, $result, $matches)){
      $smartyVars = array_merge($smartyVars, $matches[1]);
    }
  }
  return array_unique($smartyVars);
}

وعادة أنا ضد التعابير العادية، ولكن هذا يبدو وكأنه حالة صالحة بالنسبة لي. هل يمكن استخدام preg_match_all() للقيام بذلك (إذا كنت تريد فقط المتغيرات مثل ${this}):

preg_match_all('\{\$(.*?)\}', $string, $matches, PREG_PATTERN_ORDER);
$variableNames = $matches[1];
{debug}

وأنا أدرك هذا الموضوع القديم، ولكن هذا هو الحل المضمنة.

أعتقد أن ما تبحث عنه هو وحدة التحكم في التصحيح.

تعرض لك وحدة التحكم هذه جميع المتغيرات المستخدمة داخل القوالب الموجودة في صفحة الويب الخاصة بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top