Bagaimana cara menampilkan bidang sebelum judul simpul?

41

Saya mencari untuk membuat bidang tertentu sebelum judul node ketika menampilkan penggoda di D7.

Secara efektif saya ingin beralih dari ini ke ini .

Saya telah melihat ke memperbarui node.tpl.php tapi saya perhatikan itu terpisah $titledari $contentjadi saya tidak yakin bagaimana cara mendekati ini. Setelah beberapa pencarian saya menemukan bahwa orang-orang telah menyarankan menggunakan CCK dan modul ConTemplate untuk menyiasati ini di Drupal-6 tapi saya bertanya-tanya apakah ada solusi yang lebih Drupal-7.

Ada saran?

irishbuzz
sumber
Terlepas dari semua solusi template berbasis php, Anda juga dapat menggunakan CSS saja. Margin negatif dapat melakukan banyak hal. Dalam contoh jsfiddle Anda akan terlihat seperti ini .
marcvangend
Saya sudah mempertimbangkan hal ini tetapi apa yang terjadi untuk gelar yang panjang ?
irishbuzz
Anda memang benar, ini hanya berfungsi jika judulnya memiliki ketinggian tetap. Seperti setiap solusi, ia memiliki titik lemahnya. Secara pribadi, saya berpikir bahwa (terlepas dari desain dan teknologi yang Anda gunakan) judul panjang harus dicegah dengan mendidik para editor, tetapi saya menyadari bahwa itu tidak selalu menjadi pilihan.
marcvangend

Jawaban:

53

Ini sangat sederhana dengan Drupal 7.

Dengan renderdan hideAnda tahu memiliki kemungkinan untuk mengontrol penempatan elemen tunggal $contenttanpa harus mencetak semua item sendiri seperti yang diperlukan di Drupal 6.

Templat simpul yang disederhanakan terlihat seperti ini:

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

Sedikit modifikasi akan menangani kebutuhan Anda:

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

Dengan menggunakan render, Anda dapat menampilkan elemen. Ini lebih pintar daripada sekadar mencetak barang, karena Drupal akan melacak apa yang telah diberikan, untuk menghindari hal yang sama dicetak dua kali di tempat itu. Saat merender bidang di atas judul, Anda juga menghapus untuk apa yang diberikan saat $contentdiberikan.

googletorp
sumber
2
Sangat bagus. Dalam dunia yang ideal mungkin lebih baik untuk hanya memberitahu Drupal untuk memperlakukan bidang judul seperti bidang lainnya, tetapi setidaknya dalam Drupal 7 kami memiliki solusi sederhana seperti ini. Kudos @googletorp!
irishbuzz
Sebagai catatan: Ini hampir tidak berbeda dari Drupal6, bertentangan dengan apa yang mungkin dikomentari oleh komentar di atas.
Berlangsung
1
@berkes: Jika Anda mencetak bidang secara individual dalam D6, Anda harus mempertahankan templat simpul, dan mengedit kode untuk dapat menambahkan bidang baru. Ini adalah perbedaan besar dibandingkan dengan D7 di mana Anda dapat terus menambahkan bidang dan menggunakan UI untuk mengurutkannya juga.
googletorp
render memang baru. Tetapi konsepnya tidak. Ada beberapa trik untuk mencapai hal yang sama. Saya tidak bermaksud mengatakan bahwa dalam Drupal6 ini sama sederhana, bersih dan menyenangkan. Hanya itu mungkin juga.
Berlangsung
@googletorp apakah ada cara untuk mencetak bidang di page.tpl.php?
CocoSkin
9

Tampilan Suite juga cukup keren.

Display Suite memungkinkan Anda mengambil kendali penuh atas bagaimana konten Anda ditampilkan menggunakan antarmuka seret dan lepas. Atur node, tampilan, komentar, data pengguna, dll. Seperti yang Anda inginkan tanpa harus melalui puluhan file templat. Daftar tata letak yang telah ditentukan sebelumnya (hanya D7) tersedia untuk lebih banyak aktivitas drag and drop!

stevepurkiss
sumber
Ini modul yang bagus, tapi sayangnya sepertinya hanya menawarkan kontrol untuk bidang non-judul jadi tidak ada bantuan di sini. Terima kasih semuanya sama.
irishbuzz
Sebenarnya itu tidak benar, Anda hanya perlu menginstal semua modul yang diperlukan: drupal.org/project/ds , drupal.org/project/nd & drupal.org/project/nd_contrib
Decipher
@Decipher: Menginstal 3 modul untuk memindahkan tag gambar di atas tag h2? Anda pasti bercanda, benar :)
berkelanjutan
@berkes - Menginstal Drupal untuk menampilkan satu halaman web, Anda pasti bercanda, kan? Maksud saya adalah bahwa dengan modul-modul ini diinstal Anda dapat melakukan begitu banyak, seperti halnya dengan Drupal Anda dapat melakukan begitu banyak, tetapi Anda juga dapat menggunakannya untuk menyelesaikan tugas kasar.
Menguraikan
@Decipher: Tentunya, menginstal modul generik membawa peluang baru ke situs Anda. Tetapi itu adalah saran yang buruk untuk menginstal pandangan, galeri tampilan, cck, filefiend dan bidang gambar untuk hanya menampilkan deretan gambar. Akan lebih baik jika tampilan, cck dan sisanya akan digunakan untuk lebih dari hanya daftar gambar ini. Tetapi OP tidak menyebutkan ini sama sekali.
Berlangsung
8

Lihatlah modul Title - http://drupal.org/project/title . Mungkin terbukti bermanfaat untuk skenario Anda. Saya menginstal / mengaktifkannya untuk beberapa alasan, mungkin mirip dengan milik Anda, dan sepertinya memberikan fleksibilitas cara menempatkan bidang judul.

Sejak itu saya menonaktifkannya (dan saya menggunakan Display Suite), jadi ingatan saya mungkin agak samar.

Greta
sumber
5

Ini adalah solusi peretasan dan saya yakin seseorang akan datang dengan sesuatu yang lebih elegan, tetapi jika Anda terjebak, dan tidak ada yang ...

Anda dapat menggunakan page.tpl.phpuntuk menghapus pencetakan $titlesama sekali, dan menambahkan bidang khusus baru yang disebut Judul dengan nama mesin $ new_title atau sesuatu seperti itu. Kemudian pada edit node, sembunyikan kotak Judul asli, dan pada node Simpan gunakan Bidang Terkomputasi atau php khusus untuk menyalin $new_titleke $title.

Setelah semua itu, tulis beberapa css untuk membuat $ new_title terlihat seperti judul halaman sebelumnya dan Anda harus dapat menempatkan bidang apa pun dalam urutan apa pun yang Anda suka, hanya dengan menyeret dan menjatuhkan di layar kelola bidang. Karena Anda menyalin $new_titleke $title, judul halaman di bilah browser harus tetap berfungsi dan tidak ada yang mengeluh tentang judul node yang hilang.

Seperti yang saya katakan, ini adalah hack - tetapi itu akan berhasil. Beritahu saya jika Anda membutuhkan info lebih lanjut

Frederik
sumber
1
Terima kasih atas sarannya Frederik. Seperti yang Anda tunjukkan itu jauh dari ideal tetapi tampak seperti salah satu dari beberapa solusi yang mungkin. Saya akan menambahkan solusi Anda dengan menyarankan bahwa modul auto_nodetitle harus digunakan jika mengambil pendekatan ini. Saya akan membiarkan pertanyaan terbuka untuk saat ini karena saya benar-benar berharap ada cara yang lebih baik dan saya dapat memulai hadiah. +1 untuk upaya Anda semuanya sama.
irishbuzz
4

page.tpl.php (garland)

...
      <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';
  }
}
dobeerman
sumber
Saya tidak yakin saya mengikuti apa yang terjadi di sini karena cuplikan kode pertama memberikan sedikit indikasi tentang apa yang baru dan apa yang ada. Saya juga menggunakan tema Zen daripada Garland meskipun perubahan yang diperlukan harus serupa. Dalam cuplikan kode kedua, apakah Anda menggunakan hook_preprocess_page ()? Bisakah Anda memperluas dengan contoh yang lebih konkret?
irishbuzz
Pada kode kedua kami telah mendefinisikan variabel baru 'custom_block'. Lihatlah bagian dari kode pertama tempat kami mencetak 'custom_block'. <? php if ($ custom_block): print '<div id = "blok-kustom" class = "blok-kosong">'. $ custom_block. '</div>'; berakhir jika; ?> cukup tentukan aturan untuk menghasilkan variabel ini. Begitu? :)
dobeerman
4

Ini tidak berlaku untuk pertanyaan Teaser di pos asli, tetapi bagi orang-orang yang menemukan ini dan hanya ingin mewujudkannya dalam tampilan penuh, inilah opsi bebas kode: tampilkan bidang dalam blok (menggunakan tampilan, misalnya) dan tempat yang memblokir di atas blok konten Anda tetapi di wilayah yang sama.

brad
sumber
Saya masih drupal n00b, bisakah Anda menjelaskan maksud Anda?
Kenny Wyland
3

Saya pikir Anda harus menggunakan fungsi preprocess di template.php Anda

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

Dan sebagai tambahan

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

buang variabel dan lakukan apa pun yang Anda inginkan. tambah / hapus / perbarui.

dobeerman
sumber
1
Fungsi-fungsi itu tidak mengubah urutan di mana judul dan bidang simpul lainnya dihasilkan. Untuk itu, Anda harus mengubah file template.
kiamlaluno
Begitu. Saya pikir Anda ingin menambahkan nilai bidang ke judul.
dobeerman
3

Saya menyelesaikan ini dengan solusi tanpa kode menggunakan Display Suite dan fitur tambahan "Wilayah untuk Memblokir". Saya paling suka solusi ini karena fleksibilitasnya.

Pada dasarnya, aktifkan bagian ekstra "Wilayah untuk Diblokir", aktifkan tampilan "Konten Fulltext" di Display Suite. (dengan asumsi Anda ingin menampilkan konten di atas judul dalam tampilan node penuh, Anda juga dapat menggunakannya untuk mode tampilan lain kecuali Default). Sekarang, di bagian "Kelola tampilan" dari "Konten Teks Lengkap", di bagian bawah layar, tab "Blok Wilayah" akan muncul. Masukkan nama blok baru di sana, simpan dan seret & letakkan bidang yang diinginkan ke blok ini. Terakhir, pindahkan blok yang baru dibuat di layar Blok di suatu tempat di atas judul simpul.

Anda dapat melihat video dari pendekatan yang sama di sini: http://www.youtube.com/watch?v=y4wyjxyhbNA , tentu saja Anda perlu menempatkan judul blok di atas (bukan ke bilah sisi kiri) di akhir.

Mirsoft
sumber
2

Untuk templat zen, kode di bawah ini berfungsi untuk saya.

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

Jadi akhirnya, Anda dapat dengan mudah mencetak bidang Anda di page.tpl.php;

<?php
if ($my_image_field):
   print render($my_image_field);
endif;
?>
pengguna991554
sumber
mengenai page.tpl.php, saya mendapatkan peringatan variabel tidak terdefinisi dengan Tema Responsif Bisnis tetapi ketika saya menghapus kondisional, itu berfungsi dengan baik. Dengan kata lain, saya mengubah <? Php if ($ my_image_field): print render ($ my_image_field); berakhir jika; ?> ke <? php print render ($ my_image_field); ?> Yang sepertinya tidak memberikan peringatan apa pun di semua halaman saya.
Amy Niebel
2

Saya tahu Anda sudah menggunakan beberapa tema untuk membangun dan sekarang mencoba menambahkan bidang di bagian atas judul.

Saran saya untuk semua pengembang membangun tema pada Drupal 7 adalah menggunakan: tema Omega + Modul Konteks dan Delta. Ini memberikan fondasi yang sangat kuat untuk tata letak Anda.

Dan fleksibilitas dalam mengatur Daerah, Blok dan Lapangan.

AnAnD
sumber
1

Anda dapat melakukannya dengan modul panel

houmem
sumber
Jawaban lama di sini, tetapi ini menangkap bendera. Akan lebih baik untuk menjelaskan sedikit bagaimana Panel dapat digunakan dalam situasi ini.
mpdonadio
Panel adalah overhead besar untuk hanya memindahkan bidang di posisi yang berbeda.
Akko