장바구니 Shopping Cart Class
장바구니 클래스는 유저가 사이트를 이용하는 동안 아이템들이 세션에 추가되어 유효한 상태를 유지하도록 해줍니다. 세션에 추가된 아이템들은 장바구니 형식으로 검색되거나 출력될수있고, 유저가 장바구니에서 아이템의 수량을 고치거나 삭제할수 있도록 해줍니다.
장바구니 클래스는 오직 장바구니의 핵심 기능들만을 제공하므로, 배송, 신용카드 승인, 또는 다른 처리 컴포넌트들은 제공하지 않습니다.
장바구니 클래스 초기화 Initializing the Shopping Cart Class
중요: 장바구니 클래스는 장바구니 정보를 데이타베이스에 저장하기위해 CodeIgniter의 세션 클래스를 사용합니다. 그러므로 장바구니 클래스를 사용하기전에 세션 문서에 제시되어 있는 것 처럼 데이타베이스 테이블을 설정해야 합니다. 그리고 데이타베이스를 사용하기위해 application/config/config.php 파일 안에있는 세션 환경설정을 설정합니다.
컨트롤러에서 장바구니 클래스를 초기화하기위해 $this->load->library 함수을 사용합니다.
$this->load->library('cart');
장바구니 클래스가 로드되면, $this->cart를 사용할수 있게 됩니다.
Note: 장바구니 클래스는 자동으로 세션클래스를 로드하고 초기화합니다. 그러므로 세션을 다른 곳에서 사용하지 않는 이상, 세션 클래스를 로드 할 필요는 없습니다.
장바구니에 아이템 추가 Adding an Item to The Cart
장바구니에 아이템을 추가하려면, 아래와 같이 상품 정보가 담긴 배열을 $this->cart->insert()으로 넘기면 됩니다.
$data = array(
'id' => 'sku_123ABC',
'qty' => 1,
'price' => 39.95,
'name' => 'T-Shirt',
'options' => array('Size' => 'L', 'Color' => 'Red')
);
$this->cart->insert($data);
Important: 위의 배열에서 처음 4개의 인덱스들 (id, qty, price, name)은 필수입니다. 저것들 중에 하나라도 빠질경우, 데이타는 장바구니에 저장되지 않습니다. 다섯번째 인덱스인 (options)는 선택사항 입니다. 다섯번째 인덱스는 상품이 추가 옵션을 가질 경우 사용될 수 있도록 되어있습니다. 위에 보이는것처럼 options는 배열을 사용합니다.
다섯개의 정해진 인덱스:
- id - 각각의 상품은 고유번호를 가져야 합니다. 이것은 보통 SKU 또는 고유번호가 됩니다.
- qty - 구입될 수량입니다.
- price - 상품의 가격입니다.
- name - 상품의 이름 입니다.
- options - 상품을 식별할 추가적인 정보입니다. 이것들은 배열을 통해서 전달되어야 합니다.
위에 있는 다섯개의 인덱스 말고도 2개의 정해진 인덱스 rowid and subtotal가 있습니다. 이것들은 장바구니 클래스 내부에서 사용되므로 장바구니에 데이타를 추가할때 이 단어들을 인덱스로 사용해서는 안됩니다.
배열은 추가적인 데이타 포함 할 수 있습니다. 배열에 포함된 모든 것은 무엇이든지 세션에 저장됩니다. 그렇지만, 좀더 쉽게 상품들을 테이블에 출력하기 위해서 데이타를 형식에 맞춰 통일시키면 좋습니다
insert() 함수로 아이템을 입력에 성공하면 $rowid 가 리턴됩니다.
다량의 아이템들을 장바구니에 추가 Adding Multiple Items to The Cart
아래처럼 다중배열을 사용하여 여러개의 아이템을 한번에 장바구니로 추가하는것이 가능합니다. 이것은 같은 페이지 안에 있는 여러 상품들 중에 사용자가 선택할수 있도록 할때 편리합니다.
$data = array(
array(
'id' => 'sku_123ABC',
'qty' => 1,
'price' => 39.95,
'name' => 'T-Shirt',
'options' => array('Size' => 'L', 'Color' => 'Red')
),
array(
'id' => 'sku_567ZYX',
'qty' => 1,
'price' => 9.95,
'name' => 'Coffee Mug'
),
array(
'id' => 'sku_965QRS',
'qty' => 1,
'price' => 29.95,
'name' => 'Shot Glass'
)
);
$this->cart->insert($data);
장바구니 출력 Displaying the Cart
장바구니를 출력하려면 아래에 보이는 코드와 비슷하게 뷰 파일을 만듭니다.
이 예제는 폼 헬퍼를 사용 한다는 점을 주의해주세요.
장바구니 업데이트
장바구니에 있는 정보를 업데이트 하려면 Row ID 와 수량이 들어간 배열을 $this->cart->update()에 전달하면 됩니다.
Note: 만약 수량이 0 으로 지정된다면, 아이템은 장바구니에서 삭제됩니다.
$data = array(
'rowid' => 'b99ccdf16028f015540f341130b6d8ec',
'qty' => 3
);
$this->cart->update($data);
// Or a multi-dimensional array
$data = array(
array(
'rowid' => 'b99ccdf16028f015540f341130b6d8ec',
'qty' => 3
),
array(
'rowid' => 'xw82g9q3r495893iajdh473990rikw23',
'qty' => 4
),
array(
'rowid' => 'fh4kdkkkaoe30njgoe92rkdkkobec333',
'qty' => 2
)
);
$this->cart->update($data);
Row ID가 뭥미? row ID는 아이템이 장바구니에 추가될때 장바구니 코드에 의해 생성되는 유니크한 식별자 입니다. 유니크한 ID가 생성되는 이유는 다른 옵션의 똑같은 상품들이 장바구니에 의해 관리 될수있기 때문입니다.
예를 들어, 어떤 사람이 2장의 각각 다른 사이즈의 똑같은 티셔츠(같은 상품 ID)를 산다고 합시다. 두개의 티셔츠는 똑같은 티셔츠이므로 상품 ID (그리고 다른 옵션들)는 같습니다. 2장의 티셔츠의 다른점은 사이즈 뿐입니다. 이렇게 두개의 셔츠가 따로 관리되어야 하기때문에 장바구니는 서로 다른 식별자를 가져야 합니다. 여기서 두장의 티셔츠는 상품ID를 기반으로 유니크한 "row ID"를 가짐으로서 따로 관리될수 있고 어떠한 옵션하고도 연결될 수있습니다.
거의 대부분, 장바구니를 업데이트 하는것은 "장바구니 보기" 페이지를 통해 사용자가 하는것입니다. 개발자 입장에서는, "장바구니 보기" 페이지의 히든 폼 필드에 이 정보를 가지고 있고 폼이 섭밋 될때 그 정보가 업데이트 함수으로 잘 전달 되도록 만드는 것 말고는 "rod ID"에 대해서 염려하지 않아도 됩니다. 더 많은 정보를 위해서는 위에 있는 "장바구니 보기" 페이지 구조를 검토해주세요.
장바구니 함수 설명 Function Reference
$this->cart->insert();
위에 개요된것처럼, 아이템들을 장바구니에 추가할수 있게 해줍니다.
$this->cart->update();
위에 개요된것처럼, 장바구니에 있는 아이템들을 업데이트 할수있게 해줍니다.
$this->cart->total();
장바구니에 있는 상품의 총 가격을 출력합니다.
$this->cart->total_items();
장바구니에 있는 아이템의 갯수를 출력합니다.
$this->cart->contents();
장바구니에 있는 모든것을 포함한 배열을 리턴합니다
$this->cart->has_options(rowid);
장바구니에 특정 row가 옵션들을 포함하고있으면 TRUE를 리턴합니다. 이 함수는 위의 장바구니 출력 예제에서 보이는것과 같이, 이 함수에 rowid를 건내줘야 하기때문에 $this->cart->contents() 함수를 사용한 룹 안에서 사용되게끔 되어있습니다.
$this->cart->product_options(rowid);
특정 상품의 옵션들을 배열로 리턴합니다. 이 함수는 위의 장바구니 출력 예제에서 보이는것과 같이, 이 함수에 rowid를 건내줘야 하기때문에 $this->cart->contents() 함수를 사용한 룹 안에서 사용되게끔 되어있습니다.
$this->cart->destroy();
장바구니를 삭제하도록 해줍니다. 이 함수는 보통 당신이 구매자의 주문 처리를 끝냈을 경우 쓰여집니다.