स्मार्ट खोज सूचकांक में com_content अतिरिक्त फ़ील्ड कैसे जोड़ें


10

मैं एक प्लगइन बनाने के लिए कोई भी ट्यूटोरियल या निर्देश प्राप्त कर सकता हूं जो "onPrepareFinderContent" को संभालता है?

मैंने com_content लेखों में कुछ अतिरिक्त फ़ील्ड जोड़े हैं और मैं चाहूंगा कि उन्हें खोजक इंजन द्वारा अनुक्रमित किया जाए।

मैं उस FinderIndexerResultऑब्जेक्ट में एक नया तत्व जोड़ने का तरीका ढूंढ रहा हूं जो अनुक्रमित होने वाला है।

मैंने कोड की इस लाइन को प्लग इन / खोजक / सामग्री / सामग्री में देखा है। लाइन 311 पर देखें:

// Get content extras.
FinderIndexerHelper::getContentExtras($item);

FinderIndexerHelper :: getContentExtras फ़ंक्शन FinderIndexerResult ऑब्जेक्ट को अनुक्रमित करने जा रहा है और फिर एक "onPrepareFinderContent" ईवेंट को ट्रिगर करता है, जो (मुझे लगता है) 3D कंटेंट को जोड़ने या संशोधित होने वाली सामग्री को संशोधित करने की अनुमति देता है।

आप में से कुछ को इस पर कोई अनुभव है या मुझे कुछ अच्छे ट्यूटोरियल / डॉक्यूमेंटेशन की ओर इशारा कर सकता है?

जवाबों:


4

मैंने com_content में कई अतिरिक्त फ़ील्ड किए हैं। मुझे लगता है कि ऐसा करने के लिए इस्तेमाल की जाने वाली विधि बहुत ही कस्टम है क्योंकि आप अपनी खुद की तालिका निर्दिष्ट करते हैं और इस तरह, वास्तव में एक दोहराव विधि नहीं है जिसका उपयोग आप इस जानकारी को com_finder में विलय करने के लिए कर सकते हैं।

मेरा सुझाव है कि आप खोजक के लिए सामग्री अनुक्रमणिका प्लगइन को फोर्क करें और फिर इसे आपके द्वारा जोड़े गए फ़ील्ड में कॉल करने के लिए सेट करें।

पहली चीज़ जो आप करेंगे, वह है अपने अतिरिक्त फ़ील्ड टेबल में शामिल होने के लिए खोजक में getListQuery को संशोधित करें:

https://github.com/joomla/joomla-cms/blob/staging/plugins/finder/content/content.php#L341

फिर उसके बाद, आप अपने अतिरिक्त फ़ील्ड (JRegistry ऑब्जेक्ट?) को कैसे बचाते हैं, इस पर निर्भर करता है कि आपको खोजकर्ता को क्वेरी में मिले अतिरिक्त फ़ील्ड्स को देखना होगा:

मुझे लगता है कि आप इसे कुछ मेटा जानकारी के रूप में जोड़ देंगे: https://github.com/joomla/joomla-cms/blob/staging/plugins/finder/content/content.php#L286

उम्मीद है की यह मदद करेगा


3

SobiPro-Smart खोज प्लगइन के लिए कार्य करना, हमने GetItems में अतिरिक्त फ़ील्ड जोड़ दिए हैं , आइटम को FinderIndexerResult के रूप में अनुक्रमित किया जाना है, और बाद में, प्रत्येक आइटम के लिए अनुक्रमणिका में , प्रत्येक अतिरिक्त फ़ील्ड के निर्देश जोड़ते हुए :

protected function index(FinderIndexerResult $item, $format = 'html')
{
...

            $fields = $this->_fields[$item->section];

            foreach ($fields as $f)
            {
                $nid = $f->get('nid');

                if (isset($item->$nid))
                {
                    $item->addInstruction(FinderIndexer::TEXT_CONTEXT, $nid);
                }
            }
...

धन्यवाद, आपके उत्तर ने मुझे सही दिशा की ओर इशारा किया;) मैंने अंततः एक खोजक प्लगइन (जेपीलुगिन का विस्तार) लिखा, जो onPrepareFinderContent इवेंट (FinderIndexerHontper :: getContentExtras द्वारा निकाल दिया गया) को लागू करता है। जैसा कि आपने दिखाया और तत्संबंधित अतिरिक्त फ़ील्ड:public function onPrepareFinderContent(FinderIndexerResult &$row) { .... $row->addInstruction(FinderIndexer::TEXT_CONTEXT, $field->id); $row->setElement($field->id, $field->value); .... }
क्रिस्टियानो

अति उत्कृष्ट! क्या आपको प्रश्न हल करना है?
ऐनीबल

@ क्रिसटो: क्या आपने कभी इसका समाधान किया? इसका कोई स्वीकृत उत्तर नहीं है, और मैं एक ही समस्या का सामना कर रहा हूं - क्या आपने कभी पता लगाया है कि इन दिनचर्या का उपयोग कैसे करें?
जीडीपी

भले ही उत्तर मूल लेखक द्वारा स्वीकार नहीं किया जाता है ... कि यह मेरे स्मार्ट खोज प्लगइन पर कैसे काम करता है ;-)
Anibal
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.