CKEditor greift nicht bei modulbasiertem Contenttypen
am 28.09.2010 - 14:34 Uhr in
Hallo zusammen,
aus dem Drupal Entwickler Handbuch stammt der folgende Code, welcher ein Modul zur Erstellung eines Node-Typ "Joke" generiert:
<?php
// $Id$
/**
* @file
* Stellt den Node-Typ "joke" bereit.
*/
/**
* Implementierung von hook_node_info().
*/
function joke_node_info() {
// Wir geben ein Array zurück, weil ein Modul mehrere Node-Typen
// definieren kann. Wir definieren nur einen Node-Type: 'joke'.
return array(
'joke' => array(
'name' => t('Joke'), // Erforderlich.
'module' => 'joke', // Erforderlich.
'description' => t('Tell us your favorite joke!'), // Erforderlich.
'has_title' => TRUE,
'title_label' => t('Title'),
'has_body' => TRUE,
'body_label' => t('Joke'),
'min_word_count' => 2,
'locked' => TRUE
)
);
}
function joke_menu_alter(&$callbacks) {
// Hat der Benutzer die Berechtigung 'Inhalte verwalten' nicht,
// wird das Menüelement 'joke' durch Setzen des Zugriffscallbacks
// auf FALSE deaktiviert.
if (!user_access('administer nodes')) {
$callbacks['node/add/joke']['access callback'] = FALSE;
// Zugriffsargumente müssen aufgehoben werden, weil Drupal sonst
// user_access()als Standardzugriffscallback verwendet.
unset($callbacks['node/add/joke']['access arguments']);
}
}
/**
* Implementierung von hook_perm().
*/
function joke_perm() {
return array('create joke', 'edit own joke', 'edit any joke', 'delete own joke', 'delete any joke');
}
/**
* Implementierung von hook_access().
*/
function joke_access($op, $node, $account) {
$is_author = $account->uid == $node->uid;
switch ($op) {
case 'create':
// Zulassen, wenn die Benutzerrolle die Berechtigung 'create
// joke' hat.
return user_access('create joke', $account);
case 'update':
// Zulassen, wenn die Benutzerrolle Berechtigung 'edit own joke'
// hat und Autor ist oder wenn die Benutzerrolle die
// Berechtigung 'edit any joke' hat.
return user_access('edit own joke', $account) && is_author || user_access('edit any joke', $account);
case 'delete':
// Zulassen, wenn die Benutzerrolle die Berechtigung 'delete
// own joke' hat und Autor ist oder die Benutzerrolle die
// Berechtigung 'delete any joke' hat.
return user_access('delete own joke', $account) && $is_author || user_access('delete any joke', $account);
}
}
/**
* Implementierung von hook_form().
*/
function joke_form($node) {
// Fragt Metadaten für diesen Node-Typ ab
// (für die Labels von Titel und Body).
// Wir haben sie in joke_node_info() definiert.
$type = node_get_types('type', $node);
$form['title'] = array(
'#type' => 'textfield',
'#title' => check_plain($type->title_label),
'#required' => TRUE,
'#default_value' => $node->title,
'#weight' => -5,
'#maxlength' => 255,
);
$form['body_filter']['body'] = array(
'#type' => 'textarea',
'#title' => check_plain($type->body_label),
'#default_value' => $node->body,
'#required' => TRUE
);
$form['body_filter']['filter'] = filter_form($node->format);
$form['punchline'] = array(
'#type' => 'textfield',
'#title' => t('Punchline'),
'#required' => TRUE,
'#default_value' => isset($node->punchline) ? $node->punchline : '',
'#weight' => 5
);
return $form;
}
....
}
Auf dieser Basis habe ich ein Contenttypemodul angelegt und musste leider feststellen, dass der CKEditor das textarea-formfeld nicht erkennt. Bei Blick in den Quellcode habe ich festgestellt, dass die ckeditor.js nicht aufgerufen wird - im Header der Seite. Weiss jemand warum das nich aufgerufen wird und wie ich das ändern kann? Eigentlich erfolgt der Aufruf über die page.tpl.php (<?php print $scripts; ?>
). Bei den Core - und den über CCK angelegten Contenttypen funktioniert der CKEditor einwandfrei.
Danke und viele Grüße,
Torsten
Nachtrag: Das Problem wird auch hier beschrieben: http://drupal.org/node/857920
- Anmelden oder Registrieren um Kommentare zu schreiben
Neue Kommentare
vor 4 Stunden 27 Minuten
vor 22 Stunden 15 Minuten
vor 1 Tag 51 Minuten
vor 1 Tag 1 Stunde
vor 1 Tag 4 Stunden
vor 1 Tag 5 Stunden
vor 1 Tag 13 Stunden
vor 1 Tag 21 Stunden
vor 1 Tag 21 Stunden
vor 1 Tag 22 Stunden