it-swarm.it

Come visualizzare un campo prima del titolo del nodo?

Sto cercando di visualizzare un determinato campo prima del titolo del nodo quando visualizzo un teaser in D7.

In effetti, voglio passare da questo a questo .

Ho cercato di aggiornare node.tpl.php ma noto che separa $title a partire dal $content quindi non sono sicuro di come affrontarlo. Dopo alcune ricerche ho scoperto che le persone hanno suggerito di usare i moduli CCK e ConTemplate per aggirare questo problema in Drupal-6 ma io ' Mi chiedo se esiste una soluzione più Drupal-7.

Eventuali suggerimenti?

39
irishbuzz

Questo è davvero abbastanza semplice con Drupal 7.

Con render e hide sai che hai la possibilità di controllare il posizionamento di un singolo elemento in $content senza dover stampare tutti gli elementi desiderati in Drupal 6.

Un modello di nodo semplificato è simile al seguente:

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

Una piccola modifica gestirà le tue esigenze:

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

Usando render, puoi generare un elemento. Questo è più intelligente della semplice stampa di cose, poiché Drupal terrà traccia di ciò che è stato reso, per evitare che la stessa cosa venga stampata due volte sul posto. Quando si esegue il rendering del campo sopra il titolo, si è rimuovendo anche ciò che viene visualizzato quando $content viene visualizzato.

51
googletorp

Display Suite è anche piuttosto interessante.

Display Suite ti consente di avere il pieno controllo della visualizzazione dei tuoi contenuti utilizzando un'interfaccia di trascinamento della selezione. Organizza i tuoi nodi, visualizzazioni, commenti, dati utente ecc. Nel modo desiderato senza dover passare attraverso dozzine di file modello. Un elenco predefinito di layout (solo D7) è disponibile per un divertimento ancora più intenso!

8
stevepurkiss

Dai un'occhiata al modulo del titolo - http://drupal.org/project/title . Potrebbe rivelarsi utile per il tuo scenario. L'ho installato/abilitato per qualche motivo, probabilmente simile al tuo, e sembrava dare flessibilità su come posizionare il campo del titolo.

Da allora l'ho disabilitato (e sto usando Display Suite), quindi il mio richiamo potrebbe essere un po 'impreciso.

7
Greta

Questa è una soluzione hacker e sono sicuro che qualcuno inventerà qualcosa di più elegante, ma nel caso in cui tu sia bloccato, e nessuno lo fa ...

Puoi usare page.tpl.php per rimuovere la stampa di $title del tutto e aggiungi un nuovo campo personalizzato chiamato Titolo con nome macchina $ new_title o qualcosa del genere. Quindi sulla modifica del nodo, nascondi la casella del titolo originale e sul nodo Salva usa Campo calcolato o un php personalizzato per copiare il $new_title per $title.

Dopotutto, scrivi alcuni css per rendere $ new_title simile al titolo della pagina precedente e dovresti essere in grado di posizionare qualunque campo nell'ordine che preferisci, semplicemente trascinandolo nella schermata di gestione dei campi. Perché hai copiato oltre $new_title per $title, il titolo della pagina nella barra del browser dovrebbe ancora funzionare e nulla dovrebbe lamentarsi dei titoli dei nodi mancanti.

Come ho detto, è un trucco, ma funzionerebbe. Fammi sapere se hai bisogno di maggiori informazioni

4
Frederik

page.tpl.php (ghirlanda)

...
      <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

Questo non si applica alla domanda Teaser nel post originale, ma per le persone che si imbattono in questo e vogliono solo farlo accadere nella visualizzazione completa, ecco un'opzione senza codice: mostra il campo in un blocco (usando le viste, per esempio) e posiziona quel blocco sopra il tuo blocco di contenuti ma nella stessa regione.

3
brad

Penso che dovresti usare le funzioni di pre-elaborazione nel tuo template.php

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

E come ulteriore

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

scaricare le variabili e fare tutto quello che vuoi. aggiungere/rimuovere/aggiornamento.

2
dobeerman

Ho risolto questo problema con una soluzione senza codice usando Display Suite e la sua funzione extra "Region to Block". Mi piace di più questa soluzione per la sua flessibilità.

Fondamentalmente, abilitare la parte extra "Region to Block", abilitare la visualizzazione "Contenuto full-text" in Display Suite. (supponendo che si desideri visualizzare il contenuto sopra il titolo nella visualizzazione a nodo completo, allo stesso modo è possibile utilizzarlo per qualsiasi altra modalità di visualizzazione tranne Predefinito). Ora, nella parte "Gestione della visualizzazione" di "Contenuto full-text", nella parte inferiore dello schermo, dovrebbe apparire la scheda "Blocca regioni". Immettere il nome del nuovo blocco lì, salvare e trascinare e rilasciare i campi desiderati in questo blocco. Infine, sposta il blocco appena creato nella schermata Blocchi da qualche parte sopra il titolo del nodo.

Puoi vedere il video dello stesso approccio qui: http://www.youtube.com/watch?v=y4wyjxyhbNA , ovviamente devi posizionare il blocco sopra il titolo (non nella barra laterale di sinistra) alla fine.

2
Mirsoft

Per i modelli zen sotto il codice funziona per me.

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

Quindi, infine, puoi facilmente stampare il tuo campo in page.tpl.php;

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

So che avresti già usato qualche tema per costruire e ora stai cercando di aggiungere i campi nella parte superiore del titolo.

I miei suggerimenti a tutti gli sviluppatori che sviluppano temi su Drupal 7 sarebbe usare: tema Omega + moduli Context e Delta. Ciò fornisce una base molto solida per il layout.

E flessibilità nell'organizzazione di regioni, blocchi e campi.

1
AnAnD

Puoi farlo con il modulo pannelli

0
houmem