1. Go to this page and download the library: Download opencontent/occustomfind-ls library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
opencontent / occustomfind-ls example snippets
class ElencoTelefonicoSearchableObject implements OCCustomSearchableObjectInterface
{
private $id;
private $nome;
private $cognome;
private $numeriDiTelefono;
private $note;
/**
* Il costruttore è liberamente definibile perché l'interfaccia non lo contempla.
*
* @param $id
* @param $nome
* @param $cognome
* @param $numeriDiTelefono
* @param $note
*/
public function __construct($id, $nome, $cognome, $numeriDiTelefono, $note)
{
$this->nome = $nome;
$this->cognome = $cognome;
$this->numeriDiTelefono = $numeriDiTelefono;
$this->note = $note;
}
/**
* Questo meteodo deve resituire una stringa (bada bene non un numero) che identifica il documento univocamente in solr
*
* @return string
*/
public function getGuid()
{
return return 'elenco-telefonico-' . $this->id;
}
/**
* Questo metodo serve a definire i campi che solr deve indicizzare
* Deve resituire un array di OCCustomSearchableFieldInterface per comodità conviene usare OCCustomSearchableField
*
* OCCustomSearchableField::create è una scorciatoia per
* $field = new OCCustomSearchableField;
* $field->setName($name)->setType($type)->isMultiValue($multiValue);
*
* @return OCCustomSearchableFieldInterface[]
*/
public static function getFields()
{
return array(
OCCustomSearchableField::create('id', 'int'),
OCCustomSearchableField::create('cognome', 'string'),
OCCustomSearchableField::create('nome', 'text'),
// scorciatoia per isMultiValue vedi OCCustomSearchableField::setType
OCCustomSearchableField::create('numeriDiTelefono', 'string[]'),
OCCustomSearchableField::create('note', 'text'),
);
}
/**
* Restituisce il valore del campo presente in $field
*
* @param OCCustomSearchableFieldInterface $field
*
* @return mixed
*/
public function getFieldValue(OCCustomSearchableFieldInterface $field)
{
if ($field->getName() == 'id'){
return $this->id;
}elseif ($field->getName() == 'cognome') {
return $this->cognome;
}elseif ($field->getName() == 'nome') {
return $this->nome;
}elseif ($field->getName() == 'numeriDiTelefono') {
return $this->numeriDiTelefono;
}elseif ($field->getName() == 'note') {
return $this->note;
}
return null;
}
/**
* Restiruisce la rappresentazione dell'oggetto come array
*
* @return array
*/
public function toArray()
{
return array(
'id' => $this->id,
'cognome' => $this->cognome,
'nome' => $this->nome,
'numeriDiTelefono' => $this->numeriDiTelefono,
'note' => $this->note,
);
}
/**
* Crea l'oggetto a partire da un array
*
* @param $array
*
* @return ElencoTelefonicoSearchableObject
*/
public static function fromArray($array)
{
extract($array);
return new ElencoTelefonicoSearchableObject($id, $nome, $cognome, $numeriDiTelefono, $note);
}
}
class ElencoTelefonicoSearchableObject extends OCCustomSearchableObjectAbstract
{
public function getGuid()
{
return 'elenco-telefonico-' . $this->attributes['id'];
}
public static function getFields()
{
return array(
OCCustomSearchableField::create('id', 'int'),
OCCustomSearchableField::create('cognome', 'string'),
OCCustomSearchableField::create('nome', 'text'),
OCCustomSearchableField::create('numeriDiTelefono', 'string[]'),
OCCustomSearchableField::create('note', 'text'),
);
}
}
class ElencoTelefonicoSearchableRepository extends OCCustomSearchableRepositoryAbstract
{
private $csvFile;
private $csvRows;
/**
* Nel costruttore salvo il nome del file csv da usare
* Questo è solo un esempio, immagina che il nome del file csv venga caricato tramite ini
* Tuttavia il costruttore non può avere argomenti (non abbiamo DependyInjection qui...)
*/
public function __construct()
{
$this->csvFile = 'elenco_telefonico.csv';
}
/**
* Parsa il file e restituisce le righe
* @return array
*/
private function getCsvRows()
{
if ($this->csvRows === null) {
// il metodo parseFile deve parsare il file e restuire un array di righe
// in questo esempio non è implementato
$this->csvRows = $this->parseFile($this->csvFile);
}
return $this->csvRows;
}
/**
* Questo metodo deve restituire la stringa dell'identificativo del repository, meglio usare quello definito nella chiave dell'ini
*/
public function getIdentifier()
{
return 'elenco_telefonico';
}
/**
* Questo campo deve restituire il FQCN della classe che si vuole indicizzare (creata sopra)
*/
public function availableForClass()
{
return ElencoTelefonicoSearchableObject::class;
}
/**
* Ritorna il numero totale di oggetti indicizzabili
* Vedi il file bin/php/updatecustomsearchindex.php
*/
public function countSearchableObjects()
{
return count($this->getCsvRows());
}
/**
* Restiruisce un array di ElencoTelefonicoSearchableObject
* Vedi il file bin/php/updatecustomsearchindex.php
*
* Il repository deve essere paginato: in questo esempio viene simulata la paginazione
*
* I metodi richiamati non sono implemetati
*
* @param int $limit
* @param int $offset
*
* @return ElencoTelefonicoSearchableObject[]
*/
public function fetchSearchableObjectList($limit, $offset)
{
$data = array();
foreach($this->getCsvRows() as $index => $row) {
if ($index < $offset){
continue;
}
if (count($data) == $limit) {
break;
}
$data[] = new ElencoTelefonicoSearchableObject(
$this->getIdFromRow($row),
$this->getNomeFromRow($row),
$this->getCognomeFromRow($row),
$this->getNumeriDiTelefonoFromRow($row),
$this->getNoteFromRow($row)
);
// se invece usiamo l'approccio ad array si farà qualcosa di simile
// $data[] = new ElencoTelefonicoSearchableObject($this->getArrayFromRow($row));
}
return $data;
}
}