[gelöst] Forms Drupal 7 create Table Output with Submit Form "Newsletter Subscription"
am 20.08.2014 - 11:55 Uhr in
Hallo liebe Leute ich bin ganz neu hier.
Kenne mich aber schon ein wenig mit Drupal aus und beschreibe dann mal am besten meine Problematik.
Ich möchte ein Newsletter Modul Entwickeln das ohne Einfluss von anderen Modulen läuft, ganz Simple eigentlich.
Beim Installieren meines Modules wird ein Block generiert mit der Form, wo sich die Kunden da auch Anmelden können, habe deswegen den Block genommen weil man ihn überall auspacken kann wo man nur will.
Das Modul ist auch beim fertig werden nur die Delete Funktion bekomme ich einfach nicht hin.
Habe im Backend eine Seite erstellt wo man auch die ganzen Kunden sieht die sich für den Newsletter angemeldet haben, jetzt wollte ich die auch noch löschen mit einem Link oder Button auf der rechten Seite, in der Table.
Hier mein Problemcode:
function newsletter_menu() {
$items['admin/people/newsletter'] = array(
'title' => 'Newsletter customers',
'page callback' => 'newsletter_customer_page',
'page arguments' => array('newsletter'),
'access arguments' => array('Newsletter'),
'type' => MENU_LOCAL_ACTION,
);
return $items;
}
function newsletter_customer_page(){
drupal_set_title('Newsletter customers');
$db = db_query("SELECT * FROM {newsletter}");
$result = $db->fetchAll();
$output = "<table>";
$output .= "<tr><th>ID</th><th>First name</th><th>Last name</th><th>Email</th><th>Delete</th></tr>";
foreach($result as $key => $value){
$output .= "<tr><td>".$value->nid."</td>";
$output .= "<td>".$value->first_name."</td>";
$output .= "<td>".$value->last_name."</td>";
$output .= "<td>".$value->email."</td>";
$output .= "<td>". newsletter_customer_form($value->nid) ."</td></tr>";
}
$output .= "</table>";
return $output;
}
function newsletter_customer_form($nid){
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Delete'),
);
$form['hidden'] = array(
'#type' => 'hidden',
'#value' => $nid,
);
return $form;
}
function newsletter_customer_form_submit(){
db_query("DELETE FROM {newsletter} WHERE nid = %d", /*VALUE from hidden field(nid)*/);
}
Ich bekomme den Schluss mit dem Löschen einfach nicht hin, habe schon einige Versionen Versucht.
Ich hoffe mir kann da einer weiterhelfen, oder mit eine bessere Lösung vorschlagen, ich bin immer offen für neues!
Mfg
Daniel
Anhang | Größe |
---|---|
Unbenannt.PNG | 86.46 KB |
- Anmelden oder Registrieren um Kommentare zu schreiben
Na dann debugge mal die Zeile
am 10.09.2014 - 12:54 Uhr
Na dann debugge mal die Zeile 45 und schau was da drin steht. Sieht so aus als würde ein array übergeben der als string zu interpretieren ist.
Du rufst innerhalb eines
am 11.09.2014 - 11:51 Uhr
Du rufst innerhalb eines Strings newsletter_customer_form() auf, und newsletter_customer_form() gibt ein Array zurück. Damit newsletter_customer_form() auch gerendert/ausgegeben wird, muss es via drupal_get_form geholt werden und durch drupal_render().
Also
<?php
$form = drupal_get_form('newsletter_customer_form'); // Array
echo drupal_render($form); // String
?>
<?php
function newsletter_customer_page(){
drupal_set_title('Newsletter customers');
$db = db_query("SELECT * FROM {newsletter}");
$result = $db->fetchAll();
$output = "<table>";
$output .= "<tr><th>ID</th><th>First name</th><th>Last name</th><th>Email</th><th>Delete</th></tr>";
foreach($result as $key => $value){
$form = drupal_get_form('newsletter_customer_form', $value->nid);
$output .= "<tr><td>".$value->nid."</td>";
$output .= "<td>".$value->first_name."</td>";
$output .= "<td>".$value->last_name."</td>";
$output .= "<td>".$value->email."</td>";
$output .= "<td>". drupal_render($form) ."</td></tr>";
}
$output .= "</table>";
return $output;
}
function newsletter_customer_form($form, $form_state, $nid) {
$form['#newsletter_nid'] = $nid;
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Delete'),
);
return $form;
}
function newsletter_customer_form_submit($form, $form_state) {
drupal_set_message(t('Deleted'));
db_query('DELETE FROM {newsletter} WHERE nid = :nid', array(':nid' => $form['#newsletter_nid']));
}
?>
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Das Verhältnis anderen zu helfen muss höher sein, als von anderen Hilfe zu erfragen/erwarten.
Dankeschön für die Antworten
am 20.09.2014 - 15:20 Uhr
Entschuldigung das ich nicht früher geschrieben habe, habe das Problem lösen können, danke auf deine ausführliche Lösung.
Ich packe das ganze Modul in den Anhang wenn es wer braucht, es funktioniert soweit, beim Installieren diesen Moduls wird ein Block generiert mit den Textfeldern, "Vorname", "Nachname", "Firma", "E-Mail" und "Nachricht".
Diesen Block einfach einfügen und funktioniert eigentlich alles, es werden die angemeldeten User unter "People/ Newsletter customers" angezeigt, wo man sie auch wieder löschen kann und mehr kann das nicht.
Grund für mich war das ich öfter eine ganz normale Newsletter Anmeldung brauchte ohne Funktionalität, weil viele ihre Newsletter selbst schreiben und verschicken, Simple News usw. was es alles gibt ist ziemlich mühsam zum Einstellen und raubt auch einiges an Zeit.
Falls irgendwer Verbesserungs Vorschläge hierzu hat, bitte immer gerne.
D@N-Development e.U. Geschäftsführung
Homepage