سؤال

$sql = "select menu_id , menu_name , parent_id from menu " ;
$dbc->setFetchMode(DB_FETCHMODE_ASSOC);
$res = $dbc->query($sql);
while($row = $res->fetchRow()){
    $menu[$row['parent_id']][$row['menu_id']] = $row['menu_name'];
}

function make_menu($parent)
{
    global $menu ;
    echo '<ul>';
    foreach($parent as $menu_id=>$menu_name)
    {
        echo '<li>'.$menu_name ; 
        if(isset($menu[$menu_id]))
        {
            make_menu($menu[$menu_id]) ;
        }
        echo '</li>';
    }
    echo '</ul>';
}
$P['menu_bilder_data'] = $menu[0] ; 
//menu :off
$smarty->register_function('make_menu' , 'make_menu') ;

حسنا، لدي هذا القسم من التعليمات البرمجية لاسترداد وتمرير إلى Smarty.

لقد سجلت بلدي make_menu وظيفة كدالة مستخدم مخصصة مع Smarty، وفي القالب لدي هذا الرمز:

{make_menu parent_id=$P.menu_bilder_data}

أنا تمر $P صفيف في ملف الفهرس. يجب أن تعمل ولكنها تعطيني شيئا لأنه وظيفة متكررة، فإنه يعيد مجموعة بدلا من ULS المتداخلة المطبوعة؛ كيف يمكنني إصلاح هذه المشكلة؟

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

المحلول

المشكلة

The $ smarty-> register_function () و {make_menu parent_id = $ p.menu_bilder_data} يؤدي الوظيفة المراد استدعاءها باستخدام ($ Params، & $ Smarty)
حيث $ params =

array(
  'parent_id' => array(
     0 => array(
       1 => > "menu item 1",
)

هذا ليس هيكل البيانات التي تتوقعها الوظيفة.

المحلول

يمكنك استدعاء الوظيفة دون استخدام "Recorder_Function"

{$P.menu_bilder_data|@make_menu}

الأنابيب "|" سيتم تمرير $ p ['menu_bilder_data'] كحجة أول وظيفة. و "@" تسبب الأنبوب لتمرير الصفيف. بدون "@" سيتم استدعاء الوظيفة لجميع العناصر في الصفيف.

مجرد غيض

قم بتغيير المعلمة من $ الأصل (وهو صفيف) إلى $ Parent_ID، تتوفر جميع بيانات القائمة من القائمة العالمية.

function make_menu($parent_id)
{      
  global $menu;
  if (!isset($menu[$parent_id])) {
     return;
  }
  $nodes = $menu[$parent_id];
  echo '<ul>';
  foreach($nodes as $menu_id => $menu_name)
  {
    echo '<li>'.$menu_name ; 
    make_menu($menu_id) ;
    echo '</li>';
  }
  echo '</ul>';
}

من Smarty:

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