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?

Cristiano
sumber

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

Chad Windnagle
sumber
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);
                }
            }
...
Anibal
sumber
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