Ankündigung

Einklappen
Keine Ankündigung bisher.

Autocomplete Suchfeld mit Merklisten-Funktion

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Autocomplete Suchfeld mit Merklisten-Funktion

    Hallo zusammen,

    ich habe einen Textsuche-Filter mit Autocomplete auf der Merklisten-Seite und möchte darüber Items zur Merkliste hinzufügen. Ich habe die Merklisten-Buttons mit
    PHP-Code:
    <?php echo $entry->field('notelist')->html(); ?>
    in die Ergebnis-Liste des Suchfeldes eingefügt. Klickt man nun auf den Button "Zur Merkliste hinzufügen", dann landet man auf einer Seite, die nichts als die Liste der Suchergebnisse enthält. Zur Merkliste wurde jedoch nichts hinzugefügt. Gleiches Spiel mit dem Löschen-Button. Nur wird hierüber ein vorhandenes Item tatsächlich von der Merkliste gelöscht.

    Im Quellcode sieht man , dass das "action"-Attribut des Merklistenformulars nicht den Pfad der aktuellen Seite enhält wie bei einer normalen Liste mit Merklistenfunktion. Statt dessen steht hier der Pfad zum Filter-Modul:

    HTML-Code:
    <form method="post" id="customelement_notelist_cc_product_catalog_827_ 1975" action="system/modules/pct_customelements_plugin_customcatalog/PCT/CustomElements/Filters/Text/assets/html/search.php?search_suche-projektliste=rang&amp;action=textFilterAutocomplet eSearch&amp;table=cc_product_catalog&amp;module_id =731&amp;filter_id=205&amp;pageId=2819&amp;languag e=de">
    Als Workaround habe ich das action-Attribut des Merklistenformulars im Template customelement_attr_notelist.html fest auf den Pfad der Merklisten-Seite eingestellt. Nach dem Klick auf "Zur Merkliste hinzufügen" in der Ergebnisliste des Suchfeldes landet man nun auf der richtigen Seite, das Item wird der Merkliste aber trotzdem nicht hinzugefügt. Das Löschen vorhandener Items klappt jedoch.

    Was muss getan werden, damit auch das Hinzufügen von Items klappt?

  • #2
    Hi,
    die Auswertung des Formulars erfolgt in dem Merkliste-Element. Die Weiterleitungsseite muss daher ein Merkliste-Element für die Auswertung beinhalten.
    Funktioniert das Hinzufügen im Allgemeinen?
    http://www.premium-contao-themes.com

    Kommentar


    • #3
      Hallo Tim,

      die Weiterleitungsseite enthält sogar zwei Merklisten-Elemente nämlich einmal in der Result-Liste des Suchfeldes und die Merkliste selbst.

      Wenn ich das Template customelement_attr_notelist.html im Originalzustand lasse funktioniert das Hinzufügen sowohl in einer normalen Liste als auch auf der Detailseite. Nachdem ich das action-Attribut fest auf die Merklisten-Seite eingestellt habe, geht das auch nicht mehr.

      Ich habe nun probehalber eine normale Liste auf der Merklisten-Seite eingefügt. Damit klappt das Hinzufügen von der Listenseite aus und auch von der Detailseite aus. Allerdings nur dann, wenn das Item, das ich Hinzufügen möchte in der Liste auf der Weiterleitungsseite vorhanden ist. Das Hinzufügen aus den Suchfeld-Ergebnissen klappt aber auch so nicht.

      Kommentar


      • #4
        Allerdings nur dann, wenn das Item, das ich Hinzufügen möchte in der Liste auf der Weiterleitungsseite vorhanden ist.
        Ja, das ist richtig. Das Item muss natürlich auf der Seite existieren, das Hinzugefügt werden soll. Wenn du die Formularseite änderst (die Merkliste will die Seite eigentlich nicht verlassen!), dann musst du dafür sorgen, dass auf der neuen Seite das entsprechende Item auf den Formularbefehl reagieren kann.
        Die Ausgabe des Items beinhaltet das damit referenzierte Merkliste-Element (->field('notelist')), das sich um das Hinzufügen des jeweiligen Items kümmert.

        Wenn du quasi blind Einträge hinzufügen möchtest, kannst du selbstständig die Merkliste-Session auffüllen oder du leitest erst weiter, wenn das Element hinzugefügt wurde. -> nach dem POST

        Entwickler-Ebene:
        Die Session baut sich wie folgt auf: https://github.com/timgatzky/pct_cus...telist.php#L90

        Nach dem Hinzufügen wird auch der addItem Hook getriggert. Darin kannst du ebenfalls deine Weiterleitung platzieren. Ab diesem Zeitpunkt ist der Eintrag in der Merkliste
        https://github.com/timgatzky/pct_cus.../Hooks.php#L60

        ---
        Beispiel oop:
        Tabelle cc_test,
        Eintrag ID=10,
        Anzahl 3,
        der Merkliste hinzufügen und selbstständig weiterleiten:

        Code:
        $objNotelist = new \PCT\CustomElements\Plugins\Notelist\Notelist;
        
        $table = 'cc_test';
        $item = 10;
        $amount = 3;
        $reload = false;
        
        $objNotelist->addItem($table,$item,$amount,array(),$reload);
        // weiterleiten
        \Contao\Controller::redirect( 'neueSeite.html' );
        Zuletzt geändert von Tim; 08.11.2021, 08:19.
        http://www.premium-contao-themes.com

        Kommentar


        • #5
          Hallo Tim,

          dein Vorschlag mit der Merkliste-Session klingt vielversprechend. Das werde ich ausprobieren. Vielen Dank für die Erleuchtung :-)

          Kommentar


          • #6
            Hallo Tim,

            mit Hilfe deines Vorschlags konnte ich das Problem lösen. Vielen Dank nochmal dafür.

            Ich habe das jetzt so gelöst, dass im Template der Merkliste die POST-Variable abgefragt wird. Wenn im Key ['FORM_SUBMIT'] der Wert "customelement_notelist" vorkommt, dann wird die Merklisten-Session nach deinem Muster befüllt. Für mich klappt das ganz gut so.

            Mir ist noch aufgefallen, dass dein Beispielcode nicht ganz richtig ist. Für die aktuelle CC-Version müsste er folgendermaßen lauten:

            PHP-Code:
            $objNotelist = new \PCT\CustomElements\Plugins\Notelist\Notelist();

            $table 'cc_test';
            $item 10;
            $amount 3;
            $reload false;

            $objNotelist->setItem($table,$item,$amount,array(),$reload);
            // weiterleiten
            \Contao\Controller::redirect'neueSeite.html' ); 

            Kommentar


            • #7
              Ja genau. So wirds gemacht. Losgelöst von Templates kann das auch z.B. in der initconfig platziert werden. Dann löst es global aus.

              Stimmt, habe einmal Notelist zu viel geschrieben
              http://www.premium-contao-themes.com

              Kommentar

              Lädt...
              X