public function index($product_url = '')
 {
     $categoryObj = new categories_model();
     $categoryObj->where = array('published' => 1);
     $this->data['categories'] = $categoryObj->get();
     if ($product_url && $product_url != 'page') {
         $productObj = new products_model();
         $productObj->where = array('url' => $product_url);
         $productObj->id = $productObj->get_id();
         $this->data['product'] = $productObj->get();
         if ($this->data['product']->category) {
             $categoryObj = new categories_model();
             $categoryObj->id = $this->data['product']->category;
             $category = $categoryObj->get();
             $this->data['product']->category = $category->name;
             $this->data['product']->category_url = $category->url;
         }
         /*----------  Meta Details  ----------*/
         $this->data['title'] = $this->data['product']->name . ' | ' . $this->page['title'];
         $this->data['keywords'] = $this->data['product']->meta_keywords;
         $this->data['description'] = $this->data['product']->meta_description;
         $this->data['social_meta_title'] = $this->data['product']->social_meta_title ? $this->data['product']->social_meta_title : $this->data['product']->name . ' | ' . $this->page['title'];
         $this->data['social_meta_image'] = $this->data['product']->social_meta_image ? $this->data['product']->social_meta_image : '';
         /*----------  End Meta Details  ----------*/
         $this->data['content'] = 'pages/product_view';
         $this->load->view('layout', $this->data);
     } else {
         $productObj = new products_model();
         $productObj->where = array('published' => 1);
         /*----------  Meta Details  ----------*/
         $this->data['title'] = $this->page['title'];
         $this->data['keywords'] = $this->page['keywords'];
         $this->data['description'] = $this->page['description'];
         $this->data['social_meta_title'] = $this->page['social_meta_title'];
         $this->data['social_meta_image'] = $this->page['social_meta_image'];
         /*----------  End Meta Details  ----------*/
         if ($this->input->get()) {
             if ($this->data['category_url'] = $this->input->get('category', TRUE)) {
                 $categoryObj = new categories_model();
                 $categoryObj->where = array('url' => $this->data['category_url']);
                 $categoryObj->id = $categoryObj->get_id();
                 $category = $categoryObj->get();
                 if (!$category) {
                     redirect(base_url('products'), 'location', 'refresh');
                 }
                 $this->data['heading'] = $category->name;
                 /*----------  Meta Details  ----------*/
                 $this->data['title'] = $category->name . ' | ' . $this->page['title'];
                 $this->data['keywords'] = $category->meta_keywords;
                 $this->data['description'] = $category->meta_description;
                 $this->data['current_url'] = base_url('products') . '?category=' . $this->data['category_url'];
                 $this->data['social_meta_title'] = $category->social_meta_title ? $category->social_meta_title : $category->name . ' | ' . $this->page['title'];
                 $this->data['social_meta_image'] = $category->social_meta_image ? $category->social_meta_image : '';
                 /*----------  End Meta Details  ----------*/
                 $productObj->where = array('published' => 1, 'category' => $categoryObj->id);
             } elseif ($this->data['category_url'] = $this->input->get('category', TRUE) && ($this->data['sort'] = $this->input->get('sort', TRUE))) {
                 $categoryObj = new categories_model();
                 $categoryObj->where = array('url' => $this->data['category_url']);
                 $categoryObj->id = $categoryObj->get_id();
                 $category = $categoryObj->get();
                 if (!$category) {
                     redirect(base_url('products'), 'location', 'refresh');
                 }
                 $this->data['heading'] = $category->name;
                 /*----------  Meta Details  ----------*/
                 $this->data['title'] = $category->name . ' | ' . $this->page['title'];
                 $this->data['keywords'] = $category->meta_keywords;
                 $this->data['description'] = $category->meta_description;
                 $this->data['current_url'] = base_url('products') . '?category=' . $this->data['category_url'];
                 $this->data['social_meta_title'] = $category->social_meta_title ? $category->social_meta_title : $category->name . ' | ' . $this->page['title'];
                 $this->data['social_meta_image'] = $category->social_meta_image ? $category->social_meta_image : '';
                 /*----------  End Meta Details  ----------*/
                 switch ($this->data['sort']) {
                     case 'featured':
                         $productObj->where = array('published' => 1, 'category' => $categoryObj->id);
                         $productObj->where = array('published' => 1, 'featured' => 1);
                         break;
                     case 'latest':
                         $productObj->where = array('published' => 1, 'category' => $categoryObj->id);
                         $productObj->order = array('date_published', 'desc');
                         break;
                     case 'oldest':
                         $productObj->order = array('date_published', 'asc');
                         $productObj->where = array('published' => 1, 'category' => $categoryObj->id);
                         break;
                     case 'price-high-to-low':
                         $productObj->order = array('price', 'desc');
                         $productObj->where = array('published' => 1, 'category' => $categoryObj->id);
                         break;
                     case 'price-low-to-high':
                         $productObj->order = array('price', 'asc');
                         $productObj->where = array('published' => 1, 'category' => $categoryObj->id);
                         break;
                     default:
                         $productObj->where = array('published' => 1, 'category' => $categoryObj->id);
                         break;
                 }
             } elseif ($this->data['sort'] = $this->input->get('sort', TRUE)) {
                 switch ($this->data['sort']) {
                     case 'featured':
                         $productObj->where = array('published' => 1, 'featured' => 1);
                         break;
                     case 'latest':
                         $productObj->order = array('date_published', 'desc');
                         break;
                     case 'oldest':
                         $productObj->order = array('date_published', 'asc');
                         break;
                     case 'price-high-to-low':
                         $productObj->order = array('price', 'desc');
                         break;
                     case 'price-low-to-high':
                         $productObj->order = array('price', 'asc');
                         break;
                     default:
                         # code...
                         break;
                 }
             } else {
                 redirect(base_url('products'), 'location', 'refresh');
             }
         }
         $row_count = $productObj->count();
         // Customize pagination
         $config = $this->config->item('pagination');
         $config['base_url'] = base_url('products');
         $config['total_rows'] = $row_count;
         $config['per_page'] = 8;
         $config['prefix'] = 'page/';
         $this->pagination->initialize($config);
         $page = $this->uri->segment(3) ? $this->uri->segment(3) : 0;
         $productObj->limit = $config['per_page'];
         $productObj->offset = $page;
         $this->data['products'] = $productObj->get();
         if ($this->data['products']) {
             foreach ($this->data['products'] as $product) {
                 if ($product->category) {
                     $categoryObj = new categories_model();
                     $categoryObj->id = $product->category;
                     $category = $categoryObj->get();
                     $product->category = $category->name;
                     $product->category_url = $category->url;
                 }
             }
         }
         $this->data['pagination'] = $this->pagination->create_links();
         $this->data['content'] = 'pages/products';
         $this->load->view('layout', $this->data);
     }
 }