Przejdź do głównej treści

Ready_™ Developer TeamMniej niż 1 minuta

Poniżej przykładowa klasa SearchEngine, która będzie nam służyć do wyszukiwania w rejestrze cregisters.creg_samochody o następujących kolumnach:

  • id____
  • nr_rejestracyjny
  • marka
  • model
  • ent_id

Tylko tyle kolumn wystarczy!

Teraz możemy przejść do zakodowania klasy SearchEngin-a.

Poniżej przykładowa klasa.

W komentarza dodano odpowiednie opisy do czego służą poszczególne właściwości. Na potrzeby przykładu załóżmy że plik z klasą najduje się w ./scripts/CarLib/LookupWidget/CarsSearchEngine.inc

Kod
namespace ReadyApp\CarLib\LookupWidget;

require_once('./classes/LookupWidget/AbsSearchEngine.inc');

/**
 * CarsSearchEngine
 *
 * @uses \AbsSearchEngine
 * @final
 * @author 
 * @version 0.1
 * @copyright 
 */
class CarsSearchEngine extends \AbsSearchEngine {

    /**
     * Nazwa kolumny z identyfikatorem rekordu
     *
     * @var string
     * @access public
     */
    public $keyCol = 'id____';

    /**
     * Nazwa kolumny, której zawartość wyświetli się w polu Lookup`a po wyszukaniu frazy
     *
     * @var string
     * @access public
     */
    public $labelCol = 'label_';

    /**
     * Kwerenda, służąca do zasilenia silnika w rekordy
     *
     * @var string
     * @access public
     */
    public $select = 'SELECT id____, COALESCE(nr_rejestracyjny||\' - \'||marka || \' \'||model, marka || \' \'||model) AS label_ FROM cregisters.creg_samochody';

    /**
     * Lista pól, po których będzie można szukać
     *
     * @var array
     * @access public
     */
    public $fields = ['id____', 'nr_rejestracyjny', 'marka', 'model'];

    /**
     * Lista pól, po których lista zostanie posortowana
     *
     * @var string
     * @access public
     */
    public $order = 'nr_rejestracyjny, marka, model';

    /**
     * Czy pokazać ikonę po wybraniu rekordu (z lewej strony)
     * Ikona musi być zdefiniowana w MapService (lub CustomMapService)
     *
     * @var bool
     * @access public
     */
    public $showInfoIcon = FALSE;

    /**
     * Clsnam z MapService (lub CustomMapService)
     * @var string
     */
    public $gicon = '';
    
    /**
     * @access public
     * @return void
     */
    public function __construct() {
        $this->infoMessage = &$_SESSION[get_class($this)]['infoMessage'];
        
        if (empty($this->infoMessage)) {
            //Komunikat jeśli samochodu nie znaleziono
            $this->infoMessage = \Translator::translate('Wybrany samochód nie został znaleziony.');
        }

        parent::__construct();

        // Tutaj możemy dodać określone warunki jak context czy sprawdzanie uprawnień per użytkownik
        $this->append(' AND ent_id = '.\SysContext::$ent_id.' AND is_del IS NOT TRUE';);
    }
} 

Info

Klasa musi dziedziczyć po klasie AbsSearchEngine