Перейти к содержанию
Официальный форум поддержки Simpla

Ошибка поиска


Рекомендуемые сообщения

На демо сайте провожу эксперимент:
1. В админке на странице товаров у трех первых товаров устанавливаю значение артикула 123456
2. В админке на странице товаров провожу поиск на фразу 123456. Получаю три товара - все правильно.
3. В настройках меняю значение Товаров на странице админки, устанавливаю 2. Теперь при поиске показывает 2 товара и ссылок на другие страницы поиска нет. Один товар при поиске потерян.
4. В настройках меняю значение Товаров на странице админки, устанавливаю 1. Теперь при поиске показывает 1 товар и ссылок на другие страницы поиска нет. Два другие товара при поиске не найдены.

То есть поиск неверно определяет количество страниц (кол-во найденных товаров).

Анализ кода api/Products.php показывает, что две части, связанные с поиском, совсем разные:

		if(!empty($filter['keyword']))
		{
			$keywords = explode(' ', $filter['keyword']);
			foreach($keywords as $keyword)
			{
				$kw = $this->db->escape(trim($keyword));
				$keyword_filter .= $this->db->placehold("AND (p.name LIKE '%$kw%' OR p.meta_keywords LIKE '%$kw%' OR p.id in (SELECT product_id FROM __variants WHERE sku LIKE '%$kw%'))");
			}
		}

		if(isset($filter['keyword']))
		{
			$keywords = explode(' ', $filter['keyword']);
			foreach($keywords as $keyword)
				$keyword_filter .= $this->db->placehold('AND (p.name LIKE "%'.$this->db->escape(trim($keyword)).'%" OR p.meta_keywords LIKE "%'.$this->db->escape(trim($keyword)).'%") ');
		}

Отсюда и неверные результаты. 

 

На витрине также можно наблюдать аналогичную ошибку поиска.

 

Понятно, что для исправления ошибки надо второй фрагмент сделать таким же, как  и первый.

 

А вообще в файле api/Products.php  функции

    public function get_products($filter = array())
    public function count_products($filter = array())
написаны довольно нерационально.  В них значительная часть кода повторяется. Поэтому при изменениях версий автор часто меняет в одном месте и забывает изменить в другом. Примеров несовпадения кода, который должен совпадать, предостаточно, если посмотреть разные версии.

 

Автору давно бы уже пора вынести повторяющийся код в отдельную функцию - это сэкономило бы много времени и ему самому и пользователям...

 

И массу переменных

        $category_id_filter = '';
        $brand_id_filter = '';
        $product_id_filter = '';
        $keyword_filter = '';
        $visible_filter = '';
        $is_featured_filter = '';
        $in_stock_filter = '';
        $discounted_filter = '';
        $features_filter = '';
тоже вряд ли можно отнести к достоинствам кода.

 

Пользователи, которые делают доработки, имеют неудобства от такой нерациональной организации. Лишняя работа и, как следствие, лишние ошибки. Даже специалисты данного форума нередко ошибаются, забывая про повтор кода...

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...