it-swarm-tr.com

Akıllı Arama Dizini'ne com_content ekstra alanları nasıl eklenir?

Nerede "onPrepareFinderContent" işleyen bir eklenti oluşturmak için herhangi bir öğretici veya talimatları bulabilirsiniz?

Com_content makalelerine bazı ek alanlar ekledim ve Finder motoru tarafından dizine eklenmesini istiyorum.

Dizine eklenecek FinderIndexerResult nesnesine yeni bir öğe eklemek için bir yol arıyorum.

Bu kod satırını 311 satırındaki eklentiler/Finder/content/content.php'de gördüm:

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

FinderIndexerHelper :: getContentExtras işlevi, dizine eklenecek FinderIndexerResult nesnesini kabul eder ve ardından ("varsayalım) 3dparty eklentisinin dizine eklenecek içeriği eklemesine veya değiştirmesine izin verir.

Bazılarınız bu konuda herhangi bir deneyime sahip ya da beni bazı iyi öğretici/belgelere işaret edebilir?

10
Cristiano

Com_content içinde birkaç ek alan yaptım. Bunu yapmak için kullanılan yöntem, kendi tablonuzu ve benzeri belirttiğiniz gibi oldukça özel olduğundan, bu bilgileri com_Finder içine birleştirilmiş almak için kullanabileceğiniz gerçekten tekrarlanabilir bir yöntem yoktur düşünüyorum.

Size önerim, Finder için içerik dizinleyici eklentisini çatallamak ve daha sonra eklediğiniz alanlara çağrı yapacak şekilde ayarlamak olacaktır.

Yapacağınız ilk şey, Finder'daki getListQuery'yi ekstra alanlar tablonuza katılmak üzere değiştirmektir:

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

Bundan sonra, ekstra alanlarınızı (JRegistry nesnesi?) Nasıl kaydettiğinize bağlı olarak, Finder'a sorguda bulunan ek alanlara bakmasını söylemeniz gerekir:

Sonunda bazı meta bilgiler olarak ekleyeceğinizi hissediyorum: https://github.com/joomla/joomla-cms/blob/staging/plugins/Finder/content/content.php#L286

Bu yardımcı olur umarım

4
Chad Windnagle

SobiPro-Akıllı Arama eklentisi için çalışırken, getItems, FinderIndexerResult olarak dizine eklenecek öğeleri işleme ve daha sonra, her öğe için index içinde ek alanlar ekledik, Talimatlar her ekstra alanın:

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