【问题标题】:Change php include path with javascript用javascript更改php包含路径
【发布时间】:2012-06-27 13:57:10
【问题描述】:

如果用户更改网站的语言,我正在尝试使用 javascript 更改 php 文件的包含路径。

我正在使用此代码来检查网站的语言是否为英语。

<script type="text/javascript">
        $(function() {
            var pathname = window.location.pathname;
            if (pathname.search('/en/') != -1){
                //I wanna insert the new path here
            }
        });
    </script>

然后我想更改包含函数

<?php include 'navigation.php'; ?>

<?php include 'navigation_en.php'; ?>

有人知道如何进行这项工作吗?还是我必须用 php 检查路径名才能更改 php 包含函数?

【问题讨论】:

  • php 运行服务器端,在 javascript 启动之前就完成了,反正我不明白你为什么需要 js,这都可以用 php 完成
  • 您无法使用 javascript 更改包含路径。
  • 当调用 Javascript 代码时,PHP 就完成了工作。您必须重新加载您的网站并使用参数。
  • @Dagon 我对 PHP 不是很好。你知道我如何在 PHP 中达到同样的效果吗?
  • @linzprod substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) 为您提供 PHP 语言代码

标签: php javascript path include


【解决方案1】:

您不能使用纯 javascript 来执行此操作,因为 javascript 是在 php 处理完成之后执行的。你可以用纯 PHP 做同样的事情:

$uri = $_SERVER['REQUEST_URI'];
if(preg_match('/^\/en\//', $uri)) {
    include_once('include_en.php');
}
else {
    include_once('include.php');
}

此代码假定您的 URL 格式为 http://www.mydomain.com/en/some/page.php

编辑:

由于此代码在 wordpress 中运行,$_SERVER['REQUEST_URI] 不会返回语言部分。感谢 OP,在 wordpress 中执行此操作的方法是:

$lang = get_bloginfo('language');
if(preg_match('/^\/en-/', $lang)) {
    include_once('include_en.php');
}
else {
    include_once('include.php');
}

【讨论】:

  • 这个答案其实是有道理的。
  • @AleksG 这个答案对我来说也很有意义。但由于我使用带有可读永久链接的 Wordpress,$uri 对于两种语言都是相同的。当我回显 $uri 时。 REQUEST_URI 有不同的解决方案吗?由于 $uri 在 /en/ 之后开始
  • @linzprod 我自己从来没有使用过wordpress,虽然有一些想法。您的网址是什么样的?
  • @AleksG 这是德文版:restaurant-salzhaus.ch/salzhaus/konzept 这是网站的英文版:restaurant-salzhaus.ch/en/salzhaus/konzept
  • 在 wordpress 中,有函数 site_url()home_url() - 也许其中之一会有所帮助。如果没有,请查看get_bloginfo function - 必须有一个参数。
【解决方案2】:

您不能仅使用 JavaScript 来更改 PHP 中的变量。但你可以做一件事。当&lt;select&gt; 标记的值发生变化时,您可以通过向服务器发出请求来使用 AJAX 查询。

$("select.language").change(function(){
    $.ajax({
        url: 'changeLang.php?lang=' + $(this).val(),
        success: function(data) {
            alert("Successfully set the language to " + data);
        }
    });
});

在后端的 PHP 代码中,你可以这样做:

if(isset($_GET["lang"]))
    // Set the lang.
    die("English");

【讨论】:

    【解决方案3】:

    我相当肯定这是不可能的,因为 PHP 在发送到客户端之前会生成标记。另一种解决方案是使用 JavaScript 重新加载页面,并在 URL 中包含某种参数,然后告诉 PHP 使用哪个包含标签。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      • 2011-02-15
      • 2014-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多