반응형

리스트를 누르고 해당 정보를 보는 페이지마다 다시 리스트를 넣으려고 한다.


controller/topic.php

function __construct() {

    parent::__construct();

    $this->load->database();

    $this->load->model('topic_model');

}


function index() {

    $data=$this->topic_model->gets();  //topic_model.php 의 gets라는 method를 사용하여 $data에 넣겠다.

    $this->load->view('main',array('topics'=>$data));

}


function get($id) {

    $topic=$this->topic_model->get($id);

    $this->load->view('get',array('topic'=>$topic));  //기존 $id에서 $topic 값을 가져오는 것으로 수정.


views/main.php

This is Main page.

<?

    foreach($topics as $entry) {

?>

    <li><a href="index.php/topic/get/<?=$entry->id?>"><?=$entry->id?></a></li>

<?

    }

?> 


메인페이지에 리스트를 뿌려주는 view 파일을 각각 리스트 정보안에서도 활용 하기 때문에 중복이 된다.

위 빨간색 표시 부분을 잘라내기 하여 topic_list.php 파일로 변경하고 controller 파일에서 불러옴.


views/main.php

 This is Main page.


views/topic_list.php

<?

    foreach($topics as $entry) {

?>

    <li><a href="index.php/topic/get/<?=$entry->id?>"><?=$entry->id?></a></li>

<?

    }

?>


controller/topic.php

function __construct() {

    parent::__construct();

    $this->load->database();

    $this->load->model('topic_model');

}


function index() {

    $topic_list=$this->topic_model->gets();  //전체 리스트를 디비에서 가져옴.

    $this->load->view('main'); //main 페이지는 더이상 받을 인자가 없다.

    $this->load->view('topic_list',array('topics'=>$topic_list)); //전체 리스트를 뿌려줌.

}


function get($id) {  //전체 리스트에서 선택된 정보값을 출력해주는 부분(이곳에 전체리스트를 다시 가져옴.)

    $topic_list=$this->topic_model->gets();  //전체 리스트를 디비에서 가져옴.

    $topic=$this->topic_model->get($id);

    $this->load->view('get',array('topic'=>$topic));  //기존 $id에서 $topic 값을 가져오는 것으로 수정.

    $this->load->view('topic_list',array('topics'=>$topic_list));

// 정보를 보여준 후 전체 리스트를 뿌려준다.

}


반응형
반응형

* Controller 파일의 중복소스 제거


1. __construct()

 - controller/topic.php (아래 소스의 빨간색 글씨로 되어 있는 부분이 중복되고 있다.)

function index() {

    $this->load->database();

    $this->load->model('topic_model');  //topic_model.php 파일을 불러오겠다.

    $data=$this->topic_model->gets();  //topic_model.php 의 gets라는 method를 사용하여 $data에 넣겠다.

    $this->load->view('main',array('topics'=>$data));

}


function get($id) {

    $this->load->database();

    $this->load->model('topic_model');

    $topic=$this->topic_model->get($id);


    $this->load->view('get',array('topic'=>$topic));  //기존 $id에서 $topic 값을 가져오는 것으로 수정.

}


 - 중복제거

function __construct() {

    parent::__construct();

    $this->load->database();

    $this->load->model('topic_model');

}


function index() {

    $data=$this->topic_model->gets();  //topic_model.php 의 gets라는 method를 사용하여 $data에 넣겠다.

    $this->load->view('main',array('topics'=>$data));

}


function get($id) {

    $topic=$this->topic_model->get($id);

    $this->load->view('get',array('topic'=>$topic));  //기존 $id에서 $topic 값을 가져오는 것으로 수정.

}


2. function

 - controller/topic.php (아래 소스의 빨간색 글씨로 되어 있는 부분이 중복되고 있다.)

function __construct() {

    parent::__construct();

    $this->load->database();

    $this->load->model('topic_model');

}


function index() {

    $this->load->view('head');

    $data=$this->topic_model->gets();

    $this->load->view('topic_list',array('topics'=>$topics));


    $this->load->view('main');


    $this->load->view('footer');

}


function get($id) {

    $this->load->view('head');

    $data=$this->topic_model->gets();

    $this->load->view('topic_list',array('topics'=>$topics));


    $topic=$this->topic_model->get($id);

    $this->load->view('get',array('topic'=>$topic));


    $this->load->view('footer');

}


 - 중복제거

function __construct() {

    parent::__construct();

    $this->load->database();

    $this->load->model('topic_model');

}


function index() {

    $this->head();


    $this->load->view('main');


    $this->load->view('footer');

}


function get($id) {

    $this->head();


    $topic=$this->topic_model->get($id);

    $this->load->view('get',array('topic'=>$topic));


    $this->load->view('footer');

}


function head(){

    $this->load->view('head');

    $data=$this->topic_model->gets();

    $this->load->view('topic_list',array('topics'=>$topics));

}


반응형
반응형

- 리스트를 보여주고 각 리스트에 대한 정보를 보여준다.


* models/topic_model.php

class Tablename_model extends CI_Model {

    function __construct() {   //method 를 초기화

        parent::__construct();

    }


   public function gets() {

       return $this->db->query('SELECT id,name from tablename')->result();

   }


   public function get($topic_id) {

        return $this->db->get_where('tablename',array('id'=>$topic_id))->row();

//    get_where는 active record라는 방식이라 함. 아래 쿼리와 동일하다고 함.

//    get_where 의 첫번째 인자는 테이블명, 두번째 인자의 id는 컬럼명임.

//    return $this->db->query('SELECT * from tablename where id = $topic_id')->row();

//    active record 방식의 장점은 DB의 인식성이 좋음.

   }


active record 방식을 사용하였을 때 특정 컬럼만 가져오고 싶다면, 아래와 같이 기술하면 된다.

$this->db->select('id');

$this->db->select('name');

$this->db->select(substr('chardate',1,4) chardate);

return $this->db_get_where('tablename',array('id'=>$topic_id))->row();



* controller/topic.php

function index() {

    $this->load->database();

    $this->load->model('topic_model');  //topic_model.php 파일을 불러오겠다.

    $data=$this->topic_model->gets();  //topic_model.php 의 gets라는 method를 사용하여 $data에 넣겠다.


    $this->load->view('main',array('topics'=>$data));

}


function get($id) {

    $this->load->database();

    $this->load->model('topic_model');

    $topic=$this->topic_model->get($id);


    $this->load->view('get',array('topic'=>$topic));  //기존 $id에서 $topic 값을 가져오는 것으로 수정.


}


* views/get.php

 This is get page.

<article>

    <h1><?=$topic->id?></h1>

    <div><?=$topic->name?></div>

</article>



다음에는 현재 구현한 소스를 가지고 간결화 하는 작업을 할 것이다.

model 수업을 들으면서 머리가 많이 복잡해지기 시작했다.


어떤 흐름인지는 알겠는데, 정리가 되지 않는 찝찝함?

동영상 강의를 반복적으로 듣다가 잊지 않기 위해 블로그에 글을 적어본다.

담주에 보게 되면 또 기억할 수 있을지가 의문이네 ㅠㅠ

반응형
반응형

* 데이터와 관련된 일을 한다. 즉, 데이터 베이스와 연관된 일을 하는 곳이다.

* CI에서 model 기능이 제대로 작동하려면 CI_Model 를 반드시 상속 받아야 한다.


* 실습을 위해서는 반드시 데이터 베이스와 연동이 되어 있어야 한다.

* 설정은 application/config/database.php 에서 설정을 할 수 있다.

 - 기본적으로 설정되어야 할 값

$db['default']['hostname'] = 'localhost'; // IP 또는 hostname

$db['default']['username'] = 'scott';

$db['default']['password'] = 'tiger';

$db['default']['database'] = 'PROD';

$db['default']['dbdriver'] = 'odbc'; 

 - 설정 해주는 라인 위쪽으로 올라가보면 주석처리로 어떤 것들이 지원이 되고 어떤 이름을 넣어야 하는지도 나와 있음.

    system/database/drivers 경로에 보면 지원하고 있는 dbdriver 파일들이 있음.

 - database.php 파일은 보안상으로 많은 문제를 발생 시킬 수 있기 때문에, 파일에 대한 권한을 좀 더 신경을 써야 함.

    git 같은 소스관리 툴을 사용할 때는 ignore가 되도록 해야하며, 여러모로 주의를 기울여야하는 파일임.


* 데이터베이스를 불러오는 방법.

1. application/config/autoload.php 파일에서 $autoload['libraries'] = array('database') 라고 설정.

   - 이럴경우 계속적으로 데이터베이스를 불러옴.(테스트는 안해봄)

   - 더이상 데이터베이스를 불러오지 않아 편할지는 모르겠으나, DB를 많이 사용하지 않는 페이지이거나, 전혀 사용되지 않        는 페이지들이 DB 사용률 보다 페이지가 더 많이 불러오게 되는 경우는 안좋을 수 있다.

     즉, 사용 할 때마나 DB에 접속하는 방법이 좋다. 매번 DB에 접속하는 것보다 사용 할 때만 접속하는 것이 속도에 좋고

         DB의 부담도 줄어 들 것이다.


2. 사용 할 때마나 DB에 접속.

   - application/models/ 폴더에 ***_model.php를 생성하고 controller 파일에서 제어를 하는 방법.

   - 일반적으로 모델 파일명 규칙은 사용될 데이터베이스의 테이블 이름을 사용하고 _model이라고 반드시 붙여준다.


* models/Tablename_model.php

class Tablename_model extends CI_Model {

    function __construct() {   //method 를 초기화

        parent::__construct();

       // 매번 초기화를 해야하는 method가 있으면 이곳에 추가를 해주면 됨.

    }


   public function gets() {

       //$this->db->query()->result(); 문법.

       return $this->db->query('SELECT id,name from tablename')->result();

       //객체 - result(), 배열 - result_array(), 값이 하나 일 경우 - row()

   }

 


* controller/topic.php

function index() {

    $this->load->database();

    $this->load->model('topic_model');  //topic_model.php 파일을 불러오겠다.

    $data=$this->topic_model->gets();  //topic_model.php 의 gets라는 method를 사용하여 $data에 넣겠다.


    $this->load->view('main',array('topics'=>$data));

}


function get($id) {


    $this->load->view('get',array('id'=>$id));


}


* views/main.php

<?

    foreach($topics as $entry) {

?>

    <li><a href="index.php/topic/get/<?=$entry->id?>"><?=$entry->id?></a></li>

<?

    }

?>


* views/get.php

 This is get page.<?=$id?>


반응형

'Programming > CodeIgniter' 카테고리의 다른 글

Model(3/5) - 소스 중복제거  (0) 2015.09.07
Model(2/5) - 리스트와 각 리스트 정보 구현  (0) 2015.09.04
Model(1/5) - 설정 및 사용  (0) 2015.09.04
View  (0) 2015.09.04
Controller  (0) 2015.09.04
CodeIgniter와의 규칙?  (0) 2015.09.04
반응형

화면 상에 출력하는 것, 시각적으로 표시하는 것들을 관리.

공통적으로 쓰는 코드/로직들을 통합하여, 수정/관리할때 수월해 짐.


공통적으로 사용되는 것 중 HTML의 소스가 대표적일 것이다.

모든페이지 마다 아래와 같은 html 소스가 들어가게 될 것인데, 불필요하게 사용되지 않게 view에서 관리할 수 있다.


* 공용 소스

<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8">

    </head>

    <body>

    </body>

</html>


* views/_head.php 

<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8">

    </head>

    <body>


* views/_footer.php

    </body>

</html>


* controller 파일에서 view를 불러 올 때 사용 예제

$this->load->view('_head');

$this->load->view('main',array('id'=>$id));

$this->load->view('_footer'); 


반응형

'Programming > CodeIgniter' 카테고리의 다른 글

Model(2/5) - 리스트와 각 리스트 정보 구현  (0) 2015.09.04
Model(1/5) - 설정 및 사용  (0) 2015.09.04
View  (0) 2015.09.04
Controller  (0) 2015.09.04
CodeIgniter와의 규칙?  (0) 2015.09.04
CodeIgniter 설치  (0) 2015.09.04
반응형

* View와 Model을 제어하는 역할을 함.


* URL: localhost/index.php/welcome/input/test_name 참고


    index.php : 반드시 존재해야 하나 .htpaccess 파일로 제거할 수 있음.

    welcome : welcome.php 파일.

    input : welcome.php 파일에 input함수라고 하여 또 다른페이지를 불러 올 수 있음.(함수 또는 method 라 함.)

    test_name : welcome.php 파일에 input 함수의 인자


 - controller/welcome.php(echo 문은 설명을 위해 넣은 것이고, views에 포함되어야 하는 것이 맞음)

class Welcome extends CI_Controller {

    public function index() {

       $this->load->view('url');

       echo "URL에 welcome 뒤로 아무것도 붙지 않았을 경우 기본적으로 보여지는 내용";

    }

    public function input($id) {

       $this->load->view('input');

       echo "welcome/input 이 오면 input의 내용을 보여주도록..";


       $this->load->view('id');

       echo $id."$id는input 다음에 값이 올수 있는 인자(즉 파라미터라 할 수 있음)";

    }

}


반응형

'Programming > CodeIgniter' 카테고리의 다른 글

Model(1/5) - 설정 및 사용  (0) 2015.09.04
View  (0) 2015.09.04
Controller  (0) 2015.09.04
CodeIgniter와의 규칙?  (0) 2015.09.04
CodeIgniter 설치  (0) 2015.09.04
CodeIgniter 관한 글을 작성하며..  (0) 2015.09.04
반응형

1. class명은 반드시 파일명과 동일해야 하며 첫글자는 대문자로 시작.


2. controller는 CI_Controller, Model은 CI_Model 을 반드시 상속받아야 함.(CodeIgniter가 제대로 작동하기 위함)


3. Model 파일은 반드시 "_model"이라고 명시를 해야 한다.

 ex. application/models/test.php         (X)

     application/models/test_model.php (O)


4. 문법

    $this->load->view('view_file');  => view파일 중 view_file.php를 불러옴.

    $this->load->database();       => DB에 연결

    $this->load->model('file_model');  => model파일 중 file_model.php를 불러옴.

반응형

'Programming > CodeIgniter' 카테고리의 다른 글

Model(1/5) - 설정 및 사용  (0) 2015.09.04
View  (0) 2015.09.04
Controller  (0) 2015.09.04
CodeIgniter와의 규칙?  (0) 2015.09.04
CodeIgniter 설치  (0) 2015.09.04
CodeIgniter 관한 글을 작성하며..  (0) 2015.09.04
반응형

홈페이지 및 다운로드 : http://www.codeigniter.com


파일을 다운로드 받고 DocumentRoot 경로에 압축을 풀면 끝!

확인은 DocumentRoot/index.php 을 누르면 아래와 같은 문구가 출력 된다.


Welcome to CodeIgniter!

The page you are looking at is being generated dynamically by CodeIgniter.

If you would like to edit this page you'll find it located at:

application/views/welcome_message.php

The corresponding controller for this page is found at:

application/controllers/welcome.php

If you are exploring CodeIgniter for the very first time, you should start by reading the User Guide.


반응형

'Programming > CodeIgniter' 카테고리의 다른 글

Model(1/5) - 설정 및 사용  (0) 2015.09.04
View  (0) 2015.09.04
Controller  (0) 2015.09.04
CodeIgniter와의 규칙?  (0) 2015.09.04
CodeIgniter 설치  (0) 2015.09.04
CodeIgniter 관한 글을 작성하며..  (0) 2015.09.04
반응형

생활코딩에서 항상 많은 도움을 받고 있는 것 같다.


CodeIgniter 에 관한 내용을 작성하게 된 계기는 프레임워크에 대해서 새롭게 알게 되었으며,

알게 된 이후 자주가는 opentutorials에서 동영상 강의 찾아 듣게 된 이후 부터이다.


정확하게 말하자면, model 수업을 본 이후 시점이다.

볼 때는 이해가 되었으나, 돌아서면 이해가 너무 되지 않아서 잊지 않기 위해 작성을 시작했다.


지금부터 열공 !!!!


CodeIgniter는 생활코딩에서 동영상 강의를 듣고 혼자만의 노트로 끄적끄적거려 볼란다.

무조건 내 중심으로 글을 적을 것이다.

반응형

'Programming > CodeIgniter' 카테고리의 다른 글

Model(1/5) - 설정 및 사용  (0) 2015.09.04
View  (0) 2015.09.04
Controller  (0) 2015.09.04
CodeIgniter와의 규칙?  (0) 2015.09.04
CodeIgniter 설치  (0) 2015.09.04
CodeIgniter 관한 글을 작성하며..  (0) 2015.09.04
반응형

웹 소스 맨 상단에 추가 해줌.


header("Content-Type: application/vnd.ms-excel");

header("Content-Disposition: attachment; filename=test.xls");

header("Content-Description:PHP4 Generated Data");


아래와 같은 헤더도 있으나, 현재까지는 위 3개로만으로도 다운이 가능하다.

header("Content-Type: application/octet-stream");

header("Content-Type-Description: File Transfer");

header("Expires: 0");

header("Cache-Control: must-revalidate, post-check=0,pre-check=0");

header("Pragma; public");



이걸 응용하여 버튼 클릭시 다운받게 해보자.


버튼 페이지(button.php)

<script>

    $.fn.outerHTML = function() {

         var el = $(this);

         if(!el[0]) return "";

         if(el[0].outerHTML) {

             return el[0].outerHTML;

         } else {

             var content = el.wrap('<p/>').parent().html();

             el.unwrap();

             return content;

         }

    }

function export_excel() {

var exp=$('#export').outerHTML();  //id 값이 export인 태그부터 가져옴.(위함수)

// var exp=$('#export').html(); => id값이 export 인 태그의 자식 태그들만 가져옴.

$('#data').val(exp);

$('#export_data').submit();

}

</script>

<div>

<input type="button" value="Excel" onclick="export_excel()">

<form id="export_data" method="post" action="./Excel.php">

<input type="hidden" id="data" name="data" />

</form>

</div>


다운로드 실행 페이지(Excel.php)

header("Content-Type: application/vnd.ms-excel");

header("Content-Disposition: attachment; filename=test.xls");

header("Content-Description:PHP4 Generated Data");


$data = $_REQUEST['data'];

echo "<meta content=\"application/vnd.ms-excel;charset=UTF-8;\" name=\"Content-type\">";

echo $data;


반응형

'Programming > PHP' 카테고리의 다른 글

Fatal error: Maximum execution time of 30 seconds exceeded  (0) 2015.10.22
error 메세지 출력  (0) 2015.10.22
bitnami  (0) 2015.10.21
phpexcel 설치  (0) 2015.10.13
index.php 삭제하기  (0) 2015.09.09
엑셀 다운로드 header 방식  (0) 2015.08.26

+ Recent posts