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.boshnik.com/docs/ битая, выходит ошибка.
Про поиск можно прочитать у них на сайте — www.algolia.com/
Algolia — это мощная облачная поисковая платформа, обеспечивающая мгновенный и релевантный поиск.
В чем фишка сервиса? Для чего продукт? В описании не написано.Самое первое предложение:
Algolia — это мощная облачная поисковая платформа, обеспечивающая мгновенный и релевантный поиск.
По ссылке на «репозиторий» ссылка algolia.boshnik.com/docs/ битая, выходит ошибка.Убрал ссылку, документацию еще не добавил. Но все в статье описано.
Опции, ТВ, поля модификаций индексировать умеет?
Пока нет, но обязательно добавлю. Спасибо
А реально организовать подсказки при вводе? Компонент будет бесплатным?
У меня есть компонент FlatFilters и там нет поиска, народ жалуется. Я вот думаю а не интегрировать туда этот шедерв? В целом сервис до 10К запросов в месяц бесплатный, если можно реализовать подсказки при вводе, то можно интегрировать.
У меня есть компонент FlatFilters и там нет поиска, народ жалуется. Я вот думаю а не интегрировать туда этот шедерв? В целом сервис до 10К запросов в месяц бесплатный, если можно реализовать подсказки при вводе, то можно интегрировать.
Компонент бесплатный.
А реально организовать подсказки при вводе?Делаем запрос на сервер, а на сервере получаем данные:
$algolia = $this->modx->services instanceof \MODX\Revolution\Services\Container
? $this->modx->services->get('algolia')
: $this->modx->getService('algolia', 'Algolia', MODX_CORE_PATH . 'components/algolia/model/');
$results = $algolia->search($query); // результат поиска
Еще можно прочитать про Query Suggestions Index
Ну круто! Добавлю во FlatFilters поддержку этого компонента для организации поиска))) Спасибо!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.