2012-08-03 15 views
6

के लिए विधि = "पोस्ट" का उपयोग करें, मैं एक ऐसी वेबसाइट तैयार कर रहा हूं जिसमें दो पेजों के साथ दोहरी भाषाएं प्रविष्टि पृष्ठ के रूप में हों। मैं झंडे के चारों ओर <form method="post"> का उपयोग करने की योजना बना रहा हूं ताकि उपयोगकर्ता अपनी इच्छित भाषा का चयन कर सकें।वर्डप्रेस: ​​एकाधिक भाषा चयन

फिर अगले पन्नों पर मैं की तरह कुछ का उपयोग करना चाहते: तो झंडा क्लिक करने पर

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

, वे भाषा वे चाहते हैं का चयन किया है। क्या वह ध्वज पर क्लिक करने के बाद ही अगले पृष्ठ पर काम करेगा या क्या वे अलग-अलग पृष्ठों पर नेविगेट कर सकते हैं और यह अभी भी उठाया गया है कि कौन सी भाषा चुनी गई थी?

यदि यह काम नहीं करता है, तो यह और कैसे किया जा सकता है?


अद्यतन:

मुझे नहीं लगता कि मैं इसे मैं Wordpress, जो जाहिरा तौर पर $_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> 

क्या मैं जाँच करने के लिए क्या भाषा का चयन किया गया हर दूसरे टेम्पलेट पर डाल की जरूरत है? उदाहरण के साथ मदद के लिए यदि यूके का चयन किया गया है तो यह सिर्फ "यूके" को प्रतिबिंबित कर सकता है, अगर शेष दुनिया का चयन किया गया तो यह सिर्फ "विश्व" दिखा सकता है।

इसे कई पृष्ठों पर काम करने की ज़रूरत है, इसलिए यदि उन्हें पृष्ठ के बारे में जानकारी मिलती है तो यह भाषा की जांच करता है, फिर यदि वे संपर्क पृष्ठ पर नेविगेट करते हैं तो यह भाषा को फिर से जांचता है - जो प्रारंभिक भाषा चयन से आता है।

+0

क्या अपने कोड करना होगा (उपयोगकर्ता उनके चयन करने के बाद फ़ॉर्म सबमिट होने और PHP कोड निष्पादित किया जाता है, तो अगर उस पृष्ठ पर जिसे आप अपने फॉर्म की 'एक्शन' विशेषता में परिभाषित करते हैं) जो भी आपने '$ uk' या' $ french' सेट किया है, गूंजें। ऐसा लगता है कि आपने इन चर को किसी भी मान पर सेट नहीं किया है, इसलिए यह कुछ भी प्रिंट नहीं करेगा। – Matt

+0

भी भविष्य में, आपको WP संबंधित प्रश्नों को http://wordpress.stackexchange.com/ –

+0

@FrancisYaconiello पर पोस्ट करना चाहिए, मुझे बताया गया है कि यह वहां एक PHP प्रश्न है, कुछ लोग वहां से अधिक हैं! – Rob

उत्तर

2

सबसे पहले जवाब, एक WordPress साइट के लिए क्षेत्रीय/बहुभाषी समर्थन जोड़ने के लिए इस प्लगइन बेहतर कोई दूसरा रास्ता नहीं है: http://wpml.org/। इसके साथ जुड़ी लागत है, लेकिन यह निषिद्ध नहीं है (आप भयानक समर्थन के लिए भुगतान करते हैं)।

दूसरा, आप डिफ़ॉल्ट रूप से $ _SESSION का उपयोग नहीं कर सकते हैं। WP डिजाइन द्वारा स्टेटलेस है। उस कार्यक्षमता को प्राप्त करने के लिए ऑनलाइन कई प्लगइन और ट्यूटोरियल हैं।

कोड सामग्री

आपके मूल फॉर्म HTML में कोई इनपुट नहीं था। यह एक ऐसा प्रपत्र था जो कुछ भी सबमिट नहीं किया गया था। इस फॉर्म में दो सबमिशन हैं जो एक ही चीज़ 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> 

पोस्ट को संभालने के लिए एक WordPress कार्रवाई लिखें। इसे अपनी थीम की फ़ंक्शंस फ़ाइल में जोड़ें। सेटक्यूकी दस्तावेज़ों के लिए 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"]; ?> 

अतिरिक्त जानकारी

मैं शुरू में ब्रिटेन क्लिक किया साथ शुरू करने के लिए और इस कुकी सेट, मैं फिर वापस चला गया और क्लिक किया दुनिया लेकिन उसने दुनिया के साथ कुकी पर प्रतिलिपि नहीं बनाई, यह सिर्फ यूके को फिर से दिखाया। प्रत्येक बार एक अलग चयन किए जाने पर कुकी पर पोंछना संभव है?

तो यह कैसे कुकीज़ एक तकनीकी स्तर पर काम के बारे में एक मुद्दा है:

जब ब्राउज़र इस करता है [एक साइट का अनुरोध], यह एक कुकी फ़ाइल के लिए आपकी मशीन पर दिखेगा कि [ आपकी साइट] सेट है। यदि उसे कुकी फ़ाइल मिलती है, तो आपका ब्राउज़र फ़ाइल में सभी नाम-मूल्य जोड़े को URL के साथ [the] सर्वर पर भेज देगा। अगर उसे कोई कुकी फ़ाइल नहीं मिलती है, तो यह कोई कुकी डेटा नहीं भेजेगा।

नया कुकी डेटा प्रारंभ में नहीं भेजा गया है, बी/सी इसे तब तक चालू करें जब तक आपके ब्राउज़र से अनुरोध सर्वर पर भेजा गया न हो कि नया कुकी डेटा सहेजा गया हो और अनुरोध के साथ भेजने के लिए उपलब्ध हो।

तब आप यह काम कैसे करते हैं? एक सफल सेट कुकी ईवेंट के बाद रीडायरेक्ट करें।

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'); 

यह भी प्रस्तुत बटन के रूप में झंडे के चित्रों का उपयोग करना संभव है? हां, अपने इनपुट बटन को स्टाइल करने के लिए सीएसएस का उपयोग करें।

प्रत्येक इनपुट के लिए एक आईडी जोड़ें: id="uk-button" और id="world-button"

सीएसएस:

#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; 
} 
+0

मैंने इसे अभी दिया है, यह एक चीज के अलावा बहुत अच्छा काम करता है - मैंने शुरुआत में यूके पर क्लिक करने के लिए क्लिक किया और यह कुकी सेट की, मैं फिर वापस गया और दुनिया पर क्लिक किया लेकिन उसने दुनिया के साथ कुकी पर प्रतिलिपि नहीं बनाई, यह सिर्फ यूके को फिर से दिखाया। प्रत्येक बार एक अलग चयन किए जाने पर कुकी पर पोंछना संभव है? – Rob

+0

सबमिट बटन के रूप में झंडे की छवियों का उपयोग करना भी संभव है? – Rob

+1

ने आपके सभी नए प्रश्नों के उत्तर देने के लिए अपना उत्तर अपडेट किया –

15

मैं चयन को $_SESSION चर में छोड़ दूंगा। जब तक वे निकल जाएंगे तब तक उनके साथ रहेगा। आप कुकी को काफी अच्छी तरह से इस्तेमाल कर सकते हैं। असल में दोनों का संयोजन बहुत अच्छा होगा, यह उन उपयोगकर्ताओं से संबंध रखता है जो कुकीज को यात्रा के दौरे पर जाने की अनुमति नहीं देते हैं, और जिन लोगों को कुकीज़ सक्षम हैं उन्हें केवल एक बार चुनना होगा।

संपादित करें:

<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; 
    } 

?> 

काम कर कोड का उदाहरण read this

+0

क्या कुछ कोड उदाहरणों के लिए यह संभव होगा? – Rob

+1

@Rob आपके साथी के लिए एक उदाहरण पोस्ट किया गया। उदाहरण के लिए – Fluffeh

+0

धन्यवाद। मैंने अपना प्रश्न थोड़ा सा अपडेट किया है, मुझे नहीं लगता कि यह मेरे पास अभी तक हो रहा है (इसलिए अतिरिक्त सहायता के लिए बक्षीस !!)। – Rob

0

यह अन्य पृष्ठों पर काम नहीं करेगा। पोस्ट चर सभी समय नहीं भेजता है। यह केवल फॉर्म जमा करते समय भेजता है। आप अपने काम के लिए कुकीज का उपयोग कर सकते हैं। वहां चर को सहेजें और इसे प्रत्येक पृष्ठ पर देखें।

1

$ _POST वैरिएबल में केवल एक अनुरोध में डेटा शामिल है (POST (HTTP) देखें) ताकि वे "क्लिक" या कुछ फॉर्म पोस्ट करने के बाद उचित सामग्री देखेंगे, इसलिए केवल आपके पृष्ठ पर अनुरोध के बाद।

उपयोगकर्ता सेटिंग्स के अधिक स्थायी भंडारण के लिए इन सेटिंग्स को "सत्र" डेटा में सहेजना आवश्यक है जो $ _SESSION चर में उपलब्ध हैं और लगातार हैं, इसलिए तब तक उपलब्ध रहेगा जब तक आपके आगंतुक आपके पृष्ठों को ब्राउज़ नहीं करेंगे। अधिक स्थायी लेकिन थोड़ा कम शुद्ध समाधान कुकीज़ पर सेटिंग्स को सहेज रहा है, जिसके लिए आप समाप्ति को परिभाषित कर सकते हैं ताकि अगली मुलाकात के दौरान उनका उपयोग भी किया जा सके।

कुछ उदाहरण देखें:

<?php 

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

... और दूसरी जगहों:

<?php 

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

या आप कुकीज़ का उपयोग कर सकते हैं:

<?php 

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

... और दूसरी जगहों:

$language = $_COOKIE['language']; 
2

यदि आप कुकीज़ का उपयोग नहीं करना चाहते हैं तो आप इसे इस तरह से कर सकते हैं।

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

तो आप 2 बटन, जब जहां एक अंग्रेजी है और अन्य जर्मन है या आप जो भी इच्छा।

<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'; 
    } 
} 
+0

अंतिम कोड बॉक्स में जहां यह कहता है '$ _SESSION [' language '] =' अंग्रेज़ी ';' क्या मैं इसे वास्तविक अंग्रेजी सामग्री से बदलता हूं? – Rob

+1

@Rob नहीं, आप यह निर्धारित करने के लिए सत्र चर का उपयोग करते हैं कि आपका कोड क्या करता है। यदि सत्र में उदाहरण के लिए 'एन'' है, तो आपके कोड में साइट को अंग्रेजी में प्रदर्शित किया गया है, जबकि यदि चर के पास' es'' है, तो आप साइट को स्पेनिश में प्रदर्शित करते हैं। – Fluffeh

+0

@Fluffeh मुझे नहीं लगता कि मैं इसे सही ढंग से समझ रहा हूं। तो पहला कोड बॉक्स हेडर पेज की तरह कुछ में जाना चाहिए? दूसरा स्पष्ट रूप से चयन है और तीसरा यह जांचना है कि कौन सी भाषा का चयन किया गया था? – Rob

0

आप वास्तव में सत्र/कुकीज़ की जरूरत है अगर आप चयन बनाए रखना चाहते हैं (या GET?lang=uk तरह के माध्यम से मूल्य गुजर रखने के लिए, लेकिन यह है कि बहुत ही सुंदर नहीं है)। वैसे, आपको एक हाइपरलिंक के भीतर एक छवि की आवश्यकता नहीं है जिसके डिफ़ॉल्ट व्यवहार अवरुद्ध है और इसका मूल रूप जावास्क्रिप्ट के साथ सबमिट किया गया है।

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

यह एक छवि है कि यह भी एक रूप सबमिट बटन के रूप में काम करेगा: आप बस कुछ इस तरह इस्तेमाल कर सकते हैं।

+0

धन्यवाद। मैं वास्तव में इस समय इस के साथ संघर्ष कर रहा हूं, आपको लगता है कि आप सभी के बारे में अच्छी जानकारी रखते हैं, क्या सत्र के चरणों के बारे में अधिक कोड दिखाना संभव होगा? – Rob

+0

क्षमा करें, मैंने अभी तक इस टिप्पणी को नहीं पकड़ा है। ऐसा लगता है कि इस दौरान, दूसरों ने कुछ बहुत अच्छे पॉइंटर्स प्रदान किए हैं। क्या आप अच्छे हैं या क्या कुछ विशिष्ट है जो मैं आपकी मदद कर सकता हूं? – ACJ

संबंधित मुद्दे