PHP Smarty - الحصول على قائمة بجميع المتغيرات في القالب؟
-
06-07-2019 - |
سؤال
أنا أستخدم 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}
وأنا أدرك هذا الموضوع القديم، ولكن هذا هو الحل المضمنة.
أعتقد أن ما تبحث عنه هو وحدة التحكم في التصحيح.
تعرض لك وحدة التحكم هذه جميع المتغيرات المستخدمة داخل القوالب الموجودة في صفحة الويب الخاصة بك.