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


10

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.

FinderIndexerResultDizine eklenecek nesneye yeni bir öğe eklemek için bir yol arıyorum .

Bu kod satırını 311 satırındaki plugins / finder / content / content.php dosyasında 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?

Yanıtlar:


4

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

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

Yapacağınız ilk şey, ek alanlar tablonuza katılmak için bulucudaki getListQuery'yi 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, bulucuya 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


3

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

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

Teşekkür ederim, cevabınız beni doğru yöne sabitledi;) Sonunda onPrepareFinderContent olayını (FinderIndexerHelper :: getContentExtras tarafından ateşlenen) uygulayan bir bulucu eklentisi (JPlugin'i uzatır) yazdım. Daha sonra gösterdiğiniz gibi talimatlar ekledim ve karşılık gelen ekstra alanlar: public function onPrepareFinderContent(FinderIndexerResult &$row) { .... $row->addInstruction(FinderIndexer::TEXT_CONTEXT, $field->id); $row->setElement($field->id, $field->value); .... }
Cristiano

Mükemmel! Soruyu çözülmüş olarak işaretlemeniz mi gerekiyor?
Anibal

@Cristiano: Bunu hiç çözdün mü? Kabul edilmiş bir cevap yok ve aynı sorunla karşı karşıyayım - bu rutinleri nasıl kullanacağınızı hiç anladınız mı?
GSYİH

Cevap orijinal yazar tarafından kabul edilmese bile ... akıllı arama eklentimde böyle çalışır ;-)
Anibal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.