it-swarm.com.de

Wie zeige ich ein Feld vor dem Knotentitel an?

Ich möchte ein bestimmtes Feld vor dem Titel des Knotens rendern, wenn ein Teaser in D7 angezeigt wird.

Eigentlich möchte ich von this zu this gehen.

Ich habe versucht, die Datei node.tpl.php zu aktualisieren, aber ich stelle fest, dass sie $title von $content also bin ich mir nicht sicher, wie ich das angehen soll. Nach einigem Suchen habe ich festgestellt, dass Leute vorgeschlagen haben, die Module CCK und ConTemplate zu verwenden, um dies in Drupal-6 zu umgehen, aber ich ' Ich frage mich, ob es eine Drupal-7-Lösung gibt.

Irgendwelche Vorschläge?

39
irishbuzz

Dies ist mit Drupal 7 ganz einfach.

Mit render und hide haben Sie die Möglichkeit, die Platzierung eines einzelnen Elements in $content Zu steuern, ohne alle Elemente ausdrucken zu müssen, die in Drupal 6.

Eine vereinfachte Knotenvorlage sieht folgendermaßen aus:

<div>
  <h2><?php print $title; ?></h2>
  <div class="content">
    <?php print render($content); ?>
  </div>
</div>

Eine kleine Änderung würde Ihre Bedürfnisse erfüllen:

<div>
  <?php print render($content['field_name_of_image']); ?>
  <h2><?php print $title; ?></h2>
  <div class="content">
    <?php print render($content); ?>
  </div>
</div>

Mit render können Sie ein Element ausgeben. Dies ist klüger als nur das Drucken von Inhalten, da Drupal verfolgt, was gerendert wurde, um zu vermeiden, dass dasselbe zweimal auf der Stelle gedruckt wird. Wenn Sie das Feld über dem Titel rendern, entfernen Sie auch das, was gerendert wird, wenn $content Gerendert wird.

51
googletorp

Display Suite ist auch ziemlich cool.

Mit der Display Suite können Sie die vollständige Kontrolle darüber übernehmen, wie Ihre Inhalte per Drag & Drop angezeigt werden. Ordnen Sie Ihre Knoten, Ansichten, Kommentare, Benutzerdaten usw. so an, wie Sie möchten, ohne sich durch Dutzende von Vorlagendateien arbeiten zu müssen. Eine noch vordefinierte Liste von Layouts (nur D7) sorgt für noch mehr Drag & Drop-Spaß!

8
stevepurkiss

Schauen Sie sich das Titelmodul an - http://drupal.org/project/title . Dies könnte sich für Ihr Szenario als nützlich erweisen. Ich habe es aus irgendeinem Grund installiert/aktiviert, wahrscheinlich ähnlich wie bei Ihnen, und es schien Flexibilität bei der Platzierung des Titelfelds zu bieten.

Ich habe es seitdem deaktiviert (und verwende Display Suite), daher ist mein Rückruf möglicherweise etwas lückenhaft.

7
Greta

Dies ist eine hackige Lösung, und ich bin sicher, jemand wird sich etwas Eleganteres einfallen lassen, aber falls Sie nicht weiterkommen und niemand ...

Sie können page.tpl.php Verwenden, um den Druck von $title Insgesamt zu entfernen und ein neues benutzerdefiniertes Feld mit dem Namen "Titel" mit dem Computernamen "$ new_title" oder ähnlichem hinzuzufügen. Blenden Sie dann beim Bearbeiten des Knotens das ursprüngliche Titelfeld aus und kopieren Sie beim Speichern des Knotens Computed Field oder ein benutzerdefiniertes PHP, um $new_title Nach $title Zu kopieren.

Schreiben Sie nach all dem etwas CSS, damit $ new_title wie der Seitentitel zuvor aussieht, und Sie sollten in der Lage sein, alle Felder in beliebiger Reihenfolge zu platzieren, indem Sie sie einfach in den Bildschirm zum Verwalten von Feldern ziehen und dort ablegen. Da Sie über $new_title Nach $title Kopiert haben, sollte der Seitentitel in der Browserleiste weiterhin funktionieren und sich nichts über fehlende Knotentitel beschweren.

Wie ich schon sagte, es ist ein Hack - aber es würde funktionieren. Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen

4
Frederik

page.tpl.php (Girlande)

...
      <div id="center"><div id="squeeze"><div class="right-corner"><div class="left-corner">
          <?php print $breadcrumb; ?>
          <?php if ($mission): print '<div id="mission">'. $mission .'</div>'; endif; ?>

          /*
           * Print custom block or var
           */
          <?php if ($custom_block): print '<div id="custom-block" class="clear-block">'. $custom_block .'</div>'; endif; ?>

          <?php if ($tabs): print '<div id="tabs-wrapper" class="clear-block">'; endif; ?>
          <?php if ($title): print '<h2'. ($tabs ? ' class="with-tabs"' : '') .'>'. $title .'</h2>'; endif; ?>
          <?php if ($tabs): print '<ul class="tabs primary">'. $tabs .'</ul></div>'; endif; ?>
          <?php if ($tabs2): print '<ul class="tabs secondary">'. $tabs2 .'</ul>'; endif; ?>
          <?php if ($show_messages && $messages): print $messages; endif; ?>
          <?php print $help; ?>
          <div class="clear-block">
            <?php print $content ?>
          </div>
          <?php print $feed_icons ?>
          <div id="footer"><?php print $footer_message . $footer ?></div>
      </div></div></div></div> <!-- /.left-corner, /.right-corner, /#squeeze, /#center -->
...

template.php

/**
 * Override or insert variables into the page template.
 */
function phptemplate_preprocess_page(&$variables) {
  $node = $variables['node'];
  if($node->type == MY_NODE_TYPE) {
    $variables['custom_block'] = 'bla bla bla';
  }
}
3
dobeerman

Dies gilt nicht für die Teaser-Frage im ursprünglichen Beitrag, aber für Leute, die darüber stolpern und es nur in der Vollansicht ausführen möchten, gibt es hier eine codefreie Option: Zeigen Sie das Feld in einem Block an (mithilfe von Ansichten, zum Beispiel) und platzieren Sie diesen Block über Ihrem Inhaltsblock, jedoch in derselben Region.

3
brad

Ich denke, Sie sollten Vorverarbeitungsfunktionen in Ihrer template.php verwenden

/**
 * Override or insert variables into the page template.
 */
function THEMENAME_process_page(&$variables) {
  // look for $variables['page_title'] if i remember
}

Und als zusätzliche

/**
 * Override or insert variables into the node template.
 */
function THEMENAME_preprocess_node(&$variables) {
  //
}

dump-Variablen und tun, was Sie wollen. Hinzufügen/Entfernen/Aktualisieren.

2
dobeerman

Ich habe dieses Problem durch eine codelose Lösung mit Display Suite und der Extras-Funktion "Region to Block" behoben. Ich mag diese Lösung am meisten wegen ihrer Flexibilität.

Aktivieren Sie grundsätzlich den Extras-Teil "Region zum Blockieren" und die Anzeige "Volltextinhalt" in der Display Suite. (Vorausgesetzt, Sie möchten Inhalte über dem Titel in der Vollknotenanzeige anzeigen, können Sie sie auch für jeden anderen Ansichtsmodus außer Standard verwenden.) Jetzt sollte im Teil "Anzeige verwalten" von "Volltextinhalt" am unteren Bildschirmrand die Registerkarte "Bereiche blockieren" angezeigt werden. Geben Sie dort einen neuen Blocknamen ein, speichern Sie die gewünschten Felder und ziehen Sie sie per Drag & Drop in diesen Block. Zuletzt verschieben Sie den neu erstellten Block im Bildschirm "Blöcke" irgendwo oben den Knotentitel.

Sie können das Video des gleichen Ansatzes hier sehen: http://www.youtube.com/watch?v=y4wyjxyhbNA , natürlich müssen Sie den Block über dem Titel platzieren (nicht in der linken Seitenleiste) Am Ende.

2
Mirsoft

Für Zen-Vorlagen unten funktioniert der Code für mich.

<?php
// this goes in template.php
// check if node type page and then add to $vars array
// declaring $vars['foo'] gives you a $foo variable to use in page.tpl.php

function YOURTHEMENAME_preprocess_page(&$vars, $hook) {
    if (isset($vars['node'])) :
        if($vars['node']->type == 'page'):       
            $node = node_load($vars['node']->nid);
            $output = field_view_field('node', $node, 'field_image', array('label' => 'hidden'));       
            $vars['my_image_field'] = $output;               
        endif;
    endif;
}
?>

Schließlich können Sie Ihr Feld ganz einfach in page.tpl.php drucken.

<?php
if ($my_image_field):
   print render($my_image_field);
endif;
?>
1
user991554

Ich weiß, dass Sie bereits ein Thema zum Erstellen verwendet haben und jetzt versuchen, die Felder oben im Titel hinzuzufügen.

Meine Vorschläge an alle Entwickler, die ein Thema auf Drupal 7) erstellen, lauten: Omega-Thema + Kontext- und Delta-Module. Dies bietet eine sehr starke Grundlage für Ihr Layout.

Und Flexibilität bei der Anordnung von Regionen, Blöcken und Feldern.

1
AnAnD

Sie können dies mit dem Panel-Modul tun

0
houmem