Skip to main content

Das Superfish-Menü ist eines der beliebtesten JQuery basierten Menü-Skripte. Mit diesem kleinen Frotnend Render Add-On lässt es sich einfach in Phpwcms verwenden.

Superfish

Superfish unterstützt die beliebtesten und meistgewünschten Menü-Funktionen wie fade-in, Schlag-Schatten etc. und ist vor allem auch Touch-Geräte geeignet. In den meisten Projekten geifen wir daher auf dieses Menü-Skript zurück.

Vorbereitung für die Verwendung in Phpwcms

Um das Superfish-Menü in Phpwcms zu integrieren muss die unten angefügte PHP-Datei heruntergeladen und in den Ordner „template/inc_script/frontend_render“ verschoben werden.

Zuätzlich muss die neueste Version von Superfish von der Hersteller-Seite bezogen werden. Das Skript ist kostenlos. Die Skripte müssen in folgende Verzeichnisse eingeordnet werden.

  • template/inc_css/superfish/superfish.css
  • inc_js/superfish/superfish.js

Optional sollten noch folgende Skripte hinzugefügt werden. Die Dateien finden sich ebenfalls auf der Herstellerseite

  • template/inc_js/superfish/hoverIntent.js
    (sorgt dafür, dass das Menü nicht sofort wieder einklappt, wenn man mal kurz mit der Maus nicht drüber hovert)
  • inc_js/superfish/supersubs.js
    (erzeugt automatiche Anpassung der Feldbreite anhand der Textlänge)

Um das menü im Template einzurichten muss einfach folgende Replacement-Tag gesetzt werden [anfürendes Leerzeichen bitte entfernen]:
{ SUPERFISH:ID,DEPTH} 

  • ID ist hierbei das Startlevel
  • DEPTH ist die gewünschte Menü-Tiefe. Dieser Wert kann wegelassen werden, er wird dann automatisch auf 100 gesetzt.

Der Code


// **** // 19.9.2010 SUPERFISH MENU (horizontal drop-down) // phalancs // // http://forum.phpwcms.org/viewtopic.php?f=8&t=20620 // https://www.enym.com // // TAG: {SUPERFISH:ID,Level depth} // // Location: Put it into the file e.g.: // /template/inc_script/frontend_render/superfish.php // Switch in conf.inc.php: $phpwcms['allow_ext_render'] = 1; // **
 // —————————————————————-
 // obligate check for phpwcms constants
 if (!defined(‚PHPWCMS_ROOT‘)) {
 die(„You Cannot Access This Script Directly, Have a Nice Day.“);
 }
 // —————————————————————-
 if( ! ( strpos($content[„all“],’SUPERFISH‘)==false ) ) {
 initJSLib();
 $GLOBALS[‚block‘][‚css‘][’superfish.css‘] = ’superfish/superfish.css‘;
 $block[‚custom_htmlhead‘][‚hoverIntent.js‘] = ‚‚; $block[‚custom_htmlhead‘][’superfish.js‘] = ‚‚;
 $block[‚custom_htmlhead‘][’supersubs.js‘] = ‚‚; $GLOBALS[‚block‘][‚custom_htmlhead‘][’superfish_init‘] = ‚‚;
 //—————
 $content[„all“] = str_replace(‚{SUPERFISH}‘,'{SUPERFISH:0,100}‘,$content[„all“]);
 $content[„all“] = preg_replace(‚/{SUPERFISH:(.?)}/i‘,'{SUPERFISH:$1,100}‘, $content[„all“]); $content[„all“] = preg_replace(‚/{SUPERFISH:(.?),(.*?)}/e‘,’buildNavi_horiz1(„$1″,“0″,“$2“-1);‘, $content[„all“]);
 }
 function buildNavi_horiz1($start=0, $counter=0, $depth=0) {
 $t = array();
 $struct = getStructureChildData($start); // Catch structure
 if($counter == 0) {
 $last = count($struct) – 1;
 } else {
 $last = 0;
 }
 $x = 0;
 //======================================================
 //start loop
 foreach($struct as $value) {
 if( isset($GLOBALS[‚LEVEL_KEY‘][ $value[‚acat_id‘] ]) ) {
 $p1 = ‚ current‘;
 } else {
 $s = “; // Reset $struct
 $p1 = “;
 }
 // Only if there is a sub level
 if($GLOBALS[‚content‘][‚cat_id‘] == $value[‚acat_id‘]) {
 $a1 = ‚current‘; // If first level is active
 $a3 = “;
 } else { // If first level isn´t active
 $a1 = $p1;
 $a3 = “;
 }
 // ==========================
 // level depth added
 if (($counter) < $depth) { $s = buildNavi_horiz1($value[‚acat_id‘], $counter+1, $depth); } else { $s = “; } if($s) { $g = “; $g .= $s; $g .= LF . str_repeat(‚ ‚, $counter); //$class = $counter ? (‚ class=“fly_ul ‚.$a1.'“‚) : (‚ class=“drop_ul ‚.$a1.'“‚); // Second level with active category $class = $counter ? (‚ class=“fly_ul“‚) : (‚ class=“drop_ul ‚.$a1.'“‚); $close_li = str_repeat(‚ ‚, $counter+1); } else { $g = “; $class = ‚ class=“sub_no“‚; // If you don´t use the sub_no please change to: $class = “; // Only the first level if there is no sub level // Ausschlieszlich das erste Level wenn kein Sublevel vorhanden ist if ($counter == 0) { //ENYM TEST //$class = ‚ class=“sub_no‘.$a1.'“‚; // Set it, it is active or not $class = ‚ class=“‚.$a1.'“‚; // Set it, it is active or not } $close_li = “; } // first li in last block if( $last && $last == $x ) { $enclose = ‚ class=“horiz_enclose“‚; } else if( $x || ($counter == 0 && $x == 0) ) { $enclose = “; } else { $enclose = ‚ class=“horiz_enclose“‚; } // IDs for every li, If you need the ID class, please uncomment/comment //$l = str_repeat(‚ ‚, $counter+1) . ‚‘;
 $l = str_repeat(‚ ‚, $counter+1) . ‚‘;
 $l .= get_level_ahref($value[‚acat_id‘], $enclose) . html_specialchars($value[‚acat_name‘]);
 $l .= $g;
 $l .= $close_li . ‚
 ‚;
 $t[] = $l;
 $x++;
 }
 //end loop
 //======================================================
 if($counter) {
 $A = LF . str_repeat(‚ ‚, $counter) . “;
 $B = LF . str_repeat(‚ ‚, $counter) . “;
 } else {
 $A = “;
 $B = “;
 }
 $t = implode(LF, $t);
 if($t) {
 $t = $A . LF . str_repeat(‚ ‚, $counter) . ‚‘ . LF . $t . LF . str_repeat(‚ ‚, $counter) . ‚
 ‚. $B ;
 }
 return $t;
 }
 ?>

Diesen Beitrag kommentieren