[gelöst] Inhaltstyp, wie Feldabhängige Detailansicht möglich?
![](http://www.drupalcenter.de/files/noavatar_mini.gif)
am 03.11.2013 - 17:18 Uhr in
Hallo Drupaler,
meine Werte aus Inhaltstyp Objekte sollen über 2 Hauptmenu Links per Views ausgeben werden, Miete und Kauf.
Die Felder der Objekte sind alle gleich, bis auf Mietpreis und Kaufpreis, hier kann der User per Checkbox wählen, das sein Objekt sowohl zur Miete als auch zum Verkauf gezeigt werden soll, die Ausgabe erfolgt dann über 2 Views mit Suchfiltern und Listenansicht, bis hier alles gut.
Das Problem kommt bei Click von der Listenansicht auf die Detailansicht, da ja nun beide Felder Mietpreis und Kaufpreis dargestellt werden (wenn diese Werte enthalten).
Ich möchte aber auf Detailansicht Miete nur den Mietpreis und bei Detailansicht Kauf nur den Kaufpreis anzeigen.
Da der Pfad vom Inhaltstyp auf eben einen Pfad zeigt werden ja erstmal beide Felder ausgegeben.
Wie kann ich von der Listenansicht auf einen bestimmten Block zeigen bzw. wie könnte man das sonst lösen?
Viele Grüße
Jenna
- Anmelden oder Registrieren um Kommentare zu schreiben
Moinsen,der Aufruf des Full
am 04.11.2013 - 01:36 Uhr
Moinsen,
der Aufruf des Full Nodes des CT Objekte kommt ja entweder aus der View Kauf oder Miete. Wenn die Views den Display Typ "Page" haben, sind das zwei verschiedene URL's und damit zwei verschiedene Referrer. Darüber kannst Du im hook_field_display_alter() steuern, dass das Feld Mietpreis nicht angezeigt wird, wenn der Aufruf der Vollansicht aus der Kauf- View kommt und umgekehrt. Die URLs der View- Pages sollten in etwas so aussehen: example.com/objekte/kauf und example.com/objekte/miete
So in etwa kann der Code für die MODULNAME.module Datei aussehen:
<?php
/**
*Implements hook_field_display_alter().
*/
function MODULNAME_field_display_alter(&$display, $context) {
//Holen der Referrer URL
$ref = $_SERVER['HTTP_REFERER'];
//Zerlegen der URL Bestandteile in ein Array. Siehe auch dpm ($split);
$split = explode('/', $ref);
//Prüfen ob die Werte objekte und kauf gegeben sind
if (($split[5] == 'objekte') && ($split[6] == 'kauf') && ($context['instance']['bundle'] == 'objekte')) {
//wenn TRUE, keine Ausgabe des Feldes Mietpreis
$context['entity']->Mietpreis = 0;
}
//wenn FALSE, prüfen ob objekte und miete gegeben sind
elseif (($split[5] == 'objekte') && ($split[6] == 'miete') && ($context['instance']['bundle'] == 'objekte')) {
// wenn TRUE, keine Ausgabe des Feldes Kaufpreis
$context['entity']->kaufpreis = 0;
}
}
?>
Hallo glycid, erstmal
am 05.11.2013 - 10:16 Uhr
Hallo glycid,
erstmal herzlichen Dank für deine Mühe, das klingt logisch und in der Art sind auch die URLs aufgebaut und gut zu wissen das es überhaupt funktionieren kann.
Ich mache mich jetzt erstmal mit Module schreiben etwas vertraut, ich wußte das das irgendwann kommt.... und gucke mal wie weit ich das hinbekomme.
Besten Dank für den Ansatz... viele Grüße
Jenna
Ich habe das jetzt mit node
am 07.11.2013 - 10:29 Uhr
Ich habe das jetzt mit node clone gelöst, da die Planung ohnehin nicht sinnvoll war, es müssen doch noch 2 weitere Felder bearbeitet werden.
@glycid: immerhin habe ich mein erstest Testmodul umgesetzt (auch wenn dieses nur einen Infotext ausgibt..), spannendes Thema, werde ich dranbleiben.
Viele Grüße
Jenna