我试图使用模板来创建一个多语言网站,所以我创建了一个名为语言的文件夹,其中包含en.php和fr.php 这是en.php的代码:
<?php
class Index {
public $filename;
public $assigned_vars = array();
public function set($key, $value) {
$this -> assigned_vars[$key] = $value;
}
public function display() {
if (file_exists($this -> filename)) {
$output = file_get_contents($this -> filename);
foreach ($this->assigned_vars as $key => $value) {
$output = preg_replace('/{' . $key . '}/', $value, $output);
}
echo $output;
} else {
echo "*** Missing template ***";
}
}
}
$index = new Index;
$index -> filename = "templates/index1.php";
$index -> set('page_title', "Welcome");
$index -> set('first_name', "Welcome to our website.");
$index -> display();
?>
这是fr.php的代码:
<?php
class Index {
public $filename;
public $assigned_vars = array();
public function set($key, $value) {
$this -> assigned_vars[$key] = $value;
}
public function display() {
if (file_exists($this -> filename)) {
$output = file_get_contents($this -> filename);
foreach ($this->assigned_vars as $key => $value) {
$output = preg_replace('/{' . $key . '}/', $value, $output);
}
echo $output;
} else {
echo "*** Disparus modèle ***";
}
}
}
$index = new Index;
$index -> filename = "templates/index1.php";
$index -> set('page_title', "Bienvenue");
$index -> set('first_name', "Bienvenue sur notre site.");
$index -> display();
?>
然后我创建了一个名为templates的文件夹,并创建了一个名为index1.php的文件
这里是index1.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{page_title}</title>
</head>
<body>
{first_name}
<br/>
<a href="?lang=en-us">english</a>
<a href ="?lang=fr">French</a><br />
<?php
echo strftime("Y", time());
?>
</body>
</html>
然后我创建了常规的index.php 这是index.php的代码:
<?php
if (isset($_GET['lang'])) {
setcookie('language_test', $_GET['lang'], time() + (60 * 60 * 24 * 7));
if ($_GET['lang'] == "fr") {
require ('languages/fr.php');
} else {
require ('languages/en.php');
}
} else {
require ('languages/en.php');
}
?>
这是我的问题当我尝试在我的浏览器中显示index.php它工作正常但是index1.php中的php代码没有显示任何这个strftime();但是当我尝试查看源代码时这个 的index.php 它告诉我这个:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Welcome</title>
</head>
<body>
Welcome to our website.
<br/>
<a href="?lang=en-us">english</a>
<a href ="?lang=fr">French</a><br />
<?php
echo strftime("Y", time());
?>
</body>
</html>
提前谢谢。抱歉这么久,对不起我糟糕的英语。
答案 0 :(得分:2)
当您调用file_get_contents($this -> filename);
时,它只会将strftime("Y", time());
部分转换为字符串。所以它不会执行。
在index1.php
中,您应使用{time}
代替
<?php
echo strftime("Y", time());
?>
所以它看起来像
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{page_title}</title>
</head>
<body>
{first_name}
<br/>
<a href="?lang=en-us">english</a>
<a href ="?lang=fr">French</a><br />
{time}
</body>
现在在en.php
或fr.php
添加时间,如下所示
$index -> set('time', strftime("%Y", time()));
最好不要重新发明模板库。有很多可用的。请参阅此博客文章top 25 php template engines
答案 1 :(得分:0)
感谢所有试图帮助我的人。 我看了另一个问题,我没有使用聪明的
找到答案<?php
class Index {
public $filename;
public $assigned_vars = array();
public function set($key, $value) {
$this -> assigned_vars[$key] = $value;
}
public function display() {
if (file_exists($this -> filename)) {
ob_start();
include ($this -> filename);
$output = ob_get_clean();
foreach ($this->assigned_vars as $key => $value) {
$output = preg_replace('/{' . $key . '}/', $value, $output);
}
echo $output;
} else {
echo "*** Missing template error ***";
}
}
}
$index = new Index;
$index -> filename = "templates/index1.php";
$index -> set('page_title', "Welcome");
$index -> set('content', "Welcome to our website.");
$index -> display();
?>
问题是,Shiplu说我调用了file_get_contents();
现在我可以在index1.php中完成我的for循环而没有任何问题
所以我希望我能给你们一些有用的东西 这真是有史以来最好的网站, 感谢大家试图帮助我。
祝大家度过美好的一天