OC 1.5.x Как ограничить поиск по сайту только по модели OStore 1.5.5.1.2

Тема в разделе "Общие вопросы", создана пользователем OpenBoss, 23 мар 2016.

  1. OpenBoss

    OpenBoss Пользователь

    Сообщения:
    61
    Симпатии:
    1
    Здравствуйте уважаемые форумчане на сайте происходит поиск по названию описанию по тегам и по модели как ограничить поиск до модели ? Чтобы можно было найти товар из тысячи нужный только один найдя его по артикулу ну по модели ??? Есть ли у кого либо опыт в этом деле заранее благодарен !
     
  2. Vlad

    Vlad Эксперт

    Сообщения:
    4.130
    Симпатии:
    1.000
    \catalog\model\catalog\product.php

    смотрите строки

    PHP:
                if (!empty($data['filter_tag'])) {
                    
    $sql .= "pd.tag LIKE '%" $this->db->escape($data['filter_tag']) . "%'";
                }
               
                if (!empty(
    $data['filter_name'])) {
                    
    $sql .= " OR LCASE(p.model) = '" $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
                }
    удалить или закоментировать
     
  3. OpenBoss

    OpenBoss Пользователь

    Сообщения:
    61
    Симпатии:
    1
    Влад сделал как вы сказали но теперь происходит во что при поиске выходят все товары которые есть ?
     
  4. Vlad

    Vlad Эксперт

    Сообщения:
    4.130
    Симпатии:
    1.000
    вот это удалите
    PHP:
                if (!empty($data['filter_name'])) {
                    
    $implode = array();

                    
    $words explode(' 'trim(preg_replace('/\s\s+/'' '$data['filter_name'])));

                    foreach (
    $words as $word) {
                        
    $implode[] = "pd.name LIKE '%" $this->db->escape($word) . "%'";
                    }
                   
                    if (
    $implode) {
                        
    $sql .= " " implode(" AND "$implode) . "";
                    }

                    if (!empty(
    $data['filter_description'])) {
                        
    $sql .= " OR pd.description LIKE '%" $this->db->escape($data['filter_name']) . "%'";
                    }
                }
               
                if (!empty(
    $data['filter_name']) && !empty($data['filter_tag'])) {
                    
    $sql .= " OR ";
                }
               
                if (!empty(
    $data['filter_tag'])) {
                    
    $sql .= "pd.tag LIKE '%" $this->db->escape($data['filter_tag']) . "%'";
                }
    а в оставшейся строчке убрать OR
    PHP:
                if (!empty($data['filter_name'])) {
                    
    $sql .= " OR LCASE(p.model) = '" $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
                }
     
  5. OpenBoss

    OpenBoss Пользователь

    Сообщения:
    61
    Симпатии:
    1


    Влад да дело не в этом кажись она не реагирует на за коментированные строчки вот реагирует она совсем на другое к примеру щас файл который находиться в catalog/controller/search.php




    PHP:
      if (isset($this->request->get['search']) || isset($this->request->get['tag'])) {
       
    $data = array(
        
    'filter_name'         => $search,
        
    'filter_tag'          => $tag,
        
    'filter_description'  => $description,
        
    'filter_category_id'  => $filter_category_id,
        
    'filter_sub_category' => $sub_category,
        
    'sort'                => $sort,
        
    'order'               => $order,
        
    'start'               => ($page 1) * $limit,
        
    'limit'               => $limit
       
    );

    если удалить отсюда
    'filter_name' => $search,
    'filter_tag' => $tag,
    'filter_description' => $description,
    'filter_category_id' => $filter_category_id,
    'filter_sub_category' => $sub_category,


    то он начинает не искать а вытаскивать все товары которые есть!!
     
  6. OpenBoss

    OpenBoss Пользователь

    Сообщения:
    61
    Симпатии:
    1
    и то что вы по советовали тоже по пробую
     
  7. OpenBoss

    OpenBoss Пользователь

    Сообщения:
    61
    Симпатии:
    1
    Спасибо вам большое огромное ) решилось чудо )))
     
  8. OpenBoss

    OpenBoss Пользователь

    Сообщения:
    61
    Симпатии:
    1
    Влад а как быть с модулем Mega Filter поиск говорит что не чего не нашел он то правильно работает а вот мега фильтр говрит что такие элементы найдены к примеру


    upload_2016-3-24_14-6-9.png
     
  9. OpenBoss

    OpenBoss Пользователь

    Сообщения:
    61
    Симпатии:
    1
    upload_2016-3-24_14-6-56.png



    Здесь он все правильно видит !
     

    Вложения:

  10. OpenBoss

    OpenBoss Пользователь

    Сообщения:
    61
    Симпатии:
    1
    upload_2016-3-24_14-15-13.png
     
  11. Vlad

    Vlad Эксперт

    Сообщения:
    4.130
    Симпатии:
    1.000
    обратится за подсказкой к разработчику модуля.
     
  12. OpenBoss

    OpenBoss Пользователь

    Сообщения:
    61
    Симпатии:
    1
    писал он еще не ответил
     
  13. OpenBoss

    OpenBoss Пользователь

    Сообщения:
    61
    Симпатии:
    1
  14. OpenBoss

    OpenBoss Пользователь

    Сообщения:
    61
    Симпатии:
    1
    Влад после ваших примеров в моей голове что то зашевелилось и я сам догадаллся
    сейчас покажу )


    PHP:
            // sprawdź frazę / tagi
            
    if( ! empty( $this->_data['filter_name'] ) || ! empty( $this->_data['filter_tag'] ) ) {
                
    $sql = array();
              
        
    /*        if( ! empty( $this->_data['filter_name'] ) ) {
                    $implode    = array();
                    $words        = explode( ' ', trim( preg_replace( '/\s\s+/', ' ', $this->_data['filter_name'] ) ) );
                  
                    foreach( $words as $word ) {
                        $implode[] = "`pd`.`name` LIKE '%" . $this->_ctrl->db->escape( $word ) . "%'";
                    }
                  
                    if( $implode ) {
                        $sql[] = '(' . implode( ' AND ', $implode ) . ')';
                    }
                  
                    if( ! empty( $this->_data['filter_description'] ) ) {
                        $sql[] = "`pd`.`description` LIKE '%" . $this->_ctrl->db->escape( $this->_data['filter_name'] ) . "%'";
                    }
                } */
              
            /*    if( ! empty( $this->_data['filter_tag'] ) ) {
                    $sql[] = "`pd`.`tag` LIKE '%" . $this->_ctrl->db->escape( $this->_data['filter_tag'] ) . "%'";
                }  */
              
        
    if( ! empty( $this->_data['filter_name'] ) ) {
                    
    $tmp = array( '`p`.`model`''`p`.`sku`''`p`.`upc`''`p`.`ean`''`p`.`jan`''`p`.`isbn`''`p`.`mpn`' );
                  
                    foreach( 
    $tmp as $tm ) {
                        
    $sql[] = "LCASE(" $tm ") = '" $this->_ctrl->db->escapeutf8_strtolower$this->_data['filter_name'] ) ) . "'";
                    }
                }
              
                if( 
    $sql ) {
                    
    $conditions['search'] = '(' implode' OR '$sql ) . ')';
                }
            }

    Я закоментировал строчки которые я начал хоть не много понимать и все стала на свои места спасибо вам