晚安。我绞尽脑汁,想不出如何实现多语言以及如何在管理面板和网站的常规版本之间切换。
我开始写我自己的路由器,因为我仍然不知道如何找到框架的通用语言,我就是想不通。
我真的希望有人能帮我实现我的路由选项。因此,我将描述问题和任务:
我正在创建一个网站。需要制作多语言(3 种语言)和管理面板。链接应该是这样的:
普通版
http://web-site.com/http://web-site.com/catalog/auto/http://web-site.com/catalog/auto/product/product-url/http://web-site.com/
http://web-site.com/ru/http://web-site.com/ru/catalog/http://web-site.com/ru/catalog/auto/http://web-site.com/ru/catalog/auto/product/product-url/
如果您在地址栏中添加/admin/,则重定向应该可以工作并将目录与管理面板文件连接起来。
http://web-site.com/admin/http://web-site.com/admin/products/auto/
该文件.htaccess包含以下内容:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !^favicon\.ico
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?$1 [L,QSA]
我希望网站在打开网站时默认为俄语,即表单链接http://web-site.com/为俄语,如果用户选择不同的语言,则网站上的所有链接都会自动格式化为指定的格式语言环境,即 :
http://web-site.com/catalog/格式为http://web-site.com/en/catalog/. 我不知道如何使用 php 将所有链接转换为所需的语言环境。
这是我的路由器:
class Router {
public $URI = [];
public $TEMPLATE;
public $MODULE = [];
public $LOCALE;
function __construct() {
self::parseQueryString();
}
function parseQueryString() {
/**
* Метод который парсит строку запроса, и возвращает массив $URI
**/
$parsedString = parse_url($_SERVER['QUERY_STRING'], PHP_URL_PATH);
$parsedString = explode('/', $parsedString);
$this->URI = $parsedString;
return $this->URI;
}
function setTemplate() {
/**
* Этот метод должен запустить проверку на существование шаблона
* если таков есть, то возвращает название шаблона, если нет
* то название шаблона ошибки
**/
$template = $this->TEMPLATE;
if (!$this->checkTemplate($template, $module)) $template = 'error';
return $template;
}
function checkTemplate($template, $module) {
/**
* Этот метод проверяет наличие файла (шаблона)
* Возвращает TRUE | FALSE
**/
$checkPath = $_SERVER['DOCUMENT_ROOT'] . '/application/views/' . $module . '/';
$checked = false;
if (file_exists($checkPath . $template . '.php')) $checked = true;
return $checked;
}
static function redirect($path = NULL) {
/**
* Статический метод обычной перезагрузки.
* Использую после отправки формы методом пост,
* либо когда это нужно
**/
if (!$path) {
$redirect = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : $_SERVER['REQUEST_URI'];
header("Location: $redirect");
} else
header("Location: /$path");
exit;
}
}
事情还没完,所以我才来找你。我希望有人会帮助添加或解释如何做到这一点。
首先,路由器必须接受并解析地址栏。这就是我所做的。
但现在我需要为正确的语言环境自动检测和格式化链接。例如,用户来到该站点:
http://web-site.com/他进入了俄语主页。然后转到产品目录http://web-site.com/catalog/并切换到英语,我需要将用户重定向到http://web-site.com/en/catalog/并在路由器中接受这个/en/并将其传递给一个变量$LOCALE,然后我可以使用该变量在所需的语言环境中显示必要的信息。
如果用户在地址栏中输入,http://web-site.com/admin/那么他应该被重定向到管理面板的授权页面。但我不太明白该怎么做。
我的文件夹结构是这样的:
web-siteapplicationconfigsconfig.php
controllercontroller.php
core[目录]Router.phpDatabase.php
models[目录]CatalogModel.phpNewsModel.php- ETC...
viewsweb_site[普通用户的网站页面类型]control_panel[管理面板的页面类型]
loader.php
cssimgjsuploadsindex.php
该文件loader.php在一开始就包含所有必要的文件。
然后我controller.php在文件中运行我的路由器。
不幸的是,我不知道该去哪里,下一步该做什么。如果您需要更多信息,我会提供您需要的一切。