Extra Form
PHP PHP 7.4
CMS Rhymix 2.1

안녕하세요.

 

우선 모듈은 매뉴 새글 표시 모듈 입니다.

 

애드온은 설정값을 추가하면 바로 쉽게 작동햇던 것 같은데

 

모듈은 기존 메뉴의 설정값을 추가해도 저장이 되지 않는 증상이 있습니다.

 

추가.JPG

 

우선 하드코딩해서 쓰고 있는 것을 이렇게 관리자 설정에서 추가해서 사용하려고하는데

 

이렇게 잘 추가가 되었음에도 불구하고

 

잘나오긴함.JPG

 

저장버튼을 눌러도 해당 행은 다시 공백이 되어버리네요.

 

전체 코드를다 살펴보아도 특정 저장하는 내용은 어디서 설정해야하는지 감이 오질 않습니다.

 

혹시 어떤부분을 수정하면 될까요?

 

감사합니다.

  • profile

    모듈 설정은 쉼표로 구분된 문자열을 쪼개어 배열로 만들거나, 실제 유효한 데이터인지 확인하거나, 설정 변경시 관련 캐시를 재생성하는 등, 검증이나 변형이나 추가 작업이 필요한 경우가 많습니다. 따라서 애드온과 달리 관리자가 입력한 내용이라고 해서 무조건 다 받아주지 않는 경우가 대부분입니다. 검증이나 변형 로직이 마련되어 있지 않은 변수를 임의로 추가하면 그냥 무시하는 거죠.

    모듈명.admin.controller.php에서 해당 폼 제출을 받아 DB에 저장하는 함수가 있을 텐데요, 여기에서 처리하지 않는 변수는 저장되지 않습니다.

  • profile profile
    답변 감사합니다.

    질문 전에 전체 코드를 다 열어서 찾아봐도 못 찾았어서 질문을 하긴 했었는데

    act 명을 보면 procMenunewAdminSaveConfig 이 부분이 핵심인 것 같고


    admin.controller.php를 보면
    아래쪽에 나머지 설정값 대한 내용 저장은 뭔가 다른곳에서 설정해서 가지고 가지고 오는듯한 느낌이네요.

    procMenunewAdminSaveConfig 설정에 대한 부분을 저장하는 코드가 있는데

    /**
    * @brief 설정 저장
    **/
    function procMenunewAdminSaveConfig()
    {
    $config = Context::getRequestVars();

    $output = getController('module')->insertModuleConfig('menunew', $config);
    if(!$output->toBool())
    {
    return $output;
    }

    $this->setMessage('success_updated');
    $this->setRedirectUrl(Context::get('success_return_url'));
    }

    우선 제선에서는 해결이 안되겠다 싶어 현재는 포기 상태입니다. (다른방법도 많으니뭐 ㅎㅎ)
  • profile

    새로운 모듈이라면 작성하신  스크린샷에 보이는 입력 페이지 form 에 act 를 지정해주시고 해당 act 에서 설정값을 저장하면 됩니다.

     

    <input type="hidden" name="act" value="procTestmoduleAdminConfig">

     

    모듈명이 testmodule 이라 가정하고 설명해보겠습니다.

     

    1. act 값( procModuleAdminConfig )에 대한 간단 설명

     

    모듈명이 testmodule 이라면 첫글자는 대문자로 procTestmoduleAdminConfig 으로 해주시면됩니다.

    관리자 페이지에서 작동되기때문에 모듈명 옆에 Admin을 입력해주세요.

    Config 부분은 자유롭게 지정하셔도 상관없습니다.

     

    2. conf/module.xml 에 추가

     

    <action name="procTestmoduleAdminConfig" type="controller" />
    module.xml 파일에 추가해주지 않으면 관리자 controller 에 함수가 작성되어 있어도 접근하지 못합니다.

     

    3. testmodule.admin.controller.php 파일에 procTestmoduleAdminConfig 함수 추가

     

    function procTestmoduleAdminConfig()
    {

    $args = Context::getRequestVars();

    $oModuleModel = getModel('module');

    $oModuleController = getController('module');

     

    $config = new stdClass();
    $config = $oModuleModel->getModuleConfig('testmodule'); // 모듈 설정 값을 읽어옵니다.

    $config->configLastUpdate = date("YmdHis"); // 값 변경

    $config->start = $args->start; // 값 변경

    $output = $oModuleController->insertModuleConfig('testmodule', $config); // 설정 저장

     

    if(!$output->toBool()) return $this->makeObject(-1, 'msg_setting_error'); // 설정 저장을 실패했을때

    }

     

    관리자 페이지 설정 화면에서도 해당 설정 값을 읽어 오려면 testmodule.admin.view.php 에 아래와 같이 추가후 템플릿 페이지에서 사용하면 됩니다.

     

    $config = $oModuleModel->getModuleConfig('testmodule'); // 모듈 설정 값을 읽어옵니다.

    Context::set('config', $config);

  • profile profile
    보잘 것 없는질문에 이렇게까지 장문의 친절한 설명 감사합니다.

    기본적인 모듈의 구조를 이해하는데 아주 큰 도움이 되었습니다.

    일반적인 구조의 모듈을 수정할때 꼭 두고두고 잘참고하여 사용하겠습니다.