Zum Inhalt springen

Seite Wochentagabhängig aufrufen

Erstellt am 15. Februar 2009 · 4 Antworten · letzte Antwort am 17. Februar 2009

Tags: Frage

Unbekannter Benutzer ·

Folgendes Problem...

Ich habe ein kleines Menü auf der Seite, dass mit die Wochentage von Montag bis Sonntag ausgibt. Eingebunden ist das per Extension tscobj.

So sieht das TS aus:

lib {
	SENDEPLAN_MENU = COA
	SENDEPLAN_MENU {
		10 = TEXT
		10 {
			noTrimWrap = |<div class="Sendeplan_Header">Unsere Sendungen am |</div>|
			value = {page:title}
			insertData = 1
		}
		20 = HMENU
		20 {
			special = directory
			special.value = 37
			wrap = <div class="wrap_sendeplanMenu">|</div><div style="clear:both"></div>
			1 = TMENU
			1 {
				NO = 1
				NO {
					linkWrap = <div class="sendeplan_menu_NO">|</div>
					ATagParams = class="sendeplan_menu_NO"
				}
				ACT < .NO
				ACT {
					linkWrap = <div class="sendeplan_menu_ACT">|</div>
					ATagParams = class="sendeplan_menu_ACT"
				}
			}
		}
	}
}

Die Struktur der Seitennavigation sieht so aus:

Sendeplan
- Montag
- Dienstag
- Mittwoch
- Donnerstag
- Freitag
- Samstag
- Sonntag

Die Seite Sendeplan ist vom Typ Verweis. Die Seiten Montag bis Sonntatg erscheinen nicht im Hauptmenü der Seite, sondern durch special = directory nur eben im Content der Seite.
Die Seite Sendeplan verweist auf die erste Unterseite, also auf den Montag. Ich möchte aber nun gerne, das je nachdem welcher Wochentag ist auf den passenden Tag verweist. Will heißen: Ist Donnerstag soll auch bei Klick auf Sendeplan der Donnerstag aufgerufen werden.

Ich kann ja nun schonmal per Condition abfragen welcher Tag gerade ist und dann das TS (siehe oben) passend überschreiben, falls man irgendwie eine StartID des Menüs setzen kann. Allerdings haut mir doch dann wieder die Seite Sendeplan dazwischen, die ja auf die erste Unterseite verweist.

Man kann es sich hier ansehen:
http://www.radio-devil.de/sendeplan.html

Hat jemand eine Idee wie man das machen kann?

freshman17 ·

Hallo,

also du kannst es so probieren:

neue PHP-Datei mit dem Namen myScript.php anlegen

Inhalt der Datei:

class user_setLink {

  function main($content, $conf){
    $fields_values = array();
    switch(date(l)) {
      case 'Monday' : $fields_values['shortcut'] = $conf['monday']; break;
      case 'Tuesday' : $fields_values['shortcut'] = $conf['tuesday']; break;
      case 'Wednesday' : $fields_values['shortcut'] = $conf['wednesday']; break;
      case 'Thursday' : $fields_values['shortcut'] = $conf['thursday']; break;
      case 'Friday' : $fields_values['shortcut'] = $conf['friday']; break;
      case 'Saturday' : $fields_values['shortcut'] = $conf['saturday']; break;
      case 'Sunday' : $fields_values['shortcut'] = $conf['sunday']; break;
      default : $fields_values['shortcut'] = $conf['defaultId'];
    }
    $GLOBALS['TYPO3_DB']->exec_UPDATEquery('pages','uid='.$GLOBALS['TYPO3_DB']->fullQuoteStr($conf['shortcutId'], 'pages'),$fields_values,$no_quote_fields=FALSE);
  }
}

dieses Script irgendwo im fileadmin ablegen (bei mir fileadmin/scripts/) und per TS einbinden:

page.includeLibs.my_key = fileadmin/scripts/myScript.php

lib.submenu = COA
lib.submenu {
  10 = USER
  10 {
    userFunc = user_setLink->main
    shortcutId = 4
    monday = 20
    tuesday = 24
    wednesday = 23
    thursday = 13
    friday = 14
    saturday = 15
    sunday = 16
    defaultId =
  }
  20 = HMENU
  20 {
    special = directory
    special.value = 4
    wrap = <ul>|</ul>
    
    1 = TMENU
    1 {
      NO = 1
      NO.linkWrap = <li>|</li>
    }
  }
}

Konfiguration:

hier trägst du die Id der Seite Sendeplan ein

shortcutId = 4

und hier die Id der Seite, zu der am Montag verlinkt werden soll (im Beispiel wird am Montag zu der Seite 20 verlinkt, am Dienstag zu der Seite mit der Id 24, usw.

monday = 20

Im letzten Parameter kann man einen default-Wert eintragen (falls der Tag nicht auf MO, Di, Mi, ... ,So fällt 🙂

defaultId = 50

Was dabei passiert:

die Seite Sendeplan ist in der Tabelle 'pages' gespeichert und enthält in dem Feld 'shortcut' einen Verweis der jeden Tag geändert werden soll. Diese Aufgabe erledigt das Script welches jedesmal ausgeführt wird wenn jemand auf die Seite klickt.

Sicherlich könnte man das noch effektiver und eleganter schreiben (in eine Extension packen und mit einem CLI-Interface für Cronjobs ausstatten) für unsere Zwecke sollte es jedoch vollkommen ausreichen und dabei fast keine Ressourcen verbrauchen (ausser du hast 100 Klicks pro Sekunde).

Gruß freshman

Unbekannter Benutzer ·

Ja Mensch... was soll ich sagen...

Hattest du das Script schon fertig, oder hast du das jetzt mal eben zusammengeschrieben?

Also auf jeden Fall schonmal herzlichsten Dank dafür und für die ausführliche Darstellung.

Ich habs grad eingebaut und muss jetzt mal schauen obs funktioniert. Leider funktioniert die Simulation des Dienstag nicht bzw eines anderen Wochentags als heute) per Admin Panel.

Also werd ich morgen sehen ob es funktioniert.

Was ich aber eben schon festgestellt habe ist folgendes. Es funktioniert nicht, wenn man in dem Verweis der Seite Sendeplan den Verweismodus auf "erste Unterseite setzt"... Dann kommt der bekannte Hinweis im Frontend, dass die Seite Sendeplan keine propper Connection to the Treeroute besitzt ;-). Die Seite Sendeplan wird dann in Der Hauptnavi auch nicht mehr angezeigt.

Sobald man den Verweismodus aber auf eine X-beliebige Unterseite setzt, dann funktioniert es und der (heute) Montag wird angezeigt, egal auf welche Unterseite man verweist. (Allein von daher gehe ich schonmal davon aus dass es funktionieren wird.

Also mal sehen... Melde mich morgen nochmal obs funktioniert, bin aber guter Dinge.

Danke

freshman17 ·

Moin,

habs selbst geschriebenund.

Ich habs grad eingebaut und muss jetzt mal schauen obs funktioniert. Leider funktioniert die Simulation des Dienstag nicht bzw eines anderen Wochentags als heute) per Admin Panel.

Die Abfrage ist auf die Serverzeit bezogen und erfolgt mit der PHP-Funktion date(). Welche Parameter zulässig sind kannst du hier sehen:

[link]http://de.php.net/manual/de/function.date.php[/link]

Im Script bekommt date() den Parameter l (kleines 'L')

switch(date(l))

Was ich aber eben schon festgestellt habe ist folgendes. Es funktioniert nicht, wenn man in dem Verweis der Seite Sendeplan den Verweismodus auf "erste Unterseite setzt"... Dann kommt der bekannte Hinweis im Frontend, dass die Seite Sendeplan keine propper Connection to the Treeroute besitzt ;-). Die Seite Sendeplan wird dann in Der Hauptnavi auch nicht mehr angezeigt.

In den Modi funktioniert es bei mir auch nicht spirch der Shorcut wird im Menu nicht mehr gelistet (jedoch ohne Fehlermeldung). Dieses Verhalten tritt auch ohne das eingebundene Script auf (Version 4.2.6).

Gruß freshman