Algolia для MODX с поддержкой PageBlocks и miniShop2
Algolia — это мощная облачная поисковая платформа, обеспечивающая мгновенный и релевантный поиск.

1. Регистрация в Algolia
Зарегистрируйтесь на Algolia и получите API-ключи.
2. Настройка в MODX
Перейдите в системные настройки MODX и укажите:
Создайте индекс в Algolia и укажите его название в системной настройке algolia.index_name.

На изображении показано, как перейти в панель поиска и создать индекс.
4. Настройка полей для поиска
Укажите поля, которые будут участвовать в поиске, в настройке algolia.searchable_fields.
По умолчанию: alias,pagetitle,longtitle,description,introtext.
5. Настройка полей для вывода
Укажите поля, которые будут возвращаться в результатах поиска, в настройке algolia.fields_to_retrieve.
По умолчанию: alias,pagetitle,longtitle,description,introtext.
Настройка данных для индексации:
1. Выбор типа ресурса
Укажите тип ресурса в настройке algolia.class_key:
Укажите поля, которые будут отправлены в индекс, в настройке algolia.fields.
По умолчанию: alias,pagetitle,longtitle,description,introtext.
3. Дополнительные условия
Укажите дополнительные условия для выборки данных в формате JSON в настройке algolia.where.
Примеры:
После установки компонента ресурсы будут автоматически индексироваться при их обновлении. Вы также можете принудительно обновить индекс через меню компонента, где также можно удалить все данные из индекса.
Форма поиска
Для вывода формы поиска не требуется использовать сниппет. Просто вставьте HTML-код, например:
Вывод результатов поиска
На странице поиска разместите сниппет AlgoliaResult
Параметры сниппета:
/core/App/routes/web.php
Контроллер SearchController:
/core/App/Http/Controllers/SearchController.php
Поддержка:

Настройка
1. Регистрация в Algolia
Зарегистрируйтесь на Algolia и получите API-ключи.
2. Настройка в MODX
Перейдите в системные настройки MODX и укажите:
- Application ID (algolia.app_id)
- Admin API Key (algolia.api_key)
Создайте индекс в Algolia и укажите его название в системной настройке algolia.index_name.

На изображении показано, как перейти в панель поиска и создать индекс.
4. Настройка полей для поиска
Укажите поля, которые будут участвовать в поиске, в настройке algolia.searchable_fields.
По умолчанию: alias,pagetitle,longtitle,description,introtext.
5. Настройка полей для вывода
Укажите поля, которые будут возвращаться в результатах поиска, в настройке algolia.fields_to_retrieve.
По умолчанию: alias,pagetitle,longtitle,description,introtext.
Настройка данных для индексации:
1. Выбор типа ресурса
Укажите тип ресурса в настройке algolia.class_key:
- modDocument (обычные ресурсы)
- msProduct (товары miniShop2)
- pbResource (коллекции PageBlocks)
Укажите поля, которые будут отправлены в индекс, в настройке algolia.fields.
По умолчанию: alias,pagetitle,longtitle,description,introtext.
3. Дополнительные условия
Укажите дополнительные условия для выборки данных в формате JSON в настройке algolia.where.
Примеры:
[{"parent": 5}] // добавляем в индекс только ресурсы с родителем 5
[{"price:>": 0}] // добавляем продукты с ценой больше 0
// Пример для PageBlocks
[{"field_name": "name"}] // в режиме developer
[{"collection_id": 1}] // в режиме managerИспользование
После установки компонента ресурсы будут автоматически индексироваться при их обновлении. Вы также можете принудительно обновить индекс через меню компонента, где также можно удалить все данные из индекса.
Форма поиска
Для вывода формы поиска не требуется использовать сниппет. Просто вставьте HTML-код, например:
<form class="d-flex" role="search" method="get" action="[[~187]]"> // 187 - страница поиска
<input class="form-control me-2" name="query" type="search" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success" type="submit">Search</button>
</form>Вывод результатов поиска
На странице поиска разместите сниппет AlgoliaResult
Параметры сниппета:
- paramSearch — имя параметра поиска. По умолчанию: query.
- tpl — чанк для обертки результатов. По умолчанию: algolia.result.
- tpl.result.item — чанк для вывода одного результата. По умолчанию: algolia.result.item.
- tpl.result.empty — чанк для вывода, если ничего не найдено. По умолчанию: algolia.result.empty.
- tpl.pagination — чанк для пагинации. По умолчанию:algolia.pagination.
- tpl.pagination.item — чанк для пункта пагинации. По умолчанию: algolia.pagination.item.
- limit — количество результатов на одной странице. По умолчанию: 10.
- outputSeparator — разделитель для результатов. По умолчанию: \n.
- toPlaceholder — вывод результата в плейсхолдер. По умолчанию: false.
Пример маршрутизации для REST API в PageBlocks
/core/App/routes/web.php
use PageBlocks\App\Http\Controllers\SearchController;
Route::prefix('api/algolia')->group(function () {
Route::get('/index', [SearchController::class, 'index']);
Route::get('/clear', [SearchController::class, 'clear']);
Route::get('/search', [SearchController::class, 'search']);
});Контроллер SearchController:
/core/App/Http/Controllers/SearchController.php
<?php
namespace PageBlocks\App\Http\Controllers;
class SearchController extends Controller
{
public function getAlgolia()
{
return $this->modx->services instanceof \MODX\Revolution\Services\Container
? $this->modx->services->get('algolia')
: $this->modx->getService('algolia', 'Algolia', MODX_CORE_PATH . 'components/algolia/model/');
}
/**
* Индексируем все продукты в Algolia
*/
public function index()
{
$algolia = $this->getAlgolia();
$data = $algolia->getRecords();
if (!$algolia->addRecords($data)) {
return response()->json(['message' => 'Продукты не проиндексированы в Algolia'], 400);
}
// Настройки для индекса
$algolia->setSettings([
'searchableAttributes' => explode(',', $algolia->config['searchableFields']),
'attributesToRetrieve' => explode(',', $algolia->config['fieldsToRetrieve']),
'highlightPreTag' => '<em>',
'highlightPostTag' => '</em>',
]);
return response()->json([
'message' => 'Продукты проиндексированы в Algolia',
'total' => count($data),
]);
}
/**
* Очищаем индекс Algolia
*/
public function clear()
{
$algolia = $this->getAlgolia();
if (!$algolia->clearIndex()) {
return response()->json(['message' => 'Не удалось очистить индекс Algolia'], 400);
}
return response()->json(['message' => 'Индекс Algolia успешно очищен']);
}
/**
* Выполняем поиск по продуктам в Algolia
*/
public function search(array $request)
{
$query = $request['query'] ?? '';
if (empty($query)) {
return response()->json(['message' => 'Запрос не указан'], 400);
}
$algolia = $this->getAlgolia();
$results = $algolia->search($query);
return response()->json($results);
}
}Поддержка:
- MODX: 2 / 3
- PHP: ^8.1
Комментарии: 8
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
В чем фишка сервиса? Для чего продукт? В описании не написано.
По ссылке на «репозиторий» ссылка algolia.boshnik.com/docs/ битая, выходит ошибка.
Самое первое предложение:
Algolia — это мощная облачная поисковая платформа, обеспечивающая мгновенный и релевантный поиск.
Убрал ссылку, документацию еще не добавил. Но все в статье описано.
У меня есть компонент FlatFilters и там нет поиска, народ жалуется. Я вот думаю а не интегрировать туда этот шедерв? В целом сервис до 10К запросов в месяц бесплатный, если можно реализовать подсказки при вводе, то можно интегрировать.
Делаем запрос на сервер, а на сервере получаем данные:
Еще можно прочитать про Query Suggestions Index