
कुछ हद तक Habré पर MODX ब्लॉग की कल्पना की गई है, इसे थोड़ा पुनर्जीवित करना आवश्यक है। मैं आपको अपने घटक से परिचित कराना चाहता हूं, जिसे हाल ही में लगभग पूरी तरह से फिर से लिखा गया है और विस्तारित किया गया है।
इसे
mSearch कहा जाता है और शुरू में इसे सबसे सरल साइट खोज के रूप में कल्पना की गई थी, जो रूसी भाषा की आकृति विज्ञान को ध्यान में
रखती है । यही है, आपको स्फिंक्स और अन्य गंभीर प्रणालियों को स्थापित किए बिना, किसी भी साइट के लिए एक सरल और आसान समाधान की आवश्यकता थी।
Googling की प्रक्रिया में, मुझे
phpMorphy के साथ इस कार्य
का एक
दिलचस्प कार्यान्वयन मिला । अलग-अलग शब्दकोश रूपों की पीढ़ी के साथ एक सूचकांक के साथ एक मेज पर पूर्ण-पाठ खोज। मुझे यह विचार पसंद आया, इसने मेरे मापदंड को अनुकूल बनाया और मैंने इस पद्धति के आधार पर अपना निर्णय लिखा।
mSearch
यह एक स्निपेट और प्लगइन है। बचत करते समय स्निपेट खोज, प्लगइन अनुक्रमित दस्तावेज़।
स्थापना, सामान्य रूप से, रिपॉजिटरी से, 4 क्लिक में। इस मामले में, आपको रूसी भाषा के लिए phpMorphy शब्दकोशों को डाउनलोड करने और स्थापित करने के लिए कहा जाएगा - मना न करें।
यदि आप किसी उत्पादन साइट पर एक्सटेंशन स्थापित करते हैं, तो आपको मौजूदा दस्तावेज़ों को अनुक्रमित करना होगा। यह बस किया जाता है:
[[!mSearch?
&indexer=`1`
&offset=`0`
&limit=`200`
]]
पहला पैरामीटर दिखाता है कि हम देख नहीं रहे हैं, लेकिन अनुक्रमण कर रहे हैं, और दूसरी और तीसरी बड़ी साइटों के लिए चयन सीमा है। यदि बहुत सारे दस्तावेज़ हैं, और सर्वर मर चुका है, तो आपको ऑफसेट मूल्य को बदलते हुए, कई उदाहरणों में काम करना होगा, इस उदाहरण में, पहले 0, फिर 200, फिर 400, आदि।
यदि दस्तावेज़ हैं, तो साइट पर स्थापना के बाद केवल एक बार इंडेक्सिंग की आवश्यकता होती है। फिर दस्तावेज़ों को सहेजते समय mSearchIndexer प्लगइन इंडेक्स करेगा।
आप स्निपेट गुणों में सभी खोज मानकों को देख सकते हैं, और यहाँ मैं केवल मुख्य लिखूंगा:
- & अनुक्रमणिका - अनुक्रमण सक्षम करें। स्थापना के बाद केवल एक बार की जरूरत है।
- इंडेक्सफिल्ड्स - इंडेक्स के लिए कौन से संसाधन क्षेत्र हैं?
- & अक्षम करेंPMMphphy - phpMorphy अक्षम करें। खोज बहुत कम सटीक होती है।
- & शामिल करें - परिणाम प्रदर्शित करते समय, मिनीशॉप से माल के गुण शामिल करें।
- &TVTV शामिल करें - जब सामानों को आउटपुट करते हैं, तो टीवी पैरामीटर शामिल करें।
- & TVList शामिल करें - आउटपुट के लिए अल्पविराम द्वारा अलग किए गए टीवी मापदंडों के नामों की एक सूची।
- & माता-पिता - उन माता-पिता की सूची जो 10 संलग्नकों की गहराई की खोज करेंगे, जिन्हें अल्पविराम द्वारा अलग किया गया है।
- & रिटर्न - फ़्रेम किए गए परिणामों के बजाय, अल्पविराम द्वारा अलग किए गए पाया पृष्ठों की आईडी लौटाएं।
- & संसाधन - आवश्यक संसाधनों की एक सूची, अल्पविराम से अलग, जिसमें खोज की जाएगी।
- & टेम्प्लेट - केवल इन टेम्प्लेट नंबरों के साथ संसाधनों के बीच खोजें, कॉमा द्वारा अलग किए गए।
- & tpl - आउटपुट डिज़ाइन टेम्पलेट।
- और कहाँ - पाया संसाधनों के उत्पादन को ठीक करने के लिए JSON अभिव्यक्ति।
प्लगइन में पैरामीटर इंडेक्सफिल्ड, शामिलटीवी, लिस्टटीवीलिस्ट, डिसेबलपॉपरमोर्फी शामिल हैं। वे उन्नयन के दौरान संसाधन को अनुक्रमित करने के लिए जिम्मेदार हैं।
ये पैरामीटर प्राथमिक अनुक्रमण (और अनुक्रमणिका = `1`) को भी प्रभावित करते हैं।
कृपया ध्यान दें कि कई मापदंडों को गलती से getResource की तरह नहीं कहा जाता है। इसका मतलब है कि वे उसी तरह काम करते हैं। स्निपेट पूरी तरह से गेटपेज के माध्यम से पेजेशन आउटपुट का समर्थन करता है और कुछ मामलों में, सुरक्षित रूप से getResources बदल सकता है।
खोज सूचकांक तालिका पर आधारित है, जो एक अच्छी गति देता है, यहां तक कि बड़ी संख्या में दस्तावेजों के साथ, मैंने ~ 6000 पीसी की जांच की।
बेशक, यह विधि आदर्श नहीं है, प्रासंगिकता के साथ, सब कुछ चिकना नहीं है, लेकिन रूसी भाषा और MODX के लिए किसी भी मामले में बेहतर समाधान नहीं है। मेरी राय में, मुख्य बात यह है कि आप बहुत अच्छी तरह से निर्दिष्ट कर सकते हैं कि कहाँ देखना है, किस टेम्पलेट के साथ, जिसमें माता-पिता, आदि। खैर, और जहां पैरामीटर आपको खोज को पूरी तरह से अनुकूलित करने की अनुमति देता है।
आप
यहां खोज
को चला
सकते हैं । ध्यान दें कि आकृति विज्ञान केवल रूसी भाषा के लिए काम करता है।
MSearch का तार्किक उपयोग स्टोर के उत्पादों की खोज करना और getResources के बजाय प्राप्त परिणामों को प्रदर्शित करना था। और यह, बदले में, पाया उत्पादों के लचीले फ़िल्टरिंग के लिए mFilter स्निपेट के लेखन में विकसित हुआ।
mFilter
यह mSearch में दूसरा स्निपेट है। यह स्वतंत्र रूप से पाया (या पूर्व-निर्दिष्ट) संसाधनों के लिए फ़िल्टर बनाता है, पंजीकरण के लिए विखंडू का उपयोग करता है। डिफ़ॉल्ट रूप से डिजिटल मानों को एक स्लाइडर के रूप में प्रदर्शित किया जाता है, टेक्स्ट मान चेकबॉक्स के रूप में।
फिल्टर संसाधनों के टीवी मापदंडों, और / या मिनीशॉप उत्पादों के गुणों के अनुसार बनाए जाते हैं।
ऐसा दिखता है ।
आप "सोनी" वाक्यांश के लिए मेरे डेमो साइट पर दाईं ओर खोज परिणामों पर बाईं ओर पैरामीटर देखते हैं। प्रत्येक पैरामीटर के पास संख्याएं होती हैं - यह उन परिणामों की संख्या है जो आपको इस पैरामीटर का चयन करते समय मिलेगा। यही है, सभी फ़िल्टर विकल्प मक्खी पर गणना किए जाते हैं, और असंभव संयोजन अक्षम होते हैं।
यह विशेष रूप से अजाक्स (उदाहरण के लिए
js स्क्रिप्ट संलग्न) के माध्यम से काम करता है। जब पृष्ठ लोड होता है, तो फिल्टर बनाने के लिए सभी आवश्यक संसाधन गुण चुने जाते हैं, कैश्ड, और फिल्टर का रूप प्रदर्शित किया जाता है। हर बार जब फ़ॉर्म को बदल दिया जाता है, तो इसे सर्वर को भेज दिया जाता है और फ़िल्टर स्विच के परिणाम और स्थिति वापस कर दिए जाते हैं।
यह काफी तेजी से काम करता है, लेकिन अभी तक वास्तव में बड़े संस्करणों पर परीक्षण नहीं किया गया है।
MFilter के मुख्य पैरामीटर:
- & संसाधन - काम के लिए संसाधनों की एक सूची, अल्पविराम द्वारा अलग। यदि निर्दिष्ट नहीं है, तो यह mFilter के माध्यम से परिणामों की खोज करने की कोशिश करेगा।
- & TV शामिल करें - फ़िल्टर बनाने के लिए टीवी सक्षम करें
- & TVTVList शामिल करें - इन टीवी का उपयोग करें, जिन्हें अल्पविराम द्वारा अलग किया गया है
- & बहिष्कृत TVList - इन टीवी का उपयोग न करें, जिन्हें अल्पविराम द्वारा अलग किया गया है
- &MSMS - फ़िल्टर बनाने के लिए मिनीशॉप पैरामीटर लें
- &MSList शामिल करें - फ़िल्टर के लिए उपयोग करने के लिए मिनीशॉप उत्पादों के कौन से क्षेत्र
- & सॉर्टफ़िल्टर - उपसर्गों के साथ फ़िल्टर आउटपुट ऑर्डर, उदाहरण के लिए: `tv_category, tv_subcategory, ms_add2, tv_color, tv_size, tv_action, ms_prat`
- + यदि आप संसाधनों की खोज करते हैं, तो कोई भी खोज पैरामीटर
- + कोई भी getPage और \ या getResources \ msGetResources पैरामीटर
फ़िल्टर परिणामों को प्रदर्शित करने के लिए,
getPage ,
getResources स्निपेट
आवश्यक हैं (यदि मिनीशॉप - msGetResources का उपयोग कर
रहे हैं )।
इसके अलावा jquery प्लगइन्स आवश्यक हैं:
jQuery 1.7+ - मुख्य सहायक
jQueryUI 1.8+ - कीमतों और अन्य संख्यात्मक मूल्यों के लिए केवल स्लाइडर विजेट की आवश्यकता है
jQuery का फॉर्म 2.7+ - एक फॉर्म सबमिट करना और एक प्रतिक्रिया प्राप्त करना
मिनीशॉप स्टोर की एक निश्चित श्रेणी के उत्पादों को वापस लेने के लिए, आप getCatIds स्निपेट का उपयोग कर सकते हैं:
if (!empty($_REQUEST['query'])) {return;} $parent = $modx->resource->id; $tmp = $modx->getChildIds($parent); if (empty($tmp)) {return 0;} $tpls = explode(',', $modx->getOption('minishop.goods_tpl')); $q = $modx->newQuery('modResource', array('id:IN' => $tmp, 'template:IN' => $tpls, 'deleted:!=' => 1, 'published' => 1)); $q->select('id'); if ($q->prepare() && $q->stmt->execute()) { $ids = $q->stmt->fetchAll(PDO::FETCH_COLUMN, 0); return implode(',', $ids); }
कॉल उदाहरण:
[[!mFilter?
&resources=`[[!getCatIds]]`
&includeTVs=`1`
&includeTVList=`category,color,size,action`
&includeMS=`1`
&includeMSList=`add2,price`
&tpl=`tpl.msGoods.row`
&templates=`5`
&sortFilters=`tv_category,tv_subcategory,ms_add2,tv_color,tv_size,tv_action,ms_price`
]]
निष्कर्ष
सभी डिज़ाइन चंक्स और काम के लिए एक js स्क्रिप्ट शामिल हैं। बेशक, यह एक तथ्य नहीं है कि आप पहली बार सब कुछ ठीक से कॉन्फ़िगर कर पाएंगे, इसके लिए आपको MODX, jQuery के कुछ ज्ञान और अजाक्स की समझ की आवश्यकता होगी। सभी के लिए "काम नहीं करता है!", सबसे पहले, जावास्क्रिप्ट त्रुटियों के लिए अपने ब्राउज़र कंसोल में देखें।
लेकिन मैं, जैसा कि मैं कर सकता था, एक फिल्टर के निर्माण के कार्य को सरल बनाने की कोशिश की। और अब, एक निश्चित इच्छा के साथ, आप इसे अपनी वेबसाइट / स्टोर पर कर सकते हैं।
आप मेरी
डेमो साइट के व्यवस्थापक पैनल में देख सकते हैं कि फ़िल्टर और खोज कैसे सक्षम हैं। लॉगिन और पासवर्ड:
परीक्षण ।
वैसेMFilter पर सभी काम का आदेश दिया गया था और
सरल ड्रीम वेब स्टूडियो द्वारा भुगतान किया गया था।