Zum Inhalt springen

Menu mit PHP Manupulieren

Erstellt am 5. Oktober 2012 · 6 Antworten · letzte Antwort am 11. Oktober 2012

Tags: Frage

cv6 ·

Hallo zusammen,

ich bin noch recht neu in der Typo3 Welt, und stehe gerade vor folgendem Problem.

Im Menu befinden sich zwei Seiten, die Links zu einer dritten Seite sind, aber nur mit Parametern. Diese dritte Seite ist ein Plugin das jede Menge Magie macht.

Nun soll es so sein, das der passende Menupunkt aktiv ist, obwohl die Seite selber ja nicht die aktive ist. Also suche ich im Moment einen Weg, das Menu zu manipulieren. Dabei bin ich auf itemArrayProcFunc gestossen.

Nun habe ich folgenden Eintrag im Typoscript.

		MAINMENU = HMENU
		MAINMENU {
			1 = TMENU
			1 {
				itemArrayProcFunc = user_slhelpers->manipulateMainMenu
				NO.wrapItemAndSub = <li>|</li>
				NO.stdWrap.htmlSpecialChars = 1
				NO.ATagTitle.field = description
				ACT < .NO
				ACT = 1
				ACT.wrapItemAndSub = <li class="active">|</li>
			}
		}

In der passenden Helpers Klasse habe ich in die Funktion erstmal nur einen Var-export der Parameter geschrieben um mir anzusehen was drin steht. Aber der erste ist NULL und den zweiten bekomme ich "Nesting Level too Deep" zurück, wobei nur ein Key vorhanden ist. 0 => parentObj

Ich brauch mal kurz nen Stups in die Richtung wo mein Denkfehler ist.

Danke!

Chrissli ·

Hi!

Habe die itemArrayProcFunc auch schon ein- zweimal verwendet, bei mir hat's super funktioniert, ich seh' bei dir so jetzt auch keinen Fehler.
Hast du den selben Effekt, wenn du die $menuArray und die $conf die übergeben werden mit "var_dump()" ausgibts?
Ich könnte mir vorstellen, das var_export mit der $conf ein Problem hat, da diese ein ihr übergeordnetes Objekt enthält.
Ist denn in dem Menü das du aufbaust schon ein Eintrag drin? Wenn nicht würde das erklären warum der erste Parameter "NULL" ist.
Versuch evtl. auch mal ein entryLevel oder special = directory mit rein zu hängen...

cv6 ·

An die conf kam ich mit var_export dran, aber an den menuArray nicht. Aber tatsächlich, mit var_dump bekomme ich den Inhalt.

Das hatte ich in all den Jahren noch nie, merkwürdig.

Jetzt hab ich den Array, und ich hab auch schon erfolgreich den Titel manipuliert. Ist zwar nicht das Ziel, aber das einzige was gegriffen hat.

Weder habe ich gefundne, wie der aktive eintrag markiert wird, noch hat das setzen von nav_hide und/oder hidden gefruchtet. Kein Menupunkt konnte ich ausblenden.

Setze ich falsch an?

Chrissli ·

Naja, du kannst mit den Werten arbeiten, die bereits im array vorhanden sind oder zusätzliche hinzufügen.
Diese musst du dann aber in deinem Menücode selbst verwursteln.
Habe den entsprechenden Code leider grade nicht bei Hand, aber wenn du bis morgen abend warten kannst kann ich das gerne Posten. Habe das irgendwann mal bei Google entdeckt.

Wenn du "nur" Menüeinträge ausblenden willst, dann kopiere die Array-Einträge in ein neues Array das du als return-Wert zurück gibst. Einträge die du nicht angezeigt haben möchstest kopierst du einfach nicht d.h. wirfst sie komplett aus dem Menü raus.

cv6 ·

Ja, ich hab Zeit. Nächste Woche hab ich eh Urlaub.

OK, rauswerfen ist die brutale Art.

Fehlt nur noch der Weg: Den aktiven Eintrag zu ändern. Was auch das Hauptproblem ist.

Danke schon mal!

Chrissli ·

Also:

In deinem PHP-Skript kannst du den Menüeinträgen eigene Werte mitgeben, z.b.:

public function manipulateMainMenu($itemArray,$conf) {
  if(preg_match('/^Abc_/',$itemArray['title'])) {
    $itemArray['linkwert_xy'] = 'inaktiv';
  }
}

Diese kannst du dann per TS entsprechend auswerten:

wrapItemAndSub = <li class="active">|</li>  
wrapItemAndSub.override =  <li class="dochNichtAktive">|</li>
wrapItemAndSub.override.if{
  value= inaktiv
  equals.field = linkwert_xy
}

D.h. würdest die ACT-Werte zusätzlich nochmal setzen, wenn dein eigener Wert gesetzt ist. Und wann dieser gesetzt ist, entscheidest du selbst. Entsprechend kannst du dann z.b. auch Einträge mit der entsprechenden CSS-Klasse ausblenden, so musst du sie nicht "brutal" rauswerfen.

Ich hoffe das hilft dir weiter.