Это плохая практика, чтобы условные операторы PHP напрямую вызывались из файла индекса (смешанного с разметкой HTML)? - PullRequest
0 голосов
/ 05 июля 2010

Некоторые люди говорили мне, что следующий код плох для проверки HTML:

index.php:

строка 1 ~ 5 (это нормально. Только для справки):

<?php include_once 'localization.php'; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>

строка 15 (если выбран китайский язык, загрузите эти CSS-файлы):

<?php if($lang_file=='lang.zh-tw.php' || $lang_file=='lang.zh-cn.php') 
{echo '<link rel="stylesheet" type="text/css" href="styles/chinese.css" />';} ?>

строка 21 (если английский язык является текущим языковым изменением, присвойте ему класс: current):

<li <?php if($lang_file=='lang.en.php') {echo 'class="current"';} ?>>
<a href="index.php?lang=en">ENGLISH</a></li>

строка 168 ~ 171 (я нашел единственный способ добавить разные языки в плагин проверки jquery):

<?php if($lang_file=='lang.en.php') {echo '<script type="text/javascript" src="scripts/jquery-validate/val-en.js"></script>';} ?>
<?php if($lang_file=='lang.es.php') {echo '<script type="text/javascript" src="scripts/jquery-validate/val-es.js"></script>';} ?>
<?php if($lang_file=='lang.zh-tw.php') {echo '<script type="text/javascript" src="scripts/jquery-validate/val-zh-tw.js"></script>';} ?>
<?php if($lang_file=='lang.zh-cn.php') {echo '<script type="text/javascript" src="scripts/jquery-validate/val-zh-cn.js"></script>';} ?>

lozalization.php (только для ознакомления):

<?php
session_start();
header('Cache-control: private'); // IE 6 FIX

if(isSet($_GET['lang'])) {
    $lang = $_GET['lang'];

    // register the session and set the cookie
    $_SESSION['lang'] = $lang;
    setcookie("lang", $lang, time() + (3600 * 24 * 30));
}
else if(isSet($_SESSION['lang'])) {
    $lang = $_SESSION['lang'];
}
else if(isSet($_COOKIE['lang'])) {
    $lang = $_COOKIE['lang'];
}
else {
    $lang = 'en';
}

// use appropiate lang.xx.php file according to the value of the $lang
$languages = array('en', 'es', 'zh-tw', 'zh-cn');
if (in_array($_SESSION['lang'], $languages)) {
    $lang_file = 'lang.'.$_SESSION['lang'].'.php';
} else {
    $lang_file = 'lang.en.php';
}

//localization helper function
function l($localization) {
    global $lang;
    return $lang[$localization];
}
    include_once 'languages/'.$lang_file;
?>

Я впадаю в плохие практики или проблемы с проверкой? Код работает, но есть ли способ сделать вещи, описанные выше, чище и лучше?

Ответы [ 2 ]

1 голос
/ 05 июля 2010

Операторы PHP в вашем индексном файле не плохи для проверки HTML, если они генерируют действительный HTML.Если вы проверите источник страницы в веб-браузере, вы увидите, что все ваши теги PHP исчезли и были заменены тем, что они там производили.Это то, что проверяется.

Что касается улучшения, вы можете попробовать заменить

<?php if($lang_file=='lang.en.php') {echo '<script type="text/javascript" src="scripts/jquery-validate/val-en.js"></script>';} ?>
<?php if($lang_file=='lang.es.php') {echo '<script type="text/javascript" src="scripts/jquery-validate/val-es.js"></script>';} ?>
<?php if($lang_file=='lang.zh-tw.php') {echo '<script type="text/javascript" src="scripts/jquery-validate/val-zh-tw.js"></script>';} ?>
<?php if($lang_file=='lang.zh-cn.php') {echo '<script type="text/javascript" src="scripts/jquery-validate/val-zh-cn.js"></script>';} ?>

на что-то вроде

<?php
$lang = explode('.',$lang_file);
echo '<script type="text/javascript" src="scripts/jquery-validate/val-'.$lang[1].'.js"></script>' ?>

Таким образом, предполагая переменнуюперевод между $lang_file и сценарием проверки всегда выполняется в соответствии с lang. en .php в val- en .js, это будет поддерживать любые языки, которые вы хотите использоватьбез необходимости строки кода каждый.Очевидно, что если пользователь может манипулировать $ lang_file, вам нужно убедиться, что он содержит то, что вы ожидаете от него.

0 голосов
/ 05 июля 2010

Я не могу говорить конкретно о плохих практиках, но с точки зрения загрузки правильного сценария jquery, просто сопоставьте подстроку содержимого $ lang_file, а затем объедините его в конец каталога, содержащего все сценарии.Таким образом, вы можете добавлять / удалять локали, не меняя сценарий.

...