Podział pól treści na różne regiony

11

Moja sytuacja jest następująca: mam seminarium typu treści z polami A, B i C. Mam regiony Nagłówek, stopka, treść i pasek boczny po lewej stronie. W Seminarium chcę wyświetlać pewne pola w obszarze zawartości, ale także w lewym obszarze paska bocznego.

Jak mam to zrobić? Przepraszam, jeśli na to już wcześniej odpowiedziano. Jestem programistą i nie waham się zagłębiać w funkcje przechwytujące i preprocesora. Mam zainstalowany moduł Widoki, ale nigdy go nie użyłem (to moja pierwsza strona Drupala, jeśli nie możesz powiedzieć: P).

Twoje zdrowie.

EDYCJA: To jest dla Drupal 7 .

Lester Peabody
źródło
Która wersja Drupala?
keva
Przepraszamy, dotyczy to Drupala 7. Dodałem te informacje do mojego pierwotnego pytania.
Lester Peabody
Przyjmę odpowiedź, jak tylko będę mógł rozwiązać problem. Obecnie zastanawiam się, jak skonfigurować moje sugestie, aby odpowiednio wyświetlać treść ...
Lester Peabody

Odpowiedzi:

11

Nie ma łatwego, gotowego do użycia sposobu dodania zawartości węzła do różnych regionów na stronie. Istnieje wiele sposobów rozwiązania tego problemu.

Sposób niekodowania: Widoki i bloki

Utwórz widok

  • Wpisz: Block
  • Filtr kontekstowy: Treść: Nid
    • wartość domyślna: pobierz z bieżącej strony
  • Pola: cokolwiek chcesz
  • Filtr:
    • Typ treści: Seminarium

(plus dowolne dodatkowe ustawienia)

Następnie przejdź do strony bloku administratora Przenieś nowo utworzony blok widoku do regionu, w którym chcesz go wyświetlić. Powinien być wyświetlany tylko na stronach węzłów seminarium.

Powtórz dla wszystkich regionów

Sposób kodowania za pomocą theme_preprocess_region ():

kod wyglądałby mniej więcej tak

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

Dotyczy to tylko Drupala 7. Teraz jest dostępny w twoim regionie.tpl.php.

iStryker
źródło
1
Podejście do wyświetlania / blokowania jest w rzeczywistości tym, które wolę, ale sugeruje Display Suite, ponieważ niektórzy uważają, że jest bardziej dostępny.
jhedstrom
Widoki świetnie się do tego nadają, jak odkrywam. Widoki są ogólnie fantastyczne. Korzystam również z modułu Blok menu do dzielenia menu w zależności od tego, gdzie jestem na stronie (podzielmy menu główne, aby zawsze było wyświetlane, a menu podrzędne w zależności od tego, do którego menu wchodzę w menu głównym). Całkowicie niesamowity moduł, wysoce zalecany.
Lester Peabody
To trochę szalone, że pytałem o to prawie miesiąc, zaakceptowałem odpowiedź, ale teraz przystępuję do zastosowania tej odpowiedzi (chociaż odtąd korzystam z Views). Czy mógłbyś nieco wyjaśnić sposób korzystania z widoków w Drupal 7? Wygląda na to, że Argument: nid nie istnieje w Widoku 3 dla Drupala 7. Dzięki.
Lester Peabody,
Rozgryzłem to. Pojęcie Argument zostało zastąpione przez Filtry kontekstowe w części Zaawansowane.
Lester Peabody,
D7, Fitler kontekstowy: Treść: NID. Edytuj: zobacz, jak to znalazłeś, zanim mogłem odpowiedzieć
iStryker,
7

Moduł Display Suite pozwala to zrobić. Musisz włączyć moduł Display Suite Extras, aby wyświetlać regiony tematyczne jako cele dla komponentów węzłów. Informacje na temat tego, jak to zrobić, można znaleźć w polach Dodaj do strony blokowej dokumentacji Display Suite

jhedstrom
źródło
5

Miałem ten sam problem. Rozwiązanie jest dość łatwe. Możesz oprzeć fakt, że w Drupal 7 możemy zdefiniować własny tryb view_mode, nie tylko FULL i TEASER (jak wiemy z najstarszych wersji). Zdefiniuj więc inny tryb widoku do użycia w swoim regionie: np. LEFTHAND. Drupal wyświetla PEŁNY tryb wyświetlania w obszarze zawartości. Musisz więc powiedzieć Drupalowi, aby wyświetlił LEFTHAND w lewym obszarze paska bocznego.

  1. W template_preprocess_page ()

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

  2. W node.tpl.php dodaj nowy ekran dla trybu widoku z lewej strony

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

Patrik Lucan
źródło
1
Ta odpowiedź jest super-ultra-sprytna i nie wymaga żadnych zewnętrznych modułów poza definiowaniem trybów wyświetlania. Prostą alternatywą dla Display Suite są tryby widoku jednostki: drupal.org/project/entity_view_mode
paul-m
To mi się naprawdę podoba. Zawiń go w funkcję if, aby pojawiała się tylko na niektórych stronach. Kiedyś if (array_key_exists('block_14',$vars['page']['main_content'])){}pojawiał się tylko na stronach z określonym blokiem.
Dominic Woodman
3

Jeśli pakiet Display Suite wydaje się zbyt duży dla twoich potrzeb (jest to świetny moduł, ale może być przesada, jeśli potrzebujesz tylko przenieść kilka pól), istnieje moduł tylko do tego celu -> Bloki CCK .

Wiem, że nazywa się to blokami „CCK”, ale działa z Drupalem 7 (który wprowadził funkcjonalność CCK do rdzenia).

Szansa G.
źródło
1

Nieznaczna zmiana w odpowiedzi @Patrik Lucan, if ($vars['node'])powodowała problemy na stronach, które nie były węzłami, np. Niestandardowa strona główna z blokiem lub widokiem.

Zmienić na:

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

Co wydaje się rozwiązać problem.

Dominic Woodman
źródło
0

Tymczasem jest na to moduł. Ze strony modułu:

Pole jako blok zapewnia łatwy sposób wyświetlenia jednego lub więcej pól bieżącego węzła w bloku.

Ten moduł ma być lekką alternatywą dla modułów takich jak Panele i Display Suite lub wykorzystywać Widoki do definiowania bloku, który pobiera tylko jedno pole.

phils
źródło