Kein 'title' und kein 'body' bei eigenem Node
Eingetragen von haggis (35)
am 03.12.2008 - 22:38 Uhr in
am 03.12.2008 - 22:38 Uhr in
Hallo,
ich habe ein Testmodul geschrieben, das einen eigenen Inhaltstyp erstellt. In hook_node_info() sind die Attribute 'has_title' und 'has_body' beide auf TRUE gesetzt - in der Datenbank ist es auch so angekommen. Wenn ich nun allerdings einen Inhalt dieses Typs erstellen möchte, dann werden mir alle andern Felder angezeigt, nur Title und Body nicht :(
Woran könnte das liegen? Habe den Code aus einem Buch und bin ihn schon zig mal durchgegangen. Habe nichts falsch abgetippt und der Code scheint dem entsprechenden Beispielcode von drupal.org sehr ähnlich:
function node_example_form(&$node) {
$type = node_get_types('type', $node);
if ($type->has_title) {
$form['title'] = array(
'#type' => 'textfield',
'#title' => check_plain($type->title_label),
'#required' => TRUE,
'#default_value' => $node->title,
'#weight' => -5
);
}
if ($type->has_body) {
$form['body_field'] = node_body_field($node, $type->body_label, $type->min_word_count);
}
// Bis hierher ist alles genau gleich, deswegen verstehe ich nicht warum title und body nicht
// angezeigt werden.
// Now we define the form elements specific to our node type.
$form['color'] = array(
'#type' => 'textfield',
'#title' => t('Color'),
'#default_value' => isset($node->color) ? $node->color : '',
);
$form['quantity'] = array(
'#type' => 'textfield',
'#title' => t('Quantity'),
'#default_value' => isset($node->quantity) ? $node->quantity : 0,
'#size' => 10,
'#maxlength' => 10
);
return $form;
}
Wäre für jeden Tipp dankbar!
Grüße
Haggis
- Anmelden oder Registrieren um Kommentare zu schreiben
Nicht, dass ich Entwickler
am 04.12.2008 - 00:04 Uhr
Nicht, dass ich Entwickler wäre, aber das titel feld wird bei cck dann nicht angezeigt wenn es keinen Namen hat.
Evtl. hilft das. Stichwort title_label
Schau dir mal das hier dazu an: http://drupal.org/node/265028
leider liegts daran auch
am 04.12.2008 - 13:51 Uhr
leider liegts daran auch nicht 'hook_node_info()' sieht wie folgt aus:
function node_example_node_info() {
return array(
'node_example' => array(
'name' => t('Example node'),
'module' => 'node_example',
'description' => t("This is an example node type with a few fields."),
'has_title' => TRUE,
'title_label' => t('Example Title'),
'has_body' => TRUE,
'body_label' => t('Example Body'),
)
);
}
Mittlerweile denke ich eher, dass es an einer Einstellung in Drupal selbst klemmt.
Danke für den kurzen Hoffnungsschimmer ;)
Ah, der Node wird übrigens nicht mit CCK erstellt sondern komplett mit dem eigenen Modul.
Grüße
Probiere mal alle optionalen Attribute wegzulassen
am 04.12.2008 - 14:05 Uhr
Probiere mal alle optionalen Attribute wegzulassen: 'has_title', 'title_label', 'has_body' und 'body_label'
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
Schade, dann noch viel
am 04.12.2008 - 14:05 Uhr
Schade, dann noch viel Erfolg.
Ah, der Node wird übrigens nicht mit CCK erstellt sondern komplett mit dem eigenen Modul.
Schon klar, nur hätte es ja sein können, dass die gleichen Symptome auf eine gleiche bzw. ähnliche Uhrsache zurück zu führen sind.
Du schreibst, dass Du den code aus einem Buch hast, lohnt evtl. noch der Verweis auf die online Version: http://api.drupal.org/api/file/developer/examples/node_example.module/6/...
node_example_form() <- node_example ???
am 04.12.2008 - 14:09 Uhr
Du zitierst hiermit Den Code Deines Modules?
function node_example_form(&$node)
Ist das richtig so?
Wie ist den der Name Deines Modules? Lautet er "node_example"?
Nehmen wir an er lautet "my_super_node" ("my_super_node.module" und "my_super_node.info"). Dann muss in Deinem Code von "my_super_node.module" stehen:
<?php
function my_super_node_form(&$node)
?>
Damit ergibt sich auch:
<?php
function my_super_node_info()
?>
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
biography_form()
am 04.12.2008 - 14:47 Uhr
Du zitierst hiermit Den Code Deines Modules?
function node_example_form(&$node)
Ist das richtig so?
Wie ist den der Name Deines Modules? Lautet er "node_example"?
Nein, ich hab aus dem drupal.org Code zitiert, weil der exakt gleich ist, bis auf die zusätzlichen Felder (die bei mir auch angezeigt werden). Von daher habe ich vorsichtshalber aus Copyrightgründen lieber auf das Zitat aus dem Buch verzichtet ;)
Mein Modul heißt 'biography' und die Dateien und Methoden entsprechend:
biography.info
biography.install
biography.module
Probiere mal alle optionalen Attribute wegzulassen: 'has_title', 'title_label', 'has_body' und 'body_label'
Auch dann werden die Eingabefelder nicht angezeigt, obwohl in der DB in der Tabell 'nody_type' die Felder mit Standardwerten gefüllt und 'has_title/body'=1 gesetzt werden.
Mache doch mal einen Test
am 04.12.2008 - 15:17 Uhr
Dieser Konstrukt funktioniert?
<?php
$type = node_get_types('type', $node);
if ($type->has_title) {
$form['title'] = array(
'#type' => 'textfield',
'#title' => check_plain($type->title_label),
'#required' => TRUE,
'#default_value' => $node->title,
'#weight' => -5
);
}
?>
Mache doch mal einen Test:
<?php
$type = node_get_types('type', $node);
if ($type->has_title) {
print 'DEBUG title';
$form['title'] = array(
'#type' => 'textfield',
'#title' => check_plain($type->title_label),
'#required' => TRUE,
'#default_value' => $node->title,
'#weight' => -5
);
}
?>
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
OMG!
am 04.12.2008 - 15:30 Uhr
Oh mein Gott...ich Dödel!
Das ist peinlich, sorry dass ich eure Zeit so verschwendet habe :(
Eigentlich sollte ich den Fehler lieber für mich behalten..aber naja, das bin ich euch schuldig:
<?php
$type = node_get_types('type', $node);
?>
...und was hatte ich?
<?php
$type = node_get_types('type', '$node');
?>
100 mal nachkontrolliert und 100 mal übersehen! Danke, dein Test hat mich darauf aufmerksam gemacht :)
Wie Jetzt? Das funktioniert nun? Kann eigentlich nicht sein.
am 04.12.2008 - 15:44 Uhr
Wie Jetzt? Das funktioniert nun?
<?php
$type = node_get_types('type', '$node');
?>
Kann eigentlich nicht sein.
In diesem Code wird
'$node'
NICHT als Variable verwendet. Wird dieser 2. Parameter beim Aufruf von node_get_types() verwendet MUSS er eine Variable sein. Siehe node_get_types.$node A node object, array, or string that indicates the node type to return. Leave at default value (NULL) to return a list of all node types.
Es sei denn der String
<?php
'$node'
?>
<?php
$type = node_get_types('type');
?>
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
$node
am 04.12.2008 - 15:47 Uhr
Nee, er hatte erst
'$node'
und hat es jetzt geändert...Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
es scheint nun zu funktionieren
am 04.12.2008 - 15:57 Uhr
Nee, er hatte erst '$node' und hat es jetzt geändert...
Ok, Missverstaendnis meinerseits.
Obwohl im Eroeffnungspost des Thread eindeutig dies steht:
<?php
function node_example_form(&$node) {
$type = node_get_types('type', $node);
?>
Und das ist ja wohl NICHT "er hatte erst '$node'". Da finde ich den Verlauf der Posts schon eigenartig.
Aber egal, es scheint nun zu funktionieren.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
ja, im Eröffnungspost steht
am 04.12.2008 - 18:36 Uhr
ja, im Eröffnungspost steht es richtig, WEIL:
ich dort von drupal.org zitiert habe, weil der Code genau der selbe ist wie meiner...ich aber lieber auf den drupal.org-Code zurückgegriffen habe um nicht alles aus dem Buch zitieren zu müssen. Ich bin meinen Code ja mehrmals durchgegangen und habe keinen Tippfehler gefunden...umso peinlicher, dass es sich doch als solcher herausgestellt hat und ich zudem noch von einer anderen Stelle gequotet habe.
Bevor noch weiteres Wirrwar gestiftet wird, wärs vielleicht besser das Topic zu schließen ;)
mit hängenden Hauptes,
LG Haggis
Hmm, warum nicht einfach das
am 20.12.2008 - 19:35 Uhr
Hmm, warum nicht einfach das Modul Automatic Nodetitles benutzen?
Soweit ich das richtig
am 20.12.2008 - 20:32 Uhr
Soweit ich das richtig verstehe, ist das Modul dazu da, den Titel zu verstecken. Mein Problem war allerdings, dass er gar nicht erst angezeigt wurde obwohl er es sollte.
Und da ich gerade am ausprobieren bin, wollte ich das auch lieber 'manuell' lösen als über ein fertiges Modul ;)
ah, hatte ich falsch
am 20.12.2008 - 20:50 Uhr
ah, hatte ich falsch verstandn :x