TYPO3-Testaccount
Testen Sie die aktuellste TYPO3-Version kostenlos und unverbindlich für einen Monat!

Jetzt testen!

Schulungen

Seite Wochentagabhängig aufrufen


Autor Nachricht
Verfasst am: 15. 02. 2009 [18:51]
SLAng
Moderator
Themenersteller
Dabei seit: 20.10.2004
Beiträge: 2778
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:
TYPOSCRIPT
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?

Nichts wissen ist schlecht, nichts wissen wollen ist eine Katastrophe!
ProfilWWW
Verfasst am: 16. 02. 2009 [12:16]
freshman17
Dabei seit: 06.10.2008
Beiträge: 175
Hallo,

also du kannst es so probieren:

neue PHP-Datei mit dem Namen myScript.php anlegen

Inhalt der Datei:

PHP
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:

TYPOSCRIPT
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

TYPOSCRIPT
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.

TYPOSCRIPT
monday = 20


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

TYPOSCRIPT
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
ProfilWWW
Verfasst am: 16. 02. 2009 [22:18]
SLAng
Moderator
Themenersteller
Dabei seit: 20.10.2004
Beiträge: 2778
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 icon_wink.gif. 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

Nichts wissen ist schlecht, nichts wissen wollen ist eine Katastrophe!
ProfilWWW
Verfasst am: 17. 02. 2009 [10:00]
freshman17
Dabei seit: 06.10.2008
Beiträge: 175
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:

de.php.net/manual/de/function.date.php

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

PHP
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 icon_wink.gif. 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



ProfilWWW
Verfasst am: 17. 02. 2009 [10:19]
SLAng
Moderator
Themenersteller
Dabei seit: 20.10.2004
Beiträge: 2778
Super Sache...

Es funktioniert genau so wie es soll!

Also vielen Dank nochmal

Nichts wissen ist schlecht, nichts wissen wollen ist eine Katastrophe!
ProfilWWW