마젠토에 category attribute 생성 및 삭제

마젠토는 EAV(Entity Attribute Value) 모델을 사용함으로써 각각의 객체모델에 attribute과 attribute의 값어치(value)를 생성시킬수 있습니다.
예를들어 product model 같은경우 마젠토 admin에서 새로운 product attribute을 생성시킬수 있습니다. 그리고 그 attribute의 갯수는 얼마든지 무한대로 늘일수 있습니다.

하지만 category model의 경우 마젠토 admin에서 새로운 category attribute을 생성시키는 기능이 없기 때문에 새로운 attribute을 카테고리에 더하고 싶어도 할수가 없습니다.
사실 마젠토 admin에서 category attribute을 생성시키는 기능이 없는 것일뿐 못하는것은 아닙니다.
마젠토는 EAV 모델을 사용하고 있고 product model과 마찬가지로 category model 또한 entity이며 그 entity에는 attribute과 value를 생성시킬수 있기 때문에 category attribute도 생성시킬수 있습니다.

그렇다고 이것을 phpMyAdmin 이나 adminer 같은 데이터베이스 툴을 사용해서 데이터베이스에 직접 attribute을 생성시키는것은 많은 위험이 따르구요,
아래와 같은 코드로 손쉽게 생성 및 삭제시킬수 있습니다.

category attribute 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
// 마젠토 로딩
Mage::app();

// EAV 모델 셋업 model
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');

// 이미지 셀렉터 생성
$setup->addAttribute('catalog_category', 'extra_image', array(
    'group'         => 'General',
    'input'         => 'image',
    'type'          => 'varchar',
    'label'         => 'Slider Image',
    'backend'       => 'catalog/category_attribute_backend_image',
    'visible'       => 1,
    'required'      => 0,
    'user_defined' => 1,
    'global'        => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
));

// 텍스트 필드 생성
$setup->addAttribute('catalog_category', 'extra_text', array(
    'group'         => 'General',
    'input'         => 'textarea',
    'type'          => 'text',
    'label'         => 'SEO Text',
    'backend'       => '',
    'visible'       => 1,
    'required'      => 0,
    'user_defined' => 1,
    'global'        => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
));

// Yes, No같은 boolean value 생성
$setup->addAttribute('catalog_category', 'extra_boolean', array(
    'group'         => 'General',
    'input'         => 'select',
    'type'          => 'int',
    'label'         => 'Yes or No',
    'backend'       => '',
    'source'       => 'eav/entity_attribute_source_boolean',
    'visible'       => 1,
    'required'      => 0,
    'user_defined' => 1,
    'global'        => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
));
?>

위의 코드는 extra_image, extra_text 그리고 extra_boolean 이란 category attribute을 생성시키는 코드구요, 마젠토 admin에서 category로 들어가시면 각각의 카테고리에 3개의 새로생긴 필드를 찾을수 있습니다.
각각의 attribute에서
group은 attribute이 나오는 그룹
input은 input 필드의 타입
type은 데이터베이스에 저장되는 value의 type
label은 admin에 나오는 텍스트 레이블
backend는 input 필드가 사용할 model
source는 기본적으로 데이터베이스에 저장되어 있는 값어치
를 나타냅니다.

반대로 생성된 attribute을 삭제하는 방법은 아래 코드를 참조하세요.

1
2
3
4
5
6
7
8
9
10
11
12
<?php
// 마젠토 로딩
Mage::app();

// EAV 모델 셋업 model
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');

// category attribute 삭제
$setup->removeAttribute('catalog_category', 'extra_image');
$setup->removeAttribute('catalog_category', 'extra_text');
$setup->removeAttribute('catalog_category', 'extra_boolean');
?>

위의 코드는 새로 생성된 3개의 category attribute을 삭제시킵니다.