- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Magento 中是否有任何默认功能可用于需要发送文件附件的简单联系表单?还是需要用Zend的邮件功能来定制?任何帮助或建议将不胜感激。
最佳答案
为了避免编辑 phtml 文件,我喜欢使用事件:
在config.xml中创建观察者:
<events>
<core_block_abstract_to_html_after>
<observers>
<add_file_boton>
<type>singleton</type>
<class>contactattachment/observer</class>
<method>addFileBoton</method>
</add_file_boton>
</observers>
</core_block_abstract_to_html_after>
</events>
观察者:
class Osdave_ContactAttachment_Model_Observer
{
public function addFileBoton($observer)
{
$block = $observer->getEvent()->getBlock();
$nameInLayout = $block->getNameInLayout();
if ($nameInLayout == 'contactForm') {
$transport = $observer->getEvent()->getTransport();
$block = Mage::app()->getLayout()->createBlock('contactattachment/field');
$block->setPassingTransport($transport['html']);
$block->setTemplate('contactattachment/field.phtml')
->toHtml();
}
return $this;
}
}
block 类(您刚刚在观察者中实例化):
class Osdave_ContactAttachment_Block_Field extends Mage_Core_Block_Template
{
private $_passedTransportHtml;
/**
* adding file select field to contact-form
* @param type $transport
*/
public function setPassingTransport($transport)
{
$this->_passedTransportHtml = $transport;
}
public function getPassedTransport()
{
return $this->_passedTransportHtml;
}
}
.phtml 文件,您可以在其中将 enctype 属性添加到表单并添加文件输入:
<?php
$originalForm = $this->getPassedTransport();
$originalForm = str_replace('action', 'enctype="multipart/form-data" action', $originalForm);
$lastListItem = strrpos($originalForm, '</li>') + 5;
echo substr($originalForm, 0, $lastListItem);
?>
<li>
<label for="attachment"><?php echo $this->__('Select an attachment:') ?></label>
<div class="input-box">
<input type="file" class="input-text" id="attachment" name="attachment" />
</div>
</li>
<?php
echo substr($originalForm, $lastListItem);
?>
您需要重写Magento的Contacts IndexController以将文件上传到您想要的位置并在电子邮件中添加链接。
config.xml:
<global>
...
<rewrite>
<osdave_contactattachment_contact_index>
<from><![CDATA[#^/contacts/index/#]]></from>
<to>/contactattachment/contacts_index/</to>
</osdave_contactattachment_contact_index>
</rewrite>
...
</global>
<frontend>
...
<routers>
<contactattachment>
<use>standard</use>
<args>
<module>Osdave_ContactAttachment</module>
<frontName>contactattachment</frontName>
</args>
</contactattachment>
</routers>
...
</frontend>
Controller :
<?php
/**
* IndexController
*
* @author david
*/
require_once 'Mage/Contacts/controllers/IndexController.php';
class Osdave_ContactAttachment_Contacts_IndexController extends Mage_Contacts_IndexController
{
public function postAction()
{
$post = $this->getRequest()->getPost();
if ( $post ) {
$translate = Mage::getSingleton('core/translate');
/* @var $translate Mage_Core_Model_Translate */
$translate->setTranslateInline(false);
try {
$postObject = new Varien_Object();
$postObject->setData($post);
$error = false;
if (!Zend_Validate::is(trim($post['name']) , 'NotEmpty')) {
$error = true;
}
if (!Zend_Validate::is(trim($post['comment']) , 'NotEmpty')) {
$error = true;
}
if (!Zend_Validate::is(trim($post['email']), 'EmailAddress')) {
$error = true;
}
if (Zend_Validate::is(trim($post['hideit']), 'NotEmpty')) {
$error = true;
}
if ($error) {
throw new Exception();
}
//upload attachment
try {
$uploader = new Mage_Core_Model_File_Uploader('attachment');
$uploader->setAllowedExtensions(array('jpg','jpeg','gif','png'));
$uploader->setAllowRenameFiles(true);
$uploader->setAllowCreateFolders(true);
$result = $uploader->save(
Mage::getBaseDir('media') . DS . 'contact_attachments' . DS
);
$fileUrl = str_replace(Mage::getBaseDir('media') . DS, Mage::getBaseUrl('media'), $result['path']);
} catch (Exception $e) {
Mage::getSingleton('customer/session')->addError(Mage::helper('contactattachment')->__('There has been a problem with the file upload'));
$this->_redirect('*/*/');
return;
}
$mailTemplate = Mage::getModel('core/email_template');
/* @var $mailTemplate Mage_Core_Model_Email_Template */
$mailTemplate->setDesignConfig(array('area' => 'frontend'))
->setReplyTo($post['email'])
->sendTransactional(
Mage::getStoreConfig(self::XML_PATH_EMAIL_TEMPLATE),
Mage::getStoreConfig(self::XML_PATH_EMAIL_SENDER),
Mage::getStoreConfig(self::XML_PATH_EMAIL_RECIPIENT),
null,
array('data' => $postObject)
);
if (!$mailTemplate->getSentSuccess()) {
throw new Exception();
}
$translate->setTranslateInline(true);
Mage::getSingleton('customer/session')->addSuccess(Mage::helper('contacts')->__('Your inquiry was submitted and will be responded to as soon as possible. Thank you for contacting us.'));
$this->_redirect('*/*/');
return;
} catch (Exception $e) {
$translate->setTranslateInline(true);
Mage::getSingleton('customer/session')->addError(Mage::helper('contacts')->__('Unable to submit your request. Please, try again later'));
$this->_redirect('*/*/');
return;
}
} else {
$this->_redirect('*/*/');
}
}
}
在 Controller 中,您需要将 $fileUrl
添加到电子邮件模板中,并在电子邮件模板文件上回显它。
我认为这就是全部内容,如果您遇到问题,请告诉我。
干杯
关于玛根托 : How to send contact form email with attachment in magento?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6665558/
我正在开发一个应用程序,我在其中显示来自服务器的一些联系人,目前我正在对来自服务器的联系人进行排序,但现在我想使用 IOS -> 设置 -> 联系人 -> 显示顺序读取联系人设置新的联系人框架,我没有
我希望检测一个(球)何时接触另一个物体(目标),并且我希望知道该接触的冲动。 我知道三种检测联系人的方法 gContactAddedCallback 或 int numManifolds =
我正在开发我的第一个 Android 应用程序,想知道我可以调用什么来显示这个“联系人 Pane ”: 当然,我指的是下方带有联系人照片、姓名和操作图标的小 Pane 。 作为一个相关问题...这个小
我正在研究如何从 android 上的联系人列表中导入数据。在模拟器中,我注意到一个位于顶部的联系人组,其中只包含一个我自己的联系人。其余联系人如下。 但是,当我使用下面的代码时 Intent pic
如何添加从地址簿/联系人列表导入联系人号码并将其添加到数组中的功能? 编辑 如果您看过高级通话管理器应用程序,它允许您从联系人列表中选择联系人并将其添加到黑名单。我想做同样的事情,从联系人列表中选择一
我正在阅读有关内容提供商的信息,并且对从 android 中选择联系人有点困惑。我从 Stackoverflow 中阅读了很多示例,并且混淆了一些人正在使用 content://contacts/pe
.NET 有许多不同的 Google API dll,例如 Google.Apis.Calendar.v3。但联系人 API 没有任何内容。使用旧版本或其他方法并不是解决方案,因为我已经使用了多个 A
我收到此错误 django.urls.exceptions.NoReverseMatch:未找到“联系人”的反向。 “contact”不是有效的 View 函数或模式名称。我可能做错了什么,djang
每当我使用 Google Contacts Api v3 列出我的联系人时,查询都会返回 480 个结果,而我在我的联系人上只有 269 个联系人列表。 我正在尝试过滤它们,以便它只显示来自我的联系人
我正在使用 django 1.3.1 和 satchmo 0.9.2。我使用了 Satchmo 附带的默认模型,称为“Contact”。我创建了一个 satchmo_mod 应用程序和一个 admin
当我使用“这个解决方案”时,我得到一个空白的联系人数组。 我在 examples/contacts 文件夹中使用“google-api-php-client-0.6.7”和 serviceAccoun
使用 ABAddressBook,当我希望用户能够为他们以前从未见过的联系人选择“创建新联系人”和“添加到现有联系人”选项时,我会创建并显示一个 ABUnknownPersonViewControll
我正在探索 ionic 4 中的新导航(类型为 angular),您可以在选项卡项目中找到它 href="/tabs/(contact:contact)" 什么是 (contact:contact)
我已经使用这个 API 6 年了,没有任何问题,但是从 3 天前开始,我遇到了一系列奇怪的行为,意识到我的 google 联系人开始不受控制地复制。我发现它与检索联系人时 1.500 的奇怪限制有关,
我在 main 中初始化了 box 数据库如下 void main() async { WidgetsFlutterBinding.ensureInitialized(); final
我使用 var contacts:[details] 编写代码? = nil 我遇到了无法访问 contacts?.count 的问题,我不得不在任何地方使用可选值。例如 contacts[index
我正在从我的手机联系人列表中获取我的联系人图像 uri。 但是,当我尝试将图像 uri 转换为位图时,我收到错误: java.io.FileNotFoundException: content://c
我浏览了很多帖子,但没有找到任何有效甚至正确回答问题的答案。我最接近的是这个 How to avoid duplicate contact name (data ) while loading con
我正在使用 Google Contact API v3。目标是在我的数据库和 Google 帐户之间同步联系人。我的问题是: 1) 当我在没有联系人组的情况下通过电子邮件地址搜索联系人时,我得到了一个
我想在联系表单 7 中的特定输入类型上添加 Id 和 Class 属性。 当我添加以下示例时,它在输入类型上方的 SPAN 标记上应用 Id 和 Class [radio amount id:amou
我是一名优秀的程序员,十分优秀!