Node.tpl.php dosyasında $ Mesajları Yazdır


23

Drupal 7'de, $messagesdeğişken varsayılan olarak page.tpl.php dosyasına basılır.

$messagesBir node.tpl.php dosyasına yazdırmanın bir yolu var mı (ör. $ Node-mycontenttype.tpl.php).

Sadece koymak <?php print $messages; ?>ya da <?php print render($page['messages']); ?>çalışmıyor.

Burada bir bloğa $ ileti yazdırmak için bir eğitim var , ancak node.tpl.php dosyama koymak istiyorum.


Bence theme_status_messages daha önce template_preprocess_nodeçağrılıyor, o yüzden drupal_get_messages aradığınızda boş.
anonim geliştirici,

Yanıtlar:


30

Aslında, yapmak istediğin bu:

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');
}

Bu nasıl çalışır: Drupal core, show_messages'ın theme_process_page içindeki değerini kontrol eder. DOĞRU (varsayılan) ise, yukarıdaki gibi temayı ('status_messages') çağırır ve ileti deposunu etkin bir şekilde boşaltır; bu nedenle aynı tema işlevini çağırmak daha sonra boş bir dize döndürür. Bununla birlikte, bu değişkeni FALSE olarak ayarlarsak, söz konusu tema işlevinin process_page içinde çağrılmasını önler, tüm iletileri aynı tema işlevini kullanarak seçtiğimiz bir şablonda almamızı sağlar.


1
Ve bunun yalnızca düğüm sayfalarında işlem yapmasını istiyorsanız, $ değişkenlerini ['show_message'] = FALSE 'ı görmek için koşullu bir değerle sarın (isset ($ değişkenleri [' düğüm '])).
areynolds

Ve diğer sayfalar için de aynısını yapmanız gerekir (görünümler, paneller, vb.)
Maria Ioannidou

8

Bir bloktan gelen mesajları nasıl görüntüleyeceğiniz cevabı, sorunuzda referans verdiğiniz page.tpl.php dosyasındaki $ mesajlarından ayrı olarak gösterilmelidir . Temel olarak, böyle bir şeye ihtiyacınız var; YOURTHEME temanızın adı ve bu fonksiyon template.php içinde olmalıdır. Aslında bu kodu çalıştırmadım ama üzerinde bir boşluk var.

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;
}

Daha sonra, node.tpl.php dosyasındaki $ mesajlarını verebilmelisiniz.


Çözüm için teşekkürler. Denedim ama işe yaramadı. $ Mesajı yazdırmak için aşağıdakileri kullanıyorum: <? Php print $ messages; ?> Bu doğru mu?
big_smile

8
Page.tpl.php sayfasından bazı şeyleri çıkarırken dikkatli olun. Düğüm şablonu her sayfa için kullanılmadığından, düğüm olmayan sayfalarda görüntülenen mesajları (örneğin, yönetici sayfaları gibi) eksik olabilir. Bunu yapacağınız zaman, henüz node.tpl.php tarafından yakalanmadıklarında mesajlarınızı gösterecek olan page.tpl.php dosyasında bir geri dönüş tutmanızı öneririm.
marcvangend
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.