Treffen vom 12.10.2009 - automatische Inhaltstypen mit CCK-Feldern
Beim DUG-Treffen am 12.10.2009 habe ich ja ein wenig darüber erzählt, wie man per Modul einen
Inhaltstypen mit CCK-Feldern zur Verfügung stellen kann.
Hier nun der Code und eine kleine Anleitung dazu.
Zuerst erstellen wir uns den Inhaltstypen per Hand, also über admin/content/types/add. Das müssen wir tun,
damit wir die Definition des Typen exportieren und später in unser Modul einbinden können.
; $Id:$
name = Article
description = "Creates a custom content type called 'article'."
core = 6.x
dependencies[] = contentarticle.info
Nun erstellen wir die Installationsanweisungen:
/**
* Implement hook_install().
*
* Create default content types.
*/
function article_install() {
// CCK content_copy.module may not be enabled, so make sure it is included.
require_once drupal_get_path('module', 'content') . '/modules/content_copy/content_copy.module';
// Get the CCK node types to be created.
module_load_include('inc', 'article', 'cck/cck_typedefinitions');
$types = article_cck_content_types();
$form_state = array();
foreach ($types as $type => $content) {
$form_state['values']['type_name'] = '<create>';
$form_state['values']['macro'] = '$content = ' . var_export($content, TRUE) . ';';
// Execute form provided by content_copy.module
drupal_execute('content_copy_import_form', $form_state);
}
content_notify('install', 'article');
}
/**
* Implement hook_uninstall().
*/
function article_unsinstall() {
content_notify('uninstall', 'article');
}
article.install
Mit dieser Funktion wird der Inhaltstyp über die Funktionen des content-Moduls (CCK) erstellt.
Die Definition des Inhaltstypen befindet sich in der Datei cck_typedefinitions.inc im Unterverzeichnis "cck"
unseres Moduls, die wir jetzt anlegen:
function imagehost_cck_content_types() {
$types = array();
// Node type 'article'.
// -->
$content['type'] = array (
'name' => 'Article',
'type' => 'article',
);
// <--
$types[$content['type']['type']] = $content;
return $types;
}article/cck/cck_typedefinitions.inc
Der Bereich zwischen // --> und // <-- markiert dabei die eigentliche Definition des Inhaltstypen.
Diese bekommen wir, wenn wir unter admin/content/types/export unseren vorher erstellten Inhaltstypen exportieren.
Nachdem der exportierte Inhaltstyp dort eingefügt wurde, ist eigentlich schon alles getan. Natürlich muss jetzt noch die
eigentliche Moduldatei (article.module) erstellt werden, diese benötigt jedoch keine spezielle Funktionalität.
Sobald das neue Modul installiert wird, steht der neue Inhaltstyp zur Verfügung (dies funktioniert natürlich nur, wenn nicht
bereits ein Typ mit gleichem Namen existierte).