Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

Modal form mit Argument

Eingetragen von KiLLAH89 (181)
am 14.12.2017 - 02:41 Uhr in
  • Modul-Entwicklung
  • Drupal 7.x oder neuer

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.

‹ Route Controller soll Node rendern Voting/Rating/Flaging vor Missbrauch schützen ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi,wo ist denn der Code für

Eingetragen von Hyp1 (1463)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo, danke erstmal für

Eingetragen von KiLLAH89 (181)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi, der Fehler dürfte hier

Eingetragen von Hyp1 (1463)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke für die Antwort.

Eingetragen von KiLLAH89 (181)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Nochmal:Wenn sich die

Eingetragen von Hyp1 (1463)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich habe es so angepasst, wie

Eingetragen von KiLLAH89 (181)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi,nochmal du übergibst die

Eingetragen von Hyp1 (1463)
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:

Zitat:

$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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke für deine Hilfe. Hat

Eingetragen von KiLLAH89 (181)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 1 Woche 4 Tagen
  • Hey danke
    vor 1 Woche 5 Tagen
  • Update: jetzt gibt's ein
    vor 1 Woche 5 Tagen
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 3 Tagen
  • Da scheint die Terminologie
    vor 2 Wochen 3 Tagen
  • Kannst doch auch alles direkt
    vor 3 Wochen 14 Stunden
  • In der entsprechenden View
    vor 3 Wochen 14 Stunden
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 14 Stunden
  • gelöst
    vor 5 Wochen 4 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 5 Wochen 5 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20451

Neue User:

  • Mroppoofpaync
  • 4aficiona2
  • AppBuilder

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 10 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association