it-swarm.asia

طباعة الرسائل $ في ملف node.tpl.php

في Drupal 7 ، تتم طباعة المتغير $messages بشكل افتراضي في page.tpl.php.

هل هناك طريقة لطباعة $messages في ملف node.tpl.php (مثل $ node-mycontenttype.tpl.php).

مجرد وضع <?php print $messages; ?> أو <?php print render($page['messages']); ?> لا يعمل.

هناك برنامج تعليمي هنا لطباعة رسائل $ في كتلة ، ولكن أود أن أضعه في ملف node.tpl.php الخاص بي.

24
big_smile

في الواقع ، ما تريد القيام به هو هذا:

function YOURTHEME_preprocess_page(&$variables) {
  // This disables message-printing on ALL page displays
  $variables['show_messages'] = FALSE;
}

function YOURTHEME_preprocess_node(&$variables) {
  $variables['messages'] = theme('status_messages');
}

كيف يعمل هذا: Drupal الأساسية تتحقق من قيمة show_messages في theme_process_page. إذا كانت TRUE (افتراضيًا) ، فإنها تستدعي السمة ('status_messages') كما هو موضح أعلاه ، وتفرغ تخزين الرسائل بشكل فعال ، لذلك سيؤدي استدعاء وظيفة السمة نفسها لاحقًا إلى إرجاع سلسلة فارغة. ومع ذلك ، إذا تم تعيين هذا المتغير إلى FALSE ، فهذا يمنع استدعاء وظيفة السمة المذكورة في process_page ، مما يتيح لنا الحصول على جميع الرسائل باستخدام نفس وظيفة السمة ، في قالب من اختيارنا.

31
Freek

الجواب في كيفية عرض الرسائل من كتلة منفصلة عن رسائل $ في page.tpl.php التي أشرت إليها في سؤالك هي طريقة جيدة للذهاب. بشكل أساسي ، تحتاج إلى شيء مثل هذا حيث YOURTHEME هو اسم السمة الخاصة بك ويجب أن تكون هذه الوظيفة في template.php. لم أقم بالفعل بتشغيل هذا الرمز ولكن لدي صدع في ذلك.

function YOURTHEME_preprocess_node(&$vars) {
  $output = '';
  foreach (drupal_get_messages(NULL, FALSE) as $type => $messages) {
    $output .= "<div class=\"messages $type\">\n";
    if (count($messages) > 1) {
      $output .= " <ul>\n";
      foreach ($messages as $message) {
        $output .= '  <li>' . $message . "</li>\n";
      }
      $output .= " </ul>\n";
    }
    else {
      $output .= $messages[0];
    }
    $output .= "</div>\n";
  }

  $vars['messages'] = $output;
}

يجب أن تكون قادرًا بعد ذلك على إخراج رسائل $ في node.tpl.php

8
Stewart Robinson