2016-02-20 2 views
0

У меня есть рабочий файловый менеджер с библиотекой разбиения на кодIgniter 3.0.4.Codeigniter Pagination 3.0.4 Сортировка каталогов и файлов

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

В настоящее время кодировка codeignign сортирует каталоги и файлы по именам.

Вопрос с codeigniter pagination Как я могу убедиться, что все пути отображают каталоги в первую очередь. Затем сортирует файлы.

<?php 

class Filemanager extends CI_Controller { 

    public function __construct() { 
     parent::__construct(); 
     $this->load->library('upload'); 
     $this->load->helper('text'); 
     $this->load->library('pagination'); 
    } 

    public function index($results = NULL) {  
     $data['title'] = 'File Manager'; 

     $this_input_get_directory = $this->input->get('directory'); 

     if (isset($this_input_get_directory)) { 
      $directory = scandir(FCPATH . 'images/catalog/' . $this_input_get_directory . '/', 1); 
     } else { 
      $directory = scandir(FCPATH . 'images/catalog/', 1); 
     } 

     $files = array_diff($directory, array('.', '..')); 
     $files_limit = 3; 
     $input_get_per_page = $this->uri->segment(2); 
     $input_get_per_page += $files_limit; 

     $config['base_url'] = base_url('filemanager'); 
     $config['total_rows'] = count($files); 
     $config['per_page'] = $files_limit; 
     $config['uri_segment'] = 2; 
     $config['full_tag_open'] = "<ul class='pagination'>"; 
     $config['full_tag_close'] ="</ul>"; 
     $config['num_tag_open'] = '<li>'; 
     $config['num_tag_close'] = '</li>'; 
     $config['cur_tag_open'] = "<li class='disabled'><li class='active'><a href='#'>"; 
     $config['cur_tag_close'] = "<span class='sr-only'></span></a></li>"; 
     $config['next_tag_open'] = "<li>"; 
     $config['next_tagl_close'] = "</li>"; 
     $config['prev_tag_open'] = "<li>"; 
     $config['prev_tagl_close'] = "</li>"; 
     $config['first_tag_open'] = "<li>"; 
     $config['first_tagl_close'] = "</li>"; 
     $config['last_tag_open'] = "<li>"; 
     $config['last_tagl_close'] = "</li>"; 

     $this->pagination->initialize($config); 

     $data['images'] = array(); 

     foreach ($files as $file => $value) { 

      $url = ''; 

      if (isset($this_input_get_directory)) { 
       $url .= $this_input_get_directory . '/'; 
      } else { 
       $url .= ''; 
      } 

      if ($file < $input_get_per_page && $file >= $input_get_per_page - $files_limit) { 

       if (is_dir(FCPATH . 'images/catalog/' . $value)) { 

        $data['images'][] = array(
         'thumb' => '', 
         'type' => 'directory', 
         'href' => site_url('filemanager') . '?directory='. $url . $value, 
         'name' => $value 
        ); 

       } elseif (is_file(FCPATH . 'images/catalog/' . $url . $value)) { 

        $data['images'][] = array(
         'thumb' => $this->resize($value, 100, 100), 
         'type' => 'image', 
         'name' => $value 
        ); 
       } 

      } 
     } 

     $this->load->view('template/common/filemanager_view', $data); 
    } 
} 

ответ

0

Решенный Я нашел какой-то код из какого-либо другого, где он работал для меня. Я также использовал array_reverse(); все работает до сих пор.

<?php 

class Filemanager extends CI_Controller { 

    public function __construct() { 
     parent::__construct(); 
     $this->load->library('upload'); 
     $this->load->helper('text'); 
     $this->load->library('pagination'); 
     $this->load->helper('custom'); 
     define('DIR_IMAGE', FCPATH . 'images/'); 

    } 

    public function index() { 
     $data['title'] = 'File Manager'; 

     if ($this->uri->segment(3)) { 

      $this_input_get_directory = $this->uri->segment(2) . '/' . $this->uri->segment(3); 

     } else { 

      $this_input_get_directory = $this->uri->segment(2) . '/' . $this->uri->segment(3); 

     } 

     if (isset($this_input_get_directory)) { 

      $directory = rtrim(DIR_IMAGE . 'catalog/' . str_replace(array('../', '..\\', '..'), '', $this_input_get_directory), '/'); 

     } else { 

      $directory = DIR_IMAGE . 'catalog'; 
     } 

     // Get directories 
     $directories = glob($directory . '/' . '*', GLOB_ONLYDIR); 

     if (!$directories) { 
      $directories = array(); 
     } 

     // Get files 
     $files = array_reverse(glob($directory . '/' . '*.{jpg,jpeg,png,gif,JPG,JPEG,PNG,GIF}', GLOB_BRACE)); 

     if (!$files) { 
      $files = array(); 
     } 

     // Merge directories and files 
     $images = array_merge($directories, $files); 

     $files_limit = 6; 
     $input_get_per_page = $this->input->get('per_page'); 
     $input_get_per_page += $files_limit; 

     $config['base_url'] = base_url('filemanager'); 
     $config['total_rows'] = count($images); 
     $config['per_page'] = $files_limit; 
     $config['page_query_string'] = TRUE; 
     $config['full_tag_open'] = "<ul class='pagination'>"; 
     $config['full_tag_close'] ="</ul>"; 
     $config['num_tag_open'] = '<li>'; 
     $config['num_tag_close'] = '</li>'; 
     $config['cur_tag_open'] = "<li class='disabled'><li class='active'><a href='#'>"; 
     $config['cur_tag_close'] = "<span class='sr-only'></span></a></li>"; 
     $config['next_tag_open'] = "<li>"; 
     $config['next_tagl_close'] = "</li>"; 
     $config['prev_tag_open'] = "<li>"; 
     $config['prev_tagl_close'] = "</li>"; 
     $config['first_tag_open'] = "<li>"; 
     $config['first_tagl_close'] = "</li>"; 
     $config['last_tag_open'] = "<li>"; 
     $config['last_tagl_close'] = "</li>"; 

     $this->pagination->initialize($config); 

     $data['images'] = array(); 

     foreach ($images as $file => $value) { 

      $filename = str_replace(FCPATH . 'images/', '', $value); 

      $display_name = basename($filename); 

      if ($file < $input_get_per_page && $file >= $input_get_per_page - $files_limit) { 

       if (is_dir(DIR_IMAGE . $filename)) { 

        $data['images'][] = array(
         'thumb' => '', 
         'type' => 'directory', 
         'path' => $value, 
         'name' => $display_name, 
         'href' => site_url('filemanager/' . $display_name) 
        ); 

       } else if (is_file(DIR_IMAGE . $filename)) { 

        $data['images'][] = array(
         'thumb' => $this->resize($filename), 
         'type' => 'image', 
         'path' => $value, 
         'name' => $display_name 
        ); 
       } 

      } 
     } 

     $url = ''; 

     if (isset($this_input_get_directory)) { 
      $pos = strrpos($this_input_get_directory, '/'); 

      if ($pos) { 
       $url .= '?directory=' . urlencode(substr($this_input_get_directory, 0, $pos)); 
      } 
     } 

     $data['parent'] = base_url('filemanager' . $url); 

     $url = ''; 

     if (isset($this_input_get_directory)) { 
      $url .= '?directory=' . $this_input_get_directory; 
     } 

     $data['refresh'] = base_url('filemanager' . $url); 

     $this->load->view('template/common/filemanager_view', $data); 
    } 
}