मैंने एक कस्टम मॉड्यूल बनाया जो उपयोगकर्ता को विभिन्न कस्टम नियमों के आधार पर रीडायरेक्ट करता है। मेरी समस्या यह पता लग रही है कि कोड कहां रखा जाए। अभी, मेरे पास है:Drupal में रीडायरेक्ट तर्क कहां रखा जाए?
function mymodule_init() {
mymodule_redirect_now();
}
"mymodule_redirect_now" आम तौर पर ज्यादातर मामलों में कुछ भी नहीं है, लेकिन कभी कभी यह "drupal_goto" में हो सकता है बंद निकाल दिया जा रहा है। यह अभ्यास में काम करता है, लेकिन अन्य मुद्दों का कारण बनता है:
- क्रॉन फ़ाइलों में से कोई भी स्वचालित रूप से विफल रहता है। (यानी cron.php)
- ईकाई परीक्षण असफल (के रूप में वे क्योंकि यह "गोटो" एक विफलता के रूप में देखा जाता है पूर्ण नहीं कर सकता)
कहाँ इस तरह तर्क अनुप्रेषित डाल करने के लिए सबसे सही जगह होगा , असफल यूनिट परीक्षणों और क्रॉन नौकरियों में विफल होने से बचने के लिए?
अद्यतन
मैं इस सवाल को आसान बनाने, बल्कि यह एक और सरल प्रश्न के नीचे लाकर कोशिश की है। असल में, मैं निम्नलिखित कोड को क्रियान्वित करने से क्रॉन रोकने के लिए जानना चाहता हूँ:
function mymodule_init() {
mymodule_redirect_now();
}
क्रॉन हमेशा init में कुछ भी कार्यान्वित करता है, लेकिन इस मामले में, मान लें रीडायरेक्ट करना तर्क है कि करते हैं:
function mymodule_redirect_now()
{
if (!$currentPathIsUS && $ipIsUS) { // lets pretend for now this always happens...
drupal_goto("us");
}
}
असल में, यदि उपयोग में यूएस आईपी है और वर्तमान पथ यूएस पथ नहीं है, तो उसे उन्हें/हमारे पथ पर रीडायरेक्ट करना होगा।
समस्या यह है कि, यदि मैं कमांड लाइन से या ब्राउज़र से क्रॉन चलाता हूं, तो यह किसी अन्य फ़ंक्शन पर जाने से पहले उपरोक्त कोड को हिट करता है, लेकिन "drupal_goto" की वजह से, यह वास्तव में क्रॉन निष्पादित नहीं करता है कोड।
- क्या मैं ऊपर क्या कर रहा हूं यह करने के लिए यह बुरा अभ्यास है? और यदि हां, तो बेहतर विकल्प क्या है?
- मैं इस मामले में इनिट कोड को निष्पादित करने से क्रॉन को कैसे रोक सकता हूं?
मैं एक जगह है जहाँ से मैं जांच कर के रूप में init का उपयोग कर रहा है, और उस पर आधारित है, drupal_goto का उपयोग कर उपयोगकर्ता अनुप्रेषित। समस्या यह है कि यह इकाई परीक्षण और क्रॉन नौकरियों को तोड़ देता है, क्योंकि कुछ मामलों में वे नियमों को ट्रिगर कर रहे हैं। तो कुछ पथों के लिए विशिष्ट अपवादों के बिना, मैं जानना चाहता हूं कि ऐसे नियमों को स्थापित करने का सामान्य तरीका क्या है जो उपयोगकर्ता को रीडायरेक्ट करते हैं जो पहली बार सर्वर पर आते हैं? – coderama
कोई "सामान्य तरीका" नहीं है, जिस तरह से आप परीक्षण कर रहे हैं उस पर निर्भर है, जब तक हम नियम मॉड्यूल के बारे में बात नहीं कर रहे हैं (जिसका अपना [दस्तावेज़ीकरण] है (https://www.drupal.org/documentation/modules/नियम))। Drupal में लॉग इन नहीं किए गए सभी विज़िटर एक ही उपयोगकर्ता हैं (उपयोगकर्ता आईडी 0), इसका मतलब यह है कि आप उपयोगकर्ता ऑब्जेक्ट पर एक चर को सहेजने के लिए सहेज नहीं सकते हैं, लेकिन मुझे संदेह है कि आप इसे 'user_cookie_save ($ मानों) के साथ हल कर सकते हैं। '। आपकी वास्तविक स्थितियों के आधार पर आपको अपने रीडायरेक्ट को प्राप्त करने के लिए विभिन्न ड्रूपल हुक का उपयोग करना होगा। –
इस छद्म कोड के साथ एक आम समझ पर हम कर रहे हैं: 'अगर ($ visitor_hits_server_first_time === सच) {then_only_do_redirect_once(); } '? –