function modify( $tpl, $operatorName, $operatorParameters, $rootNamespace, $currentNamespace, &$operatorValue, $namedParameters ) { switch ( $operatorName ) { // note: these functions are not cache-block safe // as in: if called inside a cache-block then they will not be called when cache is used. case 'ezpagedata_set': case 'ezpagedata_append': { self::setPersistentVariable( $namedParameters['key'], $namedParameters['value'], $tpl, $operatorName === 'ezpagedata_append' ); }break; case 'ezpagedata': { $currentNodeId = 0; $pageData = array(); $parameters = $namedParameters['params']; // Get module_result for later use if ( $tpl->hasVariable('module_result') ) { $moduleResult = $tpl->variable('module_result'); } else { $moduleResult = array(); } if ( isset( $moduleResult['content_info'] ) ) { $contentInfo = $moduleResult['content_info']; } else { $contentInfo = array(); } // Get persistent_variable if ( isset( $contentInfo['persistent_variable'] ) && is_array( $contentInfo['persistent_variable'] ) ) { $pageData['persistent_variable'] = $contentInfo['persistent_variable']; } else { $pageData['persistent_variable'] = self::getPersistentVariable(); if ( $pageData['persistent_variable'] === null ) { $pageData['persistent_variable'] = array(); } } // Merge parameters with persistent_variable $parameters = array_merge( $parameters, $pageData['persistent_variable'] ); // Figgure out current node id if ( isset( $parameters['current_node_id'] ) ) { $currentNodeId = (int) $parameters['current_node_id']; // Allow parameters to set current path if ( isset( $parameters['set_current_node_path'] ) && $parameters['set_current_node_path'] ) { if ( $setPath = self::getNodePath( $currentNodeId ) ) { $moduleResult['path'] = $setPath['path']; $moduleResult['title_path'] = $setPath['title_path']; $tpl->setVariable( 'module_result', $moduleResult ); } else { eZDebug::writeWarning( "Could not fetch 'current_node_id'", 'eZPageData::getNodePath()' ); } } } else if ( $tpl->hasVariable('current_node_id') ) { $currentNodeId = (int) $tpl->variable('current_node_id'); } else if ( isset( $moduleResult['node_id'] ) ) { $currentNodeId = (int) $moduleResult['node_id']; } else if ( isset( $moduleResult['path'][count( $moduleResult['path'] ) - 1]['node_id'] ) ) { $currentNodeId = (int) $moduleResult['path'][count( $moduleResult['path'] ) - 1]['node_id']; } // Init variables and return values $ini = eZINI::instance( 'site.ini' ); $menuIni = eZINI::instance( 'menu.ini' ); $contentIni = eZINI::instance( 'content.ini' ); $uiContext = $tpl->variable('ui_context'); $uriString = $tpl->variable('uri_string'); $pageData['main_node_id'] = isset( $contentInfo['main_node_id'] ) ? $contentInfo['main_node_id'] : $currentNodeId; $pageData['show_path'] = 'path'; $pageData['website_toolbar'] = false; $pageData['node_id'] = $currentNodeId; $pageData['is_edit'] = false; $pageData['page_root_depth'] = 0; $pageData['page_depth'] = count( $moduleResult['path'] ); $pageData['root_node'] = (int) $contentIni->variable( 'NodeSettings', 'RootNode' ); $pageData['canonical_url'] = false; $pageData['canonical_language_url'] = false; // is_edit if not on user/edit and not on content/action when // you get info collector warning about missing attributes if ( $uiContext === 'edit' && strpos( $uriString, 'user/edit' ) === false && ( empty( $contentInfo ) || strpos( $uriString, 'content/action' ) === false ) ) { $pageData['is_edit'] = true; } if ( isset( $contentInfo['viewmode'] ) ) { $viewMode = $contentInfo['viewmode']; } else { $viewMode = ''; } // canonical url, to let search engines know about main location on content with multiple locations if ( isset( $parameters['canonical_url'] ) ) { $pageData['canonical_url'] = $parameters['canonical_url']; } elseif ( isset( $contentInfo['main_node_url_alias'] ) && $contentInfo['main_node_url_alias'] ) { $pageData['canonical_url'] = $contentInfo['main_node_url_alias']; } elseif ( isset( $contentInfo['current_language'] ) && $contentInfo['current_language'] !== $ini->variable( 'RegionalSettings', 'ContentObjectLocale' ) ) { $siteaccess = eZSiteAccess::saNameByLanguage( $contentInfo['current_language'] ); if ( $siteaccess !== null ) { $lang = eZContentLanguage::fetchByLocale( $ini->variable( 'RegionalSettings', 'ContentObjectLocale' ) ); if ( ( $contentInfo['language_mask'] & $lang->attribute('id') ) < 1 ) { $handlerOptions = new ezpExtensionOptions(); $handlerOptions->iniFile = 'site.ini'; $handlerOptions->iniSection = 'RegionalSettings'; $handlerOptions->iniVariable = 'LanguageSwitcherClass'; $handlerOptions->handlerParams = array( array( 'Parameters' => array( 'sa', $currentNodeId ), 'UserParameters' => array() ) ); $langSwitch = eZExtension::getHandlerClass( $handlerOptions ); $langSwitch->setDestinationSiteAccess( $siteaccess ); $langSwitch->process(); $pageData['canonical_language_url'] = $langSwitch->destinationUrl(); } } } /* RootNodeDepth is a setting for letting you have a very simple multisite, single database and singe siteaccess setup. The content of the menues will be the same on all system pages like user/login, content/edit and so on, and also when you surf bellow the defined page_root_depth. The sites will also share siteaccess and thus also the same ez publish design and templates. You can however custimize the design with css using the class on div#page html output: subtree_level_x_node_id_y class Note: It is recommended to turn it of by setting it to 0 for normal sites! Example having 2 or more 'sub-sites' with RootNodeDepth=2: root (menu shows sub sites as menu choices like it will on system pages) - sub site 1 (menu show content of this sub site) - sub site 2 (-- " --) - sub site 3 (-- " --) - sub site 4 (-- " --) - sub site 5 (-- " --) */ if ( $currentNodeId && isset( $moduleResult['path'][0]['node_id'] ) && $moduleResult['path'][0]['node_id'] == '2' && $ini->hasVariable( 'SiteSettings', 'RootNodeDepth' ) && $ini->variable( 'SiteSettings', 'RootNodeDepth' ) !== '0' ) { $pageData['page_root_depth'] = $ini->variable( 'SiteSettings', 'RootNodeDepth' ) -1; if ( isset( $moduleResult['path'][ $pageData['page_root_depth'] ]['node_id'] )) { $pageData['root_node'] = $moduleResult['path'][$pageData['page_root_depth'] ]['node_id']; } } // Get class identifier for easier access in tempaltes $pageData['class_identifier'] = ''; if ( isset( $contentInfo['class_identifier'] ) ) { $pageData['class_identifier'] = $contentInfo['class_identifier']; } // Use custom path template. bool|string ( default: path ) if ( isset( $parameters['show_path'] ) ) { $pageData['show_path'] = $parameters['show_path'] === true ? 'path' : $parameters['show_path']; } else if ( $viewMode === 'sitemap' || $viewMode === 'tagcloud' ) { $pageData['show_path'] = false; } // See if we should show website toolbar. bool ( default: false ) if ( isset( $parameters['website_toolbar'] ) ) { $pageData['website_toolbar'] = $parameters['website_toolbar']; } else if ( $viewMode === 'sitemap' || $viewMode === 'tagcloud' || strpos( $uriString, 'content/versionview' ) === 0 ) { $pageData['website_toolbar'] = false; } else if ( $tpl->hasVariable('current_user') ) { $currentUser = $tpl->variable('current_user'); $pageData['website_toolbar'] = ( $currentNodeId && $currentUser->attribute('is_logged_in') ); } // Init default menu settings $pageData['top_menu'] = $menuIni->variable('SelectedMenu', 'TopMenu'); $pageData['left_menu'] = $menuIni->variable('SelectedMenu', 'LeftMenu'); $pageData['current_menu'] = $menuIni->variable('SelectedMenu', 'CurrentMenu'); $pageData['extra_menu'] = 'extra_info'; $pageData['extra_menu_node_id'] = $currentNodeId; $pageData['extra_menu_subitems'] = 0; $pageData['extra_menu_class_list'] = array( 'infobox' ); // BC: Setting to hide left and extra menu by class identifier if ( $menuIni->hasVariable('MenuSettings', 'HideLeftMenuClasses') ) { $hideMenuClasses = in_array( $pageData['class_identifier'], $menuIni->variable('MenuSettings', 'HideLeftMenuClasses') ); } else { $hideMenuClasses = false; } // Use custom top menu template. bool|string ( default: from menu.ini[SelectedMenu]TopMenu ) if ( isset( $parameters['top_menu'] ) && $parameters['top_menu'] !== true ) { $pageData['top_menu'] = $parameters['top_menu']; } // Use custom left menu template. bool|string ( default: from menu.ini[SelectedMenu]LeftMenu ) if ( isset( $parameters['left_menu'] ) ) { if ( $parameters['left_menu'] !== true ) $pageData['left_menu'] = $parameters['left_menu']; } else if ( $hideMenuClasses ) { $pageData['left_menu'] = false; } // Use custom extra menu template. bool|string (default: extra_info) if ( isset( $parameters['extra_menu'] ) ) { if ( $parameters['extra_menu'] !== true ) $pageData['extra_menu'] = $parameters['extra_menu']; } else if ( $hideMenuClasses ) { $pageData['extra_menu'] = false; } // Use custom node id. int|array (default: current node id) if ( isset( $parameters['extra_menu_node_id'] ) ) { $pageData['extra_menu_node_id'] = $parameters['extra_menu_node_id']; } // Use custom extra menu identifier list. false|array (default: infobox) if ( isset( $parameters['extra_menu_class_list'] ) ) { $pageData['extra_menu_class_list'] = $parameters['extra_menu_class_list']; } else if ( $menuIni->hasVariable('MenuContentSettings', 'ExtraIdentifierList') ) { $pageData['extra_menu_class_list'] = $menuIni->variable('MenuContentSettings', 'ExtraIdentifierList'); } if ( $menuIni->variable( 'MenuSettings', 'AlwaysAvailable' ) === 'false' ) { // A set of cases where left/extra menu's are hidden unless set by parameters if ( $pageData['is_edit'] || strpos( $uriString, 'content/versionview' ) === 0 ) { if ( !isset( $parameters['left_menu'] ) ) $pageData['left_menu'] = false; if ( !isset( $parameters['extra_menu'] ) ) $pageData['extra_menu'] = false; } else if ( !$currentNodeId || $uiContext === 'browse' ) { if ( !isset( $parameters['left_menu'] ) ) $pageData['left_menu'] = false; if ( !isset( $parameters['extra_menu'] ) ) $pageData['extra_menu'] = false; } } // Count extra menu objects if all extra menu settings are present if ( isset( $parameters['extra_menu_subitems'] ) ) { $pageData['extra_menu_subitems'] = $parameters['extra_menu_subitems']; if ( !$pageData['extra_menu_subitems'] ) $pageData['extra_menu'] = false; } else if ( $pageData['extra_menu'] && $pageData['extra_menu_class_list'] && $pageData['extra_menu_node_id'] ) { if ( $menuIni->variable( 'MenuContentSettings', 'ExtraMenuSubitemsCheck' ) === 'enabled' ) { $pageData['extra_menu_subitems'] = eZContentObjectTreeNode::subTreeCountByNodeID( array( 'Depth' => 1, 'DepthOperator' => 'eq', 'ClassFilterType' => 'include', 'ClassFilterArray' => $pageData['extra_menu_class_list'] ), $pageData['extra_menu_node_id'] ); if ( !$pageData['extra_menu_subitems'] ) $pageData['extra_menu'] = false; } } // Init path parameters $pageData['path_array'] = array(); $pageData['path_id_array'] = array(); $pageData['path_normalized'] = ''; // Creating menu css classes for div#page $pageData['css_classes'] = ''; // Add section css class for div#page if ( isset( $moduleResult['section_id'] )) { $pageData['css_classes'] .= ' section_id_' . $moduleResult['section_id']; } // Generate relative path array as well full path id array and path css classes for div#page $path = ( isset( $moduleResult['path'] ) && is_array( $moduleResult['path'] ) ) ? $moduleResult['path'] : array(); foreach ( $path as $key => $item ) { if ( $key >= $pageData['page_root_depth']) { $pageData['path_array'][] = $item; } if ( isset( $item['node_id'] ) ) { $pageData['path_normalized'] .= ' subtree_level_' . $key . '_node_id_' . $item['node_id']; $pageData['path_id_array'][] = $item['node_id']; } } $pageData['css_classes'] .= $pageData['path_normalized']; if ( isset( $pageData['persistent_variable']['pagestyle_css_classes'] ) && is_array( $pageData['persistent_variable']['pagestyle_css_classes'] ) ) { $pageData['css_classes'] .= ' ' . implode( ' ', $pageData['persistent_variable']['pagestyle_css_classes'] ); } $pageData['inner_column_size'] = 8; if ( $pageData['left_menu'] && $pageData['extra_menu'] ) $pageData['inner_column_size'] = 6; if ( !$pageData['left_menu'] && !$pageData['extra_menu'] ) $pageData['inner_column_size'] = 12; $pageData['outer_column_size'] = 4; if ( $pageData['left_menu'] && $pageData['extra_menu'] ) $pageData['outer_column_size'] = 3; $operatorValue = $pageData; } break; } }