Zum Inhalt springen

Einen Menüpunkt mit PHP-Script versehen

Erstellt am 22. März 2012 · 2 Antworten · letzte Antwort am 23. März 2012

Tags: Frage

mycrypt ·

Hallo zusammen,

ich baue mein Menü ganz simpel über TypoScript zusammen:

# Main Navigation
lib.mainNavi = HMENU
lib.mainNavi {
    wrap = <ul>|</ul>
    1 = TMENU
    1 {
		expAll = 1
		noBlur = 1
		NO = 1
		NO {
		    wrapItemAndSub = <li>|</li>||<li>|</li>||<li>|</li>||<li class="critics">|</li>||<li class="topics">|</li>||<li>|</li>
			stdWrap {
			    htmlSpecialChars = 1
			}
			ATagTitle {
			    field = title
			}
		}
		
	}
	2 < .1
	2 {
	    wrap = <div class="layer_topics ym-vlist"><div class="layer_top"></div><ul class="ym-vlist">|</ul><div class="ym-clearfix"></div></div>
		NO {
			linkWrap = <li>|</li>
		}
	}
}

Das Menü klappt so einwandfrei. Ich muss jetzt einen Punkt dieses Menüs (ID=7) mit Inhalten aus einer Schnittstelle füllen. Leider fehlt mir hier einfach das notwendige KnowHow. Hat jemand eine Idee, wie ich dem Menüpunkt mit der ID 7 den Inhalt meines PHP-Scriptes zuweisen kann?

Danke und viele Grüße

karlchen ·

was willste du denn mit dem externen PHPSkript holen ?
Vielleicht kann man das ja mit TYPO3 Mitteln auch realisieren.

Chrissli ·

Hallo mycrypt,

wie karlchen bereits gesagt hat empfielt es sich die Typo3-Bordmittel zu verwenden soweit
möglich.
Ansonsten gibt es für MENÜs die Funktion "itemArrayProcFunc":

1. Du legst eine PHP-Datei an, z.b.

<?php
//File: fileadmin/user_scripts/class.user_MenuHelper.inc.php
class user_MenuHelper {
	public function use_php_for_idlist($menuArray,$conf) {
		//  prueft ob idList gesetzt ist
		if(	!isset($conf['idList']) || !((bool)$conf['idList']) ) { 
			return $menuArray; 
		} 
		// prueft ob useFunction gesetzt ist und existiert
		if( !isset($conf['useFunction']) || !(bool)$conf['useFunction']) || !function_exists($conf['useFunction']) { 
			return $menuArray; 
		} 
		
		$idList = explode(',',$conf['idList']); // komma separierte id-liste in array verfrachten
		if(empty($idList)) { return $menuArray; } // pruefen ob array leer, denn sicher ist sicher
		
		$keys = array_keys($menuArray); // theoretisch ist auch einfach eine for-loop denkbar, 
						// aber so sind auch nicht-nummerische oder aufeinanderfolgende schluessel kein problem
		if(empty($keys)) { return $menuArray; } // wie oben
		
		foreach($keys as $key) { // alle menueeintraege abklappern
			if(in_array($menuArray[$key]['uid'],$idList)) { // wenn uid in liste vorhanden
				// rufe benutzerdefinierte funktion auf mit aktuellem menue-element als parameter, erwartet wieder ein menue-element zurueck
				$menuArray[$key] = call_user_func($conf['useFunction'],$menuArray[$key]); 
			}
		}
		
		return $menuArray; // geparste menue-elemente wieder zurueckgeben
	}
}

2. bindest diese in deinem TypoScript ein:

includeLibs.user_MenuHelper = fileadmin/user_scripts/class.user_MenuHelper.inc.php

3. Baust die neue Funktion mit Parametern in dein MENU mit ein:

lib.mainNavi.1.itemArrayProcFunc = user_MenuHelper->use_php_for_idlist
lib.mainNavi.1.itemArrayProcFunc {
	idList = 7,11,255
	useFunction = doSumfingSchpeschel
}

Dies nur als Beispiel, sollte dir aber helfen.
Mit var_dump kannst du dir auch die Inhalte der Funktionsparameter ansehen, wenn du nicht
weißt welche Möglichkeiten dir offen stehen.