سؤال

أرغب في الوصول إلى بعض المتغيرات التي قمت بتعيينها ديناميكيًا من PHP في Smarty ، إليك مثال:

$content_name = 'body'
$smarty->assign('content_name',$content_name);
$smarty->assign($content_name.'_title',$title);
$smarty->assign($content_name.'_body',$body);

// assigned values
// $content_name = home
// $home_title = $title
// $home_body = $body

السبب في أنني أرغب في الوصول إليها ديناميكيًا هو أنني أسمي إصدارات متعددة من الوظيفة التي تتضمن الكود أعلاه ، فهي تستخدم جميعًا نفس القالب وبالتالي لا ترغب ببساطة في استخدام عنوان $ ، و $ ، وما إلى ذلك. بعضهم البعض.

بالنظر إلى أنني أعلم أنني أريد الوصول إلى متغيرات العنوان والجسم بناءً على المحتوى الذي قمت بتعيينه ، كيف يمكنني تحقيق ذلك في Smarty؟

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

المحلول

وفقًا لتعليقي على استخدام صفيف بدلاً من المتغيرات الديناميكية ، إليك مثال على كيفية إضافة Vars إلى صفيف:

بي أتش بي:

$vars = array();

function whatever() {
    global $vars;


    $vars[] = array(
        'firstname' => 'Mike',
        'surname' => 'Smith'
    );
}

$smarty->assign('vars', $vars);

Smarty:

{section name=loop loop=$vars}
    Name: {$vars[loop].firstname} {$vars[loop].surname}
{/section}

نصائح أخرى

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

والسؤال هو كيفية استخدام المتغيرات الديناميكية ...

بالنسبة للعينة المحددة ، يجب أن يكون مثل

بي أتش بي

$content_name = 'body';
$title        = 'hello ';
$body         = 'world';
$smarty->assign('content_name',$content_name);
$smarty->assign($content_name.'_title',$title);
$smarty->assign($content_name.'_body',$body);

ذكي

{$content_name}          //body
{${$content_name}_title} //hello
{${$content_name}_body}  //world

{${$content_name}_title}{${$content_name}_body} my {$content_name} is awesome
//hello world my body is awesome

هذه هي الطريقة الديناميكية لاستخدامه. حتى لو لم تكن أفضل طريقة في هذه الحالة :)

إذا كان لديك نوع من الكائنات أو صفيف متعدد الأبعاد ... وترغب في تكرارها ، عليك أن تهتم بالسلسلة بأكملها وليس فقط الرقم ...

علي سبيل المثال:

بي أتش بي

$arr = [
    "attr1" => "hello ",
    "attr2" => "world ",
    "attr3" => "my body is awesome"
];
$smarty->assign('foobar', $arr);

ذكي

{for $i=1 to 3}
    {$foobar.{"attr$i"}}   //works (whole name must be string var mix)
    //{$foobar.attr{"$i"}} //fails
    //{$foobar.attr{$i}}   //fails
{/for}

لكن باستخدام {$foobar{$i}} على صفيف بسيط ستعمل.

لجميع الذين يحتاجون إليها ، استمتع.

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