今天寫一個magento模塊,主要的功能是實現前臺用戶利用表單給管理員發送郵件的一個功能,功能很簡單,但在這個模塊中,能夠了解到一些有關magento的一些細節,好比,如何獲取系統標籤id,如何使用magento默認的提示信息,如何使用smtp服務等等。
新建模塊Inchoo
目錄結構以下:javascript
Inchoo |--_SimpleContact |----controllers |--IndexController.php |----etc |--config.xml
首先須要讓magento識別寫的擴展:
app/etc/modules/Inchoo_SimpleContact.xmlphp
<?xml version="1.0" encoding="UTF-8"?> <config> <modules> <Inchoo_SimpleContact> <active>true</active> <codePool>local</codePool> </Inchoo_SimpleContact> </modules> </config>
其次再在模塊的配置文件config.xml中添加:html
<?xml version="1.0" encoding="UTF-8"?> <config> <modules> <Inchoo_SimpleContact> <version>0.1.0</version> </Inchoo_SimpleContact> </modules> <frontend> <routers> <SimpleContact> <use>standard</use> <args> <module>Inchoo_SimpleContact</module> <frontName>simplecontact</frontName> </args> </SimpleContact> </routers> </frontend> </config>
在控制中IndexController.php代碼以下,在代碼中解釋器含義:java
<?php class Inchoo_SimpleContact_IndexController extends Mage_Core_Controller_Front_Action { public function indexAction() { //Get current layout state $this->loadLayout(); //使用mganeto默認的提示信息,須要在控制器添加$this->_initLayoutMessages('core/session'); $this->_initLayoutMessages('core/session'); //在控制器中建立一個block $block = $this->getLayout()->createBlock( 'Mage_Core_Block_Template', 'inchoo.simple_contact', array( 'template' => 'inchoo/simple_contact.phtml' ) ); $this->getLayout()->getBlock('content')->append($block); //$this->getLayout()->getBlock('right')->insert($block, 'catalog.compare.sidebar', true); $this->_initLayoutMessages('core/session'); $this->renderLayout(); } //發送郵件 public function sendemailAction() { $params = $this->getRequest()->getParams(); //print_r($params); //這裏獲取後臺設置的smtp的host和port //$my_smtp_host = Mage::getStoreConfig('system/smtp/host'); //$my_smtp_port = Mage::getStoreConfig('system/smtp/port'); //如下代碼,須要提早安裝好smtp的一個擴展插件SMTPPro $general_email=Mage::getStoreConfig('trans_email/ident_general/email'); $sales_email = Mage::getStoreConfig('trans_email/ident_sales/email'); $support_email = Mage::getStoreConfig('trans_email/ident_support/email'); //smtppro $smtppro_host = Mage::getStoreConfig('smtppro/general/smtp_host'); $smtppro_port = Mage::getStoreConfig('smtppro/general/smtp_port'); $smtppro_username = Mage::getStoreConfig('smtppro/general/smtp_username'); $smtppro_password = Mage::getStoreConfig('smtppro/general/smtp_password'); $email=Mage::getStoreConfig('contacts/email/recipient_email'); $config = array( 'port' => $smtppro_port, 'auth' => 'login', 'username' => $smtppro_username, 'password' => $smtppro_password ); $transport = new Zend_Mail_Transport_Smtp($smtppro_host, $config); Zend_Mail::setDefaultTransport($transport); $mail = new Zend_Mail('utf-8'); print_r($transport); //exit(); $mail->setBodyText($params['comment']); // $mail->setFrom($config['username']); // $mail->addTo($params['email'], $params['name']); $mail->setFrom($params['email']); $mail->setSubject('test'); $mail->addTo($email); try { $mail->send(); $this->_redirect('*/*'); Mage::getSingleton('core/session')->addSuccess('Your request has been sent!'); } catch(Exception $ex) { print_r($ex->getMessage()); Mage::getSingleton('core/session')->addError('Unable to send!'); $this->_redirect( $this->getBaseUrl()); } } }
備註:代碼中提到的SMTP Pro插件,能夠在Magento Connect上下載源文件,而後安裝到本身的項目中便可,安裝成功後,能夠看到在systerm->Configuration左側看到ASCHRODER EXTENSIONS/SMTP Pro,點擊看到以下界面:
提示:若是安裝好後,打開報錯,應先清理緩存,而後logout註銷,從新登陸後臺便可。
控制器中有緩存
$my_smtp_host = Mage::getStoreConfig('system/smtp/host'); $my_smtp_port = Mage::getStoreConfig('system/smtp/port');
這裏是獲取magento本身的input值,如圖所示:
同理可得port的input值。
前臺頁面代碼以下:session
路徑以下: app/design/frontend/rwd/default/template/inchoo/simple_contact.phtml
simple_contact.phtml內容以下:app
<div class="box simple_contact"> <form id="simple_contact_form" name="simple_contact_form" action="<?php echo $this->getUrl('*/*/sendemail/') ?>" method="post"> <fieldset class="group-select"> <h4 class="legend">Inchoo_SimpleContact module sample</h4> <ul> <li> <div class="input-box"> <label for="name">Gimme your name <span class="required">*</span></label><br /> <input name="name" id="name" title="Name" value="" class="required-entry input-text" type="text" /> </div> <div class="input-box"> <label for="email">And your email <span class="required">*</span></label><br /> <input name="email" id="email" title="Email" value="" class="required-entry input-text validate-email" type="text" /> </div> <div class="clear"></div> <div class="input-box"> <label for="comment">Some comment?</label><br /> <textarea name="comment" id="comment" title="Comment" class="required-entry input-text" style="height:100px;" cols="50" rows="3"></textarea> </div> </li> </ul> </fieldset> <div class="button-set"> <p class="required">* Required Fields</p> <button class="form-button" type="submit"><span>Submit</span></button> </div> </form> </div> <script type="text/javascript"> //< ![CDATA[ var myForm= new VarienForm('simple_contact_form', true); //]]> </script>
頁面效果如圖:frontend