今天写一个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