2016-09-02 1 views
0

이 문제와 관련된 설명서를 검색했습니다. 그러나 아무도 찾지 못했습니다.Prestashop 1.6 : 관리자 컨트롤러를 사용하여 사용자 지정 양식을 만들고 제출하는 방법

admin 컨트롤러를 사용하여 admin 템플릿을로드하는 방법을 알고 있습니다. 내가 여기

<form action="{$link->getModuleLink('pushnotification', 'AdminPushNotification', [], true)|escape:'html'}" method="post"> 

과 양식을 만들었습니다 "pushnotification는"내 모듈 이름과 "AdminPushNotification는"내 관리 컨트롤러 이름입니다.

나는 그것을 따라서 404 페이지

얻을 유효한 URL이 아닙니다 http://example.com/en/module/pushnotification/AdminPushNotification URL로 이동 제출 칠 때 나는 양식을 제출하고 같은 페이지에 있고 싶어.

Admin Controller에서 양식 제출을 제출하고 처리하는 방법을 모르겠습니다. 사전에

감사

내 모듈 파일 구조 : pushnotification 컨트롤러 관리 AdminPushnotification.php 조회수 템플릿 관리자 pushnotificationform.tpl

내 관리 컨트롤러 코드 :

<?php 
 

 
class AdminPushNotificationController extends ModuleAdminControllerCore 
 
{ 
 
    public function __construct() { 
 
     $this->bootstrap = true; 
 
     parent::__construct(); 
 
    } 
 

 
    public function initContent() 
 
    { 
 
     parent::initContent(); 
 

 

 
     $smarty = $this->context->smarty; 
 
     $this->context->smarty->assign(array(
 
      'msg' => "", 
 
      'title' => "" 
 
     )); 
 
     $content = $smarty->fetch(_PS_MODULE_DIR_ . 'pushnotification/views/templates/admin/pushnotificationform.tpl'); 
 
     $this->context->smarty->assign(array(
 
      'content' => $this->content . $content 
 
     )); 
 
    } 
 

 
    public function postProcess() 
 
    { 
 
     if (Tools::isSubmit('sendTokenMessage')) 
 
     { 
 
      $title = Tools::getValue('title'); 
 
      $msg = Tools::getValue('message'); 
 

 
      $content = $this->context->smarty->fetch(_PS_MODULE_DIR_ . 'pushnotification/views/templates/admin/pushnotificationform.tpl'); 
 
      $this->context->smarty->assign(array(
 
       'content' => $this->content . $content, 
 
       'msg' => $msg, 
 
       'title' => $title 
 
      )); 
 
     } 
 
    } 
 

 
    public function sendMessage($title,$msg) 
 
    { 
 

 
     $sql = " Select Token From Token"; 
 

 
     $result = DB::getInstance()->execute($sql); 
 

 
     foreach($result as $row) { 
 
      $message = array("title" => $title, "text"=> $msg); 
 
      $message_status = send_notification($row["token"], $message); 
 
     } 
 
     return $message_status; 
 
    } 
 
}

6,내 pushnotificationform.tpl 코드 :

<div> 
 
    {if $msg!=""} 
 
     <p>{$msg}</p> 
 
    {/if} 
 
</div> 
 
<form action="{$link->getAdminLink('pushnotification', 'AdminPushNotification', [], true)|escape:'html'}" method="post"> 
 
    <div style="padding-bottom:10px;" class="form-group"> 
 
     <label for="" class="control-label col-lg-6">Title</label> 
 
     <div class="col-lg-6"> 
 
      <input class="form-control input-lg" type="text" name="title" /> 
 
     </div> 
 
    </div> 
 
    <div class="form-group"> 
 
     <label for="" class="control-label col-lg-6">Message</label> 
 
     <div class="col-lg-6"> 
 
      <textarea name="message" class="form-control" style="min-width: 100%"></textarea> 
 
     </div> 
 
    </div> 
 
    <input type="submit" name="sendTokenMessage" value="send" class="btn btn-default" /> 
 
</form>

답변

0

$link->getModuleLink()은 모듈 전면 컨트롤러에 대한 링크를 검색합니다.

관리자 컨트롤러에 대한 링크를 만들려면 $link->getAdminLink('AdminPushNotification')을 사용해야합니다.

편집 :

당신은 잘못된 방법으로 $link->getAdminLink() 방법을 요구하고있다. 당신이 당신의 형태로 할 필요가 있습니다 : 그것은 당신의 관리자 모듈 컨트롤러 AdminPushNotification의 이름을 하나 개의 문자열 매개 변수를 받아 들인다로

<form action="{$link->getAdminLink('AdminPushNotification')|escape:'htmlall':'utf-8'}" method="post"> 

getAdminLink() 방법은 getModuleLink() 다릅니다.

다양한 링크 생성 방법 및 매개 변수에 대해 classes/Link.php 클래스를 확인할 수 있습니다.

Edit2가 :

당신은 두 번 컨텐츠를 할당하는 - postProcess() 오류를 발생 initContent()에.

입력으로 백그라운드 작업을 수행하려면 postProcess()을 사용하십시오. send_message($title, $msg) 방법 또는 유효성 검사.

사용 initContent() 그래서 나는이 같은이 두 가지 방법 리팩토링 것 유식 변수/등 템플릿

을 설정하려면 : 물론

protected $msg = ""; 
protected $title = ""; 

public function postProcess() 
{ 
    if (Tools::isSubmit('sendTokenMessage')) 
    { 
     // store inputs to object properties, 
     // here they can be validated and reused in initContent() 
     $this->title = Tools::getValue('title'); 
     $this->msg = Tools::getValue('message'); 

     // perhaps do some inputs validation here 

     $this->send_message($this->title, $this->msg); 
    } 
} 

public function initContent() 
{ 
    parent::initContent(); 

    $smarty = $this->context->smarty; 
    // msg and title variables must be assigned before fetching template 
    // otherwise they are not recognized in template 
    $smarty->assign(array(
     'msg' => $this->msg, 
     'title' => $this->title 
    )); 
    $content = $smarty->fetch(_PS_MODULE_DIR_ . 'pushnotification/views/templates/admin/pushnotificationform.tpl'); 
    $smarty->assign(array(
     'content' => $this->content . $content 
    )); 
} 

는 XSS를 방지하기 위해 템플릿에 $msg$title을 탈출 기억을 SQL 인젝션을 방지하기 위해 문자열을 살균합니다.

+0

$ link-> getAdminLink로 변경되었습니다. 이제 404 페이지를 얻습니다. 사실 관리자 컨트롤러에서 양식 제출을 처리하는 방법에 대한 문서를 줄 수 있습니까? –

+0

public function postProcess() { if (Tools :: isSubmit ('sendTokenMessage')) { $ title = Tools :: getValue ('title'); $ msg = Tools :: getValue ('message'); $ content = $ this-> context-> smarty-> fetch (_PS_MODULE_DIR_. 'pushnotification/views/templates/admin/pushnotificationform.tpl'); $ this-> context-> smarty-> assign (배열 ( '콘텐츠'=> $ this-> 콘텐츠. $ 콘텐츠, 'msg'=> $ msg, '제목'=> $ 제목 ) ; } } –

+0

불행히도 [이] (http://blog.belvg.com/how-to-use-the-class-admincontroller-in-prestashop.html) 이외에 다른 것이 있다고 생각하지 않지만 if 전체 컨트롤러 코드를 보여줄 수 있습니다. – TheDrot