--=REKLAMA=--

Tworzenie dodatku z grupy Smart search

Z Joomla!WikiPL

Wtyczki Inteligentnego Wyszukiwania są dla wygody umieszczane w grupie pluginów zwanej "finder". Sprawdź folder plugins/finder, a znajdziesz tam wtyczki, które obsługują ten typ zawartości rdzenia Joomla! Najlepszą metodą tworzenia tych wtyczek, jest skopiowanie, którejś z już dostępnych id dostosowanie jej do swoich potrzeb.

Wszystkie wtyczki Inteligentnego wyszukiwania dziedziczą po klasie FinderIndexerAdapter, która zwiera większość niezbędnych metod, potrzebnych do prawidłowego wyszukiwania. W większości przypadków, personalizacja skopiowanej wtyczki, ogranicza się do nadpisania kilku z tych metod.

Więcej o wtyczkach Inteligentnego Wyszukiwania przeczytasz tutaj.

Główne własności

Przed analizą metod, należy prawidłowo zdefiniować kilka własności:

  • $context
    Powinien być unikalnym identyfikatorem wtyczki i określać kontekst w którym będzie reagowała (np. "Content").
  • $extension
    Nazwa rozszerzenia (komponentu), które będzie przez wtyczkę obsługiwane (np. "com_content").
  • $layout
    ASubszablon używany do wyświetlenia rezultatów wyszukiwania. Na przykład, jeśli $layout jest ustawiony na "article" wtedy główny widok będzie szukał pliku o nazwie default_article.php. Jeśli plik nie zostanie odnaleziony, główny widok użyje pliku default_result.php.
  • $table
    Nazwa tabeli do pobrania danych (np. "#__content").
  • $state_field
    Nazwa kolumny w tabeli, która przechowuje stan publikacji przeszukiwanej zawartości (domyślnie "state").

Główne metody

Pierwsze metody które będziesz nadpisywał tworząc wtyczkę Inteligentnego Wyszukiwania, to metody setup, index oraz getListQuery. The first methods you will want to override when developing a new Smart Search plug-in are the setup, index and getListQuery methods. W większości przypadków te trzy metody wystarczą by stworzyć w pełni działającą wtyczkę. Oczywiście są dodatkowe metody, które pozwalają na aktualizację indeksu przy zmianie treści, ale są to metody które nie są wymagane do podstawowego funkcjonowania wtyczki.

  • setup
    Metoda ta uruchamiana jest przez indexer, tylko raz na początku wyszukiwania. Może być użyta do załadowania bibliotek lub ustawienia zmiennych. Musi zwrócić wartość TRUE.
  • index
    To gówna metoda wywoływana przez indexer. Jest wywoływana dla każdego indexowanego elementu lub tego którego index jest aktualizowany. Zasadniczo metoda ta określa które elementy treści mają zostać zaindeksowane i uwzględnione jako "payload". Szerszy opis tej metody znajduje się w dalszej części.
  • getListQuery
    Metoda ta zwraca musi zwracać obiekt typu JDatabaseQuery który będzie stanowił podstawę kwerendy zwracającej listę zawartości danego typu. Szczegółowy opis tej metody znajduje się w dalszej części.

Kilka innych metod

Do uzyskania poprawnie działającej wtyczki Inteligentnego Wyszukiwania, czasami będzie potrzebne nadpisanie kilku innych metod.

  • translateState
    Biorąc pod uwagę oryginalną treść elementu, przekształca ją na wartość która może zostać użyta przez indexer. Musi zwracać 0 dla elementów, które nie mają zostać dodane do listy rezultatów lub 1 jeśli element ma zostać wyświetlony w liście rezultatów.
  • getURL
    Zwraca non-SEF URL do wyszukanego elementu. Użycie tej metody w plg_finder_content zwraca dla przykładu taki URL 'index.php?option=com_content&view=article&id=1'.
  • getStateQuery
    Metoda ta jest stosowana do budowy ogólnego zapytania sprawdzającego stan publikacji oraz dostępność elementu oraz jego kategorii nadrzędnych. Metoda ta korzysta z własności $table oraz $state_field, aby wybrać prawidłowe dane.

Metody zdarzeń

Poniższe metody są wywoływane przez wtyczkę Inteligentnego Wyszukiwania w odpowiedzi na określone zdarzenia wywoływane w Joomla.

  • onFinderBeforeSave
    Wywoływana w odpowiedzi na zdarzenie onContentBeforeSave.
  • onFinderAfterSave
    Wywoływana w odpowiedzi na zdarzenie onContentAfterSave.
  • onFinderAfterDelete
    Wywoływana w odpowiedzi na zdarzenie onContentDelete.
  • onFinderChangeState
    Wywoływana w odpowiedzi na zdarzenie onContentChangeState.
  • onFinderCategoryChangeState
    Wywoływana w odpowiedzi na zdarzenie onCategoryChangeState.

Szczegóły metod

getListQuery

Metoda ta musi zwracać obiekt typu JDatabaseQuery, który będzie stanowił podstawę kwerendy zwracającej listę obiektów danego typu zawartości. This method must return a JDatabaseQuery object that will form the basis of a query that will return a list of objects of the given content type. Istnieją ograniczenia tego zapytania, aby zapewnić jego zgodność z innymi metodami wykorzystywanymi przez indexer. Jeśli warunki ograniczeń są spełnione nie istnieje potrzeba nadpisywania metod w klasie FinderIndexerAdapter.

  • Tabela podstawowa baza danych, która jest indeksowana musi mieć alias "a".[1]

index

Metoda ta jest wywoływana gdy treść elementu musi być zaindeksowana lub gdy istnieje potrzeba ponownego jej zaindeksowania. Przekazywany jest jej obiekt typu FinderIndexerResult i jej celem jest dopasowanie tego obiektu oraz dodanie metadanych przed przekazaniem go do metody FinderIndexer::index.

setup

Metoda ta jest wywoływana przed metodą index i jest używana do inicjalizacji. Metoda ta najczęściej ustawia wszystkie wymagane zmienne oraz biblioteki, niezbędne do prawidłowego działania wtyczki.

Własności FinderIndexerResult

  • url
  • route
  • title
  • description
  • published
  • state
  • access
  • language
  • publish_start_date
  • publish_end_date
  • extension (stosowane tylko w rdzeniu dla wtyczki com_categories)

Testowanie

Testowanie wtyczek wyszukiwania może być neico kłopotliwe ze względu na to, że zwykle proces ten wykonywany jest przy użyciu ajax, więc nie ma w zasadzie widocznych rezultatów tego procesu.

Jako taki sposobem do testowania, jest użycie lini poleceń indexera.[2]

Uruchom sesję polecenia prompt/ssh na serwerze i przejdź do katalogu głównego strony. Stamtąd możesz uruchomić indexer, a wszystkie komunikaty błędów będą wyświetlane w oknie poleceń.

php cli/finder_indexer.php

Notes

  1. Jeśli warunek ten nie jest spełniony trzeba nadpisać metody getItem, getUpdateQueryByTime i getUpdateQueryByIds
  2. Automatyczne ustawienia indeksowania Inteligentnego Wyszukiwania

Dziękujemy za wkład

» Robertm,