Prestashop 모듈 프로그래밍비밀 문서를 베껴서 이메일을 보내다.


이 아이디어는 무엇입니까?


Prestashop 모듈을 프로그래밍하기 시작합니다.어디서부터 시작할까요?다음은 파일입니다.
https://devdocs.prestashop.com/1.7/modules/
그래.그런데 저희 첫 번째 모듈이 뭐예요?그것은 매우 간단해야 하지만, 쓸모가 있어야 한다.우리는 메일을 보내는 모든 사본을 여기에 추가할 것이다.우리는 왜 그것을 원합니까?사실 구글을 시도하기만 하면 많은 사람들이 원하는 것이다.새로 설립된 사이트에 대해 그것은 아마도 유용할 것이다.너는 아마 이 전자메일들의 실제 상황을 보고 싶을 것이다.Prestashop에서 고객에게 보낸 모든 버전의 이메일을 찾습니다.아마도 이 메일들을 본 후에 변경 사항을 적용하거나 밑에 있는 기본 "Powered by Prestashop"줄을 삭제하려고 할 것입니다.다음에 Prestashop을 업데이트할 때 사용자 정의 전자 우편을 기본 전자 우편으로 복원하지 않도록 계속 감시하기를 원할 수도 있습니다. (Prestashop을 업데이트할 때 '전자 우편 템플릿 보존' 을 선택하는 것을 잊어버릴 수도 있습니다.)그래, 우리 시작하자.
Prestashop 갈고리 중 우리의 목적에 사용할 수 있는 것이 하나 있습니다: action Email Send Before
actionEmailSendBefore

Before sending an email This hook is used to filter the content 
or the metadata of an email before sending it or even prevent its sending

Located in: /classes/Mail.php
https://devdocs.prestashop.com/1.7/modules/concepts/hooks/list-of-hooks/
만약 우리가 내부/과정/우편물을 볼 기회가 있다면.php 파일에서 모든 매개 변수가 "&"을 접두사로 되어 있는 것을 볼 수 있습니다. 이것은 우리가 그것들을 변경할 수 있음을 의미합니다.
$hookBeforeEmailResult = Hook::exec(
        'actionEmailSendBefore',
        [
            'idLang' => &$idLang,
            'template' => &$template,
            'subject' => &$subject,
            'templateVars' => &$templateVars,
            'to' => &$to,
            'toName' => &$toName,
            'from' => &$from,
            'fromName' => &$fromName,
            'fileAttachment' => &$fileAttachment,
            'mode_smtp' => &$mode_smtp,
            'templatePath' => &$templatePath,
            'die' => &$die,
            'idShop' => &$idShop,
            'bcc' => &$bcc,
            'replyTo' => &$replyTo,
        ],
        null,
        true
    );
Prestashop 백엔드에서 BCC를 사용할 수 있는 곳을 찾을 수 없습니다.따라서 간단하게 보기 위해서, 우리는 그것이 항상 비어 있다고 가정할 수 있으며, 우리는 갈고리에서 그것을 우리의 값으로 설정할 수 있다.

모듈을 만듭시다!


다행히도 모듈 프레임워크를 만들 수 있는 간단한 방법이 있다.Prestashop에서 제공하는 모듈 구성기는 다음과 같습니다.
https://validator.prestashop.com/generator
나는 그것이 매우 완벽하게 일한다고 말하지 않지만, 그것은 매우 잘 일한다.아마도, 새로운 Prestashop 버전이 발표되었을 때처럼 자주 업데이트되지 않았을 뿐만 아니라, 버그도 포함되어 있을 것이다.또한 설명서에 설명된 대로 Prestashop 1.7에 대한 결제 모듈을 만들려면 이 생성기를 사용하지 마십시오.그러나 우리에게 이것은 단지 값을 매길 수 없는 것이다.
따라서 모듈 - 이름, 버전, 작성자 이름 등을 시작하려면 값을 입력합니다.

다음 페이지에서 다음 옵션을 선택하십시오. 마운트 해제를 확인하고 기본 데이터베이스 테이블을 만들지 않으며 실례가 필요합니다.규정 준수 최소값 최대값 -1.7.x(우리는 구 버전에 관심이 없다).

마지막으로 우리는 우리가 사용하고 싶은 갈고리에 대해 물었다.불행히도 발전기는 우리가 찾는 갈고리를 모르는 것 같았다.

좋습니다. 무작위로 하나를 선택하겠습니다. 잠시 후에 코드를 변경하겠습니다.

클릭하여 창설!버튼 - 생성기가 암호 사본 메일을 생성합니다.파일을 압축하다.이것이 바로 우리가 모듈을 명명하는 방식이다.

안에 뭐예요?


zip 파일에는 같은 이름의 디렉토리인 bcc outgoing emails가 있습니다.이 디렉토리에서 다음을 수행합니다.

사실 우리는 이 서류의 대부분을 필요로 하지 않는다.하지만 안을 봐라, 무엇이 재미있는지 봐라.
/bcc_outgoing_emails.php 
이것은 주요한 php 파일입니다.기본적으로 Prestashop은 모든 컨텐트를 파일에 넣습니다.나는 차라리 설치/해제 코드, 관리 조작과 연결을 다른 응용 프로그램에서 분리하고 싶다.php 파일.그러나 우리의 아주 간단한 예에서 묵인 행위는 이미 충분하다.
/sql/
우리는 실제적으로 '아니오' 를 선택해서 기본 데이터베이스 테이블 옵션을 만들었기 때문에 이 디렉터리는 여기에 있지 말아야 합니다.우리는 어떤 ql 내용도 필요하지 않기 때문에 이 디렉터리를 간단하게 삭제할 수 있습니다.
/translations/
그래, 우리 남겨 두자.우리는 아마 그것으로 백그라운드 표를 번역하고 싶을 것이다.우리는 지금 이렇게 하지 않겠지만, 우리가 이런 능력을 기본적으로 가지고 있다는 것을 알게 되어 기쁘다.
/upgrade/
우리 원형을 유지합시다.
/views/
/views/directory에서Prestashop 모듈은 모든 템플릿, 이미지, 자바 스크립트, css 파일을 저장합니다.프런트엔드와 백엔드에 사용됩니다.물론, 우리는 어떤 전방 파일도 필요하지 않고, 거의 어떤 스타일이나 후단 이미지도 필요하지 않다.아니면 자바스크립트?그러나 흥미로운 것은 이 파일들이 필요할 때 어떻게 사용되는지 보는 것이다.
우리들은 주요 서류와 밀서를 우편물로 베껴 보내는 것을 봅시다.php.우선 우리는 생성기가 php 클래스에서 작성자와 버전 정보를 정확하게 설정했지만 떠났다는 것을 알 수 있다
*  @author    PrestaShop SA <[email protected]>
*  @copyright 2007-2021 PrestaShop SA
맨 위에 있는 파일 주석에서의견을 변경해야 할 수도 있습니다.)
그래.더 중요한 건우리는 (랜덤으로) actionAdminControllersetMedia 갈고리를 선택했지만, 여기에 두 개의 갈고리가 등록되어 있는 것을 보았습니다. 헤더와 백 오피스 헤더:
return parent::install() &&
        $this->registerHook('header') &&
        $this->registerHook('backOfficeHeader') &&
        $this->registerHook('actionAdminControllerSetMedia');
(66-69행)
header hook은 js 및 css 파일을 프런트엔드에 추가하는 데 사용됩니다.
 /**
 * Add the CSS & JavaScript files you want to be added on the FO.
 */
public function hookHeader()
{
    $this->context->controller->addJS($this->_path.'/views/js/front.js');
    $this->context->controller->addCSS($this->_path.'/views/css/front.css');
}
(213-220줄)
우리는 전단에 닿지 않기 때문에, 이 줄과/views/js/및/css/디렉터리에 있는 모든 파일을 삭제할 수 있습니다.
이와 같이 백오피스 헤더 갈고리는 백오피스 js와 css 파일을 추가하는 데 사용됩니다.
/**
* Add the CSS & JavaScript files you want to be loaded in the BO.
*/
public function hookBackOfficeHeader()
{
    if (Tools::getValue('module_name') == $this->name) {
        $this->context->controller->addJS($this->_path.'views/js/back.js');
        $this->context->controller->addCSS($this->_path.'views/css/back.css');
    }
}
(202-211 행)
백엔드 js와 css는 모듈 설정 폼이 있는 페이지에만 추가됩니다.네, 그것은 많은 경우에 일리가 있을 수 있지만, 이 점에 주의하십시오.나의 또 다른 항목에서 나는 돌아오고 싶다.js 파일은 백그라운드에서 항상 사용할 수 있어야 하며, 이러한 상황을 찾아내고 없애는 데 시간이 좀 걸릴 수 있습니다.
if (Tools::getValue('module_name') == $this->name) {
한 가지 더 주의해야 할 일이 있다.이 두 갈고리는 백스테이지에서 자동으로 추가된 것이다.우리는 무의식중에 우리 모듈을 위해 갈고리 action AdminController SetMedia를 선택했다.보아하니 이 특정한 갈고리는 백업 오피스 헤더를 대신해서 js와 css 파일을 추가하는 데 사용되는 것 같다.Prestashop 개발자에게 이것은 현안으로 남아 있는 문제이다. 어떤 갈고리를 사용해서 이 목적을 실현해야 하는가. 그들은 생성기 업데이트를 잊었는가?
어쨌든 이 두 갈고리는 모두 이 목적을 위해 일하는 것 같다. (내가 다른 모듈을 구축하는 것을 발견했을 때) 우리는 이 프로젝트에서 어떤 미디어도 필요하지 않기 때문에 이 줄들을 간단하게 삭제할 수 있다.)

최종적으로 코드를 작성합시다!


언급한 헤더와 백오피스 헤더 연결을 모두 삭제하고, action Admin Controller SetMedia를 우리가 진정으로 필요로 하는: action Email Send Before로 변경합니다.
public function install()
{
    Configuration::updateValue('BCC_OUTGOING_EMAILS_LIVE_MODE', false);

    return parent::install() &&
        $this->registerHook('actionEmailSendBefore');
}
... 다음 표:
public function hookActionEmailSendBefore($param)
{
    /* Place your code here. */
}
우리는 모든 갈고리에는 하나의 유일한 매개 변수가 있고, 서로 다른 갈고리의 다른 매개 변수로 구성된 수조가 있다는 것을 안다.생성기는 프레임워크에 $param 그룹을 포함하지 않습니다. 이것은 버그인 것 같아서, 우리가 직접 추가해야 합니다.
우리는 이곳에서 진정한 코드를 작성할 것이다. 이제는 우리 자신의 설정을 찾을 때가 되었다.우리는 우리의 전자 우편 주소를 어디로 가져갈 것입니까?그리고 매우 편리합니다. 생성기는 확실히 우리를 위해 기본적인 설정을 만들었습니다. 다행히도 이것은 거의 우리가 필요로 하는 것입니다!생성기는 다음과 같은 세 가지 구성 변수를 생성합니다.
'BCC_OUTGOING_EMAILS_LIVE_MODE' => Configuration::get('BCC_OUTGOING_EMAILS_LIVE_MODE', true),
'BCC_OUTGOING_EMAILS_ACCOUNT_EMAIL' => Configuration::get('BCC_OUTGOING_EMAILS_ACCOUNT_EMAIL', '[email protected]'),
'BCC_OUTGOING_EMAILS_ACCOUNT_PASSWORD' => Configuration::get('BCC_OUTGOING_EMAILS_ACCOUNT_PASSWORD', null),
이것은 거의 바로 우리가 필요로 하는 것이다!암호가 필요하지 않으므로 언급된 모든 복사본(BCC) OUTGOING EMAILS) ACCOUNT password 행을 삭제하고 명료하게 BCC OUTGOING EMAILS ACCOUNT EMAIL을 BCC OUTGOING EMAIL로 변경합니다.BCC OUTGOING EMAILS LIVE MODE 변수까지도 유지합니다. 이 변수를 사용하면 모듈에 전문적인 모양새를 추가할 수 있습니다.)
다음은 훅 손잡이의 모양입니다.
public function hookActionEmailSendBefore($param)
{
    if (Configuration::get('BCC_OUTGOING_EMAILS_LIVE_MODE', false)) {
        $bcc = Configuration::get('BCC_OUTGOING_EMAILS_BCC_EMAIL', '');
        if ($bcc) {
            $param['bcc'] = $param['bcc']? "{$param['bcc']},$bcc": $bcc;
        }
    }
}
UPD.여기서 우리는 재미있는 결과가 하나 있다.나는 밀서 베끼기 필드의 여러 개의 전자 우편 주소를 쉼표로 구분해야 한다고 가정한다.그러나 이것은 잘못된 것 같다.사실 이 문제가 드러날 정도에 이르기는 어렵다.그러나 이 프로젝트에서, 나는 두 개의 같은 모듈의 복사본을 설치했고, Prestashop은 bcc 파라미터의 형식 오류를 불평하기 시작했다.프레스타 소프 메일이 하나 생겼어요.php는 수신자와 밀서 베끼기 필드에 여러 개의 전자 우편 주소를 그룹으로 하기를 원합니다.메일을 조사한 또 다른 흥미로운 결과.php - cc를 설정할 수 없습니다.음, 나는 그 속의 논리를 이해할 수 있지만, 적어도 나에게는 놀랍다...
그래서 갈고리 프로세서의 최종 버전은 다음과 같다.
public function hookActionEmailSendBefore($param)
{
    if (Configuration::get('BCC_OUTGOING_EMAILS_LIVE_MODE', false)) {
        $bcc = Configuration::get('BCC_OUTGOING_EMAILS_BCC_EMAIL', '');
        if ($bcc) {
            if (! $param['bcc']) {
                $param['bcc'] = $bcc;
            }
            else {
                if (is_array($param['bcc'])) {
                    array_push($param['bcc'],$bcc);
                }
                else {
                    $param['bcc'] = [$param['bcc'],$bcc];
                }
            }
        }
    }
}
응, 예상보다 좀 복잡해:)
한 마디로 하면 전체 조사는 상당한 이론적 가치를 가지고 있다.실천에서 나는 새로운 bcc설정으로 낡은 bcc설정을 덮어쓰는 가장 간단한 해결 방안이 99.9%의 상황을 만족시킬 것이라고 생각한다.
완료 및 테스트
또한 주의해야 할 것은 생성기가 세 개의 설정 변수를 생성했지만 (우리는 그 중 하나를 제거했지만) 설치와 마운트 해제 방법 중 하나만 언급했다.다른 두 가지는 적어도 같은 방식으로 잊혀진 것 같다.두 번째 제거할 변수를 추가합니다.
public function uninstall()
{
    Configuration::deleteByName('BCC_OUTGOING_EMAILS_LIVE_MODE');
    Configuration::deleteByName('BCC_OUTGOING_EMAILS_BCC_EMAIL');

    return parent::uninstall();
}
설치 방법이 변하지 않도록 하겠습니다.BCC OUTGOING EMAILS LIVE 모드의 초기화는 전혀 필요하지 않다고 생각합니다. (이 버전의 기본값을true에서false로 변경했습니다. 저에게는 논리에 맞는 것 같습니다.)상관하지 말래요.
우리는/views/templates/admin/configure를 보지 않았습니다.tpl 파일입니다. 하지만 저희에게는 기본적으로 문제가 없습니다.페이지의 예시 텍스트를 삭제하고 문서 링크를 업데이트하려고 할 수도 있지만, 이것은 매우 간단합니다.단지 문자상의 변화일 뿐이다.

배포 및 설치


우선, zip 파일을 만들어야 합니다.사용하지 않는 파일 및 디렉토리를 삭제하면 다음과 같이 구성됩니다.

이 파일들은 원래의 zip에 있기 때문에 bcc outgoing emails 폴더에 두는 것을 잊지 마세요.그리고Prestashop의 백엔드 사무실로 가서 모듈 ->모듈 관리자 ->모듈을 업로드합니다.구성은 자체 해석입니다.봐라!우리의 첫 번째 Prestashop 모듈은 이미 설치되어 작업을 시작했다.

또 하나의 잠재적인 문제가 있다.


새로 설치된 모듈을 테스트해 볼 때, 내가 먼저 해야 할 일은 Prestashop 전자 우편 설정을 켜는 것입니다. -> 전자 우편 설정을 테스트하는 것입니다.나는 테스트 우편물도 비밀 문서로 베낀 상응하는 모듈 설정을 원한다.아뇨.그것은 단지 당신의 전자 우편 설정을 테스트하는 데 적용되지 않을 뿐입니다.예를 들어, 당신은 새로운 사용자를 등록해야만 어떤 효과도 볼 수 있다.환영 전자 우편은 비밀 문서 참조 주소로 발송될 것입니다.

GitHub 하숙집


https://github.com/vallka/bcc_outgoing_emails

좋은 웹페이지 즐겨찾기