1. Go to this page and download the library: Download icanboogie/facets 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/ */
icanboogie / facets example snippets
use ICanBoogie\ActiveRecord;
use ICanBoogie\Facets\Fetcher\BasicFetcher;
$model = ActiveRecord\get_model('articles');
$fetcher = new BasicFetcher($model);
$records = $fetcher([
'year' => "2010..2014",
'is_online' => true,
'category' => "music",
'order' => "-date",
'limit' => 10
]);
use ICanBoogie\Facets\RecordCollection;
$records = $fetcher(…);
new RecordCollection\AlterEvent($records);
use ICanBoogie\Facets\CriterionList;
use App\Modules\Vehicles;
$criterion_list = new CriterionList([
'family' => Vehicles\Families\FamilyCriterion::class,
'brand' => Vehicles\Brands\BrandCriterion::class,
'category' => Vehicles\Categories\CategoryCriterion::class,
'color' => Vehicles\Colors\ColorCriterion::class,
'energy' => Vehicles\Energies\EnergyCriterion::class,
'engine' => Vehicles\Engines\EngineCriterion::class,
'doors' => Vehicles\DoorsCriterion::class,
'year' => Vehicles\YearCriterion::class,
'price' => Vehicles\PriceCriterion::class
]);
$modifiers = $_GET + [
'q' => null, // reserved keyword for query string
'order' => null // reserved keyword for records order
];
if ($modifiers['q'])
{
$q = $criterion_list->parse_query_string($modifiers['q']);
echo "The following words were matched: " . implode(' ', $q->matched) . '<br />';
echo "The following words were not matched: " . implode(' ', $q->not_matched) . '<br />';
// we choose to _OR_ criterion values
$modifiers += array_map(function($v) { return implode('|', $v); }, $q->matches);
}
#
# Parameters are passed by reference, $values and $query are likely to be modified.
#
$conditions = [];
$criterion_list
->alter_conditions($conditions, $modifiers)
->alter_query($query)
->alter_query_with_conditions($query, $conditions);
if ($modifiers['order'])
{
$criterion_list->alter_query_with_order($query, $modifiers['order']);
}
$count = $query->count; // count all the records matching the query
$records = $query->limit(20)->all; // fetch a maximum of 20 records
use ICanBoogie\Facets\CriterionValue\IntervalCriterionValue;
$value = IntervalCriterionValue::from('123..456'); // between 123 and 456
$value = IntervalCriterionValue::from('123..'); // >= 123
$value = IntervalCriterionValue::from('..456'); // <= 456
$value = IntervalCriterionValue::from([ 'min' => '123', 'max' => '456' ]); // between 123 and 456
$value = IntervalCriterionValue::from([ 'min' => '123', 'max' => null ]); // >= 123
$value = IntervalCriterionValue::from([ 'min' => null, 'max' => '456' ]); // <= 456
$value = new IntervalCriterionValue(123, 456); // between 123 and 456
$value = new IntervalCriterionValue(null, 456); // >= 123
$value = new IntervalCriterionValue(123, null); // <= 456
use ICanBoogie\Facets\CriterionValue\IntervalCriterionValue;
echo new IntervalCriterionValue(123, 456); // "123..456"
echo new IntervalCriterionValue(123, null); // "123.."
echo new IntervalCriterionValue(null, 456); // "..456"
echo new IntervalCriterionValue(123, 123); // "123"
echo new IntervalCriterionValue(null, null); // ""
use ICanBoogie\Facets\CriterionValue\SetCriterionValue;
$value = SetCriterionValue::from('1|2'); // 1 or 2
$value = SetCriterionValue::from([ 1 => 'on', 2 => 'on' ]); // 1 or 2
$value = new SetCriterionValue([ 1, 2 ]); // 1 or 2
use ICanBoogie\Facets\CriterionValue\SetCriterionValue;
echo new SetCriterionValue([ 1, 2, 3 ]); // "1|2|3"
echo new SetCriterionValue([ 1 ]); // "1"
echo new SetCriterionValue([ ]); // ""