<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.umisoft.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE%D0%BB%D0%B5%D0%B9_%D0%B2_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA_Sphinx</id>
	<title>Добавление полей в поиск Sphinx - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.umisoft.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE%D0%BB%D0%B5%D0%B9_%D0%B2_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA_Sphinx"/>
	<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE%D0%BB%D0%B5%D0%B9_%D0%B2_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA_Sphinx&amp;action=history"/>
	<updated>2026-05-01T10:14:25Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE%D0%BB%D0%B5%D0%B9_%D0%B2_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA_Sphinx&amp;diff=9330&amp;oldid=prev</id>
		<title>Aposio: Новая страница: «&#039;&#039;&#039;Актуально для версии 20&#039;&#039;&#039;  == Задача == Нужно решить 2 проблемы:&lt;br&gt; 1. По умолчанию Sphinx не инд…»</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE%D0%BB%D0%B5%D0%B9_%D0%B2_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA_Sphinx&amp;diff=9330&amp;oldid=prev"/>
		<updated>2019-09-23T11:28:43Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;  == Задача == Нужно решить 2 проблемы:&amp;lt;br&amp;gt; 1. По умолчанию Sphinx не инд…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Задача ==&lt;br /&gt;
Нужно решить 2 проблемы:&amp;lt;br&amp;gt;&lt;br /&gt;
1. По умолчанию Sphinx не индексирует кастомные поля.&amp;lt;br&amp;gt;&lt;br /&gt;
2. По умолчанию Sphinx выполняет индексацию полей объектов тех типов данных, которые являются дочерними для типа данных &amp;quot;Раздел сайта&amp;quot;. Если на сайте имеются, например, объекты, дочерние типу &amp;quot;Объект каталога&amp;quot;, их поля не попадут в индекс.&lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
Подразумевается, что Sphinx уже настроен и используется UMI.CMS.&amp;lt;br&amp;gt;&lt;br /&gt;
В модуле &amp;quot;Поиск&amp;quot;, при нажатии на кнопку &amp;quot;Генерация конфигурации&amp;quot; происходит добавление полей в индексную таблицу, а также запускается событие sphinxCreateView.&amp;lt;br&amp;gt;&lt;br /&gt;
=== Создадим слушатель события sphinxCreateView ===&lt;br /&gt;
в файле /classes/components/search/custom_events.php&lt;br /&gt;
&amp;lt;source lang=&amp;#039;php&amp;#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	new UmiEventListener(&amp;quot;sphinxCreateView&amp;quot;, &amp;quot;search&amp;quot;, &amp;quot;customCreateView&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Создадим обработчик события customCreateView ===&lt;br /&gt;
в файле /classes/components/search/customMacros.php&lt;br /&gt;
&amp;lt;source lang=&amp;#039;php&amp;#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
public function customCreateView(iUmiEventPoint $event) {&lt;br /&gt;
    if($event-&amp;gt;getMode() == &amp;#039;before&amp;#039;) {&lt;br /&gt;
        $contentIndex = $event-&amp;gt;getRef(&amp;#039;contentIndex&amp;#039;);&lt;br /&gt;
        if ($contentIndex instanceof SphinxIndexGenerator) {&lt;br /&gt;
            $types = umiObjectTypesCollection::getInstance();&lt;br /&gt;
&lt;br /&gt;
            // Получаем типы данных, дочерние типу &amp;quot;Раздел сайта&amp;quot;&lt;br /&gt;
            // &amp;#039;root-pages-type&amp;#039; - это guid типа данных &amp;quot;Раздел сайта&amp;quot; в БД в таблице cms3_object_types&lt;br /&gt;
            $subRootPages = $types-&amp;gt;getSubTypesList($types-&amp;gt;getType(&amp;#039;root-pages-type&amp;#039;)-&amp;gt;getId());&lt;br /&gt;
&lt;br /&gt;
            // Получаем типы данных, дочерние типу данных &amp;quot;Объект каталога&amp;quot;&lt;br /&gt;
            // &amp;#039;catalog-object&amp;#039; - это guid типа данных &amp;quot;Объект каталога&amp;quot; в БД в таблице cms3_object_types&lt;br /&gt;
            $subCatalogPages = $types-&amp;gt;getSubTypesList($types-&amp;gt;getType(&amp;#039;catalog-object&amp;#039;)-&amp;gt;getId());&lt;br /&gt;
&lt;br /&gt;
            // Объединяем полученные типы данных в один массив&lt;br /&gt;
            $pagesType = array_merge($subRootPages, $subCatalogPages);&lt;br /&gt;
					&lt;br /&gt;
            // Перечисляем идентификаторы полей, которые хотим добавить в индекс&lt;br /&gt;
            $indexFields = [&lt;br /&gt;
                &amp;#039;testovoe&amp;#039;,&lt;br /&gt;
                &amp;#039;volume&amp;#039;,&lt;br /&gt;
                &amp;#039;portability&amp;#039;&lt;br /&gt;
            ];&lt;br /&gt;
&lt;br /&gt;
            $contentIndex-&amp;gt;addPagesList($pagesType, $types, $indexFields);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом все типы данных, дочерние типу &amp;quot;Объект каталога&amp;quot;, а также поля, перечисленные в массиве $indexFields, попадут в индексную таблицу и по ним будет работать поиск на сайте. &lt;br /&gt;
&lt;br /&gt;
 [[category:Модуль Поиск]] [[category:Вопросы и уроки разработки сайтов на UMI.CMS]] [[category:Написание кастомных макросов]]&lt;/div&gt;</summary>
		<author><name>Aposio</name></author>
		
	</entry>
</feed>