Zum Inhalt springen

www.meade.de

Erstellt am 23. August 2004 · 180 Antworten · letzte Antwort am 3. Juli 2006 · Seite 7 von 10

Tags: Diskussion

Liberation ·

kommt drauf an was du in deinem ts setup drin stehen hast...

ist ist an sich nur wichtig das der code vom menu im selben container ist wie das menu selber.

Ganz am anfang war es mal so gedacht das der nämlich ans ende der page kommt. wie bei www.meade.de

Thomas N ·

wie mir scheint bin ich zu bescheurt das nachzuvollziehen! ich habe in meinem ts das ganze skript für das menu unter einem platzhalter.. welchen code für das menue meinst du genau??? habe auch schon probiert ab menueebene2 seperate platzhalter zu vergeben..ohne erfolg natürlich 😉

der code aus meinem ts für das menue lauter wie folgt:

marks.MENU_MAIN > 
marks.MENU_MAIN = HMENU 
marks.MENU_MAIN.1 = GMENU 
marks.MENU_MAIN.1 { 
  IProcFunc = user_menu->firstLevel 
  expAll = 1 
  wrap = | 


IFSUB = 1 
IFSUB { 
  wrap = | 

   XY = [50.w]+20, 25 
   backColor = #28416f

   50 = TEXT 
   50 { 
    text.field = title 
    fontSize = 11 
    fontFile = fileadmin/fonts/verdana.ttf 
    fontColor = #ffffff
    offset = 10,17 
    niceText = 1 

   } 

   100 = || IMAGE 
   100.file = fileadmin/MEADE/spacer2.gif 
} 

NO { 
  wrap = | 

   XY = [50.w]+20, 25 
   backColor = #28416f

   50 = TEXT 
   50 { 
    text.field = title 
    fontSize = 11 
    fontFile = fileadmin/fonts/verdana.ttf 
    fontColor = #ffffff
    offset = 10,17 
    niceText = 1 

   } 

   100 = || IMAGE 
   100.file = fileadmin/MEADE/spacer2.gif 
} 

RO < .NO 
RO = 1 
RO  { 
   backColor = #28416f
} 

IFSUBRO < .NO 
IFSUBRO = 1 
IFSUBRO  { 
   backColor = #28416f
  } 
} 


marks.MENU_MAIN.2 = TMENU 
marks.MENU_MAIN.2 { 
IProcFunc = user_menu->secondLevel 
expAll = 1
NO.linkWrap = <li>|</li> 
} 

marks.MENU_MAIN.3 = TMENU 
marks.MENU_MAIN.3 { 
IProcFunc = user_menu->thirdLevel 
expAll = 1 
NO.linkWrap = <li>|</li> 
} 

marks.MENU_MAIN .4 = TMENU 
marks.MENU_MAIN.4 { 
IProcFunc = user_menu->fourthLevel 
expAll = 1 
NO.linkWrap = <li>|</li> 
}

also, menu_main habe ich in diesen container gesteckt, das allein hat mich aber noch nicht weiter gebracht.. 🙁

Thomas N ·

ja, das stimmt soweit schon:

<body>
<!-- ###DOKUMENT### begin -->
<table width="900" border="0" cellspacing="1" bordercolor="#999999" cellpadding="1" height="100%" align="center" bgcolor="#999999">
<tr>
<td bgcolor="#F1F2FE" valign="top">
<table border="0" cellpadding="0" cellspacing="0" width="900" height="100%">
<tr>
<td colspan="2" height="25" bgcolor="#28416f">
<div id="menucontainer">###MENU_MAIN###</div>
</td>
</tr>

etc...

Das Menü wird auch angezeigt! allerdings sehr "zerschossen".. also es wird von jeder zeile nur ein bruchteil angezeigt... das liegt aber an der css body einstellung, wenn ich die auskommentiere isses wieder normal!
am besten du schaust es dir selbst mal an. seite befindet sich im aufbau unter
http://www.metzingen-best.de/index.php

mh84 ·

Hallo,

ich versuch schon den ganzen Tag das menu testweise zum Laufen zu bringen.

Da sich jetzt in dem Thread so viele verschiedene Codeschnipsel angesammelt haben würde ich mich freuen wenn irgendein gluecklicher hier nochmal eine funktionierende Zusammenfassung reinsetzt:

- der code für das HTML-Template
- der Typo-Script Code
- der evt. zusaetzliche PHP-Code

wenn man folgende Dateien für den Rest zum Testen benutzt:
die .css und .js dateien von der meade-webpage

alternativ natürlich auch gerne eigenen css und js code.

Hauptsache man bekommt es erstmal zum Laufen (auf Typo3 3.7, Linux). Würde vielen hier (und mir ) sicherlich weiterhelfen.

Vielen Dank!

gruß, mh84

Liberation ·

Beispiel www.sci-worx.com

TSSetup:

# include ypMenu script

page.includeLibs.ypMenu = fileadmin/template/res/ypMenu.php

temp.slideoutmenu.special = directory
temp.slideoutmenu.special.value = 4
#temp.menu_1.entryLevel = 2


#temp.menu_1 > 
temp.slideoutmenu = HMENU
temp.slideoutmenu.1 = GMENU
temp.slideoutmenu.1 {
  IProcFunc = user_menu->firstLevel

  expAll = 1
  wrap = | 

IFSUB = 1
IFSUB {

  wrap = |
    #button grösse
    XY = 177, 67
    #transparentBackground = 1
    backColor = #011D65 || #004A85 || #015BA2 || #88A6C3
    50 = TEXT
    50 {
    text.field = title
    fontSize = 15
    fontFile = fileadmin/fonts/Arial.ttf
    #fontFile = fileadmin/fonts/55HelveNeuRom.PFB
    fontColor = #ffffff
    align = center
    offset = 0,36
    niceText = 1
   }

   100 = || IMAGE
   100.file = fileadmin/template/images/spacer.gif
}

#für Mausover
NO {

  wrap = |
    #button grösse
    XY = 177, 67
    #transparentBackground = 1
    backColor = #011D65 || #004A85 || #015BA2 || #88A6C3
    50 = TEXT
    50 {
    text.field = title
    fontSize = 15
    fontFile = fileadmin/fonts/Arial.ttf
    #fontFile = fileadmin/fonts/55HelveNeuRom.PFB
    fontColor = #ffffff
    align = center
    offset = 0,36
    #offset = -[50.w] + 90,36
    niceText = 1
}
    

     #Menu Balken bei mouseover am fuss vom Buttom
     99 = IMAGE
     99.file = GIFBUILDER
     99.file {
     XY = 400, 67
     90 = IMAGE
     90.file = fileadmin/template/images/line_menu.gif
     90.offset = 0, 64
     transparentBackground = 1
     }



   100 = || IMAGE
   100.file = fileadmin/template/images/spacer.gif
}

RO < temp.slideoutmenu.1.NO
RO = 1
RO  {
    XY = 177, 67
    #transparentBackground = 1
    backColor = #011D65 || #004A85 || #015BA2 || #88A6C3
    50 = TEXT
    50 {
    text.field = title
    fontSize = 15
    fontFile = fileadmin/fonts/Arial.ttf
    #fontFile = fileadmin/fonts/55HelveNeuRom.PFB
    fontColor = #ffffff
    align = center
    offset = 0,36
    niceText = 1
   }

     #Menu Balken bei mouseover am fuss vom Button
     99 = IMAGE
     99.file = GIFBUILDER
     99.file {
     XY = 400, 67
     90 = IMAGE
     90.file = fileadmin/template/images/line_menu.gif
     90.offset = 0, 64
     transparentBackground = 1
     }

}

IFSUBRO < temp.slideoutmenu.1.NO
IFSUBRO = 1
IFSUBRO  {

    XY = 177, 67
    #transparentBackground = 1
    backColor = #011D65 || #004A85 || #015BA2 || #88A6C3
    50 = TEXT
    50 {
    text.field = title
    fontSize = 15
    fontFile = fileadmin/fonts/Arial.ttf
    #fontFile = fileadmin/fonts/55HelveNeuRom.PFB
    fontColor = #ffffff
    align = center
    offset = 0,36
    niceText = 1
   }


  }
}


temp.slideoutmenu.2 = TMENU
temp.slideoutmenu.2 {
IProcFunc = user_menu->secondLevel
expAll = 1
NO.linkWrap = <li>|</li>
}

temp.slideoutmenu.3 = TMENU
temp.slideoutmenu.3 {
IProcFunc = user_menu->thirdLevel
expAll = 2
NO.linkWrap = <li>|</li>
}

temp.slideoutmenu.4 = TMENU
temp.slideoutmenu.4 {
IProcFunc = user_menu->fourthLevel
expAll = 1
NO.linkWrap = <li>|</li>
}



# append Menu JS to page
#page.11 = USER
#page.11.userFunc = user_menu->menuEnd


temp.slideoutmenucode = USER
temp.slideoutmenucode.userFunc = user_menu->menuEnd

PHP:

<?php
/***************************************************************
*  Copyright notice
* 
*  (c) 2003 Andreas Tschirpke (tschirpke@at-mediendesign.de)
*  All rights reserved
*
*  This script is part of the Typo3 project. The Typo3 project is
*  free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 2 of the License, or
*  (at your option) any later version.
*
*  The GNU General Public License can be found at
*  http://www.gnu.org/copyleft/gpl.html.
*
*  This script is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/**
* User class to build Javascript Menu (www.xyz.de)
*
* @author Andreas Tschirpke <tschirpke@at-mediendesign.de>
*
* Modified by Alex.Elsner <alex.elsner@cms-medien-design.de>
*/

#$GLOBALS['TSFE']->set_no_cache();  // wird nicht mehr gebraucht :)

class user_menu {
   var $offsetY = 68; // inital offset values for the first level elements
   var $offsetX = 230;
   var $sublevelWidth = 177; // width and height values for sublevel items
   var $sublevelHeight = 22;
   
   var $padding = 5;
   var $fontSize = 10;
   var $breakpoint = 28; // recalculate width of text after x characters
   var $secPadding = 12; // 16 padding inc. border
   
   var $fontFile = 'fileadmin/fonts/verdana.ttf'; // font file needed to calculate linebreaks
   var $transBg = 'fileadmin/template/images/menu_bg.png'; // transparent PNG file - needed to fix a transparency bug in Mac IE 5  (wird nicht mehr gebraucht)
   
   /**
    *   Dummy function to pass values to buildIndex
    *
    *  @param   array   Menu array including all needed menu items (created by TMENU)
    *   @param   array   Configuration array
    *   @return   array   returns modified $I array
    *   @access   private
    */
    function firstLevel($I,$conf) {
        return $this->buildIndex($I, $conf, 1);
    }
   /**
    *   Dummy function to pass values to buildIndex
    *
    *  @param   array   Menu array including all needed menu items (created by TMENU)
    *   @param   array   Configuration array
    *   @return   array   returns modified $I array
    *   @access   private
    */
   function secondLevel($I,$conf) {
      return $this->buildIndex($I, $conf, 2);
   }
   /**
    *   Dummy function to pass values to buildIndex
    *
    *  @param   array   Menu array including all needed menu items (created by TMENU)
    *   @param   array   Configuration array
    *   @return   array   returns modified $I array
    *   @access   private
    */
   function thirdLevel($I,$conf) {
        return $this->buildIndex($I, $conf, 3);
    }
   /**
    *   Dummy function to pass values to buildIndex
    *
    *  @param   array   Menu array including all needed menu items (created by TMENU)
    *   @param   array   Configuration array
    *   @return   array   returns modified $I array
    *   @access   private
    */
   function fourthLevel($I, $conf) {
           return $this->buildIndex($I, $conf, 4);
    }

      
   /**
    * Returns true if there is a submenu with items for the page id, $uid
    * Used by the item states "IFSUB" and "ACTIFSUB" to check if there is a submenu
    *
    * @param   integer      Page uid for which to search for a submenu
    * @return   boolean      Returns true if there was a submenu with items found
    * @access private
    */
      // copy from tslib_menu   
   function isSubMenu($uid)   {
         // Looking for a mount-pid for this UID since if that exists we should look for a subpages THERE and not in the input $uid;
      $mount_info = $GLOBALS['TSFE']->sys_page->getMountPointInfo($uid);
      if (is_array($mount_info))   {
         $uid = $mount_info['mount_pid'];
      }

      $recs = $GLOBALS['TSFE']->sys_page->getMenu($uid,'uid,pid,doktype,mount_pid,mount_pid_ol');
      foreach($recs as $theRec)   {
         if (!t3lib_div::inList('5,6',$theRec['doktype']) && !$theRec['nav_hide'])   {   // If a menu item seems to be another type than 'Not in menu', then return true (there were items!)
            return TRUE;
         }
      }
   }

   /**
    * Breaks textarea text into lines of specified width in order to feed Gifbuilder (see function makeTextImage)
    *
    * @param    string        $text: input text
    * @param    integer        $size: specified font size
    * @param    string        $font: absolute path to specified font file
    * @param    integer        $width: specified width of the image box
    * @return    array        array of lines of text
    */
       // copy from sr_sendcard
      // thanks and credits go to Peter Bowyer <peter@sendcard.org>
   function text_to_lines($text, $size, $font, $width) {
      $words = t3lib_div::trimExplode(' ', str_replace("
", ' <br> ', str_replace("

", ' <br> ', str_replace("|", ' <br> ', $text))), 0);

      $p = 0;
      $lines = array();
      $lines[0] = '';

      for($i = 0; $i < count($words); $i++) {
         ($lines[$p] ) ? $test = $lines[$p].' '.$words[$i] : $test = $words[$i];

         $bbox = imagettfbbox($size, 0, $font, $test);

         if ($words[$i] == '<br>') {
            $p++;
            $lines[$p] = '';
         } elseif (($bbox[4] - $bbox[6]) > $width ) {
            $p++;
            $lines[$p] = $words[$i];
         } else {
            $lines[$p] = $test;
         }
      }
      return count($lines);
   }

   /**
    * Collects all needed information (width, height, x, y, level etc.) and structural information for the ypMenu.
    * Information are stored in $GLOBALS['TSFE']->applicationData['ypMenus']
    *
    * @param    array        $I: Array created by TMENU including all menu elements for the current level
    * @param    integer      $conf: Configuration array
    * @param    integer      $level: hierarchical depth
    * @return   array        $I: modified $I array
    */   
   function buildIndex($I, $conf, $level) {
         // fix IE 5.0 on windows
		 // no longer necessarily
      $clientAdjust = 0;
#      $clientinfo = t3lib_div::clientInfo();
#      if($clientinfo['SYSTEM'] == 'win' AND $clientinfo['BROWSER'] == 'msie' AND $clientinfo['VERSION'] < 5.5) {
#         $clientAdjust = 2;
#      }
      
         
      switch($level) {
      case "1":
            // only wrap in ypSlide Action if submenu is present
         if($this->isSubMenu($I['uid'])) {
               // JS actions
            $onmouseover = "ypSlideOutMenu.showMenu('menu" .$I['uid']. "'); over('" .$I['theName']. "');";
            $onmouseout = "ypSlideOutMenu.hideMenu('menu" .$I['uid']. "'); out('" .$I['theName']. "');";
            
               // collect data for correct positions
            $GLOBALS['TSFE']->applicationData['ypMenus'][$I['uid']]['level'] = $level;
            $GLOBALS['TSFE']->applicationData['ypMenus'][$I['uid']]['uid'] = $I['uid'];
            $GLOBALS['TSFE']->applicationData['ypMenus'][$I['uid']]['imgwidth'] = $I['val']['output_w'];
            $GLOBALS['TSFE']->applicationData['ypMenus'][$I['uid']]['imgheight'] = $I['val']['output_h'];
            $GLOBALS['TSFE']->applicationData['ypMenus'][$I['uid']]['width'] = $this->sublevelWidth;
            $GLOBALS['TSFE']->applicationData['ypMenus'][$I['uid']]['height'] = $this->sublevelHeight;
            $GLOBALS['TSFE']->applicationData['ypMenus'][$I['uid']]['dir'] = 'down';
            $GLOBALS['TSFE']->applicationData['ypMenus'][$I['uid']]['top'] = $this->offsetY;
            $GLOBALS['TSFE']->applicationData['ypMenus'][$I['uid']]['left'] = $GLOBALS['TSFE']->applicationData['ypTemp']['x'] + $this->offsetX;         
            
               // build ypMenu JS
            $GLOBALS['TSFE']->applicationData['ypTemp']['js'] .= "
menu". $I['uid'] .".onactivate = new Function("document.images['" .$I['theName']. "'].src = " .$I['theName']. "_h.src");
menu". $I['uid'] .".ondeactivate = new Function("document.images['" .$I['theName']. "'].src = " .$I['theName']. "_n.src");

";
         } else { // no ypMenu needed
            $onmouseover = "over('" .$I['theName']. "');";
            $onmouseout = "out('" .$I['theName']. "'); ";
         }
            // move right
         $GLOBALS['TSFE']->applicationData['ypTemp']['x'] += $I['val']['output_w'];
         
         $I['parts']['ATag_begin'] = '<a href="' .$I['linkHREF']['HREF']. '" onfocus="' . $I['linkHREF']['onFocus']. '" onmouseover="'. $onmouseover .'" onmouseout="'. $onmouseout .'" id="act'. $I['uid'] .'">';
         $I['parts']['ATag_end'] = '</a>';
		 // Mod for XHTML strict
#		 $I['parts']['image'] = str_replace("name", "id", $I['parts']['image']);
#		 $I['parts']['image'] = str_replace("border="0"", "", $I['parts']['image']); 
      break;
      default: // every other level (TMENU)
         $title = $I['title'];
         
            // count lines if more than $this->breakpoint chars
         if(strlen($title) > $this->breakpoint) {
            $lines = $this->text_to_lines($I['title'], t3lib_div::freetypeDpiComp($this->fontSize), $this->fontFile, ($this->sublevelWidth - 2*$this->padding));
         } else {
            $lines = 1;
         }
            
            // if another submenu is present wrap link with JS actions an collect data
         if($this->isSubMenu($I['uid'])) {
            $href = $I['linkHREF']['HREF'];
            $onmouseover = "ypSlideOutMenu.showMenu('menu" .$I['uid']. "');";
            $onmouseout = "ypSlideOutMenu.hideMenu('menu" .$I['uid']. "');";
            $link = sprintf('<a href="%s" onmouseover="%s" onmouseout="%s" class="submenu">%s</a>',$href, $onmouseover, $onmouseout, $title);
            
            $GLOBALS['TSFE']->applicationData['ypMenus'][$I['uid']]['level'] = $level;
            $GLOBALS['TSFE']->applicationData['ypMenus'][$I['uid']]['uid'] = $I['uid'];
            $GLOBALS['TSFE']->applicationData['ypMenus'][$I['uid']]['width'] = $this->sublevelWidth;
            $GLOBALS['TSFE']->applicationData['ypMenus'][$I['uid']]['height'] = $this->sublevelHeight;
            $GLOBALS['TSFE']->applicationData['ypMenus'][$I['uid']]['dir'] = 'right';
            $GLOBALS['TSFE']->applicationData['ypMenus'][$I['uid']]['top'] = intval($GLOBALS['TSFE']->applicationData['ypMenus'][$I['pid']]['top']) + (($I['key']) * $this->sublevelHeight);
            $GLOBALS['TSFE']->applicationData['ypMenus'][$I['uid']]['left'] = intval($GLOBALS['TSFE']->applicationData['ypMenus'][$I['pid']]['left']) + intval($GLOBALS['TSFE']->applicationData['ypMenus'][$I['pid']]['width']);   
            $GLOBALS['TSFE']->applicationData['ypMenus'][$I['uid']]['parentId'] = $I['pid'];      

         } else { // nothing to be done here :)
            $link = $I['parts']['ATag_begin']. $title .$I['parts']['ATag_end'];
         }

            // move down
         if($I['key'] == 0) {
            $GLOBALS['TSFE']->applicationData['ypTemp'][$I['pid']]['y'] = intval($GLOBALS['TSFE']->applicationData['ypMenus'][$I['pid']]['top']);
         } else {
            $GLOBALS['TSFE']->applicationData['ypTemp'][$I['pid']]['y'] += $this->sublevelHeight + ($this->secPadding * ($lines-1)) + $clientAdjust;
         }

         
         $GLOBALS['TSFE']->applicationData['ypMenus'][$I['pid']]['items'][$I['uid']]['link'] = $link;
         $GLOBALS['TSFE']->applicationData['ypMenus'][$I['pid']]['items'][$I['uid']]['height'] = $this->sublevelHeight + ($this->secPadding * ($lines-1));
         $GLOBALS['TSFE']->applicationData['ypMenus'][$I['pid']]['items'][$I['uid']]['top'] = $GLOBALS['TSFE']->applicationData['ypTemp'][$I['pid']]['y'] - ($this->secPadding * ($lines-1));
         
         // save link in output array
      $I['parts']['ATag_begin'] = '
<a href="' .$I['linkHREF']['HREF']. '"
   onfocus="' . $I['linkHREF']['onFocus']. '"
   onMouseOver="ypSlideOutMenu.showMenu('menu'.$I['uid'].'');"
   onMouseOut="ypSlideOutMenu.hideMenu('menu'.$I['uid'].'');"
id="level1id'.$I['uid'].'">';
      //$GLOBALS['TSFE']->applicationData['ypMenu'][$level][$I['pid']]['parts']['items'][] = implode('', $I['parts']);
      $I['parts'] = array();
      break;
      }
   
      return $I;
   }

   /**
    * Builds all HTML/JS Code to initialize all ypMenu layers. Must be writen at the end of the document
    *
    * @return   string        html/js code
    */      
   function menuEnd() {
         // all relevant data stored in applicationData['ypMenus'];      
      if(is_array($GLOBALS["TSFE"]->applicationData['ypMenus'])) {
            // fix differnet browser bugs to get a transparency effect
         $clientinfo = t3lib_div::clientInfo();
         $pngimg = false;
         $pngbg = false;
         $filter = false;
         $appendix = '';
         $bg = false;
		 	// no longer necessarily, all browser get same code
            // ie >= 5.5 on win and mozilla can render transparency by css
          if(($clientinfo['SYSTEM'] == 'win' AND $clientinfo['BROWSER'] == 'msie' AND $clientinfo['VERSION'] >= 5.5) OR ($clientinfo['SYSTEM'] == 'win' AND $clientinfo['BROWSER'] == 'net')) {
#            $filter = true;
#            $style = 'style="-moz-opacity:.9; filter:alpha(opacity=90); background-color: #E1EDFD"';
            // Mr. IE on Mac needs a special treatment - a transparent png in a img tag in the background
         } elseif($clientinfo['SYSTEM'] == 'mac' AND ($clientinfo['BROWSER'] == 'msie')) {
#            $pngimg = true;
#            $style = 'style="background-color: transparent"';
            // Opera and Mozilla on Mac can handle transparent pngs
         } elseif(($clientinfo['SYSTEM'] == 'mac' AND $clientinfo['BROWSER'] == 'net') OR ($clientinfo['BROWSER'] == 'opera')){
#            $pngbg = true;
#            $style = 'style="background-image: url(''. $this->transBg .'');"';
            // no transparency for the rest - go get firefox!
         } else {
#            $bg = true;
#            $style = 'style="background-color: transparent"';
#            $appendix = 'b';
         }
            
            // loop through all collected data (buildIndex) and render js
         foreach($GLOBALS["TSFE"]->applicationData['ypMenus'] as $menu) {
            $uid = $menu['uid'];
            $level = $menu['level'];
            $dir = $menu['dir'];
            $parentId = ($menu['parentId']) ? '"menu'.$menu['parentId'].'"' : 'null';
            $x = $menu['left'];
            $y = ($menu['parentId']) ? $GLOBALS['TSFE']->applicationData['ypMenus'][$menu['parentId']]['items'][$uid]['top'] : $this->offsetY;
            $width = $menu['width'];

            $items = '';
            $wholeHeight = 0;
            if(is_array($menu['items'])) {
               $itemcount = count($menu['items']);
               foreach($menu['items'] as $item) {
			   	// modifited
#                 $items .= '<li>'. $item['link'] ."</li>
";
                 $items .= '<div class="mmlink">'. $item['link'] ."</div>
";
                  $wholeHeight = $wholeHeight + $item['height'];
               }
            }
			// no longer necessarily
#            if($clientinfo['SYSTEM'] == 'win' AND $clientinfo['BROWSER'] == 'msie' AND $clientinfo['VERSION'] < 5.5) {
#               $wholeHeight = $wholeHeight + 2 * $itemcount;
#            }

            $height = ($menu['height']) * count($menu['items']);
            $output[] = sprintf('<div id="menu%dContainer" class="mmContainer"><div id="menu%dContent" class="mmContent%s" %s>', $uid, $uid, $appendix, $style); // L%d / $level
			// ul to div!!!
#            $output[] = sprintf('<ul class="mmLevel%d">%s</ul>', $level, $items);
			$output[] = sprintf('<div class="mmLevel%d">%s</div>', $level, $items);
				// no longer necessarily
				// trick Mac IE to display our transparent PNG
#            if($pngimg) {
#               $output[] = '<img src="' . $this->transBg .'" width="'. $width .'" height="'. $wholeHeight .'" class="menuBackground">';
#            }
            
            $output[] = '</div></div>';
            
            $menus[] = sprintf('menu%d = new ypSlideOutMenu("menu%d", "%s", %d, %d, %d, %d, %s)', $uid, $uid, $dir, $x, $y, $width, $wholeHeight, $parentId);
         }
      }
   
     if(is_array($output) && is_array($menus)) {
         $output = implode("
", $output);
         $output .= "
<script type="text/javascript">
"
. implode("
", $menus) ."

ypSlideOutMenu.writeCSS();

". $GLOBALS['TSFE']->applicationData['ypTemp']['js'] ."
</script>
";
         return $output;
      }
    }
}
?>

CSS:

/*
 *CSS-Style to build slideoutmenu by Alex.Elsner <alexander.elsner@sci-worx.com>
 */

.mmContent DIV A {
	font-size: 9px; font-family: Verdana, Arial, Helvetica, Geneva, SunSans-Regular;
	font-weight: bold;
	line-height: 11px;
	padding: 5px;
	text-decoration: none;
	display: block;
	color: #011D65;
	background: #DEF2FE;
	margin: 0px 0px 0px 0px;
	border-bottom: solid 1px #011D65;
}

.mmContent DIV A:active {
	background: #DEF2FE;
	color: #011D65;
}

.mmContent DIV A:visited { 
	background: #DEF2FE;
	color: #011D65;
}

/* für IE >5 */
* html .mmContent DIV A {
	width: 177px;
	width: 177px; /* für IE 6 */
	-moz-opacity:.9; /* für IE 5.5+ */
	filter:alpha(opacity=90); /* für IE 5.5+ */
}

.mmContent DIV.mmlink A.submenu {
	background: #DEF2FE url(/fileadmin/template/images/menu_sub.gif) top left no-repeat;
	color: #011D65;
}

.mmContent DIV.mmlink A.submenu:hover {
	background: #ffffff url(/fileadmin/template/images/menu_sub.gif) bottom left no-repeat;
	color: #011D65;
}

.mmContent[id] DIV.mmlink A.submenu {
	background: url(/fileadmin/template/images/menu_sub.png) top left no-repeat;
	color: #011D65;
}

.mmContent[id] DIV.mmlink A.submenu:hover {
	background: url(/fileadmin/template/images/menu_sub.png) bottom left no-repeat;
	color: #011D65;
}

.mmContent DIV.mmlink A:hover {
	background: #ffffff;
	color: #011D65;
}

/* folgende anweisung wird nicht vom ie interpretiert */
.mmContent[id] DIV.mmlink A {
	background: url(/fileadmin/template/images/menu.png) top left no-repeat;
}

.mmContent[id] DIV.mmlink A:hover {
	background: url(/fileadmin/template/images/menu.png) bottom left no-repeat;
}

Bilder für das menu:
GIF für IE
http://www.sci-worx.com/fileadmin/template/images/menu_sub.gif

PNG für die anderen Browser:
http://www.sci-worx.com/fileadmin/template/images/menu_sub.png
&
http://www.sci-worx.com/fileadmin/template/images/menu.png

Java:
http://www.sci-worx.com/fileadmin/template/res/jslib.js
http://www.sci-worx.com/fileadmin/template/res/ypSlideOutMenus.js

Guss liberation

Spacecube ·

hi ihrs,

ist n toller thread hier. Leider tut bei mir was anderes nicht...

hab diesen Thread nun von anfang bis ende durchgelesen, das ypMenu.php durchforstet und ich krieg iimer folgende Fehlermeldung:

Parse error: parse error, unexpected T_STRING in /home/mxnet/public_html/test/fileadmin/scripts/ypMenu.php on line 380

Line 380 ist folgende:

            $GLOBALS['TSFE']->applicationData['ypTemp']['js'] .= "menu". $I['uid'] .".onactivate = new Function("document.images['" .$I['theName']. "'].src = " .$I['theName']. "_h.src"); menu". $I['uid'] .".ondeactivate = new Function("document.images['" .$I['theName']. "'].src = " .$I['theName']. "_n.src"); ";

irgendwie hab seh ich da den fehler nicht.
das ypMenu.php ist mit denen die hier gepostet wurden identisch...

kann mir da jemand weiterhelfen??

gruss
spacecube

lulatsch ·

Hi,

Spacecube schrieb

Parse error: parse error, unexpected T_STRING in /home/mxnet/public_html/test/fileadmin/scripts/ypMenu.php on line 380

Hatte das Problem beim Nachbau des Menüs auch. Im Übrigen nicht nur in dieser Zeile, sondern noch bei einigen weiteren, sind Hochkommas bzw. "Gänsefüßchen" nicht richtig escaped - oder im Forum nicht richtig dargestellt - oder neuere Php-Versionen sind nicht mehr so tolerant, aber das sind nur Vermutungen.

Hier mal die Änderungen zur Version von liberation, die bei mir nötig waren, damit kein Php-Fehler mehr kommt:

196,197c196,198
< menu". $I['uid'] .".onactivate = new Function("document.images['" .$I['theName']. "'].src = " .$I['theName']. "_h.src");
< menu". $I['uid'] .".ondeactivate = new Function("document.images['" .$I['theName']. "'].src = " .$I['theName']. "_n.src");
---
> menu". $I['uid'] .".onactivate = new Function(\"document.images['" .$I['theName']. "'].src = " .$I['theName']. "_h.src\");
> menu". $I['uid'] .".ondeactivate = new Function(\"document.images['" .$I['theName']. "'].src = " .$I['theName']. "_n.src\");
> 
258,259c259,260
<    onMouseOver="ypSlideOutMenu.showMenu('menu'.$I['uid'].'');"
<    onMouseOut="ypSlideOutMenu.hideMenu('menu'.$I['uid'].'');"
---
>    onMouseOver="ypSlideOutMenu.showMenu(\'menu'.$I['uid'].'\');"
>    onMouseOut="ypSlideOutMenu.hideMenu(\'menu'.$I['uid'].'\');"
320,322c321
< #                 $items .= '<li>'. $item['link'] ."</li>
< ";
<                  $items .= '<div class="mmlink">'. $item['link'] ."</div>
---
>                  $items .= "<li>". $item['link'] ."</li>
323a323,324
> #                 $items .= "<div class=\"mmlink\">". $item['link'] ."</div>
> #";
330a332
> 
344c346
<             $menus[] = sprintf('menu%d = new ypSlideOutMenu("menu%d", "%s", %d, %d, %d, %d, %s)', $uid, $uid, $dir, $x, $y, $width, $wholeHeight, $parentId);
---
>             $menus[] = sprintf('menu%d = new ypSlideOutMenu("menu%d", "%s", %d, %d, %d, %d, %s);', $uid, $uid, $dir, $x, $y, $width, $wholeHeight, $parentId);
352c354
< <script type="text/javascript">
---
> <script type=\"text/javascript\">

Bei Bedarf kann ich auch die komplette Datei nachliefern.
EDIT: auch meine diff-Zeilen wurden beim Speichern des Beitrags verändert - ab und zu stand mal
beim " zusätzlich ein & quot ; drin - vielleicht ähnliche Veränderungen beim Php-Code von liberation?

Nun noch was Anderes: leider sieht man sämtliche Menüeinträge über die ganze Seite verteilt, sobald js abgeschaltet wird - es gibt aber sicher Umgebungen, wo js standardmäßig aus ist.

Läßt sich das nicht irgendwie abfragen, so dass das Menü nur ausgegeben wird, wenn js am Client verfügbar ist?

Das Phänomen läßt sich bei abgeschaltetem js auch bei sci-works, audioarts und meade beobachten, allerdings kann man bei letzterem ohne js nichtmal mehr nach unten blättern, so dass man die Menüeinträge nur sieht, wenn man sehr weit herauszoomt (getestet
mit ff/opera).

lulatsch

svenni ·

Hallo!

Muss echt sagen ein super Thread hier...

Habe auch versucht das Menü nachzubasteln aber irgendwie hagelt es nur noch Fehlermeldungen und ich seh den Wald vor lauter Bäumen nicht mehr. #angry#

@Liberation:
Kannst Du evt. ein Archiv mit allen benötigten Dateien schnüren und es online stellen?

Eine kleines HTML-Template wäre auch nett.

Vielen Dank!

Gruss, Sven

Liberation ·

Hi,
habe eben noch mal den code von mir oben im Post gecheckt.

Irgendwie verschluckt das forum ab und an zeichen?? "\" z.B.

Ich werde die Dateien mal einzippen und dann online stellen.

Dringende schen am besten per icq.

Gruss

svenni ·
Liberation schrieb

Hi,
habe eben noch mal den code von mir oben im Post gecheckt.

Irgendwie verschluckt das forum ab und an zeichen?? "\" z.B.

Ich werde die Dateien mal einzippen und dann online stellen.

Dringende schen am besten per icq.

Gruss

Hi, erstmal danke für die schnelle Reaktion!

So dringend ist es nicht, ich kann warten bist Du dafür Zeit hast.

Vielleicht ist ja ein Tutorial hier auf der Website unter "FAQs & Tutorials" wert, da ja doch großes Interesse an dem Menü besteht.

Gruss, Sven

franka ·

Hallo clicks,

ich habe mir die Seite meade.de grade angesehen und bin begeistert.

clicks schrieb

Zur Händlersuche: Ja die Sache läuft über Längen- und Breitengrade. Eine entsprechende Extension werde ich bei Gelegenheit auch fertigstellen. Momentan ist die Ext noch zu "spezifisch". Falls es wichtig ist -> PN.

ich bin zur Zeit ebenfalls auf der Suche nach einer Möglichkeit nach einer PLZ Umkreissuche. Ich hab vom opengeodb-Projekt gehört, daß sowas ermöglichen soll, habe mich da aber noch nicht weiter einarbeiten können. Das ganze soll wohl auch noch nicht als T3-Extension anständig laufen. Deswegen möchte ich auf diesem Wege bei Dir nachfragen, ob Du Deine Extension für die PLZ-Suche inzwischen freigegeben hast oder ob das noch in Planung ist.

Viel Anklang würde die Freigabe der Extension bestimmt bringen.

viele Grüße aus Flensburg

Frank

BastianBalthasarBux ·

imo kann man mit dem neuen forum das code reinstellen längerer php dateien etc. total vergessen. ersten werden zeichen einfach verschluckt. und zweitens geht die richtige formatierung vollends verloren.

wer übrigens sehr gut auf seiner webseite codereinstellt, dh. funktionaler als ein screenshot vom visual studio oä.: jweiland.net
😃

und wieso ich eigentlich poste: hat jemand die ypmenu.php zum download oder so? am liebsten wäre mir die von sci-worx. da scheint der positioning bug beseitigt worden zu sein.

Delphi ·

Hallo,

danke für die zip-Datei. Ich verfolge dieses Thema schon lange, habe es aber noch nicht richtig umsetzen können.
Was ich jetzt noch suche ist ein einfaches HTML-Template, wo die WRAPS positioniert sind (Ich weiss, viel lesen und ausprobieren, aber mir fehlt im Moment die Zeit).
Danke für eure Hilfe.

woida ·

Ich hab das PHP-Skript mal ergänzt, so daß es auch vertikal funktioniert. Bei interesse kann ichs ja mal posten.

KaeptnOvi ·

Hallo zusammen

Erst mal, klasse Arbeit, das Menu sieht echt genial aus. Ich hab's soweit auch hingekriegt, bin jetzt noch am suchen wie man das Ding auch unter Opera zum laufen kriegt. So wie's aussieht, liegt das Problem in diesem Abschnitt

<script type="text/javascript">
	/*<![CDATA[*/
<!--
if (version == "n3") {
img11_7c2c_0_n=new Image(); img11_7c2c_0_n.src = "typo3temp/m_6b20ada56b.png"; 
img11_7c2c_0_h=new Image(); img11_7c2c_0_h.src = "typo3temp/m_6de9977470.png"; 
img2_7c2c_1_n=new Image(); img2_7c2c_1_n.src = "typo3temp/m_74afefd045.png"; 
img2_7c2c_1_h=new Image(); img2_7c2c_1_h.src = "typo3temp/m_e076d622aa.png"; 
img7_7c2c_2_n=new Image(); img7_7c2c_2_n.src = "typo3temp/m_da29a64fb9.png"; 
img7_7c2c_2_h=new Image(); img7_7c2c_2_h.src = "typo3temp/m_9817ec0f3e.png"; 
img10_7c2c_3_n=new Image(); img10_7c2c_3_n.src = "typo3temp/m_f62c5ae4e5.png"; 
img10_7c2c_3_h=new Image(); img10_7c2c_3_h.src = "typo3temp/m_fb30ff5f3f.png"; 
img15_7c2c_4_n=new Image(); img15_7c2c_4_n.src = "typo3temp/m_ad1c752468.png"; 
img15_7c2c_4_h=new Image(); img15_7c2c_4_h.src = "typo3temp/m_bda0da2ec6.png";
}
// -->
	/*]]>*/
</script>

namentlich am if-statement (wenn ich manuell das if-statement lösche, funktionniert es auch unter opera). Irgendwie bin ich allerdings zu blöd um herauszufinden, wo dieser Teil generiert wird. Hat da jemand einen Ahnung?