Ergebnis 1 bis 17 von 17

Thema: Kalender generateAjax (was muss da rein?)

  1. #1
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard Kalender generateAjax (was muss da rein?)

    Habe direkt im Seitenlayout ein paar Zeilen Javascript stehen, um von Andreas' ajax.php gebrauch zu machen. Funktioniert auch soweit, dass das Ergebnis in den entsprechenden DIV zurückgeliefert wird.

    Nutzen möchte ich das, um das Blättern im Kalender nachzuladen.

    Habe hierzu in der ModuleCalendar.php eine Funktion generateAjax() erzeugt mit folgendem Inhalt:

    PHP-Code:
        public function generateAjax()
        {
            
    $this->strTemplate 'mod_calendar';
            return 
    parent::generate();
        } 
    Es wird aber leider nur der nackte Kalender geladen, ohne Termine. Wie bekomme ich die Termine da rein?

    Habe schon versucht, den kompletten Inhalt von compile da reinzukopieren, aber ohne Erfolg.

    Olli

    PS
    Das das im Moment nicht Updatesicher ist, ist mir klar. Soll aber erstmal reichen.

  2. #2
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Der minikalender hat doch gar keine Termine drin?
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  3. #3
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Den möchte ich ja auch eigentlich gar nicht :-)
    Sondern den "normalen" Kalender.

    Weiß nur nicht wie ich es anstellen soll.

  4. #4
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ohne Ajax funktioniert der Kalender? Übergibst du das Datum per ajax.php?
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  5. #5
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Ja, ohne Ajax funktioniert der Kalender.
    Mein Javascript ist auch noch sehr rudimentär. Im Moment wird nur auf den "letzten Monat" Link reagiert. Beim Klick wird der Monat (ohne Übergabe von month) weiter unten in einer neuen Box angezeigt.

    Es geht mir erstmal nur darum, dass per ajax.php der normale Kalender mit Termine angzeigt wird. Ohne Angabe von month wird ja sollte ja zumindest der aktuelle Monat angezeigt werden. Um den Rest kümmere ich mich später (per Trial an Error)

    Hier nochmal meine aktuelle generateAjax:
    PHP-Code:
    public function generateAjax()
        {
            
    $strTemplate 'mod_calendar';
            return 
    parent::generate();        
        } 
    Hier mal ein Link:
    http://jugendhilfe-werne.de/JHW/termine.html

    Beim Klick auf Oktober 2010 wird in der "Box" drunter der nackte Kalender ausgegeben. Wie kommen die Termine darein?

    Olli

  6. #6
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Hiermit klappt es auch nicht. Da wird komischerweise nur der Mini-Kalender angezeigt.

    PHP-Code:
        public function generateAjax()

        {
            
    $strTemplate 'cal_default';    

            
    // Respond to month
            
    if ($this->Input->get('month'))
            {
                
    $this->Date = new Date($this->Input->get('month'), 'Ym');
            }

            
    // Respond to day
            
    elseif ($this->Input->get('day'))
            {
                
    $this->Date = new Date($this->Input->get('day'), 'Ymd');
            }

            
    // Fallback to today
            
    else
            {
                
    $this->Date = new Date();
            }

            
    $intYear date('Y'$this->Date->tstamp);
            
    $intMonth date('m'$this->Date->tstamp);

            
    $objTemplate = new FrontendTemplate('cal_default');

            
    $objTemplate->intYear $intYear;
            
    $objTemplate->intMonth $intMonth;

            
    // Previous month
            
    $prevMonth = ($intMonth == 1) ? 12 : ($intMonth 1);
            
    $prevYear = ($intMonth == 1) ? ($intYear 1) : $intYear;
            
    $lblPrevious $GLOBALS['TL_LANG']['MONTHS'][($prevMonth 1)] . ' ' $prevYear;

            
    $objTemplate->prevHref $this->strUrl . ($GLOBALS['TL_CONFIG']['disableAlias'] ? '?id=' $this->Input->get('id') . '&' '?') . 'month=' $prevYear str_pad($prevMonth20STR_PAD_LEFT);
            
    $objTemplate->prevTitle specialchars($lblPrevious);
            
    $objTemplate->prevLink $GLOBALS['TL_LANG']['MSC']['cal_previous'] . ' ' $lblPrevious;
            
    $objTemplate->prevLabel $GLOBALS['TL_LANG']['MSC']['cal_previous'];

            
    // Current month
            
    $objTemplate->current $GLOBALS['TL_LANG']['MONTHS'][(date('m'$this->Date->tstamp) - 1)] .  ' ' date('Y'$this->Date->tstamp);

            
    // Next month
            
    $nextMonth = ($intMonth == 12) ? : ($intMonth 1);
            
    $nextYear = ($intMonth == 12) ? ($intYear 1) : $intYear;
            
    $lblNext $GLOBALS['TL_LANG']['MONTHS'][($nextMonth 1)] . ' ' $nextYear;

            
    $objTemplate->nextHref $this->strUrl . ($GLOBALS['TL_CONFIG']['disableAlias'] ? '?id=' $this->Input->get('id') . '&' '?') . 'month=' $nextYear str_pad($nextMonth20STR_PAD_LEFT);
            
    $objTemplate->nextTitle specialchars($lblNext);
            
    $objTemplate->nextLink $lblNext ' ' $GLOBALS['TL_LANG']['MSC']['cal_next'];
            
    $objTemplate->nextLabel $GLOBALS['TL_LANG']['MSC']['cal_next'];

            
    // Set week start day
            
    if (!$this->cal_startDay)
            {
                
    $this->cal_startDay 0;
            }

            
    $objTemplate->days $this->compileDays();
            
    $objTemplate->weeks $this->compileWeeks();

            return 
    $objTemplate->parse();            
        } 

  7. #7
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Ok. Wenn ich die ajax.php mit action=fmd&id=27&g=1 aufrufe, dann kommt ein Kalender mit Termine.

    Jetzt habe ich ein Problem mit meiner Url. Sobald ich auf einen Monat vor/zurück geklickt habe und der Kalender mit den Termine erscheint (juchuu), kommt diese Url für vor/zurück zustande:

    http://jugendhilfe-werne.de/JHW/ajax.php?month=201012

    welche ja so nicht funktioniert.

    Vielleicht ein Tipp wo ich ansetzen muss?

  8. #8
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    woher kommt denn diese URL??
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  9. #9
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    ...termine.html?... wird nach dem request durch ...ajax.php?... ersetzt.

    Ich meine dafür ist die Funktion
    PHP-Code:
    $this->strUrl preg_replace('/\?.*$/i'''$this->Environment->request); 
    in der generate verantwortlich.
    Habe das mal testweise in
    PHP-Code:
    $this->strUrl "termine.html"
    geändert (ich weiß, ist natürlich auch mist).

    Dann steht zwar immer die richtige Url (mal abgesehen vom aktuellen month), aber beim zweiten Versuch, einen Monat vor oder zurück zu gehen, wird kein request mehr ausgelöst, sondern die Seite neu geladen.

    Habe also aktuell zwei Problem:
    1) Wie bekomme ich immer die korrekte Url hin?
    2) Wie übergebe ich meinem JS im Seitenlayout den month vom entsprechenden Link?

    PS
    Habe übrigens den Inhalt von generate in generateAjax kopiert und passe da jetzt alles an. Das g=1 habe ich natürlich rausgenommen.

  10. #10
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ich denke die korrekte Variante wäre es, das Modul nicht anzupassen. Du kannst mittels Javascript auf die Vor/Zurück Buttons einen Event legen, und dann selber die ajax.php in einem Mootools Request aufrufen.
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  11. #11
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Also, bin ein gutes Stück weiter. Um es vorweg zu nehmen: Es läuft!

    Hier was ich gemacht habe:

    Dies in den Header im Seitenlayout eingebunden:
    Code:
    function calendar_update (id, month) {
            new Request.HTML({
                   url:'ajax.php',
                   data: 'action=fmd&id='+id+'&month='+month, 
                   method: 'get',
                   evalResponse: 'true',
                   update: $('kalender').getElement('.boxinnen'),
    	}).send();
    }
    Den Inhalt innerhalb in der Datei ModuleCalendar.php von generate() in generateAjax kopiert.

    Soweit so gut. Jetzt wird's blöd.

    Da ich im Template noch ein paar Variablen benötige, habe ich die Methode compile() ergänzt um diese Zeilen (an entsprechenden Stellen):

    PHP-Code:
    $objTemplate->prevMonth $prevYear str_pad($prevMonth20STR_PAD_LEFT);
    $objTemplate->nextMonth $nextYear str_pad($nextMonth20STR_PAD_LEFT);
    $objTemplate->id $this->id
    Die Links in cal_default.tpl geändert nach
    HTML-Code:
    <a href="<?php echo $this->prevHref; ?>" onclick="calendar_update(<?php echo $this->id . ',' . $this->prevMonth ;?>); return false" title="<?php echo $this->prevTitle; ?>
    bzw.

    HTML-Code:
    <a href="<?php echo $this->nextHref; ?>" onclick="calendar_update(<?php echo $this->id . ',' . $this->nextMonth;?>); return false" title="<?php echo $this->nextTitle; ?>
    Also wie gesagt, es läuft alles.
    Würde das gerne Updatesicher als Modul schreiben.
    Das Javascript einbinden ist kein Problem.

    Man müsste vielleicht noch das CSS-ID - Feld im Kalender als Pflichtfeld machen und im Template der JS-Funktion als update_id übergeben. Nur wie bekomme ich die neuen Variablen ins Template ohne die Methode compile() anzupacken?

    Olli

  12. #12
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    du brauchst diese Variablen gar nicht, du kannst sie aus der URL des Links lesen. Etwa so am Ende des Templates, jetzt brauchst du allerdings noch die ID des Kalender-Moduls ($this->id ?)

    Code:
    window.addEvent('domready', function()
    {
        document.getElements('.mod_calendar .head a').addEvent('click', function(event)
        {
            var url = event.target.get('href').parseQueryString();
    
            new Request.HTML({
                   url:'ajax.php',
                   data: ('action=fmd&id=<?php echo $this->id; ?>&month='+url.month), 
                   method: 'get',
                   update: event.target.getParent('.mod_calendar'),
    	}).send();
    
            return false;
        }
    });
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  13. #13
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Das man die ID manuell angeben muss, finde ich (jetzt) nicht schlimm.
    Das mit parseQueryString klappt glaube ich so nicht. Das funktioniert nur, wenn nur die Parameter als String übergeben werden. Und ein event.stop() fehlte noch.

    Aber so klappt es:

    Code:
    window.addEvent('domready', function()
    {
        document.getElements('.mod_calendar .head a').addEvent('click', function(event)
        {
            event.stop();
            var month = event.target.get('href').match('month=[0-9]{6}');
            new Request.HTML({
                   url:'ajax.php',
                   data: 'g=1&action=fmd&id=10&'+month, 
                   method: 'get',
                   update: event.target.getParent('.mod_calendar'),
    	}).send();
            return false;
        });
    });
    </script>

  14. #14
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ich glaube das event.stop() brauchst du nicht, wenn du return false machst.
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  15. #15
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Wollte Dir gerade widersprechen, aber ich lasse es besser.
    Du hast natürlich (wie immer) Recht.
    (habs trotzdem getestet :-)

    Danke für deine Hilfe.

  16. #16
    Contao-Fan Avatar von lomex
    Registriert seit
    03.07.2009.
    Ort
    Werne
    Beiträge
    791
    User beschenken
    Wunschliste

    Standard

    Wäre doch eigentlich nicht schlecht, wenn die ID der Kalender-Module standardmäßig den Templates mit übergeben wird. Dann wäre eine automatische AJAX - Lösung wie zuvor gesehen sehr einfach zu implementieren.

    Gerade beim Kalender macht doch AJAX Sinn, oder täusche ich mich da? Ich persönlich fände ja eine generelle AJAX-Lösung (wo sie doch so einfach ist) beim Kalender nicht schlecht, aber ich glaube da spielt Leo nicht mit.

    Macht es Sinn, zumindest für die Übergabe der ID ein Feature-Request aufzumachen?

  17. #17
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Die ID müsste im mod_calendar (oder so) Template vorhanden sein, allerdings nicht im Untertemplate event_...
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

Aktive Benutzer

Aktive Benutzer

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

Ähnliche Themen

  1. Erweiterung für Blogfunktionen - Was muss rein?
    Von Juke im Forum Entwickler-Fragen
    Antworten: 104
    Letzter Beitrag: 04.05.2011, 13:20
  2. $this->User->id in generateAjax()
    Von bened im Forum Entwickler-Fragen
    Antworten: 1
    Letzter Beitrag: 26.02.2011, 10:11
  3. webShop Artikelliste was muss in die generateAjax?
    Von lomex im Forum Entwickler-Fragen
    Antworten: 2
    Letzter Beitrag: 30.01.2011, 15:51
  4. Suckerfishalternative rein auf CSS-Basis
    Von KATgirl im Forum Fertige Tutorials
    Antworten: 7
    Letzter Beitrag: 19.11.2010, 07:33
  5. backend komme nicht rein
    Von saardaniel im Forum Geschützte Bereiche/Mitglieder
    Antworten: 11
    Letzter Beitrag: 16.10.2009, 18:24

Lesezeichen

Lesezeichen

Berechtigungen

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