📄 cmstemplatenavigation.java
字号:
}
if (url.startsWith("/")) {
// internal link
url = link(url);
}
homeLabel = homeLabel.toUpperCase();
result.append("<a class=\"");
result.append(styleLink);
result.append("\" href=\"");
result.append(url);
result.append("\" title=\"");
result.append(homeLabel);
result.append("\" target=\"");
result.append(target);
result.append("\">");
result.append(homeLabel);
result.append("</a>\n");
firstItem = false;
} else if (showHeadNavImages()) {
// create a table to allow vertical alignment of images
result.append("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr>");
}
int count = -1;
String showItemProperty;
// check if head navigation has to be created manually from config file
boolean manualHeadConfig = isHeadNavManual();
List navElements = new ArrayList();
if (manualHeadConfig) {
// manual configuration, get List of nav items from config file
navElements = getHeadNavItemsFromConfig(0, "0");
} else {
// automatic, get folder navigation
navElements = getNavigation().getNavigationForFolder(getHeadNavFolder());
}
for (int i = 0; i < navElements.size(); i++) {
CmsJspNavElement nav = (CmsJspNavElement)navElements.get(i);
String link = nav.getResourceName();
if (link.startsWith("/")) {
link = link(link);
}
showItemProperty = getHeadNavItemDefaultStringValue();
if (getCmsObject().existsResource(nav.getResourceName())) {
showItemProperty = property(
PROPERTY_HEADNAV_USE,
nav.getResourceName(),
getHeadNavItemDefaultStringValue());
} else if (LOG.isWarnEnabled()) {
LOG.warn(Messages.get().getBundle().key(
Messages.LOG_NAVIGATION_CONFIG_ERR_2,
nav.getResourceName(),
getRequestContext().getUri()));
}
boolean showItem = Boolean.valueOf(showItemProperty).booleanValue();
if (manualHeadConfig || (nav.isFolderLink() && showItem)) {
// create an entry for every folder
count++;
String navText = CmsEncoder.escapeXml(nav.getNavText().toUpperCase());
String target = nav.getInfo();
if (CmsStringUtil.isEmpty(target)) {
target = "_self";
}
if (showHeadNavImages()) {
// build row with images
result.append("<td style= \"vertical-align: middle\">");
result.append("<a");
if (showMenus()) {
result.append(" onmouseover=\"buttonMouseover(event, 'menu");
result.append(count);
result.append("');\"");
if (getHeadNavMenuClick()) {
// only show menus on mouse click
result.append(" onclick=\"return buttonClick(event, 'menu");
result.append(count);
result.append("');\"");
}
}
result.append(" title=\"");
result.append(navText);
result.append("\" href=\"");
result.append(link);
result.append("\" target=\"");
result.append(target);
result.append("\">");
result.append("<img src=\"");
result.append(link(nav.getNavImage()));
result.append("\" border=\"0\" alt=\"");
result.append(navText);
result.append("\">");
result.append("</a></td>\n");
} else {
// build row with text links
if (!firstItem) {
result.append("<span class=\"");
result.append(styleSeparator);
result.append("\">|</span>\n");
}
result.append("<a");
if (showMenus()) {
result.append(" onmouseover=\"buttonMouseover(event, 'menu");
result.append(count);
result.append("');\"");
if (getHeadNavMenuClick()) {
// only show menus on mouse click
result.append(" onclick=\"return buttonClick(event, 'menu");
result.append(count);
result.append("');\"");
}
}
if (getHeadNavMarkCurrent() && getRequestContext().getUri().startsWith(nav.getResourceName())) {
// mark currently active top folder with bold font
result.append(" style=\"font-weight: bold;\"");
}
result.append(" class=\"");
result.append(styleLink);
result.append("\" title=\"");
result.append(navText);
result.append("\" href=\"");
result.append(link);
result.append("\" target=\"");
result.append(target);
result.append("\">");
result.append(navText);
result.append("</a>\n");
}
firstItem = false;
}
}
if (showHeadNavImages()) {
// close table
result.append("</tr></table>");
}
result.append("\t<!-- End Topnavigation -->\n");
result.append("</div>\n");
return result.toString();
}
/**
* Returns the html for the head navigation menus.<p>
*
* This method only creates the menu entries, be sure to
* build the head row calling the menus, too.<p>
*
* @param styleClass the CSS class name of the <div> nodes
* @return the html for the head navigation menus
*/
public String buildNavigationHeadMenus(String styleClass) {
boolean cacheNavEnabled = !getRequestContext().currentProject().isOnlineProject();
String cacheKey = null;
if (cacheNavEnabled) {
// create unique cache key with: site, head nav folder, area folder, menu depth, show submenus flag
StringBuffer key = new StringBuffer(8);
key.append(getRequestContext().getSiteRoot());
key.append("_");
key.append(getHeadNavFolder().hashCode());
key.append("_");
key.append(getStartFolder().hashCode());
key.append("_");
key.append(getMenuDepth());
key.append("_");
key.append(showMenus());
key.append("_");
key.append(showAccessibleVersion());
key.append("_");
key.append(getLocale());
if (isHeadNavManual()) {
// for manual head nav configuration, append config path to cache key
key.append("_");
key.append(getConfigPath().hashCode());
}
cacheKey = key.toString();
String cachedNav = CmsTemplateParts.getInstance().getPart(cacheKey);
if (CmsStringUtil.isNotEmpty(cachedNav)) {
// found previously cached navigation menu structure, return it
return cachedNav;
}
}
StringBuffer result = new StringBuffer(4096);
if (showMenus()) {
// only create navigation if the template is configured to show it
// check if head navigation has to be created manually from config file
boolean manualHeadConfig = isHeadNavManual();
List navElements = new ArrayList();
if (manualHeadConfig) {
// manual configuration, get List of nav items from config file
navElements = getHeadNavItemsFromConfig(0, "0");
} else {
// automatic, get folder navigation
navElements = getNavigation().getNavigationForFolder(getHeadNavFolder());
}
int count = -1;
String showItemProperty;
for (int i = 0; i < navElements.size(); i++) {
CmsJspNavElement foldernav = (CmsJspNavElement)navElements.get(i);
showItemProperty = getHeadNavItemDefaultStringValue();
if (getCmsObject().existsResource(foldernav.getResourceName())) {
showItemProperty = property(
PROPERTY_HEADNAV_USE,
foldernav.getResourceName(),
getHeadNavItemDefaultStringValue());
} else if (LOG.isWarnEnabled()) {
LOG.warn(Messages.get().getBundle().key(
Messages.LOG_NAVIGATION_CONFIG_ERR_2,
foldernav.getResourceName(),
getRequestContext().getUri()));
}
boolean showItem = Boolean.valueOf(showItemProperty).booleanValue();
if (manualHeadConfig || (foldernav.isFolderLink() && showItem)) {
// create a menu entry for every found folder
count++;
String subfolder = foldernav.getResourceName();
List subNav = new ArrayList();
String menuIndexes = null;
if (manualHeadConfig) {
menuIndexes = String.valueOf(i);
subNav = getHeadNavItemsFromConfig(1, menuIndexes);
} else {
// get all navigation elements of the sub folder
subNav = getNavigation().getNavigationForFolder(subfolder);
}
result.append(getMenuNavigation(subNav, styleClass, "menu" + count, 1, menuIndexes));
}
}
if (cacheNavEnabled) {
// cache the generated navigation submenu output
CmsTemplateParts.getInstance().addPart(cacheKey, result.toString());
}
}
return result.toString();
}
/**
* Returns the html for the left navigation tree.<p>
*
* @return the html for the left navigation tree
*/
public String buildNavigationLeft() {
StringBuffer result = new StringBuffer(2048);
if (showNavLeftTree()) {
// create navigation tree
result.append("<!-- Start navigation left -->\n");
if (!showAccessibleVersion()) {
result.append("\t<div style=\"line-height: 1px; font-size: 1px; display: block; height: 4px;\"> </div>\n");
}
// get start and end level of the displayed tree
int startLevel = 1;
if (showNavLeftSelected()) {
// follow selection in head navigation
startLevel = CmsResource.getPathLevel(getHeadNavFolder());
} else {
// create default navigation
startLevel = CmsResource.getPathLevel(getStartFolder());
}
int endLevel = startLevel + 2;
// get requested uri
String uri = getRequestContext().getUri();
// get the navigation tree list
List navElements = getNavigation().getNavigationTreeForFolder(
getRequestContext().getUri(),
startLevel,
endLevel);
int oldLevel = -1;
for (int i = 0; i < navElements.size(); i++) {
CmsJspNavElement nav = (CmsJspNavElement)navElements.get(i);
// flag to determine if nav element is shown
boolean showElement = true;
// get resource name of navelement
String resName = nav.getResourceName();
// compute current level from 1 to 3
int level = nav.getNavTreeLevel() - (startLevel - 1);
// check if current navelement is active
String styleClass = "navleft";
if (uri.equals(resName) || (nav.isFolderLink() && isDefaultFile(resName, uri))) {
styleClass += "active";
}
// check if current element is shown when left navigation follows head menu
if (showNavLeftSelected()) {
if (level <= 1 && !uri.startsWith(resName)) {
// do not show element, does not belong to selected area
showElement = false;
}
}
if (showElement) {
// element is shown
if (oldLevel != -1) {
// manage level transitions
if (level == oldLevel) {
// same level, close only previous list item
result.append("</li>\n");
} else if (level < oldLevel) {
// lower level transition, determine delta
int delta = oldLevel - level;
boolean itemClosed = false;
for (int k = 0; k < delta; k++) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -