From 71c5be17ea16a1f3b54ccbd13be76b3bcef2d3e0 Mon Sep 17 00:00:00 2001 From: Cameron Date: Sun, 27 Dec 2020 12:46:37 -0800 Subject: [PATCH] Support for class attribute. {NAVIGATION: class=xxxx} Class value in navigation template: {NAV_CLASS} Navigation shortcodes now in their own file. --- .../batch/navigation_shortcodes.php | 336 ++++++++++++++++++ e107_core/shortcodes/single/navigation.php | 18 +- e107_handlers/sitelinks_class.php | 319 +---------------- 3 files changed, 353 insertions(+), 320 deletions(-) create mode 100644 e107_core/shortcodes/batch/navigation_shortcodes.php diff --git a/e107_core/shortcodes/batch/navigation_shortcodes.php b/e107_core/shortcodes/batch/navigation_shortcodes.php new file mode 100644 index 000000000..a9128a69a --- /dev/null +++ b/e107_core/shortcodes/batch/navigation_shortcodes.php @@ -0,0 +1,336 @@ +navClass; + } + + + /** + * + * @return string 'active' on the active link. + * @example {LINK_ACTIVE} + */ + function sc_link_active($parm = '') + { + + if($this->active == true) + { + return 'active'; + } + + // check if it's the first link.. (eg. anchor mode) and nothing activated. + return ($this->counter == 1) ? 'active' : ''; + + } + + /** + * Return the primary_id number for the current link + * + * @return integer + */ + function sc_link_id($parm = null) + { + + return (int) $this->var['link_id']; + } + + function sc_link_depth($parm = null) + { + + unset($parm); + + return isset($this->var['link_depth']) ? (int) $this->var['link_depth'] : $this->depth; + } + + + function setDepth($val) + { + + $this->depth = (int) $val; + } + + + /** + * Return the name of the current link + * + * @return string + * @example {LINK_NAME} + */ + function sc_link_name($parm = null) + { + + if(empty($this->var['link_name'])) + { + return null; + } + + if(strpos($this->var['link_name'], 'submenu.') === 0) // BC Fix. + { + list($tmp, $tmp2, $link) = explode('.', $this->var['link_name'], 3); + unset($tmp, $tmp2); + } + else + { + $link = $this->var['link_name']; + } + + return e107::getParser()->toHTML($link, false, 'defs'); + } + + + /** + * Return the parent of the current link + * + * @return integer + */ + function sc_link_parent($parm = null) + { + + return (int) $this->var['link_parent']; + } + + + function sc_link_identifier($parm = null) + { + + return isset($this->var['link_identifier']) ? $this->var['link_identifier'] : ''; + } + + /** + * Return the URL of the current link + * + * @return string + */ + function sc_link_url($parm = null) + { + + $tp = e107::getParser(); + + if(!empty($this->var['link_owner']) && !empty($this->var['link_sefurl'])) + { + return e107::url($this->var['link_owner'], $this->var['link_sefurl']); + } + + if(strpos($this->var['link_url'], e_HTTP) === 0) + { + $url = "{e_BASE}" . substr($this->var['link_url'], strlen(e_HTTP)); + } + elseif($this->var['link_url'][0] !== "{" && strpos($this->var['link_url'], "://") === false) + { + $url = "{e_BASE}" . $this->var['link_url']; // Add e_BASE to links like: 'news.php' or 'contact.php' + } + else + { + $url = $this->var['link_url']; + } + + $url = $tp->replaceConstants($url, 'full', true); + + if(strpos($url, "{") !== false) + { + $url = $tp->parseTemplate($url, true); // BC Fix shortcode in URL support - dynamic urls for multilanguage. + } + + return $url; + } + + /* + function sc_link_sub_oversized($parm='') + { + $count = count($this->var['link_sub']); + + if(!empty($parm) && $count > $parm) + { + return 'oversized'; + } + + return $count; + + } + */ + + /** + * Returns only the anchor target in the URL if one is found. + * + * @param array $parm + * @return null|string + */ + function sc_link_target($parm = null) + { + + if(strpos($this->var['link_url'], '#') !== false) + { + list($tmp, $segment) = explode('#', $this->var['link_url'], 2); + + return '#' . $segment; + + } + + return '#'; + } + + + function sc_link_open($parm = '') + { + + $type = $this->var['link_open'] ? (int) $this->var['link_open'] : 0; + + ### 0 - same window, 1 - target blank, 4 - 600x400 popup, 5 - 800x600 popup + ### TODO - JS popups (i.e. bootstrap) + switch($type) + { + case 1: + return ' target="_blank"'; + break; + + case 4: + return " onclick=\"open_window('" . $this->var['link_url'] . "',600,400); return false;\""; + break; + + case 5: + return " onclick=\"open_window('" . $this->var['link_url'] . "',800,600); return false;\""; + break; + } + + return ''; + } + + /** + * @deprecated - Use {LINK_ICON} instead. + */ + function sc_link_image($parm = '') + { + + trigger_error('{LINK_IMAGE} is deprecated. Use {LINK_ICON} instead', E_USER_DEPRECATED); // NO LAN + + return $this->sc_link_icon($parm); + } + + + /** + * Return the link icon of the current link + * + * @return string + */ + function sc_link_icon($parm = '') + { + + $tp = e107::getParser(); + + if(empty($this->var['link_button'])) + { + return ''; + } + + // if($icon = $tp->toGlyph($this->var['link_button'])) + // { + // return $icon; + // } + // else + { + //$path = e107::getParser()->replaceConstants($this->var['link_button'], 'full', TRUE); + return $tp->toIcon($this->var['link_button'], array('fw' => true, 'space' => ' ', 'legacy' => "{e_IMAGE}icons/")); + // return ""; + } + + } + + + /** + * Return the link description of the current link + * + * @return string + */ + function sc_link_description($parm = '') + { + + $toolTipEnabled = e107::pref('core', 'linkpage_screentip', false); + + if($toolTipEnabled == false || empty($this->var['link_description'])) + { + return null; + } + + + return e107::getParser()->toAttribute($this->var['link_description']); + } + + + /** + * Return the parsed sublinks of the current link + * + * @return string + */ + function sc_link_sub($parm = '') + { + + if(empty($this->var['link_sub'])) + { + return false; + } + + if(is_string($this->var['link_sub'])) // html override option. + { + + // e107::getDebug()->log($this->var); + + return $this->var['link_sub']; + } + + $this->depth++; + // Assume it's an array. + + $startTemplate = !empty($this->var['link_sub'][0]['link_sub']) && isset($this->template['submenu_lowerstart']) ? $this->template['submenu_lowerstart'] : $this->template['submenu_start']; + $endTemplate = !empty($this->var['link_sub'][0]['link_sub']) && isset($this->template['submenu_lowerstart']) ? $this->template['submenu_lowerend'] : $this->template['submenu_end']; + + $text = e107::getParser()->parseTemplate(str_replace('{LINK_SUB}', '', $startTemplate), true, $this); + + foreach($this->var['link_sub'] as $val) + { + $active = (e107::getNav()->isActive($val, $this->activeSubFound, true)) ? "_active" : ""; + + $this->setVars($val); // isActive is allowed to alter data + $tmpl = !empty($val['link_sub']) ? varset($this->template['submenu_loweritem' . $active]) : varset($this->template['submenu_item' . $active]); + $text .= e107::getParser()->parseTemplate($tmpl, true, $this); + if($active) + { + $this->activeSubFound = true; + } + } + + $text .= e107::getParser()->parseTemplate(str_replace('{LINK_SUB}', '', $endTemplate), true, $this); + + return $text; + } + + /** + * Return a generated anchor for the current link. + * + * @param unused + * @return string - a generated anchor for the current link. + * @example {LINK_ANCHOR} + */ + function sc_link_anchor($parm = '') + { + + return $this->var['link_name'] ? '#' . e107::getForm()->name2id($this->var['link_name']) : ''; + } + } \ No newline at end of file diff --git a/e107_core/shortcodes/single/navigation.php b/e107_core/shortcodes/single/navigation.php index 75ba55210..8d525e80e 100644 --- a/e107_core/shortcodes/single/navigation.php +++ b/e107_core/shortcodes/single/navigation.php @@ -1,13 +1,13 @@ 1, @@ -45,9 +45,9 @@ $nav = e107::getNav(); $template = e107::getCoreTemplate('navigation', $tmpl); - $data = $nav->initData($category,$parm); + $data = $nav->initData($category, $parm); - return $nav->render($data, $template); + return $nav->render($data, $template, $parm); } \ No newline at end of file diff --git a/e107_handlers/sitelinks_class.php b/e107_handlers/sitelinks_class.php index 4d61d3c33..84339a389 100644 --- a/e107_handlers/sitelinks_class.php +++ b/e107_handlers/sitelinks_class.php @@ -1632,7 +1632,7 @@ i.e-cat_users-32{ background-position: -555px 0; width: 32px; height: 32px; } /** * TODO Cache */ - public function render($data, $template, $useCache = true) + public function render($data, $template, $opts = array()) { if(empty($data) || empty($template) || !is_array($template)) { @@ -1641,7 +1641,13 @@ i.e-cat_users-32{ background-position: -555px 0; width: 32px; height: 32px; } /** @var navigation_shortcodes $sc */ $sc = e107::getScBatch('navigation'); - $sc->template = $template; + $sc->template = $template; + + if(!empty($opts['class'])) + { + $sc->navClass = $opts['class']; + } + $head = e107::getParser()->parseTemplate($template['start'],true); $foot = e107::getParser()->parseTemplate($template['end'],true); $ret = ""; @@ -1923,312 +1929,3 @@ i.e-cat_users-32{ background-position: -555px 0; width: 32px; height: 32px; } return false; } } - - - - - - - - - - - -/** - * Navigation Shortcodes - * @todo SEF - */ -class navigation_shortcodes extends e_shortcode -{ - - public $template; - public $counter; - public $active; - public $depth = 0; - - - /** - * - * @return string 'active' on the active link. - * @example {LINK_ACTIVE} - */ - function sc_link_active($parm='') - { - if($this->active == true) - { - return 'active'; - } - - // check if it's the first link.. (eg. anchor mode) and nothing activated. - return ($this->counter ==1) ? 'active' : ''; - - } - - /** - * Return the primary_id number for the current link - * @return integer - */ - function sc_link_id($parm=null) - { - return (int) $this->var['link_id']; - } - - function sc_link_depth($parm=null) - { - unset($parm); - return isset($this->var['link_depth']) ? (int) $this->var['link_depth'] : $this->depth; - } - - - function setDepth($val) - { - $this->depth = (int) $val; - } - - - /** - * Return the name of the current link - * @return string - * @example {LINK_NAME} - */ - function sc_link_name($parm=null) - { - if(empty($this->var['link_name'])) - { - return null; - } - - if(strpos($this->var['link_name'], 'submenu.') === 0) // BC Fix. - { - list($tmp,$tmp2,$link) = explode('.',$this->var['link_name'],3); - unset($tmp,$tmp2); - } - else - { - $link = $this->var['link_name']; - } - - return e107::getParser()->toHTML($link, false,'defs'); - } - - - /** - * Return the parent of the current link - * @return integer - */ - function sc_link_parent($parm=null) - { - return (int) $this->var['link_parent']; - } - - - function sc_link_identifier($parm=null) - { - return isset($this->var['link_identifier']) ? $this->var['link_identifier'] : ''; - } - - /** - * Return the URL of the current link - * @return string - */ - function sc_link_url($parm=null) - { - $tp = e107::getParser(); - - if(!empty($this->var['link_owner']) && !empty($this->var['link_sefurl'])) - { - return e107::url($this->var['link_owner'],$this->var['link_sefurl']); - } - - if(strpos($this->var['link_url'], e_HTTP) === 0) - { - $url = "{e_BASE}".substr($this->var['link_url'], strlen(e_HTTP)); - } - elseif($this->var['link_url'][0] !== "{" && strpos($this->var['link_url'],"://")===false) - { - $url = "{e_BASE}".$this->var['link_url']; // Add e_BASE to links like: 'news.php' or 'contact.php' - } - else - { - $url = $this->var['link_url']; - } - - $url = $tp->replaceConstants($url, 'full', TRUE); - - if(strpos($url,"{") !== false) - { - $url = $tp->parseTemplate($url, TRUE); // BC Fix shortcode in URL support - dynamic urls for multilanguage. - } - - return $url; - } - -/* - function sc_link_sub_oversized($parm='') - { - $count = count($this->var['link_sub']); - - if(!empty($parm) && $count > $parm) - { - return 'oversized'; - } - - return $count; - - } -*/ - - /** - * Returns only the anchor target in the URL if one is found. - * @param array $parm - * @return null|string - */ - function sc_link_target($parm=null) - { - if(strpos($this->var['link_url'],'#')!==false) - { - list($tmp,$segment) = explode('#',$this->var['link_url'],2); - return '#'.$segment; - - } - - return '#'; - } - - - - function sc_link_open($parm = '') - { - $type = $this->var['link_open'] ? (int) $this->var['link_open'] : 0; - - ### 0 - same window, 1 - target blank, 4 - 600x400 popup, 5 - 800x600 popup - ### TODO - JS popups (i.e. bootstrap) - switch($type) - { - case 1: - return ' target="_blank"'; - break; - - case 4: - return " onclick=\"open_window('".$this->var['link_url']."',600,400); return false;\""; - break; - - case 5: - return " onclick=\"open_window('".$this->var['link_url']."',800,600); return false;\""; - break; - } - return ''; - } - - /** - * @deprecated - Use {LINK_ICON} instead. - */ - function sc_link_image($parm='') - { - trigger_error('{LINK_IMAGE} is deprecated. Use {LINK_ICON} instead', E_USER_DEPRECATED); // NO LAN - - return $this->sc_link_icon($parm); - } - - - /** - * Return the link icon of the current link - * @return string - */ - function sc_link_icon($parm='') - { - $tp = e107::getParser(); - - if (empty($this->var['link_button'])) - { - return ''; - } - - // if($icon = $tp->toGlyph($this->var['link_button'])) - // { - // return $icon; - // } - // else - { - //$path = e107::getParser()->replaceConstants($this->var['link_button'], 'full', TRUE); - return $tp->toIcon($this->var['link_button'],array('fw'=>true, 'space'=>' ', 'legacy'=>"{e_IMAGE}icons/")); - // return ""; - } - - } - - - /** - * Return the link description of the current link - * @return string - */ - function sc_link_description($parm='') - { - $toolTipEnabled = e107::pref('core', 'linkpage_screentip', false); - - if($toolTipEnabled == false || empty($this->var['link_description'])) - { - return null; - } - - - return e107::getParser()->toAttribute($this->var['link_description']); - } - - - /** - * Return the parsed sublinks of the current link - * @return string - */ - function sc_link_sub($parm='') - { - if(empty($this->var['link_sub'])) - { - return false; - } - - if(is_string($this->var['link_sub'])) // html override option. - { - - // e107::getDebug()->log($this->var); - - return $this->var['link_sub']; - } - - $this->depth++; - // Assume it's an array. - - $startTemplate = !empty($this->var['link_sub'][0]['link_sub']) && isset($this->template['submenu_lowerstart']) ? $this->template['submenu_lowerstart'] : $this->template['submenu_start']; - $endTemplate = !empty($this->var['link_sub'][0]['link_sub']) && isset($this->template['submenu_lowerstart']) ? $this->template['submenu_lowerend'] : $this->template['submenu_end']; - - $text = e107::getParser()->parseTemplate(str_replace('{LINK_SUB}', '', $startTemplate), true, $this); - - foreach($this->var['link_sub'] as $val) - { - $active = (e107::getNav()->isActive($val, $this->activeSubFound, true)) ? "_active" : ""; - - $this->setVars($val); // isActive is allowed to alter data - $tmpl = !empty($val['link_sub']) ? varset($this->template['submenu_loweritem'.$active]) : varset($this->template['submenu_item'.$active]); - $text .= e107::getParser()->parseTemplate($tmpl, TRUE, $this); - if($active) - { - $this->activeSubFound = true; - } - } - - $text .= e107::getParser()->parseTemplate(str_replace('{LINK_SUB}', '', $endTemplate), true, $this); - - return $text; - } - - /** - * Return a generated anchor for the current link. - * @param unused - * @return string - a generated anchor for the current link. - * @example {LINK_ANCHOR} - */ - function sc_link_anchor($parm='') - { - return $this->var['link_name'] ? '#'.e107::getForm()->name2id($this->var['link_name']) : ''; - } -}