+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: GET-Werte einlesen und verändern

  1. #1
    Kommt häufiger vorbei Avatar von Apfelkuchen91
    Registriert seit
    12.06.2009
    Ort
    In Deutschland
    Beiträge
    269
    Bedankte sich
    16
    Erhielt 32 Danksagungen
    in 32 Beiträgen

    Frage GET-Werte einlesen und verändern

    Hallo zusammen,

    ich habe eine checkbox, wenn diese aktiv ist, soll die Seite alle fünf Sekunden neu geladen werden und dabei die Adresse ein bisschen verändern.

    So sieht meine Adressenschema aus: index.php?var1=par1&var2=par2&var3=par3 usw.

    Es soll nur eine bestimmte Variable des Typs Integres geändert werden zum Beispiel von 1 auf 2.

    Wie kann ich mein Problem lösen?

    Apfelkuchen91
    Geändert von Apfelkuchen91 (05.09.2011 um 14:46 Uhr)
    Vergesst nicht den "Danke"-Button zu klicken, es kostet nichts.
    Gelöste Probleme bitte markieren!
    Joomla-FAQ: --> Klick!
    Support per PN: --> Klick!

  2. #2
    Wohnt hier Avatar von Harmageddon
    Registriert seit
    04.03.2010
    Ort
    Heilbronn
    Beiträge
    2.126
    Bedankte sich
    138
    Erhielt 616 Danksagungen
    in 605 Beiträgen

    Standard

    Mit Javascript (location.href verändern).
    Konnte ich helfen? "Danke" klicken kostet nichts und tut nicht weh.
    Problem gelöst? Ersten Post bearbeiten - Erweitert - Präfix: "Gelöst" - Danke!
    allergisch gegen grausame Rechtschreibung

  3. #3
    Kommt häufiger vorbei Avatar von Apfelkuchen91
    Registriert seit
    12.06.2009
    Ort
    In Deutschland
    Beiträge
    269
    Bedankte sich
    16
    Erhielt 32 Danksagungen
    in 32 Beiträgen

    Standard

    Hallo Harmagedonn,

    danke für deine Antwort, leider bringt das mich nicht viel weiter.

    Wie kann ich nur var3=1 auf var3=2 ändern und den Rest des Linkes gleich lassen? Es soll auch funktionieren, wenn Joomla Suchmaschinenfreundlichelinks erstellt.

    Soweit bin ich schon Mal gekommen:
    PHP-Code:
    var intervalID;
    var 
    max;

    function 
    AutoChangeSet(_aktuell,_max)
    {

        var 
    wert document.SeitenWahl.change.checked;
        var 
    sek 5;
        
    max _max;
        
    //alert(_aktuell + " - " + _max + " - " + wert);
        
        
    if(wert)
        {
            
    intervalID setInterval(AutoChange1000 sek);
            
    alert("Die Seiten werden nach " sek " Sekunden automatisch gewechselt.");
        }
        else
        {
            
    clearInterval(intervalID);
            
    alert("Die Seiten werden nicht mehr automatisch gewechselt.");
        }
    }

    function 
    AutoChange()
    {
            
    // Hier soll dann etwas geschehen!
            
    location.reload()

    Apfelkuchen91
    Geändert von Apfelkuchen91 (05.09.2011 um 10:28 Uhr)
    Vergesst nicht den "Danke"-Button zu klicken, es kostet nichts.
    Gelöste Probleme bitte markieren!
    Joomla-FAQ: --> Klick!
    Support per PN: --> Klick!

  4. #4
    Hat hier eine Zweitwohnung Avatar von CirTap
    Registriert seit
    12.12.2005
    Ort
    Karlsruhe
    Beiträge
    1.628
    Bedankte sich
    83
    Erhielt 539 Danksagungen
    in 438 Beiträgen

    Standard

    Hallo,

    JavaScript "sieht" nur was auch in der Adresszeile im Browser steht. Das "location" Objekt hält dann alles bereits.

    Eine handelsübliche und einfache Methode um für JS auch die einzelnen Originalparameter sichtbar zu machen ist diese in ein Formular mit versteckten Input-Feldern zu packen, dass einerseits beim Erstaufruf durch PHP gefüllt wird, dann aber auch per JS feldgenau verändert werden kann. Die Feldreihenfolge bestimmt auch die Reihenfolge der Parameter in der URL.

    Dem Formular gibst du die method="get", damit die URL-Parameter (aus den versteckten Feldern) nach dem Absenden auch wieder in der URL an der gewünschten Stelle auftauchen.
    ?var1=1&vars=dideldum&var3=4711
    HTML-Code:
    <form name="url_helfer" method="get">
    <input type="hidden" name="var1" value="1">  <!-- dieser Wert wird geändert -->
    <input type="hidden" name="var2" value="dideldum">
    <input type="hidden" name="var3" value="4711">
    </form>
    Auf JS-Ebene sähe der Zugriff dann z.B so aus:
    PHP-Code:
    function AutoChange() {
      
    // shortcut variablen initialisieren für den direktzugriff
      
    var frm document.forms['url_helfer'],
          
    felder frm.elements,
          
    zahl 0;
      
    // einzelnen feldwert ändern
      
    zahl parseInt(felder['var1'].value);
      
    zahl++;
      
    felder['var1'].value=zahl;
      
    // formular absenden
      
    frm.send();
    }
    // Funktion alle 10 sekunden aufrufen
    setInterval(AutoChangeSet10000); 
    Die Formularwerte (.value) sind immer vom Datentyp String. Willst du damit rechnen musst du sie vorher mit parseInt() oder parseFloat() umwandeln.
    frm.send() senden das Formual ab, läd damit die Seite neu und die nächste URL hätte nun den Aufbau ?var1=2&vars=dideldum&var3=4711

    EDIT: hab den JS-Code in eine Funktion gepackt mit setInterval() als 10-sekunden Timeout.

    CirTap
    Geändert von CirTap (05.09.2011 um 09:55 Uhr) Grund: function code
    Joomla FAQ | CSS-Probleme? Verstehen Entdecken Anwenden Meistern

    "I love deadlines. I like the whooshing sound they make as they fly by." (Douglas Adams)
    Man kann Software schnell, gut und günstig schreiben, sich aber nur 2 Dinge aussuchen.


  5. #5
    Kommt häufiger vorbei Avatar von Apfelkuchen91
    Registriert seit
    12.06.2009
    Ort
    In Deutschland
    Beiträge
    269
    Bedankte sich
    16
    Erhielt 32 Danksagungen
    in 32 Beiträgen

    Frage

    Hallo CirTap,

    danke für den ausführlichen Code. Du sagst, dass
    Zitat Zitat von CirTap Beitrag anzeigen
    JavaScript "sieht" nur was auch in der Adresszeile im Browser steht.
    Das ist genau,was ich benötige. In der Adresszeile steht index.php?var=1&var2=dideldum&var3=4711 und ich möchte var1 um einen Wert erhöhen.

    Muss ich das auch so umständlich über ein verstecktes Formular machen, oder kann ich dieses auch direkt machen?

    Apfelkuchen91
    Vergesst nicht den "Danke"-Button zu klicken, es kostet nichts.
    Gelöste Probleme bitte markieren!
    Joomla-FAQ: --> Klick!
    Support per PN: --> Klick!

  6. #6
    Hat hier eine Zweitwohnung Avatar von CirTap
    Registriert seit
    12.12.2005
    Ort
    Karlsruhe
    Beiträge
    1.628
    Bedankte sich
    83
    Erhielt 539 Danksagungen
    in 438 Beiträgen

    Standard

    Was dir das location-Objekt bietet sind im wesentlichen zusammengeklebte Strings und diese sauber zu parsen ist mit Garantie umständlicher, erfordert zudem deutlich mehr Code und wird damit auch fehleranfälliger, als ein simples verstecktes Formular zu nutzen in dem schon alles fix und fertig drin steht und ganz nebenbei zerlegt in Objekten daherkommt.
    Wieviel einfacher hättest du es denn gerne? :-)

    So ein "Hilfsformular" ist weder schlechter Stil noch ist es eine außergewöhnliche oder gar neuartige Lösung, sondern wie gesagt "handelsüblich". Schau dich mal im HTML von Joomla um (oder jeder x-beliebig komplexeren Webapplikation), wo überall (auch im Frontend) mit solchen versteckten Feldern und Formularen gearbeitet wird, um derlei Datenfragmente transportieren und auswerten zu können.

    Es hält dich aber niemand davon ab die Dinge schön kompliziert zu machen und dich bspw. mit Regulären Ausdrücken rumzuschlagen

    Das alert() solltest du übrigens gegen etwas austauschen, dass die Meldung z.B. in ein <div> schreibt, sofern sie für den Anwender gedacht ist. Solange dieser "blockierende" Dialog nämlich da steht wird auch kein Interval getriggert.
    Als "Debug-Meldung" für dich, verwende für sowas besser console.log()

    Viel Spaß,
    CirTap
    Joomla FAQ | CSS-Probleme? Verstehen Entdecken Anwenden Meistern

    "I love deadlines. I like the whooshing sound they make as they fly by." (Douglas Adams)
    Man kann Software schnell, gut und günstig schreiben, sich aber nur 2 Dinge aussuchen.


  7. #7
    Kommt häufiger vorbei Avatar von Apfelkuchen91
    Registriert seit
    12.06.2009
    Ort
    In Deutschland
    Beiträge
    269
    Bedankte sich
    16
    Erhielt 32 Danksagungen
    in 32 Beiträgen

    Standard

    Hallo CirTab,

    danke für deine Antwort. Also muss ich über meine Joomla Komponente das Formular erstellen und dann kann ich meine Variable ändern. Wie kann ich bei Joomla option und view automatisch übernehmen?

    Das was ich in alert geschrieben habe ist für den User gedacht. Wie kann ich das in ein DIV Schreiben, zum Beispiel massage von Joomola?

    Apfelkuchen91
    Vergesst nicht den "Danke"-Button zu klicken, es kostet nichts.
    Gelöste Probleme bitte markieren!
    Joomla-FAQ: --> Klick!
    Support per PN: --> Klick!

  8. #8
    Hat hier eine Zweitwohnung Avatar von CirTap
    Registriert seit
    12.12.2005
    Ort
    Karlsruhe
    Beiträge
    1.628
    Bedankte sich
    83
    Erhielt 539 Danksagungen
    in 438 Beiträgen

    Standard

    Die Request-Variablen bekommst du u.a. (noch) über JRequest::get(...) bzw. dessen "Nachfolger" JInput.
    http://api.joomla.org/Joomla-Platfor...on/JInput.html
    http://api.joomla.org/Joomla-Platfor.../JRequest.html (steht auf der Abschußliste für J!2.5)
    PHP-Code:
    $option JFactory::getApplication()->get('input')->get('option'); 
    oder zur besseren "Übersicht" mit einer Hilfsvariablen:
    PHP-Code:
    $request JFactory::getApplication()->get('input');
    $option  $input->get('option');
    $foo     $input->get('foo'0'int'); // &foo=  als Zahl und wenn nicht vorhanden: Wert 0 
    Wobei deine Komponente und die View ja hoffentlich wissen wie sie heißen
    Speziell den Namen der Komponente (option) schreibe ich i.d.R. fest ins Formulare rein, da eine andere Komponente selten was mit "meiner" Anfrage anfangen kann/soll.
    Code:
    document.getElementById('message').innerHTML='Einen (formatierten) Text in ein <b>HTML-Element</b> schreiben.';
    Mehr zu JS und DOM u.a hier:
    - http://developer.mozilla.org/
    - http://www.opera.com/docs/specs/
    - http://msdn.microsoft.com/en-us/library/aa155073.aspx
    - http://developer.apple.com/library/safari/navigation/
    Und Mootools:
    - http://mootools.net/docs/

    CirTap
    Joomla FAQ | CSS-Probleme? Verstehen Entdecken Anwenden Meistern

    "I love deadlines. I like the whooshing sound they make as they fly by." (Douglas Adams)
    Man kann Software schnell, gut und günstig schreiben, sich aber nur 2 Dinge aussuchen.


  9. Erhielt Danksagungen von:


  10. #9
    Kommt häufiger vorbei Avatar von Apfelkuchen91
    Registriert seit
    12.06.2009
    Ort
    In Deutschland
    Beiträge
    269
    Bedankte sich
    16
    Erhielt 32 Danksagungen
    in 32 Beiträgen

    Standard

    Hallo CirTap,

    danke für die Links.

    Ich weiß die die Komponente und der View heißt. Nur ich habe das Problem, wenn ich mit JROUTE::_('LINK') schreibe zeigt er mir option und die Menü ID an, aber nicht den view, was mache ich da falsch??

    Einmal möchte ich das ganze als Vollbild anzeigen. Dazu habe ich mit überlegt entweder einen weiteren View zuschreiben oder den aktuellen anpassen. Was ist die einfachere Methode? Bei der Vollbild Ansicht, soll nur die Anzeige von meiner Komponente erscheinen und nicht das gesamt Tempalte, wie kann ich dieses lösen? Wenn ich die die aktuelle anpass, dann müsste ich einfahch dem URL noch ein full=true anhängen können, wie mache ich das am Besten?

    Apfelkuchen91
    Geändert von Apfelkuchen91 (05.09.2011 um 13:52 Uhr)
    Vergesst nicht den "Danke"-Button zu klicken, es kostet nichts.
    Gelöste Probleme bitte markieren!
    Joomla-FAQ: --> Klick!
    Support per PN: --> Klick!

  11. #10
    Hat hier eine Zweitwohnung Avatar von CirTap
    Registriert seit
    12.12.2005
    Ort
    Karlsruhe
    Beiträge
    1.628
    Bedankte sich
    83
    Erhielt 539 Danksagungen
    in 438 Beiträgen

    Standard

    Die Frage ist: Was gibts du denn als "LINK" an?

    Wenn du nur "option=com_apfelkuchen" angibts versucht J! im Frontend eigenständig einen Menüeintrag zu finden und nimmt den erstbesten der zu der Komponente "apfelkuchen" gehört. Mit dem Menüeintrag ist zwangsläufig eine "view" verbunden (sonst hätte man den Menüeintrag nicht anlegen können) und deren Name landet dann auch im Request.
    Wenn aber kein Menüeintrag existiert greift J! ins Leere und es kracht: "View not found".

    Um sicher zu stellen, dass im Zweifelsfall eine bestimmte Standard-View geladen wird, macht man das was alle Komponenten tun: man prüft in der display() Methode des Controller ob im Request der Name einer View angegeben wurde und falls nicht, legt man den Namen eben fest:
    PHP-Code:
    $vName JRequest::getCmd('view''kuchen');
    JRequest::setVar('view'$vName); 
    Diese Zeile würde dafür sorgen, dass ApfekuchenViewKuchen (/views/kuchen/view.html.php) geladen wird wenn nichts in der URL steht oder kein Menüeintrag auffindbar war.

    Wenn du eine andere View "erzwingen" willst, dann gibt deren Namen in "LINK" mit an, z.B. "option=com_foobar&view=torte". Dann wird J! erstmal $view="torte" als Request-Variable allerorts eintragen/annehmen und von "/views/torte/view.html.php" ausgehen und diese laden.
    Stets vorausgesetzt, dass DU nicht an den Request-Variablen rumfummelst und sie überschreibst.

    Die "Vollansicht" (vgl. der Druckvorschau im Frontend) bekommst du durch Angabe von &tmpl=component in deinem Link.
    J! läd dann die component.php aus dem aktiven Template. Die Datei gibt neben den üblichen Meta-Angaben im HEAD ansonsten nur die Komponente aus.

    CirTap
    Joomla FAQ | CSS-Probleme? Verstehen Entdecken Anwenden Meistern

    "I love deadlines. I like the whooshing sound they make as they fly by." (Douglas Adams)
    Man kann Software schnell, gut und günstig schreiben, sich aber nur 2 Dinge aussuchen.


+ Antworten
Seite 1 von 2 1 2 LetzteLetzte

Stichworte

Lesezeichen

Berechtigungen

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