2011-07-29 5 views
14

app\locale\en_US\template\email\sales\order_new.html은 해당 파일입니다.Magento 판매 전자 메일 지불 블록 편집

사이트의 다른 섹션에 영향을주지 않고 {{var payment_html}}을 (를) 수정하는 방법은 무엇입니까?

섹션에서 오는 것 같다 : app\design\frontend\base\default\template\payment\info\default.phtml

나는이에 대한 수정 있습니까? 그러나 해당 파일은 사이트의 다른 위치에서 사용됩니다. 그게 맞습니까?

별도의 파일 (예 : default_email.phtml)을 별도로 만들고 싶습니다. 대신 order_new.phtml에 새 파일을 포함 시키십시오.

default_email.phtml 파일을 layout\***.xml에 포함시켜야한다고 가정합니다. 내가 어디에서 할 수 있니?

답변

0

/app/code/core/Mage/Sales/Model/Order.php에는 "sendNewOrderEmail"이라는 메소드가 있습니다. 이것이 당신이 영향을 미칠 필요가있는 것입니다. 다음과 유사한 코드가 있습니다.

$mailTemplate->setDesignConfig(array('area'=>'frontend', 'store'=>$this->getStoreId())) 
       ->sendTransactional(
        $template, 
        Mage::getStoreConfig(self::XML_PATH_EMAIL_IDENTITY, $this->getStoreId()), 
        $recipient['email'], 
        $recipient['name'], 
        array(
         'order'   => $this, 
         'billing'  => $this->getBillingAddress(), 
         'payment_html' => $paymentBlock->toHtml(), //Just change this line 
        ) 
       ); 

"payment_html"데이터가 설정되는 곳입니다. 네가 원하는대로 바꿔라.

6

내가 한 첫 번째 작업은 Magento 소스 코드에서의 검색이었습니다. {{var payment_html}}이 어딘가에서 처리된다고 가정하면 payment_html을 검색했습니다. 여러 검색 결과가 일치합니다.

Mage_Sales_Model_Order 
Mage_Sales_Model_Order_Creditmemo 
Mage_Sales_Model_Order_Invoice 
Mage_Sales_Model_Order_Shipment 

따라서 해당 지불 블록에 대한 정보가 있어야합니다. 나는 Mage_Sales_Model_Order을 가져 와서 변수 $paymentBlockHtml을 확인했다. 이것은 지불 정보로 지불 블록을 채우는 추가 논리를 가리 킵니다. 그것은 블록을 만드는 것이고 첫 번째 모습을 확장/변경/수정하는 것은 쉽지 않은 것처럼 보입니다. 예, 블록이 생성되었으므로 특정 (지불) 블록 유형에 템플릿을 적용 할 수 있지만로드하려는 블록을 쉽게 확인할 수 없습니다. 또한 템플릿은 구성에서 무시됩니다. Mage_Payment_Block_Info

다른 방법으로 확인해 봅니다.

올바른 정보가 포함 된 이메일에 차단을 추가하지 말고 올바른 사례로 전환 할 수있는 곳에서 더 중요한 이유가 있습니다. 템플릿 파서가 변수 및 레이아웃 핸들을 구문 분석하는 데 사용되므로 {{var payment_html}} 블록 대신 다음을 추가하고 블록 자체에서 해당 정보를 검색 할 수 있습니다.

{{block type='core/template' template='email/templatename.phtml'}} 

은 위의 코드는 올바른 데이터를 표시하기 위해 해당 템플리트에 아무것도 할 수 있다는 것을 의미 이메일,에 이메일/templatename.phtml를 분석한다. 이 템플릿에서 지불 데이터를 검색하기 전에 주문 데이터에 주문 인수를 추가해야합니다. 그건 아주 간단합니다. 템플릿에서

{{block type='core/template' order=$order template='email/templatename.phtml'}} 

우리는 또 다른 방법으로 데이터를 지불 정보를 검색하거나 $this->getOrder->getPayment()->toHtml() 또는 처리 할 $this->getOrder()->getPayment() 할 수 있습니다.

보너스; 또 다른 해결책은 레이아웃 핸들로 작업하고 같은 이메일의 주문 항목에 대한 예 아래 layout.xml에 올바른 템플릿과 유형을 설정하는 것입니다. 블록과 동일하게 작동하지만 레이아웃 xml의 일부 설정 만 사용합니다.

{{layout handle="sales_email_order_items" order=$order}} 
0

나는 동일한 문제가있었습니다. 이메일을 변경하기 만하면 지불 정보 클래스에 다음을 추가합니다.

protected function _construct() { 
    parent::_construct(); 
    $this->setTemplate('payment/info/{new template}.phtml'); 
} 

그런 다음 템플릿을 생성하고이 결제 방법을 사용하는 경우 전자 메일은 지불 섹션이 템플릿을 삽입합니다.

희망이 도움이 되셨습니다.

관련 문제