Context::getBodyClass() 의 값이
class="name"
의 name 만 값을 가질 것이라고 예상하고 코드를 짰었는데
오늘 우연히 다른 것을 하려고 위 값을 찍어보게 되었는데
class="name" 전체를 가지고 있네요.....
PHP | PHP 7.2 |
---|---|
CMS | Rhymix 2.x |
Context::getBodyClass() 의 값이
class="name"
의 name 만 값을 가질 것이라고 예상하고 코드를 짰었는데
오늘 우연히 다른 것을 하려고 위 값을 찍어보게 되었는데
class="name" 전체를 가지고 있네요.....
class 내용만 배열로 따로 받을 수 있나보네요.
일단 preg_match('/검출문자/', Context::getBodyClass()) 이렇게만 해도 배열로 가지고 오지 않아도 될 것 같아 이렇게 하려구요.
그런데 전 한가지 의문점이
Context::addBodyClass() 함수는 기존 클래스에 추가를 해주는게 아니고 class를 통째로 바꾸는 거 같더라구요.
이건 특별한 사정이 있는건지... 전 오히려 추가가 안되고 통째로 바뀌어서 편하긴 합니다.
Context::getInstance()->body_class 배열에
addBodyClass()로 추가하고 getBodyClass()로 배열에서 클래스 목록을 가져와서 'class="..."'을 반환하는 구조입니다.
통째로(?) 바뀐다는 게 이해하기 어렵습니다만 getBodyClass는 위 배열에 있는 class 목록을 합쳐서 반환해주는 것이니 그렇게 보일 수도 있을 것 같기는 하네요.
removeBodyClass() 같은건 없기 때문에 배열에서 unset()하면 제거되고요.
https://github.com/rx-public/rxp_flex/blob/f8c99395e2cc7b08e748a946397f7776faa15088/_config.php#L120
여기에서 사용되었습니다.
Context::addBodyClass() 를 하면 기존 클래스는 지워지고 입력한 class만 남습니다. 관련 함수를 아까 봤는데 찾아볼게요.
https://github.com/rhymix/rhymix/blob/master/classes/context/Context.class.php#L2406
위 함수에서 통째로 교체되는 결과가 나오지 않나요?
public static function addBodyClass($class_name)
{
self::$_instance->body_class[] = $class_name;
}
저는 기존 class name은 지워지고 새로 요청한 name만 남더든요. 이게 원하는 결과라 원래 그런줄 알았습니다.
이게 토글 형식으로 바꾸는 코드가 php로 작동하는거라 없을 수가 없는데요...
일단 말씀하신 대로 확인은 해보겠습니다.
개발자도구,소스보기 두곳 결과는 같습니다. 1개만 남아있어요.
그럼 현재 Context::getInstance()->body_class 와 같은 내부 자료를 건드리지 않고 body class 클래스명을 토글하는 방법을 알 수 있을까요???
color_scheme_light -> color_scheme_dark
라이믹스 테스트 하는 곳에서 해당 함수를 테스트하는데 결과값을 출력하는것이 같은 양식입니다.
$this->assertEquals(Context::getBodyClass(), ' class="red"');