Modal form mit Argument
am 14.12.2017 - 02:41 Uhr in
Nabend,
ich bin gerade etwas am verzweifeln. Ich versuche nun schon seit Tagen ein Modal zu erstellen in dem ein bereits ausgefülltes Formular geladen werden soll. Die Daten für das Formular, bekomme ich durch eine SOAP-Abfrage. Allerdings wird mir ständig falscher Inhalt angezeigt, der nicht zu ID in der URL passt. Hier mal mein Code:
Formular:
<?php
function create_node_form($form, &$form_state, $ID) {
$programs = _affiliate_overview_tradetracker_campaigns($ID);
foreach ($programs as $key => $program) {
}
ctools_include('modal');
ctools_modal_add_js();
$TITLE = $program->name;
$BODY = $program->info->campaignDescription;
$LINK = $program->info->trackingURL;
$form['node_type'] = array(
'#type' => 'select',
'#title' => t('Content type'),
'#options' => array(
'gewinnspiele' => t('Gewinnspiele'),
'gutschein' => t('Gutscheine'),
'shop' => t('Shop'),
),
);
$form['node_title'] = array(
'#type' => 'textfield',
'#title' => t('Title'),
'#default_value' => $TITLE,
);
$form['node_body'] = array(
'#type' => 'textarea',
'#title' => t('Description'),
'#default_value' => $BODY,
);
$form['node_affiliate_link'] = array(
'#type' => 'textfield',
'#title' => t('Link'),
'#default_value' => $LINK,
);
$form['node_field_ablaufdatum'] = array(
'#type' => 'date_popup',
'#date_timezone' => 'Europe/Berlin',
'#date_format' => 'd-m-Y H:i:s',
'#date_increment' => 1,
'#date_year_range' => '-3:+3',
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Click Here!'),
'#submit' => array('create_node'),
);
return $form;
}
?>
Dazu muss gesagt werden, dass es mit dem Parameter "$ID" zu einem Fehler 500 bei klicken auf den Link gibt mit der Meldung "Too few arguments"...
Menü-Links:
<?php
$items['tradetracker/program/%'] = array(
'title' => t('Program'),
'access arguments' => array('access affiliate overview'),
'page arguments' => array(2),
'page callback' => 'tradetracker_GetProgram',
'file' => 'includes/affiliate_overview_tradetracker_page.inc',
'type' => MENU_CALLBACK,
);
$items['tradetracker/program/%/%ctools_js'] = array(
'page callback' => 'tradetracker_modal_callback',
'page arguments' => array(2, 3),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
'file' => 'includes/create_node.inc',
);
?>
Herkunft der ID:
<?php
function _affiliate_overview_tradetracker_campaigns($ID) {
if (variable_get('tradetracker_checkox', TRUE)) {
$client = new SoapClient(WSDL_TRADETRACKER, array('compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP));
$client->authenticate(TRADETRACKER_ID, TRADETRACKER_PASSPHRASE);
$affiliateSiteID = 251122;
$DateFrom = strtotime('first day of ' . date('F Y'));
$DateTo = strtotime("today");
$options = array(
'assignmentStatus' => variable_get('assignment_status'),
'ID' => $ID,
);
$response = $client->getCampaigns($affiliateSiteID , $options);
return $response;
}
}
?>
Das funktioniert bisher bei allem außer bei dem Modal nicht. Wenn ich es ohne Modal mache, funktioniert es. Ich bin nicht der große Programmierer, eher ein Hobby.
Hoffe mich versteht jemand und kann helfen.
- Anmelden oder Registrieren um Kommentare zu schreiben
Hi,wo ist denn der Code für
am 14.12.2017 - 03:31 Uhr
Hi,
wo ist denn der Code für den tradetracker_modal_callback Callback?
'page callback' => 'tradetracker_modal_callback',
Es sollte es ja irgendwo einen Fehler anzeigen, wenn es nicht funktioniert.
Hast in Firebug geschaut ob es einen js Fehler auslöst?
mfg
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Hallo, danke erstmal für
am 14.12.2017 - 13:21 Uhr
Hallo,
danke erstmal für deine Antwort. Hier ist der Code für die Callback-Funktion:
<?php
function tradetracker_modal_callback($ajax, $ID) {
if ($ajax) {
ctools_include('ajax');
ctools_include('modal');
$form_state = array(
'ajax' => TRUE,
'title' => t('MyModule Modal Form'),
);
// Use ctools to generate ajax instructions for the browser to create
// a form in a modal popup.
$output = ctools_modal_form_wrapper('create_node_form', $form_state);
// If the form has been submitted, there may be additional instructions
// such as dismissing the modal popup.
if (!empty($form_state['ajax_commands'])) {
$output = $form_state['ajax_commands'];
}
// Return the ajax instructions to the browser via ajax_render().
print ajax_render($output);
drupal_exit();
}
else {
return drupal_get_form('create_node_form');
}
}
?>
MfG,
Marvin
Hi, der Fehler dürfte hier
am 14.12.2017 - 13:52 Uhr
Hi,
der Fehler dürfte hier liegen:
$items['tradetracker/program/%/%ctools_js'] = array(
'page callback' => 'tradetracker_modal_callback',
'page arguments' => array(2, 3),
Argument 2 ist die ID Argument 3 ajax? (Was wird denn als Argument 3 übergeben)
Hier übergibst Du die Variablen verkehrt herum;:
tradetracker_modal_callback($ajax, $ID) {
Hier ist Argument 2 ajax und Argument 3 ID
MfG
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Danke für die Antwort.
am 14.12.2017 - 14:13 Uhr
Danke für die Antwort. Allerdings brauche ich die ID im Formular. Das klappt so allerdings nicht. Muss ich dafür dann auch extra ein Menu-Item anlegen? Wenn ja, wie?
Besser, wie übergebe ich jetzt die ID ans Formular?
MfG
Marvin
Nochmal:Wenn sich die
am 14.12.2017 - 14:46 Uhr
Nochmal:
Wenn sich die Parameter im URL befinden wie du es im Menu Hook
angibst sind sie in deiner Funktion verkehrt herum.
So sollte es dann funktionieren:
tradetracker_modal_callback($ID,$ajax) {
ID ist der 2 Parameter laut deinem Menu Hook.
ajax ist der 3 Parameter.
Wie der URL mit den Parametern aussieht solltest Du selbst wissen.
MfG
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Ich habe es so angepasst, wie
am 14.12.2017 - 15:01 Uhr
Ich habe es so angepasst, wie von dir beschrieben. Meine URL sieht jetzt so aus:
http://beispiel.com/mein/pfad/ID/nojs
Und Menu Hook so:
<?php
$items['tradetracker/program/%/%ctools_js'] = array(
'page callback' => 'tradetracker_modal_callback',
'page arguments' => array(2, 3),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
'file' => 'includes/create_node.inc',
);
?>
Ich meint damit, dass ich die ID im Formular, sprich in dieser Funktion brauche:
<?php
function create_node_form($form, &$form_state) {
$programs = _affiliate_overview_tradetracker_campaigns($ID);
foreach ($programs as $key => $program) {
}
ctools_include('modal');
ctools_modal_add_js();
$TITLE = $program->name;
$BODY = $program->info->campaignDescription;
$LINK = $program->info->trackingURL;
$form['node_type'] = array(
'#type' => 'select',
'#title' => t('Content type'),
'#options' => array(
'gewinnspiele' => t('Gewinnspiele'),
'gutschein' => t('Gutscheine'),
'shop' => t('Shop'),
),
);
$form['node_title'] = array(
'#type' => 'textfield',
'#title' => t('Title'),
'#default_value' => $TITLE,
);
$form['node_body'] = array(
'#type' => 'textarea',
'#title' => t('Description'),
'#default_value' => $BODY,
);
$form['node_affiliate_link'] = array(
'#type' => 'textfield',
'#title' => t('Link'),
'#default_value' => $LINK,
);
$form['node_field_ablaufdatum'] = array(
'#type' => 'date_popup',
'#date_timezone' => 'Europe/Berlin',
'#date_format' => 'd-m-Y H:i:s',
'#date_increment' => 1,
'#date_year_range' => '-3:+3',
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Click Here!'),
'#submit' => array('create_node'),
);
return $form;
}
?>
Wenn ich allerdings
function create_node_form($form, &$form_state, $ID)
nutze, kommt wieder eine Felhermeldung:Notice: Undefined variable: ID in create_node_form() (line 66 of /var/www/gutscheinomat/sites/all/modules/affiliate_overview/includes/create_node.inc)
und
ArgumentCountError: Too few arguments to function create_node_form(), 2 passed in /var/www/gutscheinomat/includes/form.inc on line 842 and exactly 3 expected in create_node_form() (Zeile 65 von /var/www/gutscheinomat/sites/all/modules/affiliate_overview/includes/create_node.inc).
Meine Frage war, wie ich aus der Funktion
tradetracker_modal_callback
die ID in das Formular bekomme, da ich für das Formular kein Menu Hook Eintrag habe?MfG
Marvin
Hi,nochmal du übergibst die
am 14.12.2017 - 17:15 Uhr
Hi,
nochmal du übergibst die URL Paramter der Form falsch.
Am besten machst Du mal ein Form example das 2 Parameter übergibt.
Oder probier es mal so:
page arguments auskommentieren:
<?php
$items['tradetracker/program/%/%ctools_js'] = array(
'page callback' => 'tradetracker_modal_callback',
//auskommentiert 'page arguments' => array(2, 3),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
'file' => 'includes/create_node.inc',
);
?>
das argument direkt aus dem URL mit arg() holen.
function create_node_form($form, &$form_state) {
$programs = _affiliate_overview_tradetracker_campaigns(arg(2));
cache leeren.
Noch was,
dein Menu Hook:
$items['tradetracker/program/%/%ctools_js']
Wenn ich mich recht erinnere ist % ein nicht bennanter Parameter.
%ctools_js ein jedoch benannter Parameter.
Der musste in Deiner Form Funktion als Übergabeparameter dann auch $ctools_js heissen und nicht $ajax !
MfG
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Danke für deine Hilfe. Hat
am 14.12.2017 - 17:59 Uhr
Danke für deine Hilfe. Hat jetzt funktioniert. Habe jetzt nur
$programs = _affiliate_overview_tradetracker_campaigns($ID);
in
$programs = _affiliate_overview_tradetracker_campaigns(arg(2));
geändert und funktioniert, wie gewünscht. Vielen Dank nochmal.
MfG
Marvin