Ankündigung

Einklappen
Keine Ankündigung bisher.

php Seitenaufruf Template

Einklappen

Neue Werbung 2019

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

  • php Seitenaufruf Template

    Hallo Leute,

    habe folgendes Problem. Ich habe eine Seite gekauft und nehme daran Änderungen vor. Der der die Seite Programmiert hat, ist nicht auffindbar, daher muss ich das selber machen. Der Aufbau ist etwas kompliziert, ich versuche ist dennoch einfach zu erklären:


    Ich habe eine Liste mit Pizzerien. Ich will diese nun sortieren lassen.
    auf der Seite pizzas. php habe ich einen Link erstellt, mit dessen Hilfe ich die Sortierung durchführen möchte:

    Code:
    <a style="font-size:11px; font-weight:normal;padding: 0px 7px 0px 7px;" href="javascript:sortListSC('name','<?=ehtml($_REQUEST['p'])?>');">Pizzeria Namen</a> <span>|</span>
    wird der Link geklickt wird der Wert "name" für sortierung nach Namen und der Wert 'p' für die Stadt in der die Pizzerien sind an eine JS Funktion übergeben:


    JS Funktion
    Code:
    function sortListSC(id,val) {
    	var values='act_type=ajax';
    	values+='&act=sortList';
    	values+='&id='+id;
    	values+='&state='+val;
    	$.ajax({
    		type: "POST",
    		url: window.siteroot+"content/ajax/sortingSC.php",
    		data: values,
    		success: function(msg) {
    			//$('#divCities').html(msg);
    	      }
    	});
    }

    diese Funktion übergibt nun diese Werte an ein PHP Skript, dass die DB Abfrage ausführt:


    PHP-Code:
    if ($_POST['act_type']=='ajax' && $_POST['act']=='sortList') {

        if(
    $_POST['id']=='name'){

        
    $pizzas=$db->fetch_all("SELECT SQL_CALC_FOUND_ROWS u.name AS name, u.tn_image AS tn_image, u.address AS address, u.address_number AS number, u.zip_code AS zip_code, u.id AS id, u.state AS state, u.city AS city FROM ".DB_PREFIX."users AS u WHERE (u.type='0') AND (u.status='1') AND (u.confirmed='1') $sql ORDER BY u.name ASC LIMIT ".(($_GET['pag']-1)*$config['limit_af_site']).",".$config['limit_af_site']."");
        
    $noPizza=$db->fetch_one("SELECT FOUND_ROWS()");
        
    $tpl->set('pizzas',$pizzas);
        
    $tpl->set('noPizza',$noPizza);
        
    $tpl->display('pizzas.php');
        }

    Die Abfrage füllt das Array $ pizzas.

    Alles funktioniert. Im Firefox - fireburg Netzwerk sehe ich auch die Antwort des Funktionsaufrufes und die Liste wird korrekt sortiert. Allerdings ändert sich die angezeigte Seite nicht!!

    Habe schon diverse Reload funktionen in JS als auch in PHP versucht aber ohene Erfolg. Beim Reload bleibt die Liste aber immer gleich...

    Kann jemand helfen?

  • #2
    Code:
    //$('#divCities').html(msg);
    evtl. hier keinen Kommentar draus machen?

    Kommentar


    • #3
      Hi, danke für deine schnelle Antwort.
      Das habe ich bereits probiert, an dem Kommentar liegt es nicht

      Kommentar


      • #4
        Anmerkungen:
        • Ajax-Requests identifiziert man strikt anders, das was du nutzt ist eine "funktionelle API Implementierung" und nicht fallback-sicher. Wie man AJAX-Request richtig erkennt kannst du dort nachlesen: http://www.avanzu.de/howtos/mini-how...uest-erkennen/
        • Du sperrst automatisch User von der Seitenfunktionalität aus, sobald diese Javascript deaktiviert haben indem du href-URLs nutzt die den javascript-wrapper nutzen. Du solltest via Javascript eher onClick events auf die A-Tags binden und dessen Default unterdrücken. das href-Attribut sollte entsprechend ein "nicht javascript"-Fallback liefern, auf das User umgeleitet werden die kein Javascript aktiviert haben.


        Fehler-Analyse:
        Insofern du "nichts verändert bekommst" mag das zum einen daran liegen das die befüllende Anweisung auskommentiert ist und zum anderen daran das du vielleicht garkeinen "success"-ful Request gelandet hast. Du solltest zusätzlich also in der ajax-Anweisung ebenfalls ein error-event hinterlegen. Genaueres dazu hier.

        Kommentar


        • #5
          Hi,

          ich kenne leider nur die Grundlagen des Programmierens, daher konnte ich leider nicht verstehen, wie dieser Fallback aussehen und der gesamte Ajax request am besten behandelt werden sollte. Kannst du mir etwas näher beschreiben, wie das funktioniert? evtl. ein Bsp ))

          Die JS Funktion ist im gesamten System so. Ich habe diese nur kopiert von einer anderen Funktion und die Variablen geändert

          ich habe jetzt mir mal msg per alert ausgeben lassen.
          msg beinhaltet die gesamte neue html Seite mit DOCTYPE usw. Wie kann ich diese nun ausgeben lassen?

          '#divCities' fürde dann nämlich eine gesamte html Seite in das div laden..

          Kommentar


          • #6
            Ich habe eine Seite gekauft und nehme daran Änderungen vor. Der der die Seite Programmiert hat, ist nicht auffindbar,
            Wo hast Du das Script dann gekauft?

            Kommentar


            • #7
              Bei einer Agentur, die das script mal hat programmieren lassen.
              Allerdings können die damit nicht arbeiten und konnten den Programmierer nicht erreichen. Änderungen muss man dann selber vornehmen.

              Kommentar


              • #8
                Wie kann ich denn nun den Inhalt von msg als neue Seite laden?
                Die OnClick aufrufe habe ich jetzt auch in den Link eingebaut. Wie sollte dann aber der Fallback für das href aussehen?

                Kommentar


                • #9
                  sowas würd ich nichtmal geschenkt haben wollen

                  Kommentar


                  • #10
                    Der sollte auf eine "Seite" zeigen, die es ermöglicht gleiches ohne JS zu bewerkstelligen ( aka Kein-Java-Fallback-Ziel ).

                    Code:
                    $('#divCities').html(msg);
                    Wurde von dir auskommentiert, das ersetzt den Content des Knoten #divCities gegen das was msg liefert.

                    Siehe: http://api.jquery.com/html/#html2

                    Kommentar


                    • #11
                      Zitat von tr0y Beitrag anzeigen
                      Der sollte auf eine "Seite" zeigen, die es ermöglicht gleiches ohne JS zu bewerkstelligen ( aka Kein-Java-Fallback-Ziel ).

                      Code:
                      $('#divCities').html(msg);
                      Wurde von dir auskommentiert, das ersetzt den Content des Knoten #divCities gegen das was msg liefert.

                      Siehe: http://api.jquery.com/html/#html2
                      Ja, allerdings wird dann die gesamte html Seite in den Knoten geladen.
                      Kann man nicht einfach anstelle in einen Knotenpunkt sprich in ein div zu laden, die gesamte Seite neu laden??? Wenn ja, wie?

                      Kommentar


                      • #12
                        Das wär ein "ganz normaler" Seitenwechsel, insofern ich dich jetzt richtig verstanden habe.

                        Kommentar


                        • #13
                          Zitat von tr0y Beitrag anzeigen
                          Das wär ein "ganz normaler" Seitenwechsel, insofern ich dich jetzt richtig verstanden habe.
                          sowas : ('html').html(msg); ??
                          oder window.location='msg';

                          das meine ich.. Wie muss das aussehen?

                          Kommentar


                          • #14
                            Also eigentlich gibt man bei einem Ajax-Call auch nicht die komplette Seite zurück, sondern nur die veränderten Inhalte. Das erspart das ganze Prozedere der Seitengenerierung.
                            Du könntest also entweder die Ausgabe bei einem Ajax-Call so verändern, dass eben nur der eine Part zurückgegeben wird, oder du liest dir den Inhalt von #divCities aus der Antwort aus und schreibst diesen Teil per $('#divCities').html(<reduzierte msg>);

                            Kommentar

                            Lädt...
                            X