Писать на форуме DIAFAN.CMS могут только зарегистрированные пользователи. Войдите или зарегистрируйтесь.

Форум Модули DIAFAN.CMS Поиск по сайту Поиск по сайту - индексация без данных из характеристик товара


Виталий NVGPRO (DIAFAN.CMS) 32411 декабря 2017 г., редакция 11 декабря 2017 г.

По мотивам предложения в разделе "Пожелания".
Описание задачи:
Цитата
Поиск по сайту - выхватывает данные из характеристик товара, что портит выдачу данных (хотя кому то это может и быть нужным...)

пример (для понимания о чём я):

- Есть товар с названием где есть артикул:
"Душевая лейка 14.420.bronza"
- Есть товар унитаз с названием артикулом:
"Унитаз 11.221.zoloto"

попробуем найти в поиске по сайту артикул: "14.420"

и получаем в поисковой выдачи и тот и другой товар............
- оказывается "Унитаз 11.221.zoloto" появляется в выдаче из за того, что у этого товара есть
- характеристика с полем "Число" и задан размер 420


И так, на текущи момент актуальная версия DIAFAN.CMS 6.0.6.2.
Берем файл search.inc.php и находим функцию
Код
private function index_item($row, $config, $table_name, $site_id = 0) { ... }

В текущей версии следующий оригинальный код функции:
Код
/**
* Индексирует страницы модуля, прикрепленного к странице сайта
*
* @param array $row
* @return void
*/
private function index_item($row, $config, $table_name, $site_id = 0)
{
$this->current_insert++;

Показать весь код
if(! empty($row["search_no_show"]))
return;

if (isset($row["act"]) && ! $row["act"])
return;

// дополнительные характеристики
if(in_array('param', $config["fields"]) && ! isset($row["param"]) && (! defined('_LANG') || ! isset($row["param"._LANG])))
{
$param = $this->get_param($row["id"], $table_name);
}

foreach ($this->langs as $l)
{
if (isset($row["act".$l]) && ! $row["act".$l])
continue;

$module_rating = 0;
if(! empty($config["rating"]))
{
$module_rating = $config["rating"];
}

$values_for_index = array();
foreach($config["fields"] as $field)
{
if($field == 'param' && isset($param))
{
$values_for_index[] = $param[$l];
}
else
{
$values_for_index[] = (array_key_exists($field.$l,$row) ? $row[$field.$l] : $row[$field]);
}
}
$access = ! empty($row["access"]) ? 1 : 0;
$date_start = ! empty($row["date_start"]) ? $row["date_start"] : 0;
$date_finish = ! empty($row["date_finish"]) ? $row["date_finish"] : 0;
$this->insert($row["id"], $table_name, $values_for_index, $module_rating, $l, $access, $date_start, $date_finish);
}
if($site_id)
{
$this->check_max($site_id, $table_name, $row["id"]);
}
}

Заменяем данный код на такой:
Код
/**
* Индексирует страницы модуля, прикрепленного к странице сайта
*
* @param array $row
* @return void
*/
private function index_item($row, $config, $table_name, $site_id = 0)
{
$this->current_insert++;

Показать весь код
if(! empty($row["search_no_show"]))
return;

if (isset($row["act"]) && ! $row["act"])
return;

// дополнительные характеристики
if(in_array('param', $config["fields"]) && ! isset($row["param"]) && (! defined('_LANG') || ! isset($row["param"._LANG])))
{
$param = $this->get_param($row["id"], $table_name);
}

foreach ($this->langs as $l)
{
if (isset($row["act".$l]) && ! $row["act".$l])
continue;

$module_rating = 0;
if(! empty($config["rating"]))
{
$module_rating = $config["rating"];
}

$values_for_index = array();
foreach($config["fields"] as $field)
{
if($field == 'param' && $table_name == 'shop') continue;
if($field == 'param' && isset($param))
{
$values_for_index[] = $param[$l];
}
else
{
$values_for_index[] = (array_key_exists($field.$l,$row) ? $row[$field.$l] : $row[$field]);
}
}
$access = ! empty($row["access"]) ? 1 : 0;
$date_start = ! empty($row["date_start"]) ? $row["date_start"] : 0;
$date_finish = ! empty($row["date_finish"]) ? $row["date_finish"] : 0;
$this->insert($row["id"], $table_name, $values_for_index, $module_rating, $l, $access, $date_start, $date_finish);
}
if($site_id)
{
$this->check_max($site_id, $table_name, $row["id"]);
}
}

Жирным шрифтом выделено то, что добавлено для достяжения поставленной цели. То есть добавлена вот эта строка:
Код
if($field == 'param' && $table_name == 'shop') continue;


Ну все, успехов всем :)

Андрей (R4W) 5411 декабря 2017 г.

Как всегда красавчик :)
В базу знаний еще пожалуйста!
Спасибо сказали: Виталий NVGPRO (DIAFAN.CMS)

Любимов Павел (DIAFAN.CMS) 30611 декабря 2017 г.

Точно-точно, а то потеряется.
Спасибо сказали: Виталий NVGPRO (DIAFAN.CMS)