123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942 |
- <?php
- // PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
- /**
- * This file contains the code of the LayersMenu class.
- * @package PHPLayersMenu
- */
- /**
- * This is the LayersMenu class of the PHP Layers Menu library.
- *
- * This class depends on the LayersMenuCommon class and on the PEAR conforming version of the PHPLib Template class, i.e. on HTML_Template_PHPLIB
- *
- * @version 3.2.0-rc
- * @package PHPLayersMenu
- */
- class LayersMenu extends LayersMenuCommon
- {
- /**
- * The template to be used for the first level menu of a horizontal menu.
- *
- * The value of this variable is significant only when preparing
- * a horizontal menu.
- *
- * @access private
- * @var string
- */
- var $horizontalMenuTpl;
- /**
- * The template to be used for the first level menu of a vertical menu.
- *
- * The value of this variable is significant only when preparing
- * a vertical menu.
- *
- * @access private
- * @var string
- */
- var $verticalMenuTpl;
- /**
- * The template to be used for submenu layers
- * @access private
- * @var string
- */
- var $subMenuTpl;
- /**
- * A string containing the header needed to use the menu(s) in the page
- * @access private
- * @var string
- */
- var $header;
- /**
- * This var tells if the header has been made or not
- * @access private
- * @var boolean
- */
- var $_headerHasBeenMade = false;
- /**
- * The JS vector to list layers
- * @access private
- * @var string
- */
- var $listl;
- /**
- * The JS vector of keys to know the father of each layer
- * @access private
- * @var string
- */
- var $father_keys;
- /**
- * The JS vector of vals to know the father of each layer
- * @access private
- * @var string
- */
- var $father_vals;
- /**
- * The JS function to set initial positions of all layers
- * @access private
- * @var string
- */
- var $moveLayers;
- /**
- * An array containing the code related to the first level menu of each menu
- * @access private
- * @var array
- */
- var $_firstLevelMenu;
- /**
- * A string containing the footer needed to use the menu(s) in the page
- * @access private
- * @var string
- */
- var $footer;
- /**
- * This var tells if the footer has been made or not
- * @access private
- * @var boolean
- */
- var $_footerHasBeenMade = false;
- /**
- * The image used for forward arrows.
- * @access private
- * @var string
- */
- var $forwardArrowImg;
- /**
- * The image used for down arrows.
- * @access private
- * @var string
- */
- var $downArrowImg;
- /**
- * A 1x1 transparent icon.
- * @access private
- * @var string
- */
- var $transparentIcon;
- /**
- * An array to keep trace of layers containing / not containing icons
- * @access private
- * @var array
- */
- var $_hasIcons;
- /**
- * Top offset for positioning of sub menu layers
- * @access private
- * @var integer
- */
- var $menuTopShift;
- /**
- * Right offset for positioning of sub menu layers
- * @access private
- * @var integer
- */
- var $menuRightShift;
- /**
- * Left offset for positioning of sub menu layers
- * @access private
- * @var integer
- */
- var $menuLeftShift;
- /**
- * Threshold for vertical repositioning of a layer
- * @access private
- * @var integer
- */
- var $thresholdY;
- /**
- * Step for the left boundaries of layers
- * @access private
- * @var integer
- */
- var $abscissaStep;
- /**
- * The constructor method; it initializates the menu system
- * @return void
- */
- function LayersMenu(
- $menuTopShift = 6, // Gtk2-like
- $menuRightShift = 7, // Gtk2-like
- $menuLeftShift = 2, // Gtk2-like
- $thresholdY = 5,
- $abscissaStep = 140
- )
- {
- $this->LayersMenuCommon();
- $this->horizontalMenuTpl = $this->tpldir . 'layersmenu-horizontal_menu.ihtml';
- $this->verticalMenuTpl = $this->tpldir . 'layersmenu-vertical_menu.ihtml';
- $this->subMenuTpl = $this->tpldir . 'layersmenu-sub_menu.ihtml';
- $this->header = '';
- $this->listl = '';
- $this->father_keys = '';
- $this->father_vals = '';
- $this->moveLayers = '';
- $this->_firstLevelMenu = array();
- $this->footer = '';
- $this->transparentIcon = 'transparent.png';
- $this->_hasIcons = array();
- $this->forwardArrowImg['src'] = 'forward-arrow.png';
- $this->forwardArrowImg['width'] = 4;
- $this->forwardArrowImg['height'] = 7;
- $this->downArrowImg['src'] = 'down-arrow.png';
- $this->downArrowImg['width'] = 9;
- $this->downArrowImg['height'] = 5;
- $this->menuTopShift = $menuTopShift;
- $this->menuRightShift = $menuRightShift;
- $this->menuLeftShift = $menuLeftShift;
- $this->thresholdY = $thresholdY;
- $this->abscissaStep = $abscissaStep;
- }
- /**
- * The method to set the value of menuTopShift
- * @access public
- * @return void
- */
- function setMenuTopShift($menuTopShift)
- {
- $this->menuTopShift = $menuTopShift;
- }
- /**
- * The method to set the value of menuRightShift
- * @access public
- * @return void
- */
- function setMenuRightShift($menuRightShift)
- {
- $this->menuRightShift = $menuRightShift;
- }
- /**
- * The method to set the value of menuLeftShift
- * @access public
- * @return void
- */
- function setMenuLeftShift($menuLeftShift)
- {
- $this->menuLeftShift = $menuLeftShift;
- }
- /**
- * The method to set the value of thresholdY
- * @access public
- * @return void
- */
- function setThresholdY($thresholdY)
- {
- $this->thresholdY = $thresholdY;
- }
- /**
- * The method to set the value of abscissaStep
- * @access public
- * @return void
- */
- function setAbscissaStep($abscissaStep)
- {
- $this->abscissaStep = $abscissaStep;
- }
- /**
- * The method to set the dirroot directory
- * @access public
- * @return boolean
- */
- function setDirroot($dirroot)
- {
- $oldtpldir = $this->tpldir;
- if ($foobar = $this->setDirrootCommon($dirroot)) {
- $this->updateTpldir($oldtpldir);
- }
- return $foobar;
- }
- /**
- * The method to set the tpldir directory
- * @access public
- * @return boolean
- */
- function setTpldir($tpldir)
- {
- $oldtpldir = $this->tpldir;
- if ($foobar = $this->setTpldirCommon($tpldir)) {
- $this->updateTpldir($oldtpldir);
- }
- return $foobar;
- }
- /**
- * The method to update the templates directory path to the new tpldir
- * @access private
- * @return void
- */
- function updateTpldir($oldtpldir)
- {
- $oldlength = strlen($oldtpldir);
- $foobar = strpos($this->horizontalMenuTpl, $oldtpldir);
- if (!($foobar === false || $foobar != 0)) {
- $this->horizontalMenuTpl = $this->tpldir . substr($this->horizontalMenuTpl, $oldlength);
- }
- $foobar = strpos($this->verticalMenuTpl, $oldtpldir);
- if (!($foobar === false || $foobar != 0)) {
- $this->verticalMenuTpl = $this->tpldir . substr($this->verticalMenuTpl, $oldlength);
- }
- $foobar = strpos($this->subMenuTpl, $oldtpldir);
- if (!($foobar === false || $foobar != 0)) {
- $this->subMenuTpl = $this->tpldir . substr($this->subMenuTpl, $oldlength);
- }
- }
- /**
- * The method to set horizontalMenuTpl
- * @access public
- * @return boolean
- */
- function setHorizontalMenuTpl($horizontalMenuTpl)
- {
- if (str_replace('/', '', $horizontalMenuTpl) == $horizontalMenuTpl) {
- $horizontalMenuTpl = $this->tpldir . $horizontalMenuTpl;
- }
- if (!file_exists($horizontalMenuTpl)) {
- $this->error("setHorizontalMenuTpl: file $horizontalMenuTpl does not exist.");
- return false;
- }
- $this->horizontalMenuTpl = $horizontalMenuTpl;
- return true;
- }
- /**
- * The method to set verticalMenuTpl
- * @access public
- * @return boolean
- */
- function setVerticalMenuTpl($verticalMenuTpl)
- {
- if (str_replace('/', '', $verticalMenuTpl) == $verticalMenuTpl) {
- $verticalMenuTpl = $this->tpldir . $verticalMenuTpl;
- }
- if (!file_exists($verticalMenuTpl)) {
- $this->error("setVerticalMenuTpl: file $verticalMenuTpl does not exist.");
- return false;
- }
- $this->verticalMenuTpl = $verticalMenuTpl;
- return true;
- }
- /**
- * The method to set subMenuTpl
- * @access public
- * @return boolean
- */
- function setSubMenuTpl($subMenuTpl)
- {
- if (str_replace('/', '', $subMenuTpl) == $subMenuTpl) {
- $subMenuTpl = $this->tpldir . $subMenuTpl;
- }
- if (!file_exists($subMenuTpl)) {
- $this->error("setSubMenuTpl: file $subMenuTpl does not exist.");
- return false;
- }
- $this->subMenuTpl = $subMenuTpl;
- return true;
- }
- /**
- * A method to set transparentIcon
- * @access public
- * @param string $transparentIcon a transparentIcon filename (without the path)
- * @return void
- */
- function setTransparentIcon($transparentIcon)
- {
- $this->transparentIcon = $transparentIcon;
- }
- /**
- * The method to set an image to be used for the forward arrow
- * @access public
- * @param string $forwardArrowImg the forward arrow image filename
- * @return boolean
- */
- function setForwardArrowImg($forwardArrowImg)
- {
- if (!file_exists($this->imgdir . $forwardArrowImg)) {
- $this->error('setForwardArrowImg: file ' . $this->imgdir . $forwardArrowImg . ' does not exist.');
- return false;
- }
- $foobar = getimagesize($this->imgdir . $forwardArrowImg);
- $this->forwardArrowImg['src'] = $forwardArrowImg;
- $this->forwardArrowImg['width'] = $foobar[0];
- $this->forwardArrowImg['height'] = $foobar[1];
- return true;
- }
- /**
- * The method to set an image to be used for the down arrow
- * @access public
- * @param string $downArrowImg the down arrow image filename
- * @return boolean
- */
- function setDownArrowImg($downArrowImg)
- {
- if (!file_exists($this->imgdir . $downArrowImg)) {
- $this->error('setDownArrowImg: file ' . $this->imgdir . $downArrowImg . ' does not exist.');
- return false;
- }
- $foobar = getimagesize($this->imgdir . $downArrowImg);
- $this->downArrowImg['src'] = $downArrowImg;
- $this->downArrowImg['width'] = $foobar[0];
- $this->downArrowImg['height'] = $foobar[1];
- return true;
- }
- /**
- * A method providing parsing needed both for horizontal and vertical menus; it can be useful also with the ProcessLayersMenu extended class
- * @access public
- * @param string $menu_name the name of the menu for which the parsing
- * has to be performed
- * @return void
- */
- function parseCommon(
- $menu_name = '' // non consistent default...
- )
- {
- $this->_hasIcons[$menu_name] = false;
- for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) { // this counter scans all nodes of the new menu
- $this->_hasIcons[$cnt] = false;
- $this->tree[$cnt]['layer_label'] = "L$cnt";
- $current_node[$this->tree[$cnt]['level']] = $cnt;
- if (!$this->tree[$cnt]['child_of_root_node']) {
- $this->tree[$cnt]['father_node'] = $current_node[$this->tree[$cnt]['level']-1];
- $this->father_keys .= ",'L$cnt'";
- $this->father_vals .= ",'" . $this->tree[$this->tree[$cnt]['father_node']]['layer_label'] . "'";
- }
- $this->tree[$cnt]['not_a_leaf'] = ($this->tree[$cnt+1]['level']>$this->tree[$cnt]['level'] && $cnt<$this->_lastItem[$menu_name]);
- // if the above condition is true, the node is not a leaf,
- // hence it has at least a child; if it is false, the node is a leaf
- if ($this->tree[$cnt]['not_a_leaf']) {
- // initialize the corresponding layer content trought a void string
- $this->tree[$cnt]['layer_content'] = '';
- // the new layer is accounted for in the layers list
- $this->listl .= ",'" . $this->tree[$cnt]['layer_label'] . "'";
- }
- /*
- if ($this->tree[$cnt]['not_a_leaf']) {
- $this->tree[$cnt]['parsed_href'] = '#';
- }
- */
- if ($this->tree[$cnt]['parsed_icon'] == '') {
- $this->tree[$cnt]['iconsrc'] = $this->imgwww . $this->transparentIcon;
- $this->tree[$cnt]['iconwidth'] = 16;
- $this->tree[$cnt]['iconheight'] = 16;
- $this->tree[$cnt]['iconalt'] = ' ';
- } else {
- if ($this->tree[$cnt]['level'] > 1) {
- $this->_hasIcons[$this->tree[$cnt]['father_node']] = true;
- } else {
- $this->_hasIcons[$menu_name] = true;
- }
- $this->tree[$cnt]['iconsrc'] = $this->tree[$cnt]['parsed_icon'];
- $this->tree[$cnt]['iconalt'] = 'O';
- }
- }
- }
- /**
- * A method needed to update the footer both for horizontal and vertical menus
- * @access private
- * @param string $menu_name the name of the menu for which the updating
- * has to be performed
- * @return void
- */
- function _updateFooter(
- $menu_name = '' // non consistent default...
- )
- {
- $t = new Template_PHPLIB();
- $t->setFile('tplfile', $this->subMenuTpl);
- $t->setBlock('tplfile', 'template', 'template_blck');
- $t->setBlock('template', 'sub_menu_cell', 'sub_menu_cell_blck');
- $t->setVar('sub_menu_cell_blck', '');
- $t->setBlock('template', 'separator', 'separator_blck');
- $t->setVar('separator_blck', '');
- $t->setVar('abscissaStep', $this->abscissaStep);
- for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {
- if ($this->tree[$cnt]['not_a_leaf']) {
- $t->setVar(array(
- 'layer_label' => $this->tree[$cnt]['layer_label'],
- 'layer_title' => $this->tree[$cnt]['text'],
- 'sub_menu_cell_blck' => $this->tree[$cnt]['layer_content']
- ));
- $this->footer .= $t->parse('template_blck', 'template');
- }
- }
- }
- /**
- * Method to preparare a horizontal menu.
- *
- * This method processes items of a menu to prepare the corresponding
- * horizontal menu code updating many variables; it returns the code
- * of the corresponding _firstLevelMenu
- *
- * @access public
- * @param string $menu_name the name of the menu whose items have to be processed
- * @return string
- */
- function newHorizontalMenu(
- $menu_name = '' // non consistent default...
- )
- {
- if (!isset($this->_firstItem[$menu_name]) || !isset($this->_lastItem[$menu_name])) {
- $this->error("newHorizontalMenu: the first/last item of the menu '$menu_name' is not defined; please check if you have parsed its menu data.");
- return 0;
- }
- $this->parseCommon($menu_name);
- $t = new Template_PHPLIB();
- $t->setFile('tplfile', $this->horizontalMenuTpl);
- $t->setBlock('tplfile', 'template', 'template_blck');
- $t->setBlock('template', 'horizontal_menu_cell', 'horizontal_menu_cell_blck');
- $t->setVar('horizontal_menu_cell_blck', '');
- $t->setBlock('horizontal_menu_cell', 'cell_link', 'cell_link_blck');
- $t->setVar('cell_link_blck', '');
- $t->setBlock('cell_link', 'cell_icon', 'cell_icon_blck');
- $t->setVar('cell_icon_blck', '');
- $t->setBlock('cell_link', 'cell_arrow', 'cell_arrow_blck');
- $t->setVar('cell_arrow_blck', '');
- $t_sub = new Template_PHPLIB();
- $t_sub->setFile('tplfile', $this->subMenuTpl);
- $t_sub->setBlock('tplfile', 'sub_menu_cell', 'sub_menu_cell_blck');
- $t_sub->setVar('sub_menu_cell_blck', '');
- $t_sub->setBlock('sub_menu_cell', 'cell_icon', 'cell_icon_blck');
- $t_sub->setVar('cell_icon_blck', '');
- $t_sub->setBlock('sub_menu_cell', 'cell_arrow', 'cell_arrow_blck');
- $t_sub->setVar('cell_arrow_blck', '');
- $t_sub->setBlock('tplfile', 'separator', 'separator_blck');
- $t_sub->setVar('separator_blck', '');
- $this->_firstLevelMenu[$menu_name] = '';
- $foobar = $this->_firstItem[$menu_name];
- $this->moveLayers .= "\tvar " . $menu_name . "TOP = getOffsetTop('" . $menu_name . "L" . $foobar . "');\n";
- $this->moveLayers .= "\tvar " . $menu_name . "HEIGHT = getOffsetHeight('" . $menu_name . "L" . $foobar . "');\n";
- for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) { // this counter scans all nodes of the new menu
- if ($this->tree[$cnt]['not_a_leaf']) {
- // geometrical parameters are assigned to the new layer, related to the above mentioned children
- if ($this->tree[$cnt]['child_of_root_node']) {
- $this->moveLayers .= "\tsetTop('" . $this->tree[$cnt]['layer_label'] . "', " . $menu_name . "TOP + " . $menu_name . "HEIGHT);\n";
- $this->moveLayers .= "\tmoveLayerX1('" . $this->tree[$cnt]['layer_label'] . "', '" . $menu_name . "');\n";
- }
- }
- if ($this->tree[$cnt]['child_of_root_node']) {
- if ($this->tree[$cnt]['text'] == '---') {
- continue;
- }
- if ($this->tree[$cnt]['not_a_leaf']) {
- $this->tree[$cnt]['onmouseover'] = ' onmouseover="moveLayerX1(' . "'" . $this->tree[$cnt]['layer_label'] . "', '" . $menu_name . "') ; LMPopUp('" . $this->tree[$cnt]['layer_label'] . "'" . ', false);"';
- } else {
- $this->tree[$cnt]['onmouseover'] = ' onmouseover="shutdown();"';
- }
- $t->setVar(array(
- 'menu_layer_label' => $menu_name . $this->tree[$cnt]['layer_label'],
- 'imgwww' => $this->imgwww,
- 'transparent' => $this->transparentIcon,
- 'href' => $this->tree[$cnt]['parsed_href'],
- 'onmouseover' => $this->tree[$cnt]['onmouseover'],
- 'title' => $this->tree[$cnt]['parsed_title'],
- 'target' => $this->tree[$cnt]['parsed_target'],
- 'text' => $this->tree[$cnt]['text'],
- 'downsrc' => $this->downArrowImg['src'],
- 'downwidth' => $this->downArrowImg['width'],
- 'downheight' => $this->downArrowImg['height']
- ));
- if ($this->tree[$cnt]['parsed_icon'] != '') {
- $t->setVar(array(
- 'iconsrc' => $this->tree[$cnt]['iconsrc'],
- 'iconwidth' => $this->tree[$cnt]['iconwidth'],
- 'iconheight' => $this->tree[$cnt]['iconheight'],
- 'iconalt' => $this->tree[$cnt]['iconalt'],
- ));
- $t->parse('cell_icon_blck', 'cell_icon');
- } else {
- $t->setVar('cell_icon_blck', '');
- }
- if ($this->tree[$cnt]['not_a_leaf']) {
- $t->parse('cell_arrow_blck', 'cell_arrow');
- } else {
- $t->setVar('cell_arrow_blck', '');
- }
- $foobar = $t->parse('cell_link_blck', 'cell_link');
- $t->setVar(array(
- 'cellwidth' => $this->abscissaStep,
- 'cell_link_blck' => $foobar
- ));
- $t->parse('horizontal_menu_cell_blck', 'horizontal_menu_cell', true);
- } else {
- if ($this->tree[$cnt]['text'] == '---') {
- $this->tree[$this->tree[$cnt]['father_node']]['layer_content'] .= $t_sub->parse('separator_blck', 'separator');
- continue;
- }
- if ($this->tree[$cnt]['not_a_leaf']) {
- $this->tree[$cnt]['onmouseover'] = ' onmouseover="moveLayerX(' . "'" . $this->tree[$cnt]['layer_label'] . "') ; moveLayerY('" . $this->tree[$cnt]['layer_label'] . "') ; LMPopUp('" . $this->tree[$cnt]['layer_label'] . "'". ', false);"';
- } else {
- $this->tree[$cnt]['onmouseover'] = ' onmouseover="LMPopUp(' . "'" . $this->tree[$this->tree[$cnt]['father_node']]['layer_label'] . "'" . ', true);"';
- }
- $t_sub->setVar(array(
- 'imgwww' => $this->imgwww,
- 'transparent' => $this->transparentIcon,
- 'href' => $this->tree[$cnt]['parsed_href'],
- 'refid' => 'ref' . $this->tree[$cnt]['layer_label'],
- 'onmouseover' => $this->tree[$cnt]['onmouseover'],
- 'title' => $this->tree[$cnt]['parsed_title'],
- 'target' => $this->tree[$cnt]['parsed_target'],
- 'text' => $this->tree[$cnt]['text'],
- 'arrowsrc' => $this->forwardArrowImg['src'],
- 'arrowwidth' => $this->forwardArrowImg['width'],
- 'arrowheight' => $this->forwardArrowImg['height']
- ));
- if ($this->_hasIcons[$this->tree[$cnt]['father_node']]) {
- $t_sub->setVar(array(
- 'iconsrc' => $this->tree[$cnt]['iconsrc'],
- 'iconwidth' => $this->tree[$cnt]['iconwidth'],
- 'iconheight' => $this->tree[$cnt]['iconheight'],
- 'iconalt' => $this->tree[$cnt]['iconalt']
- ));
- $t_sub->parse('cell_icon_blck', 'cell_icon');
- } else {
- $t_sub->setVar('cell_icon_blck', '');
- }
- if ($this->tree[$cnt]['not_a_leaf']) {
- $t_sub->parse('cell_arrow_blck', 'cell_arrow');
- } else {
- $t_sub->setVar('cell_arrow_blck', '');
- }
- $this->tree[$this->tree[$cnt]['father_node']]['layer_content'] .= $t_sub->parse('sub_menu_cell_blck', 'sub_menu_cell');
- }
- } // end of the "for" cycle scanning all nodes
- $foobar = $this->_firstLevelCnt[$menu_name] * $this->abscissaStep;
- $t->setVar('menuwidth', $foobar);
- $t->setVar(array(
- 'layer_label' => $menu_name,
- 'menubody' => $this->_firstLevelMenu[$menu_name]
- ));
- $this->_firstLevelMenu[$menu_name] = $t->parse('template_blck', 'template');
- $this->_updateFooter($menu_name);
- return $this->_firstLevelMenu[$menu_name];
- }
- /**
- * Method to preparare a vertical menu.
- *
- * This method processes items of a menu to prepare the corresponding
- * vertical menu code updating many variables; it returns the code
- * of the corresponding _firstLevelMenu
- *
- * @access public
- * @param string $menu_name the name of the menu whose items have to be processed
- * @return string
- */
- function newVerticalMenu(
- $menu_name = '' // non consistent default...
- )
- {
- if (!isset($this->_firstItem[$menu_name]) || !isset($this->_lastItem[$menu_name])) {
- $this->error("newVerticalMenu: the first/last item of the menu '$menu_name' is not defined; please check if you have parsed its menu data.");
- return 0;
- }
- $this->parseCommon($menu_name);
- $t = new Template_PHPLIB();
- $t->setFile('tplfile', $this->verticalMenuTpl);
- $t->setBlock('tplfile', 'template', 'template_blck');
- $t->setBlock('template', 'vertical_menu_box', 'vertical_menu_box_blck');
- $t->setVar('vertical_menu_box_blck', '');
- $t->setBlock('vertical_menu_box', 'vertical_menu_cell', 'vertical_menu_cell_blck');
- $t->setVar('vertical_menu_cell_blck', '');
- $t->setBlock('vertical_menu_cell', 'cell_icon', 'cell_icon_blck');
- $t->setVar('cell_icon_blck', '');
- $t->setBlock('vertical_menu_cell', 'cell_arrow', 'cell_arrow_blck');
- $t->setVar('cell_arrow_blck', '');
- $t->setBlock('vertical_menu_box', 'separator', 'separator_blck');
- $t->setVar('separator_blck', '');
- $t_sub = new Template_PHPLIB();
- $t_sub->setFile('tplfile', $this->subMenuTpl);
- $t_sub->setBlock('tplfile', 'sub_menu_cell', 'sub_menu_cell_blck');
- $t_sub->setVar('sub_menu_cell_blck', '');
- $t_sub->setBlock('sub_menu_cell', 'cell_icon', 'cell_icon_blck');
- $t_sub->setVar('cell_icon_blck', '');
- $t_sub->setBlock('sub_menu_cell', 'cell_arrow', 'cell_arrow_blck');
- $t_sub->setVar('cell_arrow_blck', '');
- $t_sub->setBlock('tplfile', 'separator', 'separator_blck');
- $t_sub->setVar('separator_blck', '');
- $this->_firstLevelMenu[$menu_name] = '';
- $this->moveLayers .= "\tvar " . $menu_name . "TOP = getOffsetTop('" . $menu_name . "');\n";
- $this->moveLayers .= "\tvar " . $menu_name . "LEFT = getOffsetLeft('" . $menu_name . "');\n";
- $this->moveLayers .= "\tvar " . $menu_name . "WIDTH = getOffsetWidth('" . $menu_name . "');\n";
- for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) { // this counter scans all nodes of the new menu
- if ($this->tree[$cnt]['not_a_leaf']) {
- // geometrical parameters are assigned to the new layer, related to the above mentioned children
- if ($this->tree[$cnt]['child_of_root_node']) {
- $this->moveLayers .= "\tsetLeft('" . $this->tree[$cnt]['layer_label'] . "', " . $menu_name . "LEFT + " . $menu_name . "WIDTH - menuRightShift);\n";
- }
- }
- if ($this->tree[$cnt]['child_of_root_node']) {
- if ($this->tree[$cnt]['text'] == '---') {
- $this->_firstLevelMenu[$menu_name] .= $t->parse('separator_blck', 'separator');
- continue;
- }
- if ($this->tree[$cnt]['not_a_leaf']) {
- $this->tree[$cnt]['onmouseover'] = ' onmouseover="moveLayerX(' . "'" . $this->tree[$cnt]['layer_label'] . "') ; moveLayerY('" . $this->tree[$cnt]['layer_label'] . "') ; LMPopUp('" . $this->tree[$cnt]['layer_label'] . "'" . ', false);"';
- } else {
- $this->tree[$cnt]['onmouseover'] = ' onmouseover="shutdown();"';
- }
- $t->setVar(array(
- 'imgwww' => $this->imgwww,
- 'transparent' => $this->transparentIcon,
- 'href' => $this->tree[$cnt]['parsed_href'],
- 'refid' => 'ref' . $this->tree[$cnt]['layer_label'],
- 'onmouseover' => $this->tree[$cnt]['onmouseover'],
- 'title' => $this->tree[$cnt]['parsed_title'],
- 'target' => $this->tree[$cnt]['parsed_target'],
- 'text' => $this->tree[$cnt]['text'],
- 'arrowsrc' => $this->forwardArrowImg['src'],
- 'arrowwidth' => $this->forwardArrowImg['width'],
- 'arrowheight' => $this->forwardArrowImg['height']
- ));
- if ($this->_hasIcons[$menu_name]) {
- $t->setVar(array(
- 'iconsrc' => $this->tree[$cnt]['iconsrc'],
- 'iconwidth' => $this->tree[$cnt]['iconwidth'],
- 'iconheight' => $this->tree[$cnt]['iconheight'],
- 'iconalt' => $this->tree[$cnt]['iconalt']
- ));
- $t->parse('cell_icon_blck', 'cell_icon');
- } else {
- $t->setVar('cell_icon_blck', '');
- }
- if ($this->tree[$cnt]['not_a_leaf']) {
- $t->parse('cell_arrow_blck', 'cell_arrow');
- } else {
- $t->setVar('cell_arrow_blck', '');
- }
- $this->_firstLevelMenu[$menu_name] .= $t->parse('vertical_menu_cell_blck', 'vertical_menu_cell');
- } else {
- if ($this->tree[$cnt]['text'] == '---') {
- $this->tree[$this->tree[$cnt]['father_node']]['layer_content'] .= $t_sub->parse('separator_blck', 'separator');
- continue;
- }
- if ($this->tree[$cnt]['not_a_leaf']) {
- $this->tree[$cnt]['onmouseover'] = ' onmouseover="moveLayerX(' . "'" . $this->tree[$cnt]['layer_label'] . "') ; moveLayerY('" . $this->tree[$cnt]['layer_label'] . "') ; LMPopUp('" . $this->tree[$cnt]['layer_label'] . "'" . ', false);"';
- } else {
- $this->tree[$cnt]['onmouseover'] = ' onmouseover="LMPopUp(' . "'" . $this->tree[$this->tree[$cnt]['father_node']]['layer_label'] . "'" . ', true);"';
- }
- $t_sub->setVar(array(
- 'imgwww' => $this->imgwww,
- 'transparent' => $this->transparentIcon,
- 'href' => $this->tree[$cnt]['parsed_href'],
- 'refid' => 'ref' . $this->tree[$cnt]['layer_label'],
- 'onmouseover' => $this->tree[$cnt]['onmouseover'],
- 'title' => $this->tree[$cnt]['parsed_title'],
- 'target' => $this->tree[$cnt]['parsed_target'],
- 'text' => $this->tree[$cnt]['text'],
- 'arrowsrc' => $this->forwardArrowImg['src'],
- 'arrowwidth' => $this->forwardArrowImg['width'],
- 'arrowheight' => $this->forwardArrowImg['height']
- ));
- if ($this->_hasIcons[$this->tree[$cnt]['father_node']]) {
- $t_sub->setVar(array(
- 'iconsrc' => $this->tree[$cnt]['iconsrc'],
- 'iconwidth' => $this->tree[$cnt]['iconwidth'],
- 'iconheight' => $this->tree[$cnt]['iconheight'],
- 'iconalt' => $this->tree[$cnt]['iconalt']
- ));
- $t_sub->parse('cell_icon_blck', 'cell_icon');
- } else {
- $t_sub->setVar('cell_icon_blck', '');
- }
- if ($this->tree[$cnt]['not_a_leaf']) {
- $t_sub->parse('cell_arrow_blck', 'cell_arrow');
- } else {
- $t_sub->setVar('cell_arrow_blck', '');
- }
- $this->tree[$this->tree[$cnt]['father_node']]['layer_content'] .= $t_sub->parse('sub_menu_cell_blck', 'sub_menu_cell');
- }
- } // end of the "for" cycle scanning all nodes
- $t->setVar(array(
- 'menu_name' => $menu_name,
- 'vertical_menu_cell_blck' => $this->_firstLevelMenu[$menu_name],
- 'separator_blck' => ''
- ));
- $this->_firstLevelMenu[$menu_name] = $t->parse('vertical_menu_box_blck', 'vertical_menu_box');
- $t->setVar('abscissaStep', $this->abscissaStep);
- $t->setVar(array(
- 'layer_label' => $menu_name,
- 'vertical_menu_box_blck' => $this->_firstLevelMenu[$menu_name]
- ));
- $this->_firstLevelMenu[$menu_name] = $t->parse('template_blck', 'template');
- $this->_updateFooter($menu_name);
- return $this->_firstLevelMenu[$menu_name];
- }
- /**
- * Method to prepare the header.
- *
- * This method obtains the header using collected informations
- * and the suited JavaScript template; it returns the code of the header
- *
- * @access public
- * @return string
- */
- function makeHeader()
- {
- $t = new Template_PHPLIB();
- $this->listl = 'listl = [' . substr($this->listl, 1) . '];';
- $this->father_keys = 'father_keys = [' . substr($this->father_keys, 1) . '];';
- $this->father_vals = 'father_vals = [' . substr($this->father_vals, 1) . '];';
- $t->setFile('tplfile', $this->libjsdir . 'layersmenu-header.ijs');
- $t->setVar(array(
- 'packageName' => $this->_packageName,
- 'version' => $this->version,
- 'copyright' => $this->copyright,
- 'author' => $this->author,
- 'menuTopShift' => $this->menuTopShift,
- 'menuRightShift'=> $this->menuRightShift,
- 'menuLeftShift' => $this->menuLeftShift,
- 'thresholdY' => $this->thresholdY,
- 'abscissaStep' => $this->abscissaStep,
- 'listl' => $this->listl,
- 'nodesCount' => $this->_nodesCount,
- 'father_keys' => $this->father_keys,
- 'father_vals' => $this->father_vals,
- 'moveLayers' => $this->moveLayers
- ));
- $this->header = $t->parse('out', 'tplfile');
- $this->_headerHasBeenMade = true;
- return $this->header;
- }
- /**
- * Method that returns the code of the header
- * @access public
- * @return string
- */
- function getHeader()
- {
- if (!$this->_headerHasBeenMade) {
- $this->makeHeader();
- }
- return $this->header;
- }
- /**
- * Method that prints the code of the header
- * @access public
- * @return void
- */
- function printHeader()
- {
- print $this->getHeader();
- }
- /**
- * Method that returns the code of the requested _firstLevelMenu
- * @access public
- * @param string $menu_name the name of the menu whose _firstLevelMenu
- * has to be returned
- * @return string
- */
- function getMenu($menu_name)
- {
- return $this->_firstLevelMenu[$menu_name];
- }
- /**
- * Method that prints the code of the requested _firstLevelMenu
- * @access public
- * @param string $menu_name the name of the menu whose _firstLevelMenu
- * has to be printed
- * @return void
- */
- function printMenu($menu_name)
- {
- print $this->_firstLevelMenu[$menu_name];
- }
- /**
- * Method to prepare the footer.
- *
- * This method obtains the footer using collected informations
- * and the suited JavaScript template; it returns the code of the footer
- *
- * @access public
- * @return string
- */
- function makeFooter()
- {
- $t = new Template_PHPLIB();
- $t->setFile('tplfile', $this->libjsdir . 'layersmenu-footer.ijs');
- $t->setVar(array(
- 'packageName' => $this->_packageName,
- 'version' => $this->version,
- 'copyright' => $this->copyright,
- 'author' => $this->author,
- 'footer' => $this->footer
-
- ));
- $this->footer = $t->parse('out', 'tplfile');
- $this->_footerHasBeenMade = true;
- return $this->footer;
- }
- /**
- * Method that returns the code of the footer
- * @access public
- * @return string
- */
- function getFooter()
- {
- if (!$this->_footerHasBeenMade) {
- $this->makeFooter();
- }
- return $this->footer;
- }
- /**
- * Method that prints the code of the footer
- * @access public
- * @return void
- */
- function printFooter()
- {
- print $this->getFooter();
- }
- } /* END OF CLASS */
- ?>
|