it-swarm-id.com

Cara menambahkan kolom tambahan com_content ke Indeks Pencarian Cerdas

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 objek FinderIndexerResult 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?

10
Cristiano

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 itu, 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 ke 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.php#L286

Semoga ini membantu

4
Chad Windnagle

Bekerja untuk plugin SobiPro-Smart Search, kami telah menambahkan bidang tambahan di getItems, memproses item yang akan diindeks sebagai FinderIndexerResult, dan kemudian, di 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);
                }
            }
...
3
Anibal