कई टीवी पर एक खोज करते हैं

एक शुरुआत के लिए - एक छोटा विषयांतर। हाल ही में, उन्होंने मुझे एक रियल एस्टेट एजेंसी की साइट के लिए अपार्टमेंट का एक छोटा डेटाबेस बनाने के लिए काम करने का निर्देश दिया। हां, ऐसे कि एक ही समय में 5 मापदंडों के साथ अपार्टमेंट खोजना संभव था - शहर, जिला, कमरों की संख्या, लेआउट और कीमत। खैर, इतना है कि यह सब व्यवस्थापक पैनल में बनाया गया था और आसानी से, निश्चित रूप से संपादित किया गया था। लेकिन मुझे यह कहना होगा कि मैंने अलग-अलग सीएमएस के साथ काम किया है - महंगे और भारी Bitrix से लेकर स्व-निर्मित सरल सरल इंजन तक, और अंत में मैंने MODx का विकल्प चुना - के लिए, विज्ञापन / विरोधी-विज्ञापन की गणना नहीं करता, लेकिन एक ही Bitrix पर क्या किया गया था एक सप्ताह (अर्थात्, एक साधारण कॉर्पोरेट वेबसाइट), MODx चुपचाप एक दिन में किया जाता है।



मैं इसके लिए क्या लिख ​​रहा हूँ? लगभग किसी भी सीएमएस में, इस कार्य को लागू करने के लिए, मुझे अतिरिक्त कोड लिखना होगा और हर तरह से सब कुछ करना होगा। MODx में, यह विशेष रूप से मानक इंजन टूल्स का उपयोग करके हल किया गया है, और केवल एक चीज जिसे आपको "पेन" के साथ लिखना है, वह खोज फ़ॉर्म है। यह स्पष्ट नहीं है (जब मुझे एहसास हुआ कि मुझे प्रलेखन के माध्यम से अफवाह फैलानी थी) - लेकिन यह सब उपयोगी है।



इसलिए, कार्य को निम्नलिखित चरणों में विभाजित किया गया है:

  1. खोजे जाने वाले गुणों के लिए एक टीवी बनाएं।

    खोज परिणामों को प्रदर्शित करने के लिए एक टेम्पलेट और तर्क को परिभाषित करें।

    स्वयं खोज प्रपत्र बनाएँ।

    मुझे लगता है कि जो लोग MODx से परिचित हैं, उनके पास यह बताने का कोई कारण नहीं है कि टीवी क्या है। निकटतम एनालॉग जो मैंने कभी देखा है वह बिट्रिक्स में सूचना ब्लॉक गुण है। यह बिल्कुल एक ही बात नहीं हो सकती है, लेकिन इस मामले में निर्माण के तर्क का समान उपयोग किया जा सकता है।



    शब्दार्थ, हमारे अपार्टमेंट का डेटाबेस प्रकाशनों के साथ एक कंटेनर होगा (दस्तावेजों के एक अलग समूह में आवंटित किया जाता है ताकि कोई भ्रम न हो)। एक अपार्टमेंट - एक प्रकाशन, और अपार्टमेंट के बारे में प्रत्येक प्रकाशन के लिए इस मामले में टीवी पैरामीटर इन समान गुणों की भूमिका निभाएंगे। कुछ इस तरह:



    दस्तावेज़ संरचना

    प्रकाशन गुण



    ताकि एक अपार्टमेंट के साथ एक प्रकाशन को संपादित करते समय हमें यहां ऐसी सुंदरता मिले, हम "संसाधन प्रबंधन" -> "पैरामीटर (टीवी)" पर जाएं, और प्रत्येक पैरामीटर के लिए हम इस तरह की एक ड्रॉप-डाउन सूची निर्धारित करते हैं:



    पैरामीटर सेट करें



    हां, संभावित मानों के लिए विभाजक "" है, और डिफ़ॉल्ट मान, बस मामले में, खाली है।



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



    [!Ditto? &tpl=`Apartments` &startID=`52` &filter=`tvrooms,@EVAL return $_POST['rooms'];,1|tvcity,@EVAL return $_POST['city'];,1|tvregion,@EVAL return $_POST['region'];,1|tvplan,@EVAL return $_POST['plan'];,1|tvcost,@EVAL return $_POST['cost'];,1` &noResults=`, .`!]







    आइए देखें कि यह कॉल क्या करता है।



    & tpl = `Apartments` - हम परिभाषित करते हैं कि आउटपुट के लिए टेम्प्लेट के साथ कैसे पाया गया प्रकाशनों को कहा जाएगा। मुझे लगता है कि इसे बनाने के लिए अलग से कहने की जरूरत नहीं है कि डिट्टो के लिए सामान्य हिस्सा।



    & startID = `52` - प्रकाशन कंटेनर की आईडी जिसके लिए चयन किया जाता है। हमारे मामले में, जैसा कि स्क्रीनशॉट में देखा जा सकता है, यह 52 है।



    & फ़िल्टर = `टीवी रूम, EVAL रिटर्न $ _POST ['कमरे']; 1 ... सबसे जादुई चीज है। यह, जैसा कि आप अनुमान लगा सकते हैं, एक फिल्टर है जिसके द्वारा हमें जिन मूल्यों की आवश्यकता नहीं है, उन्हें बाहर निकाल दिया जाता है और जिन्हें हमें ज़रूरत होती है उन्हें चुना जाता है। उद्धृत तर्क में, यह है: "सभी दस्तावेजों का निराकरण करें जिनके टीवी पैरामीटर कमरे सुपरग्लोबल सरणी $ _POST से php चर कमरों के बराबर नहीं हैं"



    यही है, हमारे पास तीन तर्क हैं, अल्पविराम द्वारा अलग किए गए हैं। पहला पैरामीटर है जिसके द्वारा हम फ़िल्टर करते हैं (यदि यह एक टीवी पैरामीटर है - तो यह इंगित करने के लिए इसके नाम पर टीवी जोड़ें)। दूसरा पैरामीटर का मान है। इस मामले में, हम $ _POST से चर के सीधे संदर्भ के साथ PHP कोड को निष्पादित करने के लिए EVAL कॉल का उपयोग करते हैं। खैर, तीसरा पैरामीटर एक तार्किक ऑपरेटर का सूचक है जो पैरामीटर और मूल्य को जोड़ता है। एक इकाई का अर्थ है "बराबर नहीं", हां (इसके बारे में अधिक यहां पढ़ा जा सकता है )। खैर, वास्तव में, ऐसे फ़िल्टरिंग नियमों को तार्किक "OR" के अनुरूप "|" प्रतीक का उपयोग करके जोड़ा जा सकता है। अपने सभी टीवी मापदंडों को एक फ़िल्टर में संयोजित करने के लिए हम क्या कर रहे हैं।



    वैसे, ध्यान दें कि टीवी पैरामीटर और $ _POST में चर के नाम समान हैं। यह सुविधा के लिए है, ताकि कोई भ्रम न हो।



    और अब अंतिम स्पर्श - हम एक खोज फॉर्म के साथ एक हिस्सा बनाते हैं, जिसमें हम ड्रॉप-डाउन सूचियों को कहते हैं - अनुमान कैसे? - हां, हां, टीवी मापदंडों की तरह। हम मापदंडों को सेट करते समय विकल्प मानों को उसी तरह लिखते हैं (जब तक कि मैंने स्वचालित रूप से ऐसा करने के लिए एक रास्ता खोजने की कोशिश नहीं की, लेकिन मैं निश्चित रूप से कोशिश करूंगा)। और फॉर्म टैग की कार्रवाई विशेषता में, डिटो को कॉल के साथ खोज पृष्ठ का URL निर्दिष्ट करें। उदाहरण के लिए, जैसा कि हम चाहते हैं, चंक को कॉल करें - और इसे उन सभी पृष्ठों पर डालें, जिनसे हम {{SearchForm}} कॉल करके खोज करना चाहते हैं। देखा!



    इस तरह आप PHP कोड की एक भी पंक्ति लिखे बिना, किसी भी उन्नत मापदंडों द्वारा बाइंडिंग और खोज प्रपत्र बना सकते हैं। इसका आनंद लें!



All Articles