rhymix 신규 문법에서 mobile 대응
CMS/프레임워크 | Rhymix 2.1 |
---|---|
개발 언어 | PHP 8.2 |
모듈 이름은 eauth 라고 가정합니다.
rhymix 최신에서 모바일 대응을 잘 모르겠습니다.
과거 방식대로라면 eauth.mobile.php 코드는 이렇습니다.
<?php
require_once(__DIR__ . '/eauth.view.php');
class EauthMobile extends EauthView
{
}
require_once(__DIR__ . '/eauth.view.php');
class EauthMobile extends EauthView
{
}
위와 같이 view 상속 받는 것으로 간단히 mobile 대응하는게 제가 원하는 것입니다.
신규 문법을 작성하면 mobile 대응하는 방법을 잘 모르겠습니다: 크롬 개발 도구를 모바일에 맞춰 접속하면 [모바일에 최적화된 화면으로 보기] 링크가 나옵니다.
몇 가지 시도 해봤는데, 그 중 예를 들면 다음과 같이 namespace 선언 및 path, class 맞춰주는 것으로는 잘 안되는 것 같습니다: namespace Rhymix\Modules\Eauth\Mobile;
아래와 같은 구조일 때 view 상속을 받는 것으로 간단히 mobile view 대응하는 방법이 있을까요?
conf/module.xml
..
<action name="dispEauthSignupForm" class="Controllers\View" standalone="true" />
..
<action name="dispEauthSignupForm" class="Controllers\View" standalone="true" />
..
controllers/View.php
<?php
namespace Rhymix\Modules\Eauth\Controllers;
class View extends Base
{
public function dispEauthSignupForm()
{
...
}
}
namespace Rhymix\Modules\Eauth\Controllers;
class View extends Base
{
public function dispEauthSignupForm()
{
...
}
}
엘카
Lv. 3
댓글 3
네임스페이스 구조의 모듈에서는 PC냐 모바일이냐에 따라 class나 method를 구분하지 않는 것이 원칙입니다. 특정 기기에서 특별한 처리가 필요한 경우, 하나의 class나 method 안에서 분기하여 처리합니다. 예를 들어 다른 스킨을 사용하고 싶다면 아래와 같이 init()에서 스킨 경로 기본값을 설정할 수 있습니다.
public function init()
{
if (\Mobile::isFromMobilePhone())
{
$this->setTemplatePath($this->module_path . 'm.skins/default');
}
else
{
$this->setTemplatePath($this->module_path . 'skins/default');
}
}
요즘 대부분의 신규 서비스는 모바일 퍼스트 또는 적응형(반응형)으로 개발되기 때문에, 이런 최소한의 조치마저도 점차 필요없게 될 것이라고 예상하고 있습니다. 즉, 모바일용 class나 method를 따로 두도록 계속 지원해야 하는 부담보다 그냥 분기처리하는 귀찮음이 더 적고, 점점 더 적어질 것이라는 쪽에 베팅하는 설계입니다.
사이트 설정 상태에 따라서는 "모바일에 최적화된 화면으로 보기" 메뉴가 나타날 수도 있는데, 그 부분은 조만간 지워버릴 생각입니다. (아마 2.2쯤?) 지금 눈에 거슬린다면 css로 숨기셔도 됩니다.
실제로 제가 운영에 관여하는 사이트에서는 sass mixin과 최소한의 js만으로 모바일에 대응하고, 백엔드 쪽에서는 사용자가 무슨 기기를 들고 오든 아예 신경을 끄고 있습니다.
저도 모바일 링크가 사라지길 바라는데 현재 시점에서 구현하려면 코어에 꼼수를 넣는거군요.
신규 문법을 사용한 view 에서 이 점은 버그라 생각됩니다: 왜냐면 제 질문은 스킨 선택이 문제가 아니고 view 구현하면 사이트 하단에 모바일 홈페이지 링크가 강제로 뜹니다. 로컬 개발 환경이라 링크를 보여드리진 못했늗데,
(정리를 위해 다시 말씀드리면) 질문글 처럼 단순 상속하는 이유는 모바일 환경에서 접속했을 때 사이트
하단에 모바일 홈페이지 링크가 뜨지 않기를 바랍니다.
아무튼 그건 그렇고, 저는 \Context::get(‘m’) 으로 구분했는데 \Mobile 클래스 사용하는 것이 적절한 것으로 이해해도 되겠네요.
답변 감사합니다.
이게 지금 과도기적인 상태여서 그렇습니다. 없던 기능을 만들어 넣는 것은 쉽지만, 있던 기능을 삭제하는 것은 훨씬 보수적으로 접근할 수밖에 없으니까요. 새로운 기능을 활용하려는 사람이 알아서 피할 방법이 있는 경우에는 더욱 그렇고요.
.xe_mobile { display: none !important; }
사이트 전체가 완벽하게 적응형이라면 "모바일 뷰 사용" 옵션을 아예 꺼버리고 하나의 레이아웃, 하나의 스킨만으로 모든 기기를 처리할 수도 있습니다. 이런 상태라면 "모바일에 최적화된 화면 보기" 부분이 나오지도 않지요. 어정쩡한 상태로 사용하려고 하니까 불편이 발생합니다.
Context::get('m')을 표준으로 만들려고 했는데, 워낙 간단한 이름의 전역변수이다 보니 가끔 서드파티 자료가 엉뚱한 값을 넣어놓는 경우가 있어서-_- 100% 확실하지가 않습니다. Context::isMobile() 등 서드파티가 실수로 덮어쓰지 않을 만한 방법으로 대체하기까지는 Mobile 클래스를 사용하는 것이 안전합니다.
그런데 말 나온 김에 "모바일에 최적화된 화면 보기" 기능을 날려버려도 괜찮지 않을까 하는 생각도 드네요. 모바일을 지원하는 사이트에서 실수로 PC 화면에 접속하는 상황은 예전 XE라면 몰라도 지금의 라이믹스에서는 거의 발생하지 않을 테니까요. 아쉬워할 만한 사람이 있는지 좀 기다려보고, 특별히 우려섞인 반응이 보이지 않으면 지우는 수순으로 가겠습니다.