Ergebnis 1 bis 9 von 9

Thema: Jahresansicht > Andere Ausgabe: Jeweils Monate + Tage

  1. #1
    Contao-Nutzer Avatar von Jogibär
    Registriert seit
    13.12.2009.
    Beiträge
    122

    Standard Jahresansicht > Andere Ausgabe: Jeweils Monate + Tage

    Hallo zusammen,

    ich möchte gerne eine Übersicht von Haupt-/Nebensaison und Betriebsferien darstellen,
    am liebsten in dieser Form:
    Code:
    Januar
    1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ....
    Februar
    1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ....
    ....
    Jeweils farblich hinterlegt die Tagesfelder, je nach Status.

    Dazu habe ich versucht, das Template zu bearbeiten, aber leider werden ja die Jahre zuerst und dann alle Tage ausgegeben.

    Es also wäre toll, wenn ich in die Schleife der Monatsaufzählungen auch noch eine Schleife für die Tagesaufzählungen einsetzen könnte,
    aber ich weiß nicht, wie ich die jeweiligen Tage des betreffenden Monats ansprechen soll. Es gibt doch nur die Gesamttage des Jahres, oder?

    Ich habe schon versucht, im Quellcode "rumzuspielen", verstehe aber nicht genug, um eine Ausgabe hinzubekommen.


    Gibt es da eine einfache Möglichkeit, die ich noch nicht erkannt habe oder wäre es vielleicht
    möglich, dass hier die Funktionalität des Moduls erweitert werden könnte?
    Danke für jeden Tipp.

    Gruß
    Jürgen

  2. #2
    Alter Contao-Hase Avatar von kmielke
    Registriert seit
    21.06.2009.
    Beiträge
    1.173

    Standard

    Hallo Jürgen,

    ich habe mir das mal angesehen, und werde es in einer der kommenden Versionen für 3.2.x einbauen. Welche Contao Version benutzt du?

    Danke
    Gruß
    Kester
    Gruß Kester

    Kein Support via PN ohne vorherige Absprache.

  3. #3
    Contao-Nutzer Avatar von Jogibär
    Registriert seit
    13.12.2009.
    Beiträge
    122

    Standard

    Hallo Kester,

    danke für die Rückmeldung, ich habe Contao 3.1.5 installiert, da MetaModels bei mir in 3.2 noch Probleme machte.

    PS:
    Ich habe nun mit meinen Laienkenntnissen aus deinem Code selbst etwas gebastelt (s. Anhang).

    Template:
    HTML-Code:
    <?php $monthNames = array('Jan','Feb','Mär','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez'); ?>
    <div class="saisonzeiten yearview full">
    
    	<?php if ($this->use_navigation): ?>
    		<div class="yearview-navi">
    			<?php if ($this->linkCurrent): ?>
    	    	<a class="yearview-navi-link current" href="<?php echo $this->currHref; ?>" title="<?php echo $this->currTitle; ?>"><?php echo $this->currLink; ?></a>
    	    	<?php endif; ?>
    	    	<a class="yearview-navi-link next" href="<?php echo $this->nextHref; ?>" title="<?php echo $this->nextTitle; ?>"><?php echo $this->nextLink; ?></a>
    		</div>
    	<?php endif; ?>
      
      <div class="year">
    	<?php foreach ($this->monthdays as $md => $month): ?>
      	<div class="month">
    			<div class="month-name"><?php echo $monthNames[$md-1] ?></div>
              <?php foreach ($month as $m => $day):					
    							$eventClass = '';														
    							foreach ($day['events'] as $e => $event): ?>
                    <?php if ($event):                   
     									if ($event['class']): $eventClass.= ' ' . $event['class']; endif; ?>                                        
                    <?php endif; ?>
                  <?php endforeach; ?>
                            
                <div class="day<?php echo $eventClass ?>">
                  <?php if (!empty($day['label'])): 
    								echo $day['label'] . '<br><span>' . $m . '</span>';
                  endif; ?>
                </div>
              <?php endforeach; ?>      
    		</div> <!-- month -->
    	<?php endforeach; ?>
    
    	</div>
      <div class="legende">
          <p class="label hauptsaison">Hauptsaison</p>
          <p class="label nebensaison">Nebensaison</p>
          <p class="label betriebsferien">Betriebsferien</p>          
      </div>
    </div>
    Und deine Methode compileDays angepasst:
    Code:
     protected function compileMonthDays($currYear)
        {
            $arrDays = array();
    
            //Get all events
            $arrAllEvents = $this->getAllEventsExt($this->cal_calendar, $this->yearBegin, $this->yearEnd, array($this->cal_holiday));
    
            for ($m=1; $m<=12; $m++)
            {
    															
                for ($d=1; $d<=31; $d++)
                {
                    if (checkdate($m, $d, $currYear))
                    {
                        $day = mktime(12, 00, 00, $m, $d, $currYear);
    
                        $intCurrentDay = (int)date('w', $day);
                        $intCurrentWeek = (int)date('W', $day);
    
                        $intKey = date("Ymd", strtotime(date("Y-m-d", $day)));
                        $currDay = \Date::parse($GLOBALS['TL_CONFIG']['dateFormat'], strtotime(date("Y-m-d", $day)));
    
                        $class = ($intCurrentDay == 0 || $intCurrentDay == 6) ? 'weekend' : 'weekday';
                        $class .= (($d % 2) == 0) ? ' even' : ' odd';
                        $class .= ' ' . strtolower($GLOBALS['TL_LANG']['DAYS'][$intCurrentDay]);
    
                        if ($currDay == \Date::parse($GLOBALS['TL_CONFIG']['dateFormat'], strtotime(date("Y-m-d"))) )
                        {
                            $class .= ' today';
                        }
    
                        $arrDays[$m][$d]['label'] = strtoupper(substr($GLOBALS['TL_LANG']['DAYS'][$intCurrentDay],0,2)) ;
                        $arrDays[$m][$d]['class'] = $class;
                    }
                    else
                    {
                        $intKey = 'empty';
                        $arrDays[$m][$d]['label'] = '';
                        $arrDays[$m][$d]['class'] = 'empty';
                    }
                    // Get all events of a day
                    $arrEvents = array();
                    if (is_array($arrAllEvents[$intKey]))
                    {
                        foreach ($arrAllEvents[$intKey] as $v)
                        {
                            foreach ($v as $vv)
                            {
                                // set class recurring
                                if ($vv['recurring'] || $vv['recurringExt'])
                                {
                                    $vv['class'] .= ' recurring';
                                }
    
                                // set color from calendar
                                $vv['calendar_title'] = $this->calConf[$vv['pid']]['calendar'];
    
                                if ($this->calConf[$vv['pid']]['background'])
                                {
                                    $vv['bgstyle'] = $this->calConf[$vv['pid']]['background'];
                                }
                                if ($this->calConf[$vv['pid']]['foreground'])
                                {
                                    $vv['fgstyle'] = $this->calConf[$vv['pid']]['foreground'];
                                }
                                $arrEvents[] = $vv;
                            }
                        }
                    }
                    $arrDays[$m][$d]['events'] = $arrEvents;
                }
            }
    
            return $arrDays;
        }		
    }
    Aber auf Dauer ist das natürlich suboptimal, bei der nächsten Erweiterung ist alles weg.

    PS: Was ich noch toll fände, wäre eine Klassenzuweisung schon im Kalender.
    Im Moment habe ich 3-4 Zeiträume für Haupt- und Nebensaison als Event.
    Dort schreibe ich dann jeweils den Klassennamen rein.
    Daran muss nur der Redakteur später auch wieder denken, wenn er einen neuen Block definiert.

    Deshalb die Idee, 3 Kalender für Haupt-/Nebensaison + Betriebsferien, in denen bereits die Klasse hinterlegt ist.

    Gruß
    Jürgen
    Angehängte Grafiken Angehängte Grafiken
    Geändert von Jogibär (21.12.2013 um 20:05 Uhr)

  4. #4
    Alter Contao-Hase Avatar von kmielke
    Registriert seit
    21.06.2009.
    Beiträge
    1.173

    Standard

    Zitat Zitat von Jogibär Beitrag anzeigen
    PS: Was ich noch toll fände, wäre eine Klassenzuweisung schon im Kalender.
    Im Moment habe ich 3-4 Zeiträume für Haupt- und Nebensaison als Event.
    Dort schreibe ich dann jeweils den Klassennamen rein.
    Daran muss nur der Redakteur später auch wieder denken, wenn er einen neuen Block definiert.

    Deshalb die Idee, 3 Kalender für Haupt-/Nebensaison + Betriebsferien, in denen bereits die Klasse hinterlegt ist.

    Gruß
    Jürgen
    Hallo Jürgen,

    was meinst du mit Klassenzuweisung? Meinst du, dass die CSS Klassen aus dem Kalender bei den jeweiligen Events ausgegeben werden solen?
    Gruß
    Kester
    Gruß Kester

    Kein Support via PN ohne vorherige Absprache.

  5. #5
    Contao-Nutzer Avatar von Jogibär
    Registriert seit
    13.12.2009.
    Beiträge
    122

    Standard

    Moin Kester,

    richtig, die Klassen des Kalenders könnten beim Event mit ausgegeben werden. Überhaupt
    wäre es doch bei Einbeziehung von mehreren Kalendern sinnvoll, um diese bei Bedarf
    separat gestalten zu können (selbst wenn nur minimal).

    Was mir noch aufgefallen ist: Die Wochentage und das Datum hängen als ein Text zusammen,
    zuvor hatte ich es in deinem Modul mittels "span" getrennt, z.B. den Name des Wochentags.
    Damit hat man mehr gestalterische Freiheit, könnte sogar einen break über CSS einfügen
    oder auch den Wochentag ausblenden, falls nicht erwünscht.
    Inzwischen nutze ich einfach im Template den Zähler der Schleife für das Datum des Tages,
    da ich aus Platzgründen nun auch die Wochentage weggelassen habe.

    Wenn das alles zu viel an Änderungen ist, könnte ich das verstehen. Vielleicht ist mein
    Verwendungszweck auch zu speziell (wobei doch ein Saisonkalender gar nicht selten ist).
    Dann würde ich mir erlauben, deine Basis mit meinen Änderungen zu extrahieren und
    als separates Modul bei mir zu belassen. Dadurch lerne ich sicher auch wieder dazu.

    Grüße
    Jürgen

  6. #6
    Alter Contao-Hase Avatar von kmielke
    Registriert seit
    21.06.2009.
    Beiträge
    1.173

    Standard

    Hallo Jürgen,

    eventuell hilft dir es ja für's erste, dass die Farbangaben aus dem Kalender an die Events durchgereicht wird. Vorder-, Hindergrundfarbe und Transperenz aus dem Kalender werden als style="" an die Events gehängt.

    Gruß
    Kester
    Gruß Kester

    Kein Support via PN ohne vorherige Absprache.

  7. #7
    Contao-Urgestein
    Registriert seit
    30.01.2011.
    Ort
    Stuttgart
    Beiträge
    4.138

    Standard

    für den Kalender würde ich im template das gleiche System verwenden und die Klasse "cal_x" wie beim (default)Kalender in Form von
    PHP-Code:
    <div class="event cal_<?php echo $event['pid']; ?>
    bevorzugen. vgl cal_default.tpl
    Geändert von magicsepp (22.12.2013 um 13:21 Uhr)

  8. #8
    Alter Contao-Hase Avatar von kmielke
    Registriert seit
    21.06.2009.
    Beiträge
    1.173

    Standard

    Zitat Zitat von magicsepp Beitrag anzeigen
    für den Kalender würde ich im template das gleiche System verwenden und die Klasse "cal_x" wie beim (default)Kalender in Form von
    PHP-Code:
    <div class="event cal_<?php echo $event['pid']; ?>
    bevorzugen. vgl cal_default.tpl
    Hallo Jürgen,

    mach es so, wie magicsepp es hier beschrieben hat. Damit hast du auf jeden Fall schon mal den Kalender identifiziert, und musst dann nur noch das entsprechene CSS bauen.

    Gruß
    Kester
    Gruß Kester

    Kein Support via PN ohne vorherige Absprache.

  9. #9
    Contao-Nutzer Avatar von Jogibär
    Registriert seit
    13.12.2009.
    Beiträge
    122

    Standard

    Ok, danke euch!

    Gruß
    Jürgen

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
  •