[gelöst] Webform Feld mit %get Variable + CCK Felder
am 01.02.2011 - 10:30 Uhr in
Ich habe einen Inhaltstyp mit mehreren CCK Feldern. Jetzt leite ich von diesem Node-Typ zu einem Webform Formular weiter und übergeben dabei ein paar Variablen. Diese Variablen greife ich dann per %get in einem Feld ab. Funktioniert auch soweit. :-)
Jetzt finde ich das nur ziemlich unschön, wenn in die URL so aussieht: "example.com/?id=inhalt eines cck feldes". Könnte ich in dieser Variable nicht die Node-ID übergeben und dann per PHP den entsprechenden Inhalt des Feldes "suchen"?
Bsp:
example.com/?id=32
Webform Feld Standard Inhalt:
"gebe mir den Inhalt vom CKK Feld "beispiel_cck_field" der Node ID 32 aus"
geht das??
Könnte ich das irgendwie umbauen?
<?php
print $node->field_beispiel[0]['view']
?>
Danke schon mal! :-)
- Anmelden oder Registrieren um Kommentare zu schreiben
Du könntest hier über ein
am 01.02.2011 - 12:31 Uhr
Du könntest hier über ein eigenes Modul und den hook_form_alter auf den Formular zugreifen und die entsprechenden Einträge auslesen bzw. die Ausgabe der Felder beeinflussen.
SteffenR
http://www.twitter.com/_steffenr
Drupal-Initiative e.V.
ok, hätte ich soweit
am 01.02.2011 - 13:25 Uhr
ok, hätte ich soweit verstanden ... nur wie bekomme ich jetzt den Inhalt eines bestimmten CCK Feldes einer bestimmten Node ID raus? :-)
mit der Funktion
am 01.02.2011 - 13:29 Uhr
mit der Funktion node_load();
Hier werden dann auch die CCK Felder mitgeladen oder Du schreibst dir Dein eigenes DB-Query.
sense-design | online solutions | Do not hack core!
Drupalcenter Verhaltensregeln | Threads bitte auf [gelöst] stellen.
monsi schrieb ok, hätte ich
am 01.02.2011 - 13:31 Uhr
ok, hätte ich soweit verstanden ... nur wie bekomme ich jetzt den Inhalt eines bestimmten CCK Feldes einer bestimmten Node ID raus? :-)
Über die Funktion node_load - diese liefert dir ein Objekt der kompletten Node zurück - inkl. aller Felder.
<?php
$my_node = node_load(123); // lade node 123
dsm($my_node); // Ausgabe des Objekts mithilfe des devel Moduls
?>
SteffenR
http://www.twitter.com/_steffenr
Drupal-Initiative e.V.
ich hab jetzt mal ein
am 01.02.2011 - 15:29 Uhr
ich hab jetzt mal ein bisschen rumprobiert ... mir auch die ausgabe von devel angeschaut ... doch was mache ich falsch? :(
<?php
$my_node = node_load(15);
// dsm($my_node); // Ausgabe des Objekts mithilfe des devel Moduls
print $my_node->field_department[0]['value']
?>
Was soll denn falsch sein. So
am 01.02.2011 - 15:38 Uhr
Was soll denn falsch sein? So wie Du es geschrieben hast sollte das passen.
Du müsstest das Problem näher beschreiben.
sense-design | online solutions | Do not hack core!
Drupalcenter Verhaltensregeln | Threads bitte auf [gelöst] stellen.
naja ich bekomme keinerlei
am 01.02.2011 - 15:50 Uhr
naja ich bekomme keinerlei Ausgabe ...
Ich habe testweise eine Seite mit Eingabeformat "PHP" erstellt - die "dsm($my_node);" Ausgabe hat ja funtkioniert :-)
Dann habe ich eine Node ID referenziert, die die CCK Felder beinhaltet. Das wars eigentlich schon ...
Kannst du noch mal genau
am 01.02.2011 - 16:51 Uhr
Kannst du noch mal genau deinen Quellcode posten.
Hast du denn auch das devel Modul installiert ?
Ist die Node, die du mit node_load laden möchtest im System vorhanden ?
http://www.twitter.com/_steffenr
Drupal-Initiative e.V.
ok also ... habe es in einer
am 01.02.2011 - 17:20 Uhr
ok also ... habe es in einer lokalen Testumgebung ausprobiert:
Devel Modul ist installiert. Die Node (Id: 15) gibt es, falls du das mit "im System vorhanden" meinst. :-)
Erstmal hab ich mir alles aus gegeben lassen:
<?php
$my_node = node_load(15);
dsm($my_node);
?>
Ausgabe s. Screenshot
Da habe ich dann meine CCK Felder gesehen und habe versucht eins per PHP auszugeben:
<?php
$my_node = node_load(15);
// dsm($my_node);
print $my_node->field_department[0]['value']
?>
Ausgabe s. Screenshot 2
Wie man auf der Ausgabe sieht, wird mir nur leerer Content angezeigt.
// Edit:
Cache geleert - und es funktioniert -.-
Jetzt muss ich nur noch ein Module für den Hook schreiben ... mal sehen, ob ich das hinbekomme :-)
Kannst Du mal den gesamten
am 01.02.2011 - 17:23 Uhr
Kannst Du mal den gesamten Quellcode posten aus den entsprechenden Dateien, damit wir mal einen Überblick bekommen?
UPDATE: ... oder so ...
sense-design | online solutions | Do not hack core!
Drupalcenter Verhaltensregeln | Threads bitte auf [gelöst] stellen.
sorry, wenn ich nochmal
am 01.02.2011 - 19:17 Uhr
sorry, wenn ich nochmal schreiben muss ... jetzt hänge ich über dem modul -.-
hier mal mein code:
<?php
/**
* Implementation of hook_form_FORM_ID_alter().
*/
function setfromvalue_form_webform_client_form_16_alter(&$form, &$form_state) {
$my_number = $_GET['id'];
if(is_numeric($my_number))
{
$my_node = node_load($my_number);
$my_content = $my_node->field_department[0]['value'];
$form['webform']['components'][2]['value'] = $my_content;
}
}
?>
ich denke mal, dass da "$form['webform']['components'][2]['value'] = $my_content;" der fehler liegt ...
vielen vielen dank schon mal!!! :-)
Wird der form_alter denn
am 01.02.2011 - 20:36 Uhr
Wird der form_alter denn aufgerufen ? Du kannst dir über dsm auch innerhalb der Funktion die einzelnen Werte ausgeben lassen und so "eine Art Debugging machen" ..
Ein erster Schritt wäre hier, sich einmal den Wert der Variable $my_content ausgeben zu lassen bzw. überhaupt erstmal zu schauen, ob der Form-Alter korrekt aufgerufen wird. ( Modul aktiviert, korrekter Name von Modul bzw. Funktion etc.. )
SteffenR
http://www.twitter.com/_steffenr
Drupal-Initiative e.V.
SteffenR@drupal.org
am 01.02.2011 - 22:47 Uhr
Wird der form_alter denn aufgerufen ?
ja, wird er. Hatte zum testen mal die Funktion der Doku Seite:
<?php
$form['terms_of_use'] = array(
'#type' => 'checkbox',
'#title' => t("I agree with the website's terms and conditions."),
'#required' => TRUE,
);
?>
http://api.drupal.org/api/drupal/developer--hooks--core.php/function/hoo...
das hat wunderbar funktioniert ...
Keiner eine Idee für mich?
am 03.02.2011 - 10:45 Uhr
Keiner eine Idee für mich? :-(
Wenn ich das Formular ohne "?id=XX" aufrufe, bekomme ich die Seite angezeigt. Trage ich eine ID ein, bekomme ich eine Fehlermeldung: "Fatal error: Cannot use string offset as an array in C:\xampp\htdocs\drupal\includes\form.inc on line 986". Hier nochmal mein Modul Code:
<?php
/**
* Implementation of hook_form_FORM_ID_alter().
*/
function setfromvalue_form_webform_client_form_16_alter(&$form, &$form_state) {
$my_number = $_GET['id'];
if(is_numeric($my_number))
{
$my_node = node_load($my_number);
$my_content = $my_node->field_department[0]['value'];
$form['webform']['components'][2]['value'] = $my_content;
}
}
?>
Nabend, jetzt bin ich
am 04.02.2011 - 22:18 Uhr
Nabend, jetzt bin ich schonmal etwas weiter ...
Mit dem Code bekomme ich ein Feld ins Formular, in diesem wird auch der Titel ausgegeben. In der E-Mail taucht dieses Feld aber nicht auf :(
<?php
/**
* Implementation of hook_form_FORM_ID_alter().
*/
function set_field_value_form_webform_client_form_7_alter(&$form, &$form_state) {
$my_number = $_GET['id'];
$my_node = node_load($my_number);
$form[submitted][daten][testfeld] = array(
'#type' => 'textfield',
'#title' => t('Test Modul Field Titel'),
'#default_value' => $my_node->title,
'#required' => TRUE,
);
}
?>
Es müsste doch auch eine Lösung geben die in etwa so aussieht:
<?php
$form['webform']['components']['feld']['#default_value'] = 'BLAH BLAH';
}
?>
Vielen Dank nochmal an
am 05.02.2011 - 15:56 Uhr
Vielen Dank nochmal an mikewink für die Hilfe im IRC Channel!! :-)
Benutze jetzt den normalen "hook_form_alter()":
<?php
/**
* Implementation of hook_form_alter().
*
* This lets you make changes to any form in the site. You can alter, remove
* or add form elements. You can also alter the validation and submission
* behavior. The name will always be modulename_form_alter.
*/
function set_field_value_form_alter(&$form, $form_state, $form_id) {
// Normally a switch is used because you may want to alter more than
// one form and it is easy to add a new case for each form.
switch ($form_id) {
case 'webform_client_form_7':
// dsm($form);
$my_number = $_GET['id'];
$my_node = node_load($my_number);
$form['submitted']['fieldset']['field']['#default_value'] = $my_node->title;
break;
}
}
?>