Hallo zusammen,
ich versuche momentan das File FormControll.php anzupassen. Mein Ziel:
- Dass die Nutzer nur mit der E-Mail sich für Newsletters im footer anmelden können.
Das Problem:
- Nach der Eingabe der E-Mail, wird ein „successful“ Message angezeigt, welche das layout im footer kaput macht.
Meine Idee:
-
If $data = footer --> show „Danke für die Registrierung“ als alert text beim footer. (Nur, wenn der Nutzer durch das Footer sich registriert)
-
else --> show default Message „2 Alerts.“ (Wenn der Nutzer durchs Newsletter Form sich registriert)
-
Nach der Sendung von der E-Mail durch POST, „name = ‚option‘ & value = ‚footer‘“ senden (zulässige default value wäre ‚subscribe‘).
-
Bei der Methode „handleNewsletter“ das value „footer“ nehmen, auf „subscribe“ ändern und ein „true“ für die Methode „handleSubscribe“ weiter geben.
public function handleNewsletter(Request $request, RequestDataBag $data, SalesChannelContext $context): JsonResponse
{
/* value = „footer“ */
if ($data == „footer“) {
// von value=‚footer‘ auf value=‚subscribe‘, da nur „subscribe“ genommen wird
$data->set(‚option‘, ‚subscribe‘);
$subscribe = $data->get(‚option‘) === self::SUBSCRIBE;// handleSubscribe: als parameter footer "true" weiter geben if ($subscribe) { $response = $this->handleSubscribe($request, $data, $context, true); } else { $response = $this->handleUnsubscribe($data, $context); } } else { $data->set('option', 'subscribe'); $subscribe = $data->get('option') === self::SUBSCRIBE; // else, footer false. if ($subscribe) { $response = $this->handleSubscribe($request, $data, $context, false); } else { $response = $this->handleUnsubscribe($data, $context); } } return new JsonResponse($response); }
Mein „handleSubscribe“ Methode:
private function handleSubscribe(Request $request, RequestDataBag $data, SalesChannelContext $context, bool $footer): array
{
try {
$data->set('storefrontUrl', $request->attributes->get('sw-sales-channel-absolute-base-url'));
$this->subscribeRoute->subscribe($data, $context, false);
if ($footer == false) {
// da footer = false, show default message. text & info-alert
$response[] = [
'type' => 'success',
'alert' => $this->trans('newsletter.subscriptionPersistedSuccess'),
];
$response[] = [
'type' => 'info',
'alert' => $this->renderView('@Storefront/storefront/utilities/alert.html.twig', [
'type' => 'info',
'list' => [$this->trans('newsletter.subscriptionPersistedInfo')],
]),
];
} else {
// show text without info-alert. Meaning Nutzer hat sich beim footer angemeldet.
$response[] = [
'type' => 'success',
'alert' => $this->trans('newsletter.subscriptionPersistedSuccess'),
];
}
} catch ...(rest des Codes)
Lösung: Keine Lösung, da die Änderungen beim FormController.php werden nicht geladen. Hat jemand eine Idee warum? Kann man die .php Dateien ändern? Ich habe die Core-Datei „FormController.php“ auf mein Costume Theme-Struktur auf den Pfad " custom/plugins/MEINSHOP/src/Controller/FormController.php " kopiert.
Hat jemand Erfahrung damit? Ich wurde mich sehr freuen ein bisschen Hilfe zu bekommen ><