Default Content Type / Inhaltstyp erweitern
am 21.01.2013 - 16:20 Uhr in
Hallo zusammen,
auf einer Seite habe ich ein Teaser-Laufband (Carousel). Ein Teaserelement besteht hier aus folgenden Elementen:
1.Teaser-Headline (Text)
2.Teaser-Subline (Text)
3.Teaser-Bild (Bild)
(Teaser-Url (Link zum Inhalt)
Jetzt soll JEDER Inhaltstyp diese Felder standardmäßig erhalten. Am besten wie folgt:
Jeder Inhaltstyp bekommt eine Checkbox "Teaser für diesen Eintrag erstellen" (optional)
Wenn diese Checkbox angehakt wird, erscheinen die 3 neuen Pflicht-Felder, siehe oben.
So kann man für jeden Inhalt bei Bedarf einen Teaser erstellen.
Man könnte diese Felder "händisch" für jeden Inhaltstyp anlegen, wäre aber nicht so schön.
Wenn ich momentan einen neuen Inhaltstyp erstelle, hat dieser ja auch als Standard ein Feld "Body", ein Feld "Title"...
Wie löst man dieses Problem? Ein Modul anlegen? Ein bestehendes verwenden?
Die Frage die dann noch kommt: Wie kann ich mit views diese Felder zusammenfassen? Abfrage: Alle Inhalte, bei denen die obige Checkbox angehakt ist.
Vielen Dank für eure Ideen / Hilfe
Flo
- Anmelden oder Registrieren um Kommentare zu schreiben
Entweder ein eigenes Modul
am 21.01.2013 - 16:35 Uhr
Entweder ein eigenes Modul (sieh Dir an, wie das im Node-Modul gelöst ist) oder Du benutzt [do:field_collection]. Damit definierst Du ein Feld als Field-Collection und danach die Felder, aus denen die Field-Collection bestehen soll. Bei einem neuen Datentyp brauchst Du dann nur dieses Field-Collection Feld hinzuzufügen um die gesamte Gruppe in diesen Datentyp benutzen zu können. Im View brauchst Du dann aber zusätzlich eine Beziehung zur Field-Collection um die einzelnen Felder ansprechen zu können.
Beste Grüße
Werner
Hi Werner, vielen Dank. Ich
am 21.01.2013 - 16:42 Uhr
Hi Werner,
vielen Dank. Ich schau mir die beiden Vorschläge gleich mal an!
gruß
flo
Standard Feld zu einem Node
am 21.01.2013 - 18:08 Uhr
Hi,
müsste ich mir dann folgenden Code anschauen, oder gehört da noch mehr dazu?
/**
* Add default body field to a node type.
*
* @param $type
* A node type object.
* @param $label
* The label for the body instance.
*
* @return
* Body field instance.
*/
function node_add_body_field($type, $label = 'Body') {
// Add or remove the body field, as needed.
$field = field_info_field('body');
$instance = field_info_instance('node', 'body', $type->type);
if (empty($field)) {
$field = array(
'field_name' => 'body',
'type' => 'text_with_summary',
'entity_types' => array('node'),
);
$field = field_create_field($field);
}
if (empty($instance)) {
$instance = array(
'field_name' => 'body',
'entity_type' => 'node',
'bundle' => $type->type,
'label' => $label,
'widget' => array('type' => 'text_textarea_with_summary'),
'settings' => array('display_summary' => TRUE),
'display' => array(
'default' => array(
'label' => 'hidden',
'type' => 'text_default',
),
'teaser' => array(
'label' => 'hidden',
'type' => 'text_summary_or_trimmed',
),
),
);
$instance = field_create_instance($instance);
}
return $instance;
}
Wo müsste ich dann die Funktion node_add_XXX_field einfügen? In der template Datei? Per Hook? Bin noch neu in der Materie...
Es sollen eben die oben genannten 3 Felder automatisch in jedem Inhaltstyp zur Verfügung stellen. Das mit der Checkbox wäre dann eben noch ein schönes Feature...
Danke für die Tipps...
Gruß
flo
Du mußt dazu aber die
am 21.01.2013 - 19:06 Uhr
Du mußt dazu aber die entsprechenden Felder erst einmal definiert haben. Die von Dir gefundene Funktion setzt die Existenz des Body-Feldes voraus. Nimm lieber die Field-Collection.
Beste Grüße
Werner