drupal कस्टम दिनांक स्वरूप(पीएचपी तर्क के साथ कॉलबैक)




drupal-6 drupal-7 (4)

मैं एक गतिशील php दिनांक स्वरूप बनाना चाहता हूँ। उदाहरण: नोड का समय दिखाएं, अगर आज प्रकाशित किया गया था और केवल दिन / महीने जब आज के समय में बड़े होते हैं। मुझे यह प्रारूप द्रुपल में उपलब्ध होना चाहिए, जैसे कि ड्रुपल में अन्य पूर्वनिर्धारित दिनांक प्रारूप (न सिर्फ थीम स्तर पर)

मुझे hook_date_format_types के लिए (डी 7 केवल) हुक मिला लेकिन यहां तक ​​कि वह भी कॉलबैक के लिए अनुमति नहीं देता जहां मैं इस PHP तर्क को परिभाषित कर सकता हूं।

क्या किसी को पता है कि हुक यह संभव बना सकता है? या एक मॉड्यूल जो यह करता है?


आप अपना कस्टम दिनांक स्वरूपण जोड़ने के लिए दिनांक एपीआई मॉड्यूल का उपयोग कर सकते हैं। दिनांक एपीआई मॉड्यूल दिनांक मॉड्यूल के अंदर है। दिनांक एपीआई मॉड्यूल को सक्षम करने के बाद आप अपना कस्टम प्रारूप जोड़ने के लिए "व्यवस्थापक / सेटिंग्स / तिथि-समय / प्रारूप / जोड़" पथ जा सकते हैं।

"व्यवस्थापक / सेटिंग्स / दिनांक-समय / प्रारूप / कॉन्फ़िगर" दिनांक प्रारूपों को कॉन्फ़िगर करने का पथ है।

इन पर एक नज़र डालें हैप्पी कोडिंग

धन्यवाद आरटी


आप node.tpl.php पर जा सकते हैं (संभवत: साइटों / सभी / थीम्स / थीम_नाम / नोड। Pl.php) में यहां आप $ निर्मित वैरिएबल को पुनः प्राप्त कर सकते हैं, ताकि आप अपने कस्टम फ़ंक्शन का उपयोग कर सकते हैं और आप जितनी चाहें बनाई गई $ बदल सकते हैं। इसके बाद सभी नोड्स आपके स्वरूपित दिनांक का उपयोग करेंगे।

रेगैट्स, चिंतन


विशेषताएं मॉड्यूल का उपयोग करें एक फीचर बनाएं

परिणामी सुविधा मॉड्यूल में, [सुविधा]। मॉड्यूल फ़ाइल पर, एक हुक_एनोडिपी फ़ंक्शन बनाएं और फ़ील्ड को सशर्त स्टेटमेंट के साथ प्रारूपित करें जो वर्तमान तिथि () को ध्यान में रखता है कि तिथि कैसे प्रदर्शित होगी और इसे $ नोड में फ़ीड करें -> सामग्री var

और यह तरीका है कि रॉकस्टार इसे (-;


Drupal6 में, format_date() की तारीख और समय format_date() । इसके अलावा, format_date() कॉलबैक की अनुमति नहीं देता है, लेकिन यह एक कस्टम स्ट्रिंग की अनुमति देता है। यही वह जगह है जहां आप एक चाल लागू कर सकते हैं: वहां स्ट्रिंग को हार्डकोडिंग के बजाय, आप एक फ़ंक्शन कॉल करते हैं जो स्ट्रिंग देता है।

function mydate_format($timestamp) {
  $now = time();
  if (($now - $timestamp) < (60*60*24)) {
    return "H:i";
  }
  else {
    return "d:m:Y";
  }
}

print format_date($timestamp, 'custom', mydate_format($timestamp));

दूसरा विकल्प एक डेट-टाइमस्टैम्प को फिर से परिभाषित करना है, लेकिन यह हैक और सीमित दोनों है दिनांक-प्रारूपों को variable_get () के साथ परिभाषित किया जाता है, लेकिन साथ टाइमस्टैम्प पास नहीं करते ; इसलिए टाइमस्टैम्प के मूल्य के आधार पर स्वरूप बदलने के आपके उदाहरण इस तरह संभव नहीं हैं।

Settings.php में :

$conf['date_format_long'] = $conf['debug'] ? 'r' : 'l, F j, Y - H:i';

यह एक मान से दूसरे में बदल जाएगा, इस आधार पर कि क्या आपके settings.php में एक ध्वज "डीबग" सेट है, जो कि सही है या नहीं। जैसा कि उल्लेख किया गया है: इसका उपयोग सीमित है, क्योंकि आप किसी संदर्भ को नहीं प्राप्त कर सकते हैं।

तीसरा विकल्प, दिनांक एपीआई का उपयोग करना है जो ऑनलाइन को कॉन्फ़िगर करने योग्य समय-स्वरूप प्रदान करता है। लेकिन यह दोनों अनाड़ी और असुरक्षित है (अपने डाटाबेस में एक्जीक्यूटेबल PHP इनपुटिंग)। यह बहुत बड़े मॉड्यूल-सेट पर भी निर्भर करता है। और पहले समाधान के रूप में एक ही नकारात्मक पक्ष है: आप format_date का उपयोग नहीं कर सकते, लेकिन format_date() बजाय एक संशोधित फ़ंक्शन कॉल का उपयोग करना चाहिए। The Drupal.org डेट थीमिंग पुस्तिका में सभी विकल्पों को देखें

GOTCHA सभी मामलों में ड्रपल कैश्ड सामग्री के लिए इस फ़ंक्शन को नहीं बुलाएगा। यदि आप तिथियों को सचमुच गतिशील बनाना चाहते हैं तो आपको या तो सभी को कैशिंग से बचने की ज़रूरत है, या क्लाइंटसाइड जावास्क्रिप्ट में डेट-फॉर्मेटिंग को लागू करना है।

टीएल; डीआर : आप थीम-स्तरीय कोड में से कुछ को बदलने के बिना डायनामिक डेट-फॉर्मेट नहीं कर सकते। कॉलबैक-फ़ंक्शन का उपयोग करके "कस्टम" डेटफोर्मेट बनाने के लिए सरलतम, कार्यशील समाधान है।