1

コメントに記載されているいくつかのケースをチェックするために、次のコードを使用します。残念ながら、ページの読み込み速度が低下しています。機能を向上させて適切に使用するために、あなたは何を提案しますか、私は何をしますか?

function insert() {
    if ($this - > session - > userdata('logged_in')) { //This is for test whether the user is logged in or not?
        if ($this - > siran - > access_level_active()) { //This is because the user name manager is active or not?
            if ($this - > siran - > access_level('1', '5')) { //This is for whether or not permission to access this page?
if($_POST){
                $this - > load - > view('admin/onepage');
}else{
        $this->session->set_flashdata('message_p', $this->lang->line('nopost'));
        redirect($this->session->userdata('previous_page'));
        }
            } else {
                $this - > session - > set_flashdata('message', $this - > lang - > line('notaccess'));
                redirect($this - > session - > userdata('previous_page'));
            }
        } else {
            $this - > session - > set_flashdata('message', $this - > lang - > line('noactive'));
            redirect('login', 'refresh');
        }
    } else {
        $this - > session - > set_flashdata('message', $this - > lang - > line('plslogin'));
        redirect('login', 'refresh');
    }
}

ライブラリcodeigniterの次の3つの関数:

public function access_level($mp, $access){
    //$mp = '1';
    $CI = &get_instance();
            $result = $CI->db->get_where('access_level', array('mainpage'=>$mp,'id_relation'=>$CI->session->userdata('id_relation')));
    $data = array();
    $out = array();
    foreach($result->result() as $row){
        $dv = json_decode($row->subpage);       
        $flat = array();        
        foreach ( $dv as $item ) {
            $flat = array_merge( $flat, explode( ',', $item ) );
        }       
        $out = array_merge( $out, $flat );
    }
    if(in_array($access, $out) || in_array('110', $out)){
        return  true;
    }else{
        return false;
    }
}
public function access_level_active(){
    //$mp = '1';
    $CI = &get_instance();
            $result = $CI->db->get_where('users', array('id'=>$CI->session->userdata('id')));
    if ($result->num_rows() > 0){
        $row = $result->row();
        return ($row->active == 1 ? true : false );
    }else{
        return false;
    }
}
function previous_page(){
    $CI = &get_instance();
    if ($CI->session->userdata('logged_in')) {
        if (isset($_SERVER['HTTP_REFERER']))
        {
            $CI->session->set_userdata('previous_page', $_SERVER['HTTP_REFERER']);
        }else
        {
            $CI->session->set_userdata('previous_page', base_url());
        }
    }
}
4

1 に答える 1

0

あなたのコードは特に集中的に見えません。私が変更する唯一のことは、if {} else {}ステートメントをそれ自体の中にネストする回数を制限し、コードの繰り返しを別の関数に移動することです。たとえば、私はあなたのinsert()コードを次のように個人的に書き直します(主にそれがとてもきれいに見えるからです)。

挿入機能:

function insert() {

    if (!$this->session->userdata('logged_in')) {
        $this->_flashRedirect('login', $this->lang->line('plslogin'));  
    }

    if (!$this->siran->access_level_active()) {
        $this->_flashRedirect('login', $this->lang->line('noactive'));  
    }

    if (!$this->siran->access_level('1', '5')) {
        $this->_flashRedirect($this->session->userdata('previous_page'), $this->lang->line('notaccess'));       
    }

    if($_POST){
        $this->load->view('admin/onepage');
    } else {
        $this->_flashRedirect($this->session->userdata('previous_page'), $this->lang->line('nopost'), 'message_p'); 
    }

}

_flashRedirect()コントローラに新しい関数を作成します。

public function _flashRedirect($page, $message, $message_type = 'message') {
    $this->session->set_flashdata('message', $message);
    redirect($page, 'refresh');
}

速度に関しては、クエリ(mysql)がパフォーマンスの問題の原因である可能性が非常に高くなります。返される行数、テーブルの大きさはどれくらいですか?

于 2013-02-19T03:01:33.077 に答える