Memisahkan bidang konten ke berbagai wilayah

11

Situasi saya adalah sebagai berikut: Saya memiliki tipe konten Seminar, dengan bidang A, B, dan C. Saya memiliki daerah Header, Footer, Content, dan Sidebar Kiri. Ada beberapa bidang dalam Seminar yang ingin saya tampilkan di wilayah Konten, tetapi juga di wilayah Sidebar Kiri.

Bagaimana cara saya melakukan ini? Mohon maaf jika ini sudah dijawab sebelumnya. Saya seorang pengembang dan tidak ragu untuk terjun ke fungsi hook dan preprocessor. Saya memiliki modul Views yang diinstal, tetapi belum pernah menggunakannya (ini adalah situs Drupal pertama saya, jika Anda tidak tahu: P).

Bersulang.

EDIT: Ini untuk Drupal 7 .

Lester Peabody
sumber
Drupal versi apa?
keva
Maaf, ini untuk Drupal 7. Saya telah menambahkan info itu ke pertanyaan awal saya.
Lester Peabody
Saya akan menerima jawaban segera setelah saya menyelesaikan masalah. Saat ini saya mencari tahu cara mengatur saran saya untuk menampilkan konten dengan tepat ...
Lester Peabody

Jawaban:

11

Tidak ada cara mudah di luar kotak untuk menambahkan konten sebuah simpul ke berbagai wilayah pada halaman. Ada beberapa cara untuk mengatasi masalah ini.

Cara nonkode: Tampilan & Blok

Buat tampilan

  • Jenis: Blok
  • Filter Kontekstual: Konten: Nid
    • nilai default: ambil dari halaman saat ini
  • Bidang: Apa pun yang Anda inginkan
  • Saring:
    • Tipe Konten: Seminar

(ditambah pengaturan tambahan apa pun yang Anda inginkan)

Lalu pergi ke halaman blokir administrator. Pindahkan blok tampilan yang baru dibuat, ke wilayah yang Anda inginkan ditampilkan. Seharusnya hanya ditampilkan pada halaman simpul seminar.

Ulangi untuk semua wilayah

Cara Pengodean dengan theme_preprocess_region ():

kode akan terlihat seperti ini

MYTHEME_preprocess_region(&$variables) {
  if (isset($node) && ($node->type == 'seminar' )) {
     //add new variable here.     
  }
}

Ini hanya untuk Drupal 7. Sekarang tersedia di region.tpl.php Anda.

iStryker
sumber
1
Pendekatan views / block sebenarnya yang saya sukai, tetapi menyarankan Display Suite karena beberapa merasa lebih mudah didekati.
jhedstrom
Tampilan berfungsi baik untuk ini, seperti yang saya temukan. Tampilan secara umum fantastis. Saya juga menggunakan modul Blok Menu untuk membagi menu saya berdasarkan di mana saya berada di situs (mari saya membagi menu utama sehingga selalu ditampilkan, dan submenu berdasarkan menu apa yang saya pilih di menu utama). Modul yang benar-benar luar biasa, sangat dianjurkan.
Lester Peabody
Agak gila yang saya tanyakan ini hampir sebulan, menerima jawabannya, tetapi saya baru saja menerapkan jawaban ini sekarang (meskipun saya sudah menggunakan Views satu ton sejak itu). Bisakah Anda menjelaskan sedikit penggunaan Views untuk Drupal 7? Tampaknya Argumen: nid tidak ada di Tampilan 3 untuk Drupal 7. Terima kasih.
Lester Peabody
Saya menemukan jawabannya. Gagasan Argumen telah digantikan oleh Filter Kontekstual di bawah Lanjutan.
Lester Peabody
D7, Pemilih Kontekstual: Konten: NID. Sunting: lihat Anda menemukannya, sebelum saya bisa menjawab
iStryker
7

The Tampilan Suite modul memungkinkan Anda untuk melakukan hal ini. Anda harus mengaktifkan modul Display Suite Extras untuk mengekspos kawasan tema sebagai target untuk komponen node. Informasi tentang cara melakukan ini dapat ditemukan di bidang Tambah ke halaman blok dokumentasi Display Suite

jhedstrom
sumber
5

Saya memiliki masalah yang sama. Solusinya cukup mudah. Anda dapat mendasarkan fakta bahwa dalam Drupal 7 kita dapat mendefinisikan view_mode kita sendiri, tidak hanya FULL dan TEASER (seperti yang kita ketahui dari versi tertua). Jadi, tentukan view_mode lain untuk digunakan di wilayah Anda: mis. LEFTHAND. Drupal menampilkan view_mode LENGKAP di wilayah konten. Jadi, Anda harus mengatakan kepada Drupal untuk menampilkan LEFTHAND di wilayah Sidebar Left.

  1. Di template_preprocess_page ()

    if ($vars['node']) {
    $vars['page']['sidebar_left'][] = node_view($vars['node'], 'lefthand');
    }

  2. Dalam node.tpl.php tambahkan tampilan baru untuk mode tampilan kiri

    if ($view_mode == 'lefthand') {
    // render content fields here
    }

Patrik Lucan
sumber
1
Jawaban ini super-sangat pintar, dan tidak memerlukan modul eksternal apa pun, selain untuk menentukan mode tampilan. Alternatif sederhana untuk Display Suite adalah Mode Tampilan Entitas: drupal.org/project/entity_view_mode
paul-m
Saya sangat menyukai yang ini. Bungkus dalam fungsi if agar hanya muncul di halaman tertentu. Saya dulu if (array_key_exists('block_14',$vars['page']['main_content'])){}membuatnya hanya muncul di halaman dengan blok tertentu.
Dominic Woodman
3

Jika Display Suite sepertinya terlalu banyak untuk kebutuhan Anda (Ini adalah modul yang hebat, tetapi mungkin berlebihan jika Anda hanya perlu memindahkan beberapa bidang) ada modul untuk tujuan ini saja -> Blok CCK .

Saya tahu ini disebut blok 'CCK', tetapi bekerja dengan Drupal 7 (yang membawa fungsionalitas CCK ke inti).

Peluang G
sumber
1

Sedikit perubahan pada jawaban @Patrik Lucan, if ($vars['node'])menyebabkan masalah pada halaman yang bukan node, misalnya halaman depan khusus dengan blok atau halaman tampilan.

Diubah menjadi:

if (array_key_exists('node', $vars))

Yang sepertinya telah menyelesaikan masalah.

Dominic Woodman
sumber
0

Sementara itu ada modul untuk ini. Dari halaman modul:

Bidang sebagai Blok menyediakan cara mudah untuk menampilkan satu atau lebih bidang dari simpul saat ini di dalam blok.

Modul ini bertujuan untuk menjadi alternatif yang ringan untuk modul seperti Panel dan Tampilan Suite, atau menggunakan Tampilan untuk menentukan blok yang hanya mengambil satu bidang.

phils
sumber