Cara menambahkan kolom tambahan com_content ke Indeks Pencarian Cerdas


10

Di mana saya dapat menemukan tutorial atau instruksi untuk membangun sebuah plugin yang menangani "onPrepareFinderContent"?

Saya telah menambahkan beberapa bidang tambahan ke artikel com_content dan saya ingin mereka diindeks oleh mesin Finder.

Saya mencari cara untuk menambahkan elemen baru ke FinderIndexerResultobjek yang akan diindeks.

Saya telah melihat baris kode ini di plugins / finder / content / content.php di baris 311:

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

Fungsi FinderIndexerHelper :: getContentExtras menerima objek FinderIndexerResult yang akan diindeks dan kemudian memicu acara "onPrepareFinderContent", yang (saya kira) memungkinkan plugin 3dparty untuk menambah atau memodifikasi konten yang akan diindeks.

Beberapa dari Anda memiliki pengalaman dalam hal ini atau dapat mengarahkan saya ke tutorial / dokumentasi yang bagus?

Jawaban:


4

Saya telah melakukan sejumlah bidang tambahan di com_content. Saya pikir karena metode yang digunakan untuk melakukan ini cukup khusus ketika Anda menentukan tabel Anda sendiri dan semacamnya, tidak ada metode yang benar-benar dapat diulang yang dapat Anda gunakan untuk mendapatkan informasi ini digabungkan ke dalam com_finder.

Saran saya kepada Anda adalah untuk memotong plugin pengindeks konten untuk finder dan kemudian mengaturnya untuk memanggil bidang yang telah Anda tambahkan.

Hal pertama yang akan Anda lakukan adalah memodifikasi getListQuery di finder untuk bergabung dengan tabel bidang tambahan Anda:

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

Kemudian setelah itu, tergantung pada bagaimana Anda menyimpan bidang tambahan Anda (objek JRegistry?), Anda harus memberi tahu finder untuk melihat bidang tambahan yang Anda miliki dalam kueri:

Saya merasa Anda akhirnya akan menambahkannya sebagai beberapa informasi meta: https://github.com/joomla/joomla-cms/blob/staging/plugins/finder/content/content/content.cp#L286

Semoga ini membantu


3

Bekerja untuk plugin SobiPro-Smart Search, kami telah menambahkan bidang tambahan di getItems , memproses item yang akan diindeks sebagai FinderIndexerResult, dan kemudian, dalam indeks untuk setiap item, menambahkan instruksi dari setiap bidang tambahan:

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);
                }
            }
...

Terima kasih, jawaban Anda mengarahkan saya ke arah yang benar;) Saya akhirnya menulis sebuah plugin finder (extends JPlugin) yang mengimplementasikan event onPrepareFinderContent (dipecat oleh FinderIndexerHelper :: getContentExtras). Saya kemudian menambahkan instruksi ketika Anda menunjukkan dan bidang tambahan yang sesuai: public function onPrepareFinderContent(FinderIndexerResult &$row) { .... $row->addInstruction(FinderIndexer::TEXT_CONTEXT, $field->id); $row->setElement($field->id, $field->value); .... }
Cristiano

Luar biasa! Apakah Anda harus menandai pertanyaan sebagai diselesaikan?
Anibal

@Cristiano: Apakah Anda pernah menyelesaikan ini? Tidak ada jawaban yang diterima, dan saya dihadapkan dengan masalah yang sama - apakah Anda pernah memikirkan cara menggunakan rutinitas ini?
PDB

Bahkan jika jawabannya tidak diterima oleh penulis asli ... begitulah cara kerjanya pada plugin pencarian pintar saya ;-)
Anibal
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.