[gelöst]Ein Reset-Button für mehrere exposed Filter?

am 11.10.2014 - 12:39 Uhr in
Hallo Community,
ich habe in einem View mehrere hervorgehobene Formulare (exposed forms). Das habe ich mit dem Modul "Mefibs (More Exposed Forms in Blocks)" gemacht. Wenn ich nun in den Einstellungen des hervorgehobenen Formulars den Reset-Button aktiviere, werden mir mehrere Reset-Buttons angezeigt, da Mefibs das Formular auf meherere Blöcke aufteilt. Mein Ziel ist es aber, nur einen Reset-Button für alle Formulare zu haben.
Ich habe natürlich schon nach einer Lösung gesucht. Allerdings finde ich nur Lösungen, die sich direkt auf das hervorgehobene Formular beziehen und bei denen ich immer wieder am selben Problem scheitere (also dass ich mehrere Formulare habe). Dann dachte ich, einfach einen Button zu erstellen und den Link auf dieselbe Seite zu setzen (also eine einfache Aktualisierung der Seite). Das bewirkt allerdings kein zurücksetzen der Einstellungen (obwohl das Häkchen bei "letzte Einstellung merken" NICHT aktiviert ist - ich vermute der Browser merkt sich das direkt).
Langer Rede kurzer Sinn: hat jemand einen Rat wie ich eine Reset-Button für eine Seite mit mehreren Formularen erstellen kann?
Viele Grüße
Thule
- Anmelden oder Registrieren um Kommentare zu schreiben
Link zum View im Head-Bereich als "Reset"
am 12.10.2014 - 11:50 Uhr
Im Grunde werden die Filter über URL-Parameter gesteuert. Man kann einen Pseudo-Reset-Button schaffen, in dem man ein Link (ohne Parameter) zum View-Page z.B. in den Head-Bereich des Views einfügt. Mit ein wenig CSS kann man den Link auch wie ein Button ausschauen lassen.
Vielen Dank für deine
am 14.10.2014 - 11:11 Uhr
Vielen Dank für deine Hilfe.
Ja, genau das hatte ich mir zuerst auch überlegt. Es ist aber so, dass ich keinen "Absenden"-Button für die Exposed Filter habe, sondern diese werden automatisch abgeschickt. Außerdem ist Ajax aktiviert. Ich bin kein Programmierer, aber ich glaube das bewirkt, dass ich keine URL-Parameter habe. Also wenn ich zum Beispiel den BEF-Slider für den Filter "Preis" bewege, dann wird meine Ansicht automatisch aktualisiert. Die URL bleibt jedoch unverändert.
Oder spielt sich hier vielleicht noch etwas im Hintergrund ab, dass ich nicht sehe/kenne? Ein Link/Button auf www.domain.de/meine-view-page bewirkt jedenfalls nicht das Zurücksetzen der Einstellungen.
Ich bin über jeden Rat dankbar :-)
Hat vielleicht doch noch
am 15.10.2014 - 14:13 Uhr
Hat vielleicht doch noch jemand einen Rat wie ich das bewerkstelligen kann?
Ich vermute das du in dieser
am 15.10.2014 - 18:42 Uhr
Ich vermute das du in dieser Richtung ansetzen mußt um auch vorhandene Ajax Einträge zu leeren mit einem eigenen Reset Button:
https://www.udemy.com/blog/jquery-refresh-page/
Grüße Jenna
Hi Jenna, das hört sich schon
am 16.10.2014 - 14:06 Uhr
Hi Jenna,
das hört sich schon mal gut an. Danke für den Tipp. Nun bin ich leider kein Programmierer, aber durchaus gewillt mich in die Thematik einzuarbeiten (ich habe zum Beispiel auch schon Datenbankabfragen geschafft). Kannst du mir vielleicht sagen, wie ich das Ganze anpacken muss? Benötige ich dafür ein eigenes Modul? Welches wären die einzelnen Schritte (nur grob, damit ich mich in die einzelnen Schritte einarbeiten kann und mich irgendwo entlang hangeln kann)?
Oder meinst du, dass das für micht nicht möglich sein wird? Vielen Dank.
Kann mir jemand auf die
am 20.10.2014 - 13:25 Uhr
Kann mir jemand auf die Sprünge helfen, wie ich mit der Umsetzung dieser Anleitung anfangen muss:
https://www.udemy.com/blog/jquery-refresh-page
Ziel ist es, diesen Reset-Button auf eine bestimmte Seite zu bekommen. Geht sowas in Form eines eigenen Moduls oder gibt es einen anderen Weg?
Ich hatte dieses Tutorial nur
am 20.10.2014 - 21:03 Uhr
Ich hatte dieses Tutorial nur in meiner Sammlung, aber noch nie eingesetzt, daher kann ich es dir auch nicht exakt beschreiben.
Anfangen würde ich mal so:
Mit diesem Modul kannst du den Code Schnipsel einfach nur auf der Seite einbinden wo er aufgerufen werden soll:
https://www.drupal.org/project/js_injector
oder ohne Modul:
http://forward-media.de/tutorial/javascript-richtig-einbinden
Den Button Code kannst ja erstmal in einen Block setzen und auf der Seite ausgeben, Feintuning dann per CSS:
<button id="ref_butn">Refresh the page!</button>
Den eigentlichen Code:
$(document).ready(function(){
$("#ref_butn").click(function(){
location.reload();
});
});
dann über entweder das o.g. Modul oder händisch einbauen und zusätzlich jquery einbinden, entweder über jQuery Update Modul oder auch händisch zum Test.
Weiter wüßte ich jetzt erstmal auch nicht, wenn es gar nicht klappt kann ich mitbasteln, komme aber erst am Wochenende dazu.
Das Problem ist, das ich dir nicht 100% sagen kann ob es überhaupt die richtige Lösung ist, es liest sich aber für mich so raus.
Grüße Jenna
Hi Jenna, das ist ja schon
am 21.10.2014 - 12:20 Uhr
Hi Jenna,
das ist ja schon fast eine perfekte Anleitung :-). Ich denke auch, dass es genau das ist, was ich brauche.
The reload() method actually takes either of two optional arguments: “true” reloads the page from the server, and “false” reloads the page from the browser’s cache. The default (with no argument) is to reload from the cache.
In meinem Fall bräuchte dann wohl "true" damit die Seite frisch vom Server geladen wird. Auch mit dem js_injector hast du mir einen super Tipp gegeben. Denn das Einbauen von solchen Code-Schnipseln ist für mich als Laie schwierig.
Eine kleine Frage noch zu
und zusätzlich jquery einbinden, entweder über jQuery Update Modul oder auch händisch zum Test
Bin gespannt ob das klappt, wäre echt super!
Grüße
Thomas
Das Modul jQuery Update ist
am 21.10.2014 - 12:46 Uhr
Das Modul jQuery Update ist richtig, war nur nicht sicher ob du das schon installiert hast.
Google ansonsten mal nach "page refresh ajax", da sind auch ein paar Video Tutorials zu finden, hierbei ist es erstmal egal das die nicht auf Drupal bezogen sind, du kannst da sicher einige Tipps rausnehmen für das Grundverständnis.
Pack dir doch eine Installation auf eine Subdomain oder sonstwo hin um dort solche Sachen zu testen. Meistens sind ja schon Beispiele dabei, wenn du damit erstmal beginnst, kannst du die Fragen auch viel gezielter stellen und brauchst dir keine Gedanken um eine Live Site zu machen.
Ausserdem kann man auf einer "Test" erstmal Module ausprobieren, meist findet man doch wieder ein anderes Modul, testet zig Sachen aus, und mir ist wichtig das die eigentliche Installation sauber bleibt und nur das übertragen wird was perfekt läuft.
Grüße Jenna
Danke für die Hinweise. Meine
am 23.10.2014 - 08:38 Uhr
Danke für die Hinweise. Meine zuküntige Webseite ist momentan noch lokal, daher kann ich solche Sachen gut ausprobieren.
Ich habe das nun alles mal gemacht. Einen Block mit dem Button auf die gewünschte Seite eingefügt, der auch angezeigt wird:
<button id="reset-button">Einstellungen zurücksetzen</button>
Mit dem js_injector Modul habe ich dann diesen Code auf meiner gewünschten Seite eingefügt:
$(document).ready(function(){
$("#reset-button").click(function(){
location.reload(true);
});
});
Bisher funktioniert es noch nicht. Habe mich selber auf Fehlersuche gemacht und wollte zunächst prüfen, ob der Code-Schnipsel überhaupt eingefügt wurde (Cache habe ich natürlich als ersten geleert). Wie kann ich das denn überprüfen. Ich habe gelesen, dass Drupal die Inhalte in der Datenbank speichert. Gibt es keine einzelnen Dateien für die einzelnen Seiten?
Bestimmt fehlt nicht mehr viel zum funktionierenden Reload-Button.
Die Seite in der das Script
am 23.10.2014 - 09:57 Uhr
Die Seite in der das Script eingebunden ist mit Firefox Seitenquelltext ansehen, ganz unten findest du dein eingebundenes Script ca. so:
http://dein-domainname.com/sites/default/files/js_injector/js_injector_1.js?
Wenn du das im Seitenquelltext anklickst öffnet sich das Script.
Oder du guckst mit Firebug in der Konsole unter dem TAB Script.
Was ich dir leider momentan nicht sagen kann ist, ob das Script noch in irgendeiner Form auf Drupal angepasst werden muß.
Grüße Jenna
Was ich gerade sehe ist,
am 23.10.2014 - 10:13 Uhr
Was ich gerade sehe ist, eventuell ist reload die falsche Anweisung, reload muß nicht bedeuten das alle Einträge geleert werden, möglich das es stattdessen über reset funktioniert.
Google mal nach "ajax clear page" und "ajax clear form"
Problem wird sein, das du eine allgemeine Anweisung benötigst die alle deine Formulare gleichzeitig leert, ob man dort jetzt alle Felder einzeln erfassen muß oder ob das pauschal geht kann ich aus einigen der Links nicht so wirklich rauslesen.
Grüße Jenna
Also der Skript ist schon mal
am 23.10.2014 - 12:08 Uhr
Also der Skript ist schon mal drin:
</div> <!-- /#footer -->
</div></div> <!-- /.section, /#footer-wrapper -->
</div></div> <!-- /#page, /#page-wrapper -->
<script type="text/javascript">
<!--//--><![CDATA[//><!--
$(document).ready(function(){
$("#reset-button").click(function(){
location.reload(true);
});
});
//--><!]]>
</script>
</body>
</html>
Momentan passiert aber nichts, wenn ich auf den Button klicke. Ich schaue mir schon die ganze Zeit Anleitungen und Tutorials an. Wichtig ist anscheinend nur das $(document).ready(function() vorangestellt wird. Generell denke ich schon, dass es die richtige Funktion sein wird. Wenn die Seite vom Server geladen wird und nicht aus dem Browsercache, sollten die Einstellungen eigentlich zurückgesetzt sein.
Wenn es doch nicht geht, dann versuche ich natürlich auch "reset". Aber da sich momentan gar nichts tut, fehlt wohl noch ein Baustein. Ich suche mal weiter...danke.
Woher hast du denn das
am 23.10.2014 - 12:18 Uhr
Woher hast du denn das "true", schon mal ohne probiert wie im Beispiel?
Running The jQuery Code
Now let’s look at the jQuery code:
$(document).ready(function(){
$("#ref_butn").click(function(){
location.reload();
});
});
Grüße Jenna
edit: habs grad in deinem Zitat gefunden, hast du die anderen Varianten auch probiert (keine Eingabe, false)?
hab noch was gefunden und den
am 23.10.2014 - 12:29 Uhr
hab noch was gefunden und den Code nun so eingesetzt:
jQuery(document).ready(function($){
$("#reset-button").click(function(){
location.reload(true);
});
});
Die Seite wird jetzt neu geladen. Allerdings bleiben die Einstellungen (z. B. Preis-Slider von Better Exposed Filters) erhalten. Ich suche jetzt mal noch nach anderen Funktionen wie "reset", vielleicht gibt es da was. Es bleibt spannend :-) danke Dir!
Ich hab jetzt mal eine neue
am 23.10.2014 - 12:40 Uhr
Ich hab jetzt mal eine neue Views Page angelegt, Ajax aktiviert, Pfad: ajaxtest
Auf dieser habe ich 2 Blöcke ausgegegen, das Standard Kontaktformular im Main Bereich und linke Spalte ein komplexes Views Exposed mit Umkreissuche und etlichen Exposed Feldern.
Ohne jeglichen Code brauche ich nur die Seite aktualisieren F5 oder eben neu aufrufen und alle Felder beider Formulare sind geleert.
Wo ist denn jetzt der Wurm drin?
Grüße Jenna
wenn ich das wüsste. Suche
am 23.10.2014 - 14:30 Uhr
wenn ich das wüsste. Suche schon den ganzen Tag nach einer Lösung, leider ohne Erfolg. Ich nutze Better Exposed Filters, More Exposed Filters in Blocks (Mefibs) und andere Module auf meiner Hauptseite. Obwohl ich in den Filtereinstellungen kein Häkchen bei "Letzte Auswahl merken" habe, wird die letzte Auswahl bei Refload (auch mit F5) immer beibehalten. Auch in den Views-Einstellungen habe ich bei "Cache" "keine" ausgewählt. Daher dachte ich, dass der Browser die Einstellungen, die man auf meiner Seite vornehmen kann, cached (BEF sliders, Auswahlboxen, Sortierung, etc.). mit dem "True" Parameter dachte ich, dass die Seite dann diese Einstellungen verliert, da sie ja nicht vom Browser sondern vom Server geladen werden. Ich weiß momentan auch nicht mehr weiter...vielleicht hat es damit was zu tun, dass ich die Seite unter localhost laufen lasse...
Dann hilft nur Fehlersuche
am 23.10.2014 - 14:56 Uhr
Dann hilft nur Fehlersuche eingrenzen.
Kannst du alles was mit Blocks (Mefibs) erstellt wurde mal deaktivieren und nur ein oder mehrere simple Kontaktform einbinden und testen?
Wenn es dann nicht funktioniert, obwohl ich nicht glaube das an localhost liegt, wäre ein Live Test wohl doch sinnvoll.
Ich hab auch noch einiges probiert, bei mir sollen die Exposed Werte bewußt beibehalten werden, wenn nach einer Immo gesucht wird.
Gehe ich aus der Listenansicht die mir aus der Exposed Suche angezeigt wird, auf Detail und wieder zurück, stehen die Werte im Suchformular auch wie gewünscht noch drin.
Bei F5 sind beide Testformulare dann wieder leer (Chrome,Firefox und Safari jeweils aktuellste Version), ich habe auch noch beide Formulare zum Test in die gleiche Region gepackt und auch mein Caching und Komprimierung beibehalten, daran kann es also schon mal nicht liegen.
Grüße Jenna
Du könntest eines noch
am 23.10.2014 - 15:43 Uhr
Du könntest eines noch probieren, hab ich installiert in Zusammenhang mit Modul shs
https://www.drupal.org/project/js
Unter Konfiguration dann den Eintrag in der .htaccess noch vornehmen, ist gut beschrieben.
Ich kann dir nicht sagen ob das damit etwas zu tun hat, aber das wäre so das einzige was mir noch einfällt.
Grüße Jenna
ich habe jetzt mal ein
am 23.10.2014 - 15:48 Uhr
ich habe jetzt mal ein Webform erstellt...ganz einfach mit zwei Feldern. Wenn ich dort etwas eingebe, dann nicht auf "Senden" sondern F5 klicke, sind die eingegebenen Werte immer noch drin. Das ist echt komisch.
Gibt es irgendwo ganz allgemeine Cache-Einstellungen in Drupal?
Bisher hat noch nichts
am 24.10.2014 - 13:40 Uhr
Bisher hat noch nichts funktioniert. Ich versuche heute Abend mal das Modul Block Refresh. Da alle meine Filter in unterschiedlichen Blöcken sind, könnte das klappen:
- Option to refresh a block on page load.
- Options to bypass drupal's page cache and any external cache
Ich melde mich wieder, wenn ich es probiert habe. Danke nochmals, dass du mir hier so viele Ratschläge gegeben hast.
Also Block Refresh klappt
am 27.10.2014 - 09:11 Uhr
Also Block Refresh klappt leider auch nicht. Die Blöcke verschwinden ganz. Ich habe das ganze Problem nun auf das Modul "MEFIBS" zurückführen können. Wenn ich das Modul deaktiviere, dann klappt das mit der oben beschriebenen Methode wunderbar. Daher kontaktiere ich den entsprechenden Maintainer und stelle hier auf "gelöst".
Danke für die Hilfe!
Hartnäckigkeit zahlt sich
am 27.10.2014 - 10:59 Uhr
Hartnäckigkeit zahlt sich aus...
Wenn ich das Modul deaktiviere, dann klappt das mit der oben beschriebenen Methode wunderbar.
Welche Methode?
Der Beitrag von Carsten sollte eigentlich zur Lösung führen, dann brauchst du den ganzen js Krams und Code gar nicht, das würde ich noch getrennt testen bevor du weiter machst und überflüssiges wieder rauswerfen.
Grüße Jenna
Die Methode mit Javascript
am 27.10.2014 - 13:02 Uhr
Die Methode mit Javascript würde bei mir funktionieren. Da ich bei meinen hervorgehobenen Filtern mit "Autosubmit" und Ajax arbeite, gibt es keine URL-Parameter, die ich "löschen" könnte.