本文整理汇总了PHP中Frontend\Core\Engine\Navigation::getKeys方法的典型用法代码示例。如果您正苦于以下问题:PHP Navigation::getKeys方法的具体用法?PHP Navigation::getKeys怎么用?PHP Navigation::getKeys使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Frontend\Core\Engine\Navigation
的用法示例。
在下文中一共展示了Navigation::getKeys方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: processQueryString
/**
* Process the query string
*/
private function processQueryString()
{
// store the query string local, so we don't alter it.
$queryString = trim($this->request->getPathInfo(), '/');
// split into chunks
$chunks = (array) explode('/', $queryString);
$hasMultiLanguages = $this->getContainer()->getParameter('site.multilanguage');
// single language
if (!$hasMultiLanguages) {
// set language id
$language = $this->get('fork.settings')->get('Core', 'default_language', SITE_DEFAULT_LANGUAGE);
} else {
// multiple languages
// default value
$mustRedirect = false;
// get possible languages
$possibleLanguages = (array) Language::getActiveLanguages();
$redirectLanguages = (array) Language::getRedirectLanguages();
// the language is present in the URL
if (isset($chunks[0]) && in_array($chunks[0], $possibleLanguages)) {
// define language
$language = (string) $chunks[0];
// try to set a cookie with the language
try {
// set cookie
CommonCookie::set('frontend_language', $language);
} catch (\SpoonCookieException $e) {
// settings cookies isn't allowed, because this isn't a real problem we ignore the exception
}
// set sessions
\SpoonSession::set('frontend_language', $language);
// remove the language part
array_shift($chunks);
} elseif (CommonCookie::exists('frontend_language') && in_array(CommonCookie::get('frontend_language'), $redirectLanguages)) {
// set languageId
$language = (string) CommonCookie::get('frontend_language');
// redirect is needed
$mustRedirect = true;
} else {
// default browser language
// set languageId & abbreviation
$language = Language::getBrowserLanguage();
// try to set a cookie with the language
try {
// set cookie
CommonCookie::set('frontend_language', $language);
} catch (\SpoonCookieException $e) {
// settings cookies isn't allowed, because this isn't a real problem we ignore the exception
}
// redirect is needed
$mustRedirect = true;
}
// redirect is required
if ($mustRedirect) {
// build URL
// trim the first / from the query string to prevent double slashes
$url = rtrim('/' . $language . '/' . trim($this->getQueryString(), '/'), '/');
// when we are just adding the language to the domain, it's a temporary redirect because
// Safari keeps the 301 in cache, so the cookie to switch language doesn't work any more
$redirectCode = $url == '/' . $language ? 302 : 301;
// set header & redirect
throw new RedirectException('Redirect', new RedirectResponse($url, $redirectCode));
}
}
// define the language
defined('FRONTEND_LANGUAGE') || define('FRONTEND_LANGUAGE', $language);
defined('LANGUAGE') || define('LANGUAGE', $language);
// sets the locale file
Language::setLocale($language);
// list of pageIds & their full URL
$keys = Navigation::getKeys();
// rebuild our URL, but without the language parameter. (it's tripped earlier)
$url = implode('/', $chunks);
$startURL = $url;
// loop until we find the URL in the list of pages
while (!in_array($url, $keys)) {
// remove the last chunk
array_pop($chunks);
// redefine the URL
$url = implode('/', $chunks);
}
// remove language from query string
if ($hasMultiLanguages) {
$queryString = trim(mb_substr($queryString, mb_strlen($language)), '/');
}
// if it's the homepage AND parameters were given (not allowed!)
if ($url == '' && $queryString != '') {
// get 404 URL
$url = Navigation::getURL(404);
// remove language
if ($hasMultiLanguages) {
$url = str_replace('/' . $language, '', $url);
}
}
// set pages
$url = trim($url, '/');
// currently not in the homepage
//.........这里部分代码省略.........