Menue mit Umbruch

  • Danii Danii
    Sternenflotten-Admiral
    0 x
    201 Beiträge
    0 Hilfreiche Beiträge
    24. 08. 2011, 14:53

    Ich bin sicher, dass das schon besprochen wurde. Gefunden hab ich leider noch nichts dazu.

    Ich brauche ein List-Menue nach folgender Struktur

    eins . vier . sieben
    zwei . fünf . usw
    drei . sechs

    das müsste also irgendwie ein Counterconstrukt sein, das mir nach drei Einträgen die <ul> schliesst und eine neue öffnet.

    Ich steh grad aufm Schlauch (hat ja auch grad 34 Grad Hitze) :o

    Hat jemand eine Initialidee für mich?


  • 1
  • Chrissli Chrissli
    Jedi-General
    0 x
    1015 Beiträge
    28 Hilfreiche Beiträge
    24. 08. 2011, 23:15

    Hallo Danii,

    das Wetter haut halt recht rein :D
    Das Stichwort lautet "optionSplit",
    kannst mal in der TSref nachschlagen.
    Bis dahin sollte dir das weiterhelfen:

    1. 10 = HMENU
    2. 10 {
    3. 1 = TMENU
    4. 1.NO = 1
    5. stdWrap = <ul><li>|</li> |*| <li>|</li> || <li>|</li> || <li>|</li></ul><ul> |*| <li>|</li></ul>
    6. }

    Ich hoffe das kommt so hin...

    God's in his heaven, all's right with the world

  • Danii Danii
    Sternenflotten-Admiral
    0 x
    201 Beiträge
    0 Hilfreiche Beiträge
    25. 08. 2011, 08:34

    Hi,

    optionSplit ist mir an der Stelle zu unflexibel. Ich hab's gestern testweise so gemacht.

    1. temp.listmenue = COA
    2. temp.listmenue {
    3.  
    4. 10 = HMENU
    5. 10.special = directory
    6. 10.special.value = 16
    7. 10 {
    8. 1 = TMENU
    9. 1 {
    10. expAll = 0
    11. wrap = <!!=::>|</ul>
    12. NO = 1
    13. NO {
    14. wrapItemAndSub = <li>|</li>
    15. }
    16.  
    17. ACT = 1
    18. ACT {
    19. wrapItemAndSub = <li>|</li>
    20. }
    21. }
    22. }
    23.  
    24. 20 < .10
    25. 20.begin = 4
    26.  
    27. 30 < .10
    28. 30.begin = 7
    29.  
    30. 40 < .10
    31. 40.begin = 10
    32.  
    33. }

    Ist mir zwar auch noch zu unflexibel weil die Anzahl der Links ungefähr bekannt sein muss, ich such aber weiter.

  • Chrissli Chrissli
    Jedi-General
    0 x
    1015 Beiträge
    28 Hilfreiche Beiträge
    26. 08. 2011, 22:46

    Wie wär's dann mit einem User-Script?
    So würde ich's machen, bin mir aber nicht sicher ob sich das HMENU als Parameter mitgeben lässt,
    denke aber schon.
    Schlimmstenfalls müsste man dieses noch Konvertieren ( weiß nicht ob Typo3 hier eine Textvariable weiterreicht oder
    für HMENU ein Object erstellt, kann das leider grade nicht prüfen )

    1. page.includeLibs = fileadmin/scripts/user_customWrapper.php
    2.  
    3. temp.listmenue = USER_INT
    4. temp.listmenu {
    5. userFunc = user_customWrapper->main
    6. list = HMENU
    7. list {
    8. special = directory
    9. special.value = 16
    10. 1 = TMENU
    11. 1 {
    12. NO = 1
    13. NO.doNotLinkIt = 1
    14. NO.stdwrap = |*| |, |*| |
    15. }
    16. }
    17. maxItemsBeforeWrap = 3
    18. userItemWrap = <li>|</li>
    19. userWrap = <ul>|</ul>
    20. fillIfNotMax = 1
    21. }

    1. #Inhalt von fileadmin/scripts/user_customWrapper.php
    2. <?php
    3.  
    4. class user_customWrapper {
    5. public function main($content,$conf) {
    6. if(!isset($conf['list'])) { return $content; }
    7.  
    8. //elemente pro reihe
    9. if(isset($conf['maxItemsBeforeWrap'])) {
    10. $itemsPerLine = (int)$conf['maxItemsBeforeWrap'];
    11. } else { $itemsPerLine = 3; }
    12.  
    13. //wrap element
    14. if(isset($conf['userItemWrap'])) {
    15. $itemWrap = $conf['userItemWrap'];
    16. } else { $itemWrap = '|'; }
    17.  
    18. //wrap reihe
    19. if(isset($conf['userWrap'])) {
    20. $wrap = $conf['userWrap'];
    21. } else { $wrap = '|'; }
    22.  
    23. //auffuellen wenn reihe nicht voll
    24. if(isset($conf['fillIfNotMax'])) {
    25. $fill = (bool)$conf['fillIfNotMax'];
    26. } else { $fill = false; }
    27.  
    28. $items = explode(',',$conf['list']);
    29.  
    30. foreach($items as $item) {
    31. //element wrap
    32. $line[] = preg_replace('/\|/',$item,$itemWrap);
    33. if(count($line) == $itemsPerLine) {
    34. //line wrap
    35. $lines[] = preg_replace('/\|/',implode('',$line),$wrap);
    36. unset($line);
    37. }
    38. }
    39. if(isset($line)) {
    40. if($fill) { //reihe auffuellen
    41. while( count($line) != $itemsPerLine ) {
    42. $line[] = preg_replace('/\|/','',$itemWrap);
    43. }
    44. }
    45. $lines[] = preg_replace('/\|/',implode('',$line),$wrap);
    46. }
    47.  
    48. if(isset($lines)) {
    49. $content .= implode('',$lines);
    50. }
    51.  
    52. return $content;
    53. }
    54. }
    55.  
    56. ?>

    [edit]Musste den PHP-Code korrigieren wg. preg_replace, sollte jetzt aber passen

    God's in his heaven, all's right with the world

  • 1