비타주리 님 코드에서 이 코드의 의미는 뭘까요?
관련링크
본문
$add_html_tag -> addElement('input', 'Block', 'Flow', 'Common', ['type' => 'Text', 'id' => 'Text', 'name' => 'Text', 'value' => 'Text', 'checked' => 'Bool']);
각 자리의 의미와 각 자리에 올 수 있는 값들엔 어떤 것들이 있는지 궁금합니다.
답변 2
이걸 직접 만든 사이트의 설명입니다.
http://htmlpurifier.org/docs/enduser-customize.html
여기에는 예제로 form 을 들고 있어요.
$form = $def->addElement(
'form', // name
'Block', // content set
'Flow', // allowed children
'Common', // attribute collection
array( // attributes
'action*' => 'URI',
'method' => 'Enum#get|post',
'name' => 'ID'
)
);
위의 변수를 다시 네이밍하고 코드를 한 줄로 바꾸면서 주석을 빼고 배열을 대괄호 처리한 것입니다.
나머지 궁금한 부분도 이 페이지에 다 나와 있습니다.
예를 들어 content set 에는 Inline, Block, false 의 3종류가 있는데 각기 span형, div형, li형이 대표이구요.
사실 span 같은 경우도 <span style="display:block"> 를 주면 div 와 같아지는 것이라 편하게 div 형으로 통일한 것입니다.
참고로 'name' => 'ID' 를 저는 'name' => 'Text' 로 쓰는데 type 의 8가지 종류 중에
Bool 과 CDATA 2개로 충분하다는게 제 테스트의 결과이고 설명서에서 CDATA 는 Text 로 사용해도 상관없다고 나와 있어서 한글자라도 덜 쓰고 알아보기 쉬운 Text 를 쓰고 있어요.
/**
* Adds a custom element to your HTML definition
* @see HTMLPurifier_HTMLModule::addElement() for detailed
* parameter and return value descriptions.
*/
public function addElement($element_name, $type, $contents, $attr_collections, $attributes = array())
{
$module = $this->getAnonymousModule();
// assume that if the user is calling this, the element
// is safe. This may not be a good idea
$element = $module->addElement($element_name, $type, $contents, $attr_collections, $attributes);
return $element;
}
public function addElement($element, $type, $contents, $attr_includes = array(), $attr = array())
{
$this->elements[] = $element;
// parse content_model
list($content_model_type, $content_model) = $this->parseContents($contents);
// merge in attribute inclusions
$this->mergeInAttrIncludes($attr, $attr_includes);
// add element to content sets
if ($type) {
$this->addElementToContentSet($element, $type);
}
// create element
$this->info[$element] = HTMLPurifier_ElementDef::create(
$content_model,
$content_model_type,
$attr
);
// literal object $contents means direct child manipulation
if (!is_string($contents)) {
$this->info[$element]->child = $contents;
}
return $this->info[$element];
}