Ergebnis 1 bis 16 von 16

Thema: [(kleine) Lösung] Filterung per Ajax

  1. #1
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.717
    User beschenken
    Wunschliste

    Standard [(kleine) Lösung] Filterung per Ajax

    siehe #11

    ~~~~~~~~~~~~~~~~~
    Hi,

    gibt es (schon) eine "Standardmethode" um z.B. bei Filterungen ohne einen Seitenrefresh auszukommen und die aktualisieren Daten per Ajax zu laden?

    ...insbesondere wenn die gefilterte Anzeige nicht "ganz oben" in der Seite eingebaut ist, muss man nach dem Reload die Stelle auf der Seite erst "wiederfinden".

    Gruss

  2. #2
    Contao-Nutzer
    Registriert seit
    27.03.2013.
    Beiträge
    161

    Standard

    Du könnstest es mit einem Anker lösen, oder?

  3. #3
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.717
    User beschenken
    Wunschliste

    Standard

    an die "Not"-Lösung habe ich auch schon gedacht - Web 2.0 ruft nach anderen Features ;-))

  4. #4
    Contao-Yoda Avatar von MacKP
    Registriert seit
    15.06.2009.
    Ort
    Duisburg
    Beiträge
    13.292
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    In den Templates könnt ihr ja machen was ihr wollt. Also sollte es für euch auch möglich sein fancy Ajax unter zu bringen ;-)
    Eine Vorlage gibt es bisher noch nicht dafür. Ihr könnt aber gerne eine erstellen und uns per PR zukommen lassen.

    Viele Grüße
    Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
    [Arbeitet bei -> Paus Design & Medien]
    "I can EXPLAIN it to you, but I can't UNDERSTAND it for you."

  5. #5
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.717
    User beschenken
    Wunschliste

    Standard

    o.k. - will nur nicht das Rad 2x erfinden... ;-)

  6. #6
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.717
    User beschenken
    Wunschliste

    Standard

    ich nochmal...

    ich wollte den Anker einbauen, bin aber nicht weiter gekommen :-(

    ein FE-Template "ce_metamodels_frontendfilter" steht nicht zur Auswahl, um dem Attribut action einen Anker-hash mit auf den Weg zu geben.

    Gibt es eine andere Möglichkeit, den Anker in die URL zu bringen?

    Gruss

  7. #7
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.717
    User beschenken
    Wunschliste

    Standard

    upps - im falschen Template nachgesehen...

    mm_filter_default den Anker angehangen - funktioniert...

    s.a. https://community.contao.org/de/show...unkt-ansteuern

  8. #8
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.717
    User beschenken
    Wunschliste

    Standard

    habe mit das Update per Ajax mal angesehen... ich habe auf einer anderen Seite eine Kalenderansicht von Contao per Ajax eingebunden und das funktioniert prima...

    Also:
    * [ajax] https://contao.org/de/extension-list...010069.de.html geladen
    * zum Test mal ein CE MetaModel-List ausgeben - hat die CE-ID 123
    * Aufruf www.domain.de/ajax.php?g=1&action=cte&id=123 bringt mit einem eigenen Listing-Template der Rendersettings die Fehlermeldung

    PHP-Code:
    Fatal errorUncaught exception Exception with message Could not find template "metamodel_pr_eventliste" thrown in system/modules/core/library/Contao/TemplateLoader.php on line 127

    #0 system/modules/metamodels/MetaModels/Render/Template.php(235): Contao\TemplateLoader::getPath('metamodel_pr_ev...', 'text')
    #1 system/modules/metamodels/MetaModels/Render/Template.php(353): MetaModels\Render\Template->getTemplate('metamodel_pr_ev...', 'text', false)
    #2 system/modules/metamodels/MetaModels/ItemList.php(817): MetaModels\Render\Template->parse('text')
    #3 system/modules/metamodels/MetaModels/FrontendIntegration/Content/ModelList.php(112): MetaModels\ItemList->render('', Object(MetaModels\FrontendIntegration\Content\ModelList))
    #4 system/modules/core/elements/ContentElement.php(159): MetaModels\FrontendIntegration\Content\ModelList->compile()
    #5 system/modules/metamodels/MetaModels/FrontendIntegration/Content/ModelList.php(64): Contao\ContentElement->generate()
    #6 ajax.php(340): MetaModels\FrontendIntegration\Content\ModelList->generate()
    #7 ajax.php(180): PageAjax->getElement('994')
    #8 ajax.php(449): PageAjax->run()
    #9 {main} 
    mit dem Standard-Template metamodel_prerendered

    im JSON content:

    PHP-Code:
    Warning: include(/var/www/xyz/html/contao/system/modules/metamodels/templates/metamodel_prerendered.text): failed to open streamNo such file or directory in <strong>system/modules/metamodels/MetaModels/Render/Template.php</strongon line <strong>361</strong>
    #0 system/modules/metamodels/MetaModels/Render/Template.php(361): __error(2, 'include(/var/ww...', '/var/www/web243...', 361, Array) 
    #1 system/modules/metamodels/MetaModels/Render/Template.php(361): MetaModels\Render\Template::parse() 
    #2 system/modules/metamodels/MetaModels/ItemList.php(817): MetaModels\Render\Template->parse('text') 
    #3 system/modules/metamodels/MetaModels/FrontendIntegration/Content/ModelList.php(112): MetaModels\ItemList->render('', Object(MetaModels\FrontendIntegration\Content\ModelList)) 
    #4 system/modules/core/elements/ContentElement.php(159): MetaModels\FrontendIntegration\Content\ModelList->compile() 
    #5 system/modules/metamodels/MetaModels/FrontendIntegration/Content/ModelList.php(64): Contao\ContentElement->generate() 
    #6 ajax.php(340): MetaModels\FrontendIntegration\Content\ModelList->generate() 
    #7 ajax.php(180): PageAjax->getElement('994') 
    #8 ajax.php(449): PageAjax->run() 
    #9 {main} </pre><br><strong>Warning</strong>: include(): Failed opening '/var/www/xyz/html/contao/system/modules/metamodels/templates/metamodel_prerendered.text' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in <strong>system/modules/metamodels/MetaModels/Render/Template.php</strong> on line <strong>361</strong> <pre style="margin:11px 0 0"> 
    #0 system/modules/metamodels/MetaModels/Render/Template.php(361): __error(2, 'include(): Fail...', '/var/www/web243...', 361, Array) 
    #1 system/modules/metamodels/MetaModels/Render/Template.php(361): MetaModels\Render\Template::parse() 
    #2 system/modules/metamodels/MetaModels/ItemList.php(817): MetaModels\Render\Template->parse('text') 
    #3 system/modules/metamodels/MetaModels/FrontendIntegration/Content/ModelList.php(112): MetaModels\ItemList->render('', Object(MetaModels\FrontendIntegration\Content\ModelList)) 
    #4 system/modules/core/elements/ContentElement.php(159): MetaModels\FrontendIntegration\Content\ModelList->compile() 
    #5 system/modules/metamodels/MetaModels/FrontendIntegration/Content/ModelList.php(64): Contao\ContentElement->generate() 
    #6 ajax.php(340): MetaModels\FrontendIntegration\Content\ModelList->generate() 
    #7 ajax.php(180): PageAjax->getElement('994') 
    #8 ajax.php(449): PageAjax->run() 
    #9 {main} </pre> </div> 
    ich verstehe nicht, warum die Templateauflösung nicht funktioniert...??

  9. #9
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.717
    User beschenken
    Wunschliste

    Standard

    Update:

    die Fehlermeldung bei metamodel_prerendered habe ich nachvollziehen können - ich habe als Ausgabeformat "nichts" angegeben und so wurde "Text" als default-Format gewählt.

    Das Template metamodel_prerendered.text gibt es aber nicht als Standard-Template - warum eigentlich?

    Die Frage bleibt also, warum die Templateauflösung zum eigenen Template gescheitert ist, auch wenn ich das Format auf HTML5 umstelle...??

    PHP-Code:
    Fatal errorUncaught exception Exception with message Could not find template "metamodel_pr_eventliste" thrown in system/modules/core/library/Contao/TemplateLoader.php on line 127

    #0 system/modules/metamodels/MetaModels/Render/Template.php(235): Contao\TemplateLoader::getPath('metamodel_pr_ev...', 'html5')
    #1 system/modules/metamodels/MetaModels/Render/Template.php(353): MetaModels\Render\Template->getTemplate('metamodel_pr_ev...', 'html5', false)
    #2 system/modules/metamodels/MetaModels/ItemList.php(817): MetaModels\Render\Template->parse('html5')
    #3 system/modules/metamodels/MetaModels/FrontendIntegration/Content/ModelList.php(112): MetaModels\ItemList->render('', Object(MetaModels\FrontendIntegration\Content\ModelList))
    #4 system/modules/core/elements/ContentElement.php(159): MetaModels\FrontendIntegration\Content\ModelList->compile()
    #5 system/modules/metamodels/MetaModels/FrontendIntegration/Content/ModelList.php(64): Contao\ContentElement->generate()
    #6 ajax.php(340): MetaModels\FrontendIntegration\Content\ModelList->generate()
    #7 ajax.php(180): PageAjax->getElement('123')
    #8 ajax.php(449): PageAjax->run()
    #9 {main} 

  10. #10
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.717
    User beschenken
    Wunschliste

    Standard

    update 2:

    Fehler gefunden - es liegt/lag an [ajax] - in Contao 3.2 hat sich das Array für die Templategruppe geändert und deshalb stimmt der Pfad zu den eigenen Templates nicht (mehr)

    PHP-Code:
    // in ajax.php

                    // Get the page layout
                    
    $objLayout $this->getPageLayout(version_compare(VERSION'3.0''>=') ? $objPage $objPage->layout);
                    
    $objPage->template strlen($objLayout->template) ? $objLayout->template 'fe_page';
    // Update für 3.2
                    
    $objPage->templateGroup version_compare(VERSION'3.2''>=') ? $objLayout->getRelated('pid')->templates $objLayout->templates
    siehe https://github.com/aschempp/contao-ajax/issues/15

  11. #11
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.717
    User beschenken
    Wunschliste

    Standard Lösungs-Snippet

    Hier ein Lösungsansatz:

    * [ajax] installieren und wie in #10 beschrieben anpassen
    * Filter bekommt id "filter" - in Filtertemplate bei action-URL den Anker mit einfügen als "noJS-Fallback"; Filter mit Button
    * Ausgabeliste bekommt id "mm_trainings_list" (anpassen)
    * JS in Seite einfügen z.B. per Templatedatei & {{file::mm_ajax.html5}}
    * Infos zum Script:
    ~ data-id ist die ID des CE "mm_trainings_list" (anpassen)
    ~ training, location, speaker sind select-Filter (anpassen)

    PHP-Code:
    <script type="text/javascript">
    /* <![CDATA[ */
    // jQuery
    (function($)
        {
            $(document).ready(function()
            {
                $("#filter input.submit").click(function(event)
                {
                    event.preventDefault();
                    var target = $('#mm_trainings_list');
                    var filter = $('#filter');
                    $.ajax({
                        dataType: "json",
                        type: "GET",
                        url:  "ajax.php",
                        data: {
                            g:             1, 
                            action:     "cte",
                            page:         <?php echo $objPage->id;?>,
                            id:         994,
                            training:     $("#ctrl_training option:selected").val(),
                            location:    $("#ctrl_location option:selected").val(),
                            speaker:    $("#ctrl_speaker option:selected").val()
                        },
                        beforeSend: function()
                        {
                            target.fadeOut();
                        },
                        success: function(response)
                        {
                            var content = target.html(response["content"]);
                            content.fadeIn();
                            $(window).scrollTop(filter.offset().top);
                        }
                    });
                });
            });
        })(jQuery);
    /* ]]> */
    </script>
    ... für die ersten Tests sollte das genügen - man könnte hier noch die URL anpassen bzw. die Browser-History, Ajax-Fehler abfangen, die Filter automatisch ins JS einfügen... usw.

    Gruss

  12. #12
    Contao-Fan
    Registriert seit
    07.02.2010.
    Ort
    Kiel
    Beiträge
    263

    Standard

    da der Beitrag ja schon einige Zeit her ist, wollte ich mal nachfragen, ob es hier schon standardmethode mittels ajax gibt?

  13. #13
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.717
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von karo68 Beitrag anzeigen
    Standardmethode mittels ajax gibt?
    nein, gibt es nicht... wenn es ein Budget dafür gibt, kannst Du gern eine Anfrage zur Umsetzung bei MetaModels absetzen

    btw: der Einsatz mit [ajax] wird allgemein als zu unsicher eingestuft, so dass vom Einsatz eher abgeraten wird

  14. #14
    Contao-Fan
    Registriert seit
    07.02.2010.
    Ort
    Kiel
    Beiträge
    263

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    nein, gibt es nicht... wenn es ein Budget dafür gibt, kannst Du gern eine Anfrage zur Umsetzung bei MetaModels absetzen

    btw: der Einsatz mit [ajax] wird allgemein als zu unsicher eingestuft, so dass vom Einsatz eher abgeraten wird
    O.K., danke, verstehe. Noch eine andere Frage zum Thema gefilterte Liste. Ich möchte gerne, dass die Items nach Filterung nicht ganz verschwinden, sondern z.B. mit z.B. einer Farbe oder opacity versehen werden. Ist das möglich?

  15. #15
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.717
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von karo68 Beitrag anzeigen
    Ich möchte gerne, dass die Items nach Filterung nicht ganz verschwinden, sondern z.B. mit z.B. einer Farbe oder opacity versehen werden. Ist das möglich?
    bitte "Neue Frage => neuer Thread"

  16. #16
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.717
    User beschenken
    Wunschliste

    Standard Update

    Mit der Erweiterung von Richard kann man das ganz gut lösen - https://github.com/richardhj/contao-ajax_reload_element

    Wenn ich das richtig verstanden habe, will die Richard aber nicht mehr weiter pflegen/entwickeln

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •