6

エントリ ページとして 2 つのフラグを持つ 2 つの言語を持つ Web サイトを構築しています。<form method="post">ユーザーが必要な言語を選択できるように、フラグを使用する予定です。

次に、次のページで次のようなものを使用します。

<?php
if( $_POST['language']=='uk' ){
    echo $uk;
}elseif( $_POST['language']=='french' ){
    echo $french;}
?>

したがって、フラグをクリックすると、必要な言語が選択されます。フラグをクリックした後の次のページでのみ機能しますか、それとも別のページにナビゲートし続けても、選択された言語を取得できますか?

それがうまくいかない場合、他にどのようにそれを行うことができますか?


アップデート:

どうやら$_SESSION.

言語の選択を送信するために、region.php というテンプレートにこれがあります。

    <form action="<?php the_permalink(); ?>/home" name="region" method="post">              
        <div id="uk">
            <a href="javascript:document.region.submit()" name="UK">
                <img style="margin-bottom:10px;" src="<?php bloginfo('stylesheet_directory'); ?>/images/-uk.png" width="259" height="160" alt="UK" />
            </a>
            <h1 style="color:black!IMPORTANT;">Enter United Kingdom site</h1>
        </div>

        <div id="world">
            <a href="javascript:document.region.submit()" name="World">
                <img style="margin-bottom:10px;" src="<?php bloginfo('stylesheet_directory'); ?>/images/
world.png" width="258" height="160" alt="
Rest of the World" />
            </a>
            <h1 style="color:black!IMPORTANT;">Enter Rest of the World site</h1>                    
            </div>  
    </form>

どの言語が選択されたかを確認するには、他のすべてのテンプレートに何を配置する必要がありますか? 例を支援するために、英国が選択されている場合は "UK" をエコーし​​、残りの世界が選択されている場合は "World" を表示します。

これは複数のページで機能する必要があるため、ユーザーが about ページに移動すると言語がチェックされ、次に連絡先ページに移動すると言語が再度チェックされます。これはすべて、最初の言語選択から取得する必要があります。

4

6 に答える 6

15

選択を$_SESSION変数にドロップします。彼らが去るまで、それは彼らと共にあります。クッキーをうまく使うこともできます。実際には、この 2 つの組み合わせは素晴らしいものです。Cookie を許可しないユーザーは、訪問ごとに実行することができず、Cookie を有効にしているユーザーは 1 回だけ選択する必要があります。

編集:作業コードの例:

<form action="<?php the_permalink(); ?>/home" name="region" method="post">              
    <div id="uk">
    <a href="javascript:document.region.submit()" name="UK">
        <img style="margin-bottom:10px;" src="<?php bloginfo('stylesheet_directory'); ?>/images/=uk.png" width="259" height="160" alt="UK" />
    </a>
    <h1 style="color:black!IMPORTANT;">Enter United Kingdom site</h1>
    </div>

    <div id="world">
    <a href="javascript:document.region.submit()" name="World">
        <img style="margin-bottom:10px;" src="<?php bloginfo('stylesheet_directory'); ?>/images/world.png" width="258" height="160" alt="Rest of the World" />
    </a>
    <h1 style="color:black!IMPORTANT;">Enter Rest of the World site</h1>                    
    </div>  
</form>
// I assume that this form sends a POST request to the following page URL.

フォームがリダイレクトするページ:

<?php

    session_start();
    if(isset($_POST['country'])) 
    // assuming that your form returns a field called 'country'...
    {
        $_SESSION['myCountry'] = htmlspecialchars($_POST['country']);
        // Assumes that myCountry is now 'UK' or 'World'...
    }
    header('Location: http://www.example.com/yourIndexPage.php');
    // You want to use a quick snippet to process the form and 
    // then redirect them away. This makes for less stupid BACK actions
    // in the browser as well as data being resent to the code.
?>

yourIndexpage.php

<?php

    // As the $_SESSION is now set, we can use it in the page as follows:
    session_start();
    switch($_SESSION['myCountry'])
    {
        case 'UK':
            echo $UK;
            // And anything else you want to do with the UK language.
            break;
        case 'World':
            echo $world;
            // etc etc etc...
            break;
        default:
            // echo out default stuff, probably 'World' at a guess.
            break;
    }

?>

ワードプレスを使用している場合は、おそらくこれを読む必要があります。

于 2012-08-03T12:49:48.857 に答える
2

Cookie を使用したくない場合は、この方法で行うことができます。

session_start();    
if(!isset($_SESSION['language'])){
    $_SESSION['language'] = 'English'; //default language
}

次に、2 つのボタンがあり、1 つが英語で、もう 1 つがドイツ語または任意のものです。

<a href="?language=English">English</a>
<a href="?language=German">German</a>

このチェックを使用して、ページの言語を確認できます。

if(isset($_GET['language'])){
    if($_GET['language'] == 'English'){
        $_SESSION['language'] = 'English';
    }
    if($_GET['language'] == 'German'){
        $_SESSION['language'] = 'German';
    }
} 
于 2012-08-03T13:16:19.933 に答える
2

回答

まず、ワードプレス サイトに地域/多言語サポートを追加するには、このプラグインより優れた代替手段はありません: http://wpml.org/ . それに伴うコストはかかりますが、法外なものではありません (すばらしいサポートには料金がかかります)。

次に、デフォルトでは $_SESSION を使用できません。WP は設計上ステートレスです。とはいえ、この機能を利用するためのプラグインやチュートリアルがオンラインでたくさんあります。

コード関連

元のフォーム html には入力がありませんでした。何も提出していないフォームでした。このフォームには、同じ名前の 2 つの送信がありlocationます。したがって、どのボタンがクリックされても、その値が に対して送信されます$_POST['location']

<form action="<?php the_permalink(); ?>/home" name="region" method="post">              
    <div id="uk">
        <input type="submit" name="location" value="UK" />
        <img style="margin-bottom:10px;" src="<?php bloginfo('stylesheet_directory'); ?>/images/uk.png" width="259" height="160" alt="UK" />
        <h1 style="color:black!IMPORTANT;">Enter United Kingdom site</h1>
    </div>

    <div id="world">
        <input type="submit" name="location" value="World" />
        <img style="margin-bottom:10px;" src="<?php bloginfo('stylesheet_directory'); ?>/images/world.png" width="258" height="160" alt="Rest of the World" />
        <h1 style="color:black!IMPORTANT;">Enter Rest of the World site</h1>                    
    </div>  
</form>

投稿を処理するワードプレス アクションを作成します。これをテーマの関数ファイルに追加します。setcookie ドキュメントについては、http://php.net/manual/en/function.setcookie.php を参照してください。

function set_location_cookie()
{
    if(isset($_POST['location']))
    {
        setcookie('location', $_POST['location'], time()+1209600);
    }
}
add_action('init', 'set_location_cookie');

次に、場所を知りたい場所:

<?php echo $_COOKIE["location"]; ?>

追加情報

最初にUKをクリックしてCookieを設定し、戻ってWorldをクリックしましたが、CookieがWorldでコピーされず、UKが再び表示されました。別の選択が行われるたびに Cookie を消去することは可能ですか?

これは、Cookie が技術レベルでどのように機能するかに関する問題です。

ブラウザがこれを [サイトをリクエスト] するとき、[あなたのサイト] が設定した Cookie ファイルをあなたのマシンで探します。Cookie ファイルが見つかった場合、ブラウザはファイル内のすべての名前と値のペアを URL とともに [the] サーバーに送信します。Cookie ファイルが見つからない場合、Cookie データは送信されません。

新しい Cookie データは最初は送信されません。リクエストがブラウザからサーバーに送信された後、新しい Cookie データが保存され、リクエストで送信できるようになるまで、最初は送信されません。

では、どうやってこれを機能させるのですか? set cookie イベントが成功した後にリダイレクトします。

function set_location_cookie()
{
    if(isset($_POST['location']))
    {
        // Set Cookie
        setcookie('location', $_POST['location'], time()+1209600);
        // Reload the current page so that the cookie is sent with the request
        header('Location: '.$_SERVER['REQUEST_URI']);
    }
}
add_action('init', 'set_location_cookie');

また、フラグの画像を送信ボタンとして使用することは可能ですか? はい、CSS を使用して入力ボタンのスタイルを設定します。

id="uk-button"各入力にid を追加します。id="world-button"

CSS:

#uk-button {
    background-image: url(uk-flag.png);
    background-size: 100%;
    background-repeat:no-repeat;
}
#world-button {
    background-image: url(world-flag.png);
    background-size: 100%;
    background-repeat:no-repeat;
}
于 2012-08-16T13:30:17.873 に答える
1

$_POST 変数には、単一のリクエストにのみ含まれるデータが含まれるため( POST (HTTP)を参照)、「クリック」または何らかのフォームの投稿後に適切なコンテンツが表示されるため、ページへのリクエストの後のみに表示されます。

ユーザー設定をより永続的に保存するには、これらの設定を「セッション」データに保存する必要があります。このデータは $_SESSION 変数で利用でき、永続的であるため、訪問者がページを閲覧するまで利用できます。より永続的ですが、少し純粋ではない解決策は、設定を Cookie に保存することです。この場合、有効期限を定義できるため、次回の訪問時にも使用されます。

いくつかの例を参照してください:

<?php

session_start();
$language = $_POST['language'];
$_SESSION['language'] = $language;

...その他の場所:

<?php

session_start();
$language = $_SESSION['language'];

または、Cookie を使用できます。

<?php

session_start();
$language = $_POST['language'];
set_cookie('language', $language, 365 * 24 * 60 * 60);   
// will live for one year

...その他の場所:

$language = $_COOKIE['language'];
于 2012-08-03T13:00:32.533 に答える
0

別のページでは機能しません。POST 変数が常に送信されるわけではありません。フォーム送信時のみ送信します。タスクに COOKIES を使用できます。そこに変数を保存し、すべてのページで確認します。

于 2012-08-03T12:52:31.710 に答える
0

選択を持続させたい場合 (またはGETlikeを介して値を渡し続ける場合は、セッション/Cookie が本当に必要です?lang=ukが、それはあまりエレガントではありません)。ちなみに、デフォルトの動作がブロックされ、その親フォームが JavaScript で送信されるハイパーリンク内の画像は必要ありません。次のようなものを簡単に使用できます。

<input alt="en-UK" name="lang" src="uk-flag.png" type="image" value="en-UK">

これは、フォーム送信ボタンでもある画像として機能します。

于 2012-08-16T01:38:23.803 に答える