Simplenews - Messages
am 01.09.2008 - 11:04 Uhr in
Beim Abonnieren bzw. Abbestellen eines Newsletters über den Block bzw. das Formular zeigt Simplenews diesbezügliche Hinweise an (z.B.: You will receive a confirmation e-mail shortly containing further instructions on how to complete your subscription.) Diese zeigt es unglücklicherweise oben auf der Startseite an. Da dort aber schon etwas steht, liegen diese Nachrichten darunter, was nicht nur unschön ist, sondern dadurch auch nur teilweise lesbar.
Wie bekomme ich Simplenews dazu diese Nachrichten auf einer speziellen Seite anzuzeigen?
In der Datei simplenews.subscription.inc habe ich die Zeile
$form['#redirect'] = ''; //Return to home page after (un)subscribe
gefunden, und dachte dort auf dem richtigen Weg zu sein. Ich habe eine leere Seite "information" angelegt und dann die Zeile so verändert:
$form['#redirect'] = 'content/information';
Das hat aber leider nicht funktioniert.
Weiß jemand Rat?
mfg Klaus
- Anmelden oder Registrieren um Kommentare zu schreiben
Drupal's Form API, auch FAPI genannt
am 01.09.2008 - 11:12 Uhr
In der Datei simplenews.subscription.inc habe ich die Zeile
$form['#redirect'] = ''; //Return to home page after (un)subscribe
gefunden, und dachte dort auf dem richtigen Weg zu sein. Ich habe eine leere Seite "information" angelegt und dann die Zeile so verändert:
$form['#redirect'] = 'content/information';
Du hast das aber schon in einem Minimodul gemacht, oder? Also nicht das Modul gehackt?
Ueber die korrekte Verwendung der Form API und #redirect kannst Du hier lesen: #redirect
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
quiptime schrieb Du hast
am 01.09.2008 - 11:53 Uhr
Du hast das aber schon in einem Minimodul gemacht, oder? Also nicht das Modul gehackt?
Ueber die korrekte Verwendung der Form API und #redirect kannst Du hier lesen: #redirect
Ich kann mit Deiner Frage leider gar nichts anfangen? Minimodul? Gehackt?
Ich habe einfach zwischen die beiden '' "content/information" geschrieben, weil ich annahm, daß SN dann zu dieser (leeren) Seite springt und dort seine Message ausgibt.
Und wenn ich mir unter dem von Dir angegebenen Link
$form['#redirect'] = 'node';
betrachte, sieht das doch sehr ähnlich aus, nur das da node steht, und die Node wäre in meinem Fall eben "content/information" ... ???
Du hast die Codeänderung ja ausgeführt. In welcher Datei denn?
am 01.09.2008 - 12:00 Uhr
Ich kann mit Deiner Frage leider gar nichts anfangen? Minimodul? Gehackt?
Du hast die Codeänderung ja irgendwo ausgeführt. In welcher Datei denn?
Kannst Du die Seite 'content/information' direkt aufrufen und es wird der Inhalt dieser Seite gezeigt?
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
Wie oben schon erwähnt, in
am 01.09.2008 - 12:34 Uhr
Wie oben schon erwähnt, in der "simplenews.subscription.inc", Zeile 37:
$form['#redirect'] = ''; //Return to home page after (un)subscribe
Rufe ich die Seite direkt auf, wird sie mir auch angezeigt.
Damit hast Du ein Modul gehackt!
am 01.09.2008 - 12:43 Uhr
Wie oben schon erwähnt, in der "simplenews.subscription.inc", Zeile 37:
Damit hast Du ein Modul gehackt!
Solltest Du das Modul mal updaten musst Du Deine die Aenderung wieder einpflegen. Deswegen, unter anderem, sollte man Module nicht veraendern sprich hacken.
Um dies nicht zu tun gibt es bei Drupal verschiedene Techniken. Eine davon fuer Deinen Fall ist die Verwendung eines Minimodules und der Funktionalitaet form_alter. Steckt Infomaessig alles in dem Link den ich gepostet habe.
An Stelle von
$form['#redirect'] = 'content/information',
koennte man mal$form['#redirect'] = drupal_goto('/content/information'),
testen.-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
quiptime schrieb Damit hast
am 01.09.2008 - 13:15 Uhr
Damit hast Du ein Modul gehackt!
Ihr könnt mir glauben, das wollte ich wirklich nicht. Ich bin kein Hacker.
Spaß beiseite. Das mit dem Updaten ist mir natürlich klar, doch meine Kenntnisse auf diesem Gebiet sind nicht ausreichend, so daß ich solche Sachen einfach ausprobieren muß. Trial and Error eben. Minimodul und form_alter sind für mich wie böhmische Dörfer, und auch wenn "Infomaessig alles in dem Link" stecken mag, müßte ich doch wohl bei den Grundlagen anfangen, um das zu verstehen, was da steht.
An Stelle von
$form['#redirect'] = 'content/information',
koennte man mal$form['#redirect'] = drupal_goto('/content/information'),
testen.Habe ich prompt getan. Leider alles wie gehabt.
mfg Klaus
Mini-Modul
am 01.09.2008 - 13:20 Uhr
Moin!
Mini modules for Drupal 6.x.
Das sollte Dir in diesem Punkt weiterhelfen können.
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Hallo Stefan, gelesen, auch
am 01.09.2008 - 13:52 Uhr
Hallo Stefan,
gelesen, auch die drei Beispiele möglicher Anwendungen, doch weiter hilft es mir nicht. Ich verstehe nicht, warum es so kompliziert sein soll, den User nach Absenden des Formulars auf eine andere Seite zu schicken und dort die Messages auszugeben. Das habe ich bei "normalen" Websites jedesmal getan, wenn ich ihn auf eine "Danke"-Seite geschickt habe. Und wozu gibt es diese redirect-Variable in der simplenews.subscription.inc?
mfg Klaus
Drupal 6 Minimodul: Keine Zauberei sondern einfach.
am 01.09.2008 - 13:59 Uhr
Stefan, der Link ist OK,
Nur für einen Anfänger sind die dortigen Infos wohl eher abschreckend. Es fehlt für form_alter ein einfaches Beispiel mit Info und Module Datei welches das Prinzip bei D6 beschreibt.
Wie erstelle ich für Drupal 6 ein Minimodul (mini module)?
Einfaches Beispiel für ein Drupal 6 Minimodul welches von einer Views generierten Suche den Submit Button und das Inputfeld ändert.
Datei "my_module.info":
; $Id: my_module.info, v 1.0 2008/08/02 10:16:54 quiptime $
name = My module
description = Customize a views generated search submit button and input field.
package = Mini modules
version = VERSION
core = 6.x
; Information added by drupal.org packaging script on 2008-07-09
version = "6.x-dev"
project = "my_module"
Datei "my_module.module":
<?php /* $Id: my_module.module, v 1.0 2008/08/02 10:16:59 quiptime $ */
/*
* Little help: http://www.lullabot.com/articles/modifying-forms-5-and-6
*/
//print $form_id;
function my_module_form_alter(&$form, $form_state, $form_id) {
switch ($form_id) {
case 'views_exposed_form':
$form['submit']['#value'] = t('Search');
$form['keys']['#size'] = 45;
break;
}
}
Richtig, hier kein schließender PHP Tag.
Das kommentierte
//print $form_id;
wird zu//print $form_id;
geändert um die Formular ID auf der betreffenden Seite zu ermitteln.'views_exposed_form' ist die mittels
print $form_id;
ermittelte ID des Formulares.Die ID's einzelner Formularfelder kann man sich mit Hilfe von Firebug im HTML Code des Formulares ansehen bzw. diese ermitteln.
Die beiden Dateien "my_module.info" und "my_module.module" werden in einen Ordner mit dem Namen "my_module" gesichert. Um auf dem Server im Ordner /sites/all/modules bei mehreren Minimodulen diese gleich zu finden kann man sich einen Ordner /sites/all/modules/minimodules erstellen. In diesen Ordner "minimodules" wird der Ordner des erstellten Minimodul "my_module" hochgeladen. Dann das neue Minimodul noch aktivieren.
PS
Dieser Post hätte auch der Inhalt eines Dojo im DVC sein können.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
quiptime schrieb Stefan,
am 01.09.2008 - 14:22 Uhr
Stefan, der Link ist OK,
Nur für einen Anfänger sind die dortigen Infos wohl eher abschreckend.
Wie wahr.
Doch nach dem "einfachen Beispiel mit Info und Module Datei" ahne ich zwar, wie ich mit diesem Minimodul den Submit-Button und das Inputfeld verändern kann, doch mit meinem Problem stehe ich wie am Anfang da.
Gewagte Anmerkung von einem Anfänger: Im folgenden sehe ich keine Änderung. ???
Das kommentierte
//print $form_id;
wird zu//print $form_id;
geändertIch habe inzwischen den Block in der Seitenleiste, wo man sich für Simplenews an- oder abmelden kann, mal deaktiviert. Dann gibt es nur noch einen Link zu einem Formular auf einer eigenen Seite. Doch auch hier kommt der User nach dem Drücken des Submit-Buttons wieder auf die Startseite. Das bestärkt mich eigentlich in meiner Ansicht, daß diese redirect-Variable nur anders ausgefüllt werden muß, damit der User auf "content/information" landet.
Danke für Eure Mühe.
Freud'sche Fehlleistung meinerseits. Sorry
am 01.09.2008 - 14:51 Uhr
Freud'sche Fehlleistung meinerseits.
Das kommentierte //print $form_id; wird zu print $form_id; geändert um die Form ID sehen zu koennen. Sorry.
Nach dem man die in Frage kommende Form ID kennt wird aus print $form_id; wieder //print $form_id; <- Sternchen
Das bestärkt mich eigentlich in meiner Ansicht, daß diese redirect-Variable nur anders ausgefüllt werden muß, damit der User auf "content/information" landet.
Du musst die aktuelle Form ID kennen - also die zu der ein Button gehoert.
Nur dann wird das form_alter am geaenderten Feld #redirect auch ausgefuehrt wenn dieser Button geklickt wird. <<-- Das ist der Knackpunkt.
Sternchen
//print $form_id; in einem Minimodul laesst man stehen. Weil man kann mit EINEM Minimodul die Formular-Elemente von vielen verschiedenen Formularen aendern.
Bei weiteren Formularen wird einfach das bereits vorhandene Minimodul an der Stelle
case 'views_exposed_form':
$form['submit']['#value'] = t('Search');
$form['keys']['#size'] = 45;
break;
erweitert mit
case 'weitere_form_id':
$form['submit']['#value'] = 'blabla jetzt machen';
break;
und so weiter.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
Wenn ich mir mit der
am 01.09.2008 - 14:54 Uhr
Wenn ich mir mit der Webdeveloper-Toolbar von Firefox die ID und Class-Details anzeigen lasse, steht neben dem "Speichern"-Button "#form-771c2d0c6906729fe4b5e995bf230454". Ist das die aktuelle Form ID?
Und wie muß den die Zeile
$form['submit']['#value'] = t('Search');
nun in meinem konreten Fall lauten, denn ich will ja nicht die Aufschrift des Buttons ändern, sondern das Ziel nach Absenden der Formular-Daten. Den Sinn und Zweck eines Mini-Moduls habe ich glaube ich begriffen, doch mir fehlen die ganz konkreten zu verwendenden Begriffe.Für heute packe ich aber erstmal zusammen, bis morgen also.
mfg Klaus
Nein.
am 01.09.2008 - 15:05 Uhr
steht neben dem "Speichern"-Button "#form-771c2d0c6906729fe4b5e995bf230454". Ist das die aktuelle Form ID?
Nein.
Sehe Dir den HTML Quellcode den HTML Form Tag des Formulares an. Der Formtag hat eine ID. ALLERDINGS mit Bindestrichen.
Im Minimodul muessen beim Eintragen der Formid statt der Bindestriche Unterstriche verwendet werden. <- kleiner Stolperstein.
Und, wenn Du ein Minimodul erstellt hast verwende einfach das erwaehnte print $form_id! Damit wird die Form ID bereits mit Unterstrichen angezeigt. Noch einfacher geht es kaum.
<?php /* $Id: my_module.module, v 1.0 2008/08/02 10:16:59 quiptime $ */
/*
* Little help: www.lullabot.com/articles/modifying-forms-5-and-6
*/
//print $form_id;
function my_module_form_alter(&$form, $form_state, $form_id) {
switch ($form_id) {
case 'ermittelte_form_id':
$form['#redirect'] = '/content/information';
break;
}
}
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
Guten Morgen, Folgendes MM
am 02.09.2008 - 09:29 Uhr
Guten Morgen,
Folgendes MM habe ich jetzt gebaut. my_module.info wie angegeben, und my_module.module mit folgendem Inhalt:
//print $form_id;
function my_module_form_alter(&$form, $form_state, $form_id) {
switch ($form_id) {
case 'edit_submit':
$form['#redirect'] = '/content/information';
break;
}
}
Vorher
//print $form_id;
aktiviert, das ergab folgenden Quellcode:<form action="/drupal/?q=content/willkommen" accept-charset="UTF-8" method="post" id="simplenews-block-form">
<div><div class="form-item">
<label>Benutzer: </label>
nickss
</div>
<input type="submit" name="op" id="edit-submit" value="Abonnieren" class="form-submit" />
<input type="hidden" name="form_build_id" id="form-8caac459ffb0aea1aa8fe7cadc7443d2" value="form-8caac459ffb0aea1aa8fe7cadc7443d2" />
<input type="hidden" name="form_token" id="edit-simplenews-block-form-form-token" value="a33fec5e305c9f59e75e18891cce21f2" />
<input type="hidden" name="form_id" id="edit-simplenews-block-form" value="simplenews_block_form" />
</div></form>
Die
id="edit-submit"
in das MM eingefügt (mit Unterstrich), dann//print $form_id;
wieder auskommentiert.Neuen Versuch gestartet, doch leider wechselt die Ansicht nicht auf content/information. Weiterhin wird die Message oben auf der Startseite ausgegeben.
???
Im Quellcode steht bei form action "/drupal/?q=content/willkommen". Kann ich diese Stelle nicht direkt im Code von Simplenews fest verdrahten? Auch wenn dann wieder alle "Hacker" zu mir sagen? ;-)
Oder kann ich nicht wenigstens per CSS (z-index) die Ausgabe auf der Startseite über alle anderen Elemente legen, so daß man sie wenigstens lesen kann, auch wenn mir diese Lösung natürlich nicht behagt.
mfg Klaus
Nachtrag 10.30 Uhr: Die CSS-Variante habe ich jetzt realisiert. Doch das ist echt nur eine Lösung, wenn das redirect auf eine andere Seite nicht funktioniert.
form_id
am 02.09.2008 - 10:03 Uhr
Moin!
Die Formular-Id ist "edit-simplenews-block-form", nicht "edit_submit".
@see:
<input type="hidden" name="form_id" id="edit-simplenews-block-form" value="simplenews_block_form" />
Dann sollte die Umleitung auch funktionieren.
Du kannst Dir ja spassenshalber mal eine Debug-Ausgabe in Deinen switch-Block machen. Dann siehst Du ob da überhaupt reingesprungen wird:
<?php
function my_module_form_alter(&$form, $form_state, $form_id) {
switch ($form_id) {
case 'edit_submit':
error_log(print_r('ich werde nicht aufgerufen...', 1));
$form['#redirect'] = '/content/information';
break;
case 'edit-simplenews-block-form':
error_log(print_r('ich werde aufgerufen...', 1));
$form['#redirect'] = '/content/information';
break;
}
}
?>
hth,
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Hallo Stefan, Du hast Recht.
am 02.09.2008 - 13:06 Uhr
Hallo Stefan, Du hast Recht. Doch auch mit der richtigen form-ID beharrt Simplenews auf seiner Ausgabe auf der Startseite.
Deinen Vorschlag - von dem ich nur ungefähr ahne, was er bewirken soll, habe ich ausgeführt. Ich gehe davon aus, daß die print-Befehle diese Strings in das error-log des Servers schreiben sollen, zur Kontrolle. Habe das Error-Log meines Apache auch gefunden (E:\xampp\apache\logs\* - wenn das das richtige ist, aber da steht keiner dieser Sätze.
mfg Klaus
simplenews redirect
am 02.09.2008 - 13:33 Uhr
Hallo Stefan, Du hast Recht.
Ab und zu, ich weiss :-)
Doch auch mit der richtigen form-ID beharrt Simplenews auf seiner Ausgabe auf der Startseite.
Das ist merkwürdig.
Deinen Vorschlag - von dem ich nur ungefähr ahne, was er bewirken soll, habe ich ausgeführt. Ich gehe davon aus, daß die print-Befehle diese Strings in das error-log des Servers schreiben sollen, zur Kontrolle.
Richtig. Ich sollte mal aufhören, bestimmtes Wissen vorauszusetzen und es einfach nochmal hinschreiben. :-\
Habe das Error-Log meines Apache auch gefunden (E:\xampp\apache\logs\* - wenn das das richtige ist, aber da steht keiner dieser Sätze.
Nee, das muss im php-Log stehen. Mach Dir mal eine Datei (info.php) im Haupt-Ordner Deines Web-Servers:
<?php
phpinfo();
?>
Wenn Du die Datei im Browser aufrufst, siehst Du alles Mögliche zu php.
Unter Anderem auch "error_log". Falls da überhaupt ein Pfad eingetragen ist. Falls nicht, musst Du Deine php.ini mal dementsprechend anpassen.
Ich seh gerade, dass ich die Id mit "-" aufgeschrieben hatte, das muss natürlich "_" sein. Also
edit_simplenews_block_form
stattedit-simplenews-block-form
.hth,
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Guten Morgen
am 03.09.2008 - 06:20 Uhr
Guten Morgen Stefan,
Nee, das muss im php-Log stehen. Mach Dir mal eine Datei (info.php) im Haupt-Ordner Deines Web-Servers:
<?php
phpinfo();
?>
Wenn Du die Datei im Browser aufrufst, siehst Du alles Mögliche zu php.
Unter Anderem auch "error_log". Falls da überhaupt ein Pfad eingetragen ist. Falls nicht, musst Du Deine php.ini mal dementsprechend anpassen.
info.php nutze ich immer, wenn ich einen Server überprüfe. Wird also vorhanden sein. Prüfen kann ich das aber erst morgen, weil ich heute zu Hause arbeite. Wie muß ich anpassen, damit ich einen Error-Log bekomme?
Ich seh gerade, dass ich die Id mit "-" aufgeschrieben hatte, das muss natürlich "_" sein. Also
edit_simplenews_block_form
stattedit-simplenews-block-form
.Das mit den Unterstrichen hatte quiptime schon erklärt, ich habe es beachtet.
Danke, Klaus