title: How to create a WEBSITE SEARCH in [odoo12]
body: <p><strong>I want to create a search field in a website in odoo that will allow me to search for the names of customers but I don't know how to add a function to do that.</strong> 
  <strong>Can you please guide me to a tutorial that can help me in the creation of my search function.</strong></p>
  
  <p><strong>I checked in the module website_sale, I tried to do the same but it did not really work.</strong></p>
  
  <p>Here is the code I put:</p>
  
  <pre><code>class Controllers(http.Controller):
  
      @api.multi
      def sale_product_domain(self):
          return self.get_current_website().website_domain()
  
      def _get_search_domain(self, search, attrib_values):
          domain = Controllers.sale_product_domain(self)
          if search:
              for srch in search.split(" "):
                  domain += [
                      '|', '|', '|', ('name', 'ilike', srch), ('description', 'ilike', srch)]
  
          if attrib_values:
              attrib = None
              ids = []
              for value in attrib_values:
                  if not attrib:
                      attrib = value[0]
                      ids.append(value[1])
                  elif value[0] == attrib:
                      ids.append(value[1])
                  else:
                      domain += [('attribute_line_ids.value_ids', 'in', ids)]
                      attrib = value[0]
                      ids = [value[1]]
              if attrib:
                  domain += [('attribute_line_ids.value_ids', 'in', ids)]
  
          return domain
  @http.route('/tabs', type='http', auth='public', website=True)
      def navigate_to_tabs(self, search='', ppg=False, **post):
          clients = http.request.env['res.partner'].sudo().search([])
          if ppg:
              try:
                  ppg = int(ppg)
              except ValueError:
                  ppg = PPG
              post["ppg"] = ppg
          else:
              ppg = PPG
  
          attrib_list = request.httprequest.args.getlist('attrib')
          attrib_values = [[int(x) for x in v.split("-")] for v in attrib_list if v]
          attributes_ids = {v[0] for v in attrib_values}
          attrib_set = {v[1] for v in attrib_values}
  
          domain = self._get_search_domain(search, attrib_values)
  
          keep = QueryURL('/tabs', search=search, attrib=attrib_list,
                          )
  
          url = "/tabs"
          if search:
              post["search"] = search
          if attrib_list:
              post['attrib'] = attrib_list
  
          Partner = request.env['res.partner']
  
          Category = request.env['product.public.category']
          search_categories = False
          if search:
              categories = Partner.search(domain).mapped('public_categ_ids')
              search_categories = Category.search(
                  [('id', 'parent_of', categories.ids)] + request.website.website_domain())
              categs = search_categories.filtered(lambda c: not c.parent_id)
          else:
              categs = Category.search([('parent_id', '=', False)] + request.website.website_domain())
  
          parent_category_ids = []
  
          values = {
              'search': search,
              #'category': category,
              'attrib_values': attrib_values,
              'attrib_set': attrib_set,
              # 'search_count': product_count,  # common for all searchbox
              'rows': PPR,
              'categories': categs,
              'keep': keep,
              'parent_category_ids': parent_category_ids,
              'search_categories_ids': search_categories and search_categories.ids,
          }
  
          return http.request.render('site_web.s_tabs', {'clients' : clients})
  </code></pre>