Ana Silva Posted October 17, 2013 Share Posted October 17, 2013 Hi! I have the need to create a contact form for a cms page, but the CMS page doesn't seem to handle PHP inside of it. Is there any way to change that? Link to comment Share on other sites More sharing options...
vekia Posted October 17, 2013 Share Posted October 17, 2013 if you want to use php code on cms page, you have to insert it in CMScontroller.php file located in controllers/front/ directory, in init() function. then you can easily create form in cms editor in back office Link to comment Share on other sites More sharing options...
Ana Silva Posted October 19, 2013 Author Share Posted October 19, 2013 if you want to use php code on cms page, you have to insert it in CMScontroller.php file located in controllers/front/ directory, in init() function. then you can easily create form in cms editor in back office Hum, I'm not sure what you mean. I found the file and the function, but I have no clue on what to insert there. And believe me, I searched hard! I also tried adding an iframe to the cms page - didn't work tried adding an extremely simple html form - cms doesn't support it also. I'm beginning to realise cms pages are very limited in terms of code. 1 Link to comment Share on other sites More sharing options...
vekia Posted October 19, 2013 Share Posted October 19, 2013 ok, so for the first we have to clarify something. what exactly you need? the same contact form as you can see on "contact us" page? and additional question: you want to add contact form for all available cms pages or only to certain of them? in addition, can you share url to your website? i will prepare mail form code for you Link to comment Share on other sites More sharing options...
Ana Silva Posted October 21, 2013 Author Share Posted October 21, 2013 Vekia: I wanted to make a personalised form only for a specific cms page, so that people could enter info about their company so later on the admin can send them info about the site's reseller prices, registering them internally in a different category. You don't need to send me a form code if it's in php, since I know a bit of php, what I wanted is the code to be accepted in the CMS page editor, as it isn't. Not even iframes work there, as it would be a way to get around it… Link to comment Share on other sites More sharing options...
vekia Posted October 21, 2013 Share Posted October 21, 2013 so if you've got problem with cms editor read this: tinymce editor cms pages - accept all html tags Link to comment Share on other sites More sharing options...
Ana Silva Posted October 23, 2013 Author Share Posted October 23, 2013 Well, the extra buttons show now, but it still doesn't accept php, <form> tags and iframes for that matter. Every time I try to save my changes, it says the following: "O campo conteudo (Português (Portuguese)) é inválido." Something like "the content field (portuguese) is invalid" and doesn't let me save the changes. Link to comment Share on other sites More sharing options...
vekia Posted October 23, 2013 Share Posted October 23, 2013 cms editor and all other html editors don't accept php code. can you please show how your php code looks like? i will prepare modification of cmsController for you then and regarding to the problem with O campo conteudo (Português (Portuguese)) é inválido. have you followed guide related to "Validate" file ? Link to comment Share on other sites More sharing options...
Ana Silva Posted October 24, 2013 Author Share Posted October 24, 2013 Vekia: you mean the changes to Validate.php class tutorial? Yes I did. That message only comes up when I try to insert an iframe or a form field. Simple html stuff that the cms doesn't accept. Link to comment Share on other sites More sharing options...
vekia Posted October 24, 2013 Share Posted October 24, 2013 preferences > general and switch this option (if it is disabled) 1 Link to comment Share on other sites More sharing options...
dzuccola Posted October 24, 2013 Share Posted October 24, 2013 I want to add a new contact page with to request additional information for a price match. I am very new at this. Is there an easy way to do? Link to comment Share on other sites More sharing options...
Ana Silva Posted October 25, 2013 Author Share Posted October 25, 2013 (edited) dzuccola: if I understand, you want to add another title to the subject field dropbox in the contact form, right? If so, in the backoffice, on the top menu choose "customers" and then "contacts". There you can add another line for the drop box. I hope it helped. vekia: I tried, still nothing… Edited October 25, 2013 by Ana Silva (see edit history) Link to comment Share on other sites More sharing options...
dzuccola Posted October 25, 2013 Share Posted October 25, 2013 I want to create a new cms page with a contact form for price match asking for Product Model Number:* Price to Match:* Retailer Product Page Web Address:* Name:* Email:* Comments: I created the form above on a third party site. I have the code, but I have just created a page with a link to the site where the form is created on. I would like to create the form on my store site and not have to use a third party. Link to comment Share on other sites More sharing options...
tozi Posted January 21, 2014 Share Posted January 21, 2014 Any solution? I need this form in cms page <?php error_reporting(0); $data = array( 'kontaktna_osoba' => $_POST['kontaktna_osoba'], 'ovl' => $_POST['ovl'], 'tel_c' => $_POST['tel_c'], 'e_mail' => $_POST['e_mail'], 'popis_produktu' => $_POST['popis_produktu'], 'strop' => $_POST['strop'], 'filled' => $_POST['filled'], ); if ($data['filled']) { $konzultace = ($data['ovl'] == 'mot') ? "ano, " : "ne"; $zahlavie = "Content-Type: text/html; charset=UTF-8 \n"; $message = ' <table border="0" cellpadding="5"> <tr> <td bgcolor="#cacaca">Ceník IT</strong></td> </tr> <tr> <td bgcolor="#e2e2e2"><b>Kontaktní osoba</b></td> <td bgcolor="#f4f4f4">'.$data['kontaktna_osoba'].'</td> </tr> <tr> <td bgcolor="#e2e2e2"><b>E-mail:</b></td> <td bgcolor="#f4f4f4">'.$data['e_mail'].'</td> </tr> <tr> <td bgcolor="#e2e2e2"><b>Tel.č.:</b></td> <td bgcolor="#f4f4f4">'.$data['tel_c'].'</td> </tr> <tr> <td bgcolor="#e2e2e2"><b>Popis produktu:</b></td> <td bgcolor="#f4f4f4">'.$data['popis_produktu'].'</td> </tr> <tr> <td bgcolor="#e2e2e2"><b>Cenová představa:</b></td> <td bgcolor="#f4f4f4">'.$data['strop'].'</td> </tr> <tr> <td bgcolor="#e2e2e2"><b>Osobní konzultace?</b></td> <td bgcolor="#f4f4f4"><strong>'.$konzultace.'</strong></td> </tr> </table> '; if (mail('[email protected]', 'Ceník', $message, $zahlavie)) { echo 'Váš formulář byl úspěšně odeslán.'; //echo 'Váš formulár bol úspešne odoslaný.'; } else { echo 'Nastala chyba. Skuste později prosim.'; //echo 'Hups. Nastala chyba. Skuste neskor prosim.'; } } else { ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> </head> <body> <form action="" method="POST"> <div class="tabulka"> <div class="riadok"> <div class="left">Kontaktní osoba</div> <div class="center"><input type="text" name="kontaktna_osoba" class="kontakt_os" placeholder="Kontaktní osoba" /></div> </div> <div class="riadok"> <div class="left">Mail:</div> <div class="center"><input type="text" name="e_mail" class="e_mail" placeholder="Mail" /></div> </div> <div class="riadok"> <div class="left">Tel.č.:</div> <div class="center"><input type="text" name="tel_c" class="tel_c" placeholder="Tel.č." /></div> </div> <div class="riadok"> <div class="left">Popis produktu o který máte zájem</div> <div class="center"><textarea name="popis_produktu" class="popis_pr" placeholder=""></textarea></div> </div> <div class="riadok"> <div class="left">Cenová představa</div> <div class="center"><input type="text" name="strop" class="cen_strop" placeholder="Orientační cena" /></div> </div> <div class="riadok"> <div class="left">Osobní konzultace?</div> <div class="center"> <label for="mot">ano </label> <input type="radio" value="mot" id="mot" name="ovl" size="38" size="8" /> <label for="ruc">ne </label> <input type="radio" value="ruc" id="ruc" name="ovl" size="38" size="8" /> </div> </div> <div class="riadok"> <div class="left"> </div> <div class="center"><input type="submit" name="filled" value="Odeslat formulář" class="submit" /></div> </div> </div><!--koniec tabulky --> </form> </body> </html> <?php }?> How can i display this form? Link to comment Share on other sites More sharing options...
vekia Posted January 21, 2014 Share Posted January 21, 2014 in fact, this is the form: <form action="" method="POST"> <div class="tabulka"> <div class="riadok"> <div class="left">Kontaktní osoba</div> <div class="center"><input type="text" name="kontaktna_osoba" class="kontakt_os" placeholder="Kontaktní osoba" /></div> </div> <div class="riadok"> <div class="left">Mail:</div> <div class="center"><input type="text" name="e_mail" class="e_mail" placeholder="Mail" /></div> </div> <div class="riadok"> <div class="left">Tel.č.:</div> <div class="center"><input type="text" name="tel_c" class="tel_c" placeholder="Tel.č." /></div> </div> <div class="riadok"> <div class="left">Popis produktu o který máte zájem</div> <div class="center"><textarea name="popis_produktu" class="popis_pr" placeholder=""></textarea></div> </div> <div class="riadok"> <div class="left">Cenová představa</div> <div class="center"><input type="text" name="strop" class="cen_strop" placeholder="Orientační cena" /></div> </div> <div class="riadok"> <div class="left">Osobní konzultace?</div> <div class="center"> <label for="mot">ano </label> <input type="radio" value="mot" id="mot" name="ovl" size="38" size="8" /> <label for="ruc">ne </label> <input type="radio" value="ruc" id="ruc" name="ovl" size="38" size="8" /> </div> </div> <div class="riadok"> <div class="left"> </div> <div class="center"><input type="submit" name="filled" value="Odeslat formulář" class="submit" /></div> </div> </div><!--koniec tabulky --> </form> all other codes will not work in cms editor. php code you have to use in CMScontroller, inside init function Link to comment Share on other sites More sharing options...
notabene Posted January 29, 2014 Share Posted January 29, 2014 (edited) Hi,I am using PS 1.5.4.1 and I did somtething like this In CMSController.php after public function init() I added public function postProcess() { if (Tools::isSubmit('submitMessage')) { $fileAttachment = null; if (isset($_FILES['fileUpload']['name']) && !empty($_FILES['fileUpload']['name']) && !empty($_FILES['fileUpload']['tmp_name'])) { $extension = array('.txt', '.rtf', '.doc', '.docx', '.pdf', '.zip', '.png', '.jpeg', '.gif', '.jpg'); $filename = uniqid().substr($_FILES['fileUpload']['name'], -5); $fileAttachment['content'] = file_get_contents($_FILES['fileUpload']['tmp_name']); $fileAttachment['name'] = $_FILES['fileUpload']['name']; $fileAttachment['mime'] = $_FILES['fileUpload']['type']; } $message = Tools::getValue('message'); // Html entities is not usefull, iscleanHtml check there is no bad html tags. if (!($from = trim(Tools::getValue('from'))) || !Validate::isEmail($from)) $this->errors[] = Tools::displayError('Invalid email address.'); else if (!$message) $this->errors[] = Tools::displayError('The message cannot be blank.'); else if (!Validate::isCleanHtml($message)) $this->errors[] = Tools::displayError('Invalid message'); else if (!($id_contact = (int)(Tools::getValue('id_contact'))) || !(Validate::isLoadedObject($contact = new Contact($id_contact, $this->context->language->id)))) $this->errors[] = Tools::displayError('Please select a subject from the list provided. '); else if (!empty($_FILES['fileUpload']['name']) && $_FILES['fileUpload']['error'] != 0) $this->errors[] = Tools::displayError('An error occurred during the file-upload process.'); else if (!empty($_FILES['fileUpload']['name']) && !in_array(substr(Tools::strtolower($_FILES['fileUpload']['name']), -4), $extension) && !in_array(substr(Tools::strtolower($_FILES['fileUpload']['name']), -5), $extension)) $this->errors[] = Tools::displayError('Bad file extension'); else { $customer = $this->context->customer; if (!$customer->id) $customer->getByEmail($from); $contact = new Contact($id_contact, $this->context->language->id); if (!(( ($id_customer_thread = (int)Tools::getValue('id_customer_thread')) && (int)Db::getInstance()->getValue(' SELECT cm.id_customer_thread FROM '._DB_PREFIX_.'customer_thread cm WHERE cm.id_customer_thread = '.(int)$id_customer_thread.' AND cm.id_shop = '.(int)$this->context->shop->id.' AND token = \''.pSQL(Tools::getValue('token')).'\'') ) || ( $id_customer_thread = CustomerThread::getIdCustomerThreadByEmailAndIdOrder($from, (int)Tools::getValue('id_order')) ))) { $fields = Db::getInstance()->executeS(' SELECT cm.id_customer_thread, cm.id_contact, cm.id_customer, cm.id_order, cm.id_product, cm.email FROM '._DB_PREFIX_.'customer_thread cm WHERE email = \''.pSQL($from).'\' AND cm.id_shop = '.(int)$this->context->shop->id.' AND ('. ($customer->id ? 'id_customer = '.(int)($customer->id).' OR ' : '').' id_order = '.(int)(Tools::getValue('id_order')).')'); $score = 0; foreach ($fields as $key => $row) { $tmp = 0; if ((int)$row['id_customer'] && $row['id_customer'] != $customer->id && $row['email'] != $from) continue; if ($row['id_order'] != 0 && Tools::getValue('id_order') != $row['id_order']) continue; if ($row['email'] == $from) $tmp += 4; if ($row['id_contact'] == $id_contact) $tmp++; if (Tools::getValue('id_product') != 0 && $row['id_product'] == Tools::getValue('id_product')) $tmp += 2; if ($tmp >= 5 && $tmp >= $score) { $score = $tmp; $id_customer_thread = $row['id_customer_thread']; } } } $old_message = Db::getInstance()->getValue(' SELECT cm.message FROM '._DB_PREFIX_.'customer_message cm LEFT JOIN '._DB_PREFIX_.'customer_thread cc on (cm.id_customer_thread = cc.id_customer_thread) WHERE cc.id_customer_thread = '.(int)($id_customer_thread).' AND cc.id_shop = '.(int)$this->context->shop->id.' ORDER BY cm.date_add DESC'); if ($old_message == $message) { $this->context->smarty->assign('alreadySent', 1); $contact->email = ''; $contact->customer_service = 0; } if ($contact->customer_service) { if ((int)$id_customer_thread) { $ct = new CustomerThread($id_customer_thread); $ct->status = 'open'; $ct->id_lang = (int)$this->context->language->id; $ct->id_contact = (int)($id_contact); if ($id_order = (int)Tools::getValue('id_order')) $ct->id_order = $id_order; if ($id_product = (int)Tools::getValue('id_product')) $ct->id_product = $id_product; $ct->update(); } else { $ct = new CustomerThread(); if (isset($customer->id)) $ct->id_customer = (int)($customer->id); $ct->id_shop = (int)$this->context->shop->id; if ($id_order = (int)Tools::getValue('id_order')) $ct->id_order = $id_order; if ($id_product = (int)Tools::getValue('id_product')) $ct->id_product = $id_product; $ct->id_contact = (int)($id_contact); $ct->id_lang = (int)$this->context->language->id; $ct->email = $from; $ct->status = 'open'; $ct->token = Tools::passwdGen(12); $ct->add(); } if ($ct->id) { $cm = new CustomerMessage(); $cm->id_customer_thread = $ct->id; $cm->message = Tools::htmlentitiesUTF8($message); if (isset($filename) && rename($_FILES['fileUpload']['tmp_name'], _PS_MODULE_DIR_.'../upload/'.$filename)) $cm->file_name = $filename; $cm->ip_address = ip2long($_SERVER['REMOTE_ADDR']); $cm->user_agent = $_SERVER['HTTP_USER_AGENT']; if (!$cm->add()) $this->errors[] = Tools::displayError('An error occurred while sending the message.'); } else $this->errors[] = Tools::displayError('An error occurred while sending the message.'); } if (!count($this->errors)) { $var_list = array( '{order_name}' => '-', '{attached_file}' => '-', '{message}' => Tools::nl2br(stripslashes($message)), '{email}' => $from, ); if (isset($filename)) $var_list['{attached_file}'] = $_FILES['fileUpload']['name']; $id_order = (int)Tools::getValue('id_order'); if (isset($ct) && Validate::isLoadedObject($ct)) { if ($ct->id_order) $id_order = $ct->id_order; $subject = sprintf(Mail::l('Your message has been correctly sent #ct%1$s #tc%2$s'), $ct->id, $ct->token); } else $subject = Mail::l('Your message has been correctly sent'); if ($id_order) { $order = new Order((int)$id_order); $var_list['{order_name}'] = $order->getUniqReference(); $var_list['{id_order}'] = $id_order; } if (empty($contact->email)) Mail::Send($this->context->language->id, 'contact_form', $subject, $var_list, $from, null, null, null, $fileAttachment); else { if (!Mail::Send($this->context->language->id, 'contact', Mail::l('Message from contact form').' [no_sync]', $var_list, $contact->email, $contact->name, $from, ($customer->id ? $customer->firstname.' '.$customer->lastname : ''), $fileAttachment) || !Mail::Send($this->context->language->id, 'contact_form', $subject, $var_list, $from, null, $contact->email, $contact->name, $fileAttachment)) $this->errors[] = Tools::displayError('An error occurred while sending the message.'); } } if (count($this->errors) > 1) array_unique($this->errors); else $this->context->smarty->assign('confirmation', 1); } } } inside public function setMedia() I added $this->addCSS(_THEME_CSS_DIR_.'contact-form.css'); $this->addJS(_THEME_JS_DIR_.'contact-form.js'); inside public function initContent() before $this->setTemplate(_PS_THEME_DIR_.'cms.tpl'); I added $this->assignOrderList(); $email = Tools::safeOutput(Tools::getValue('from', ((isset($this->context->cookie) && isset($this->context->cookie->email) && Validate::isEmail($this->context->cookie->email)) ? $this->context->cookie->email : ''))); $this->context->smarty->assign(array( 'errors' => $this->errors, 'email' => $email, 'fileupload' => Configuration::get('PS_CUSTOMER_SERVICE_FILE_UPLOAD') )); if (($id_customer_thread = (int)Tools::getValue('id_customer_thread')) && $token = Tools::getValue('token')) { $customerThread = Db::getInstance()->getRow(' SELECT cm.* FROM '._DB_PREFIX_.'customer_thread cm WHERE cm.id_customer_thread = '.(int)$id_customer_thread.' AND cm.id_shop = '.(int)$this->context->shop->id.' AND token = \''.pSQL($token).'\' '); $this->context->smarty->assign('customerThread', $customerThread); } $this->context->smarty->assign(array( 'contacts' => Contact::getContacts($this->context->language->id), 'message' => html_entity_decode(Tools::getValue('message')) )); and after public function initContent() I added protected function assignOrderList() { if ($this->context->customer->isLogged()) { $this->context->smarty->assign('isLogged', 1); $products = array(); $result = Db::getInstance()->executeS(' SELECT id_order FROM '._DB_PREFIX_.'orders WHERE id_customer = '.(int)$this->context->customer->id.' ORDER BY date_add'); $orders = array(); foreach ($result as $row) { $order = new Order($row['id_order']); $date = explode(' ', $order->date_add); $tmp = $order->getProducts(); foreach ($tmp as $key => $val) $products[$row['id_order']][$val['product_id']] = array('value' => $val['product_id'], 'label' => $val['product_name']); $orders[] = array('value' => $order->id, 'label' => $order->getUniqReference().' - '.Tools::displayDate($date[0], $this->context->language->id), 'selected' => (int)Tools::getValue('id_order') == $order->id); } $this->context->smarty->assign('orderList', $orders); $this->context->smarty->assign('orderedProductList', $products); } } Now in cms.tpl of my theme I did after {$cms->content} {if $cms->id == 25} {if isset($confirmation)} <p>{l s='Your message has been successfully sent to our team.'}</p> <ul class="footer_links"> <li><a href="{$base_dir}"><img class="icon" alt="" src="{$img_dir}icon/home.gif"/></a><a href="{$base_dir}">{l s='Home'}</a></li> </ul> {elseif isset($alreadySent)} <p>{l s='Your message has already been sent.'}</p> <ul class="footer_links"> <li><a href="{$base_dir}"><img class="icon" alt="" src="{$img_dir}icon/home.gif"/></a><a href="{$base_dir}">{l s='Home'}</a></li> </ul> {else} <p class="bold">{l s='For questions about an order or for more information about our products'}.</p> {include file="$tpl_dir./errors.tpl"} <form action="{$request_uri|escape:'htmlall':'UTF-8'}" method="post" class="std" enctype="multipart/form-data"> <fieldset> <h3>{l s='Send a message'}</h3> <p class="select"> <label for="id_contact">{l s='Subject Heading'}</label> {if isset($customerThread.id_contact)} {foreach from=$contacts item=contact} {if $contact.id_contact == $customerThread.id_contact} <input type="text" id="contact_name" name="contact_name" value="{$contact.name|escape:'htmlall':'UTF-8'}" readonly="readonly" /> <input type="hidden" name="id_contact" value="{$contact.id_contact}" /> {/if} {/foreach} </p> {else} <select id="id_contact" name="id_contact" onchange="showElemFromSelect('id_contact', 'desc_contact')"> <option value="0">{l s='-- Choose --'}</option> {foreach from=$contacts item=contact} <option value="{$contact.id_contact|intval}" {if isset($smarty.post.id_contact) && $smarty.post.id_contact == $contact.id_contact}selected="selected"{/if}>{$contact.name|escape:'htmlall':'UTF-8'}</option> {/foreach} </select> </p> <p id="desc_contact0" class="desc_contact"> </p> {foreach from=$contacts item=contact} <p id="desc_contact{$contact.id_contact|intval}" class="desc_contact" style="display:none;"> {$contact.description|escape:'htmlall':'UTF-8'} </p> {/foreach} {/if} <p class="text"> <label for="email">{l s='E-mail address'}</label> {if isset($customerThread.email)} <input type="text" id="email" name="from" value="{$customerThread.email|escape:'htmlall':'UTF-8'}" readonly="readonly" /> {else} <input type="text" id="email" name="from" value="{$email|escape:'htmlall':'UTF-8'}" /> {/if} </p> {if !$PS_CATALOG_MODE} {if (!isset($customerThread.id_order) || $customerThread.id_order > 0)} <p class="text select"> <label for="id_order">{l s='Order ID'}</label> {if !isset($customerThread.id_order) && isset($isLogged) && $isLogged == 1} <select name="id_order" > <option value="0">{l s='-- Choose --'}</option> {foreach from=$orderList item=order} <option value="{$order.value|intval}">{$order.label|escape:'htmlall':'UTF-8'}</option> {/foreach} </select> {elseif !isset($customerThread.id_order) && !isset($isLogged)} <input type="text" name="id_order" id="id_order" value="{if isset($customerThread.id_order) && $customerThread.id_order > 0}{$customerThread.id_order|escape:'htmlall':'UTF-8'}{else}{if isset($smarty.post.id_order)}{$smarty.post.id_order|escape:'htmlall':'UTF-8'}{/if}{/if}" /> {elseif $customerThread.id_order > 0} <input type="text" name="id_order" id="id_order" value="{$customerThread.id_order|escape:'htmlall':'UTF-8'}" readonly="readonly" /> {/if} </p> {/if} {/if} {if $fileupload == 1} <p class="text"> <label for="fileUpload">{l s='Attach File'}</label> <input type="hidden" name="MAX_FILE_SIZE" value="2000000" /> <div class="upload"> <input type="file" name="fileUpload" id="fileUpload" /> </div> </p> {/if} <p class="textarea"> <label for="message">{l s='Message'}</label> <textarea id="message" name="message" rows="15" cols="10">{if isset($message)}{$message|escape:'htmlall':'UTF-8'|stripslashes}{/if}</textarea> </p> <p class="submit"> <input type="submit" name="submitMessage" id="submitMessage" value="{l s='Send'}" class="button_large" onclick="$(this).hide();" /> </p> </fieldset> </form> {/if} {/if} where {if $cms->id == 25} is id of cms where I want have contact-form its working, but if You have some suggestions please notice me Edited January 29, 2014 by notabene (see edit history) 4 Link to comment Share on other sites More sharing options...
Ron morales Posted June 9, 2014 Share Posted June 9, 2014 how to add select form in cms block? <select class="form-control" name="lista_Desplegable"> <option value="{$link->getCMSLink(4)}"><a href="{$link->getCMSLink(4)}" title="{l s='number1' mod='blockcms'}">{l s='number1' mod='blockcms'}</a></option> <option value="{$link->getCMSLink(8)}">{l s='number 2' mod='blockcms'}</option> <option value="{$link->getCMSLink(4)}">{l s='number 3' mod='blockcms'}</option> </select> i add this code but not value thanks Link to comment Share on other sites More sharing options...
Ron morales Posted June 9, 2014 Share Posted June 9, 2014 (edited) solved <script> $('#dynamic-select').bind('change', function () { // bind change event to select var url = $(this).val(); // get selected value if (url != '') { // require a URL window.location = url; // redirect } return false; }); </script> <form><select id="dynamic-select" class="form-control" name="lista_Desplegable"> <option value="{$link->getCMSLink(4)}">{l s='number 1' mod='blockcms'}</option> <option value="{$link->getCMSLink(8)}">{l s='number 2' mod='blockcms'}</option> <option value="{$link->getCMSLink(4)}">{l s='number 3' mod='blockcms'}</option> </select></form> Edited June 9, 2014 by Ron morales (see edit history) Link to comment Share on other sites More sharing options...
Drakinfly Posted February 13, 2015 Share Posted February 13, 2015 Hi, I am using PS 1.5.4.1 and I did somtething like this In CMSController.php after public function init() I added public function postProcess() { if (Tools::isSubmit('submitMessage')) { $fileAttachment = null; if (isset($_FILES['fileUpload']['name']) && !empty($_FILES['fileUpload']['name']) && !empty($_FILES['fileUpload']['tmp_name'])) { $extension = array('.txt', '.rtf', '.doc', '.docx', '.pdf', '.zip', '.png', '.jpeg', '.gif', '.jpg'); $filename = uniqid().substr($_FILES['fileUpload']['name'], -5); $fileAttachment['content'] = file_get_contents($_FILES['fileUpload']['tmp_name']); $fileAttachment['name'] = $_FILES['fileUpload']['name']; $fileAttachment['mime'] = $_FILES['fileUpload']['type']; } $message = Tools::getValue('message'); // Html entities is not usefull, iscleanHtml check there is no bad html tags. if (!($from = trim(Tools::getValue('from'))) || !Validate::isEmail($from)) $this->errors[] = Tools::displayError('Invalid email address.'); else if (!$message) $this->errors[] = Tools::displayError('The message cannot be blank.'); else if (!Validate::isCleanHtml($message)) $this->errors[] = Tools::displayError('Invalid message'); else if (!($id_contact = (int)(Tools::getValue('id_contact'))) || !(Validate::isLoadedObject($contact = new Contact($id_contact, $this->context->language->id)))) $this->errors[] = Tools::displayError('Please select a subject from the list provided. '); else if (!empty($_FILES['fileUpload']['name']) && $_FILES['fileUpload']['error'] != 0) $this->errors[] = Tools::displayError('An error occurred during the file-upload process.'); else if (!empty($_FILES['fileUpload']['name']) && !in_array(substr(Tools::strtolower($_FILES['fileUpload']['name']), -4), $extension) && !in_array(substr(Tools::strtolower($_FILES['fileUpload']['name']), -5), $extension)) $this->errors[] = Tools::displayError('Bad file extension'); else { $customer = $this->context->customer; if (!$customer->id) $customer->getByEmail($from); $contact = new Contact($id_contact, $this->context->language->id); if (!(( ($id_customer_thread = (int)Tools::getValue('id_customer_thread')) && (int)Db::getInstance()->getValue(' SELECT cm.id_customer_thread FROM '._DB_PREFIX_.'customer_thread cm WHERE cm.id_customer_thread = '.(int)$id_customer_thread.' AND cm.id_shop = '.(int)$this->context->shop->id.' AND token = \''.pSQL(Tools::getValue('token')).'\'') ) || ( $id_customer_thread = CustomerThread::getIdCustomerThreadByEmailAndIdOrder($from, (int)Tools::getValue('id_order')) ))) { $fields = Db::getInstance()->executeS(' SELECT cm.id_customer_thread, cm.id_contact, cm.id_customer, cm.id_order, cm.id_product, cm.email FROM '._DB_PREFIX_.'customer_thread cm WHERE email = \''.pSQL($from).'\' AND cm.id_shop = '.(int)$this->context->shop->id.' AND ('. ($customer->id ? 'id_customer = '.(int)($customer->id).' OR ' : '').' id_order = '.(int)(Tools::getValue('id_order')).')'); $score = 0; foreach ($fields as $key => $row) { $tmp = 0; if ((int)$row['id_customer'] && $row['id_customer'] != $customer->id && $row['email'] != $from) continue; if ($row['id_order'] != 0 && Tools::getValue('id_order') != $row['id_order']) continue; if ($row['email'] == $from) $tmp += 4; if ($row['id_contact'] == $id_contact) $tmp++; if (Tools::getValue('id_product') != 0 && $row['id_product'] == Tools::getValue('id_product')) $tmp += 2; if ($tmp >= 5 && $tmp >= $score) { $score = $tmp; $id_customer_thread = $row['id_customer_thread']; } } } $old_message = Db::getInstance()->getValue(' SELECT cm.message FROM '._DB_PREFIX_.'customer_message cm LEFT JOIN '._DB_PREFIX_.'customer_thread cc on (cm.id_customer_thread = cc.id_customer_thread) WHERE cc.id_customer_thread = '.(int)($id_customer_thread).' AND cc.id_shop = '.(int)$this->context->shop->id.' ORDER BY cm.date_add DESC'); if ($old_message == $message) { $this->context->smarty->assign('alreadySent', 1); $contact->email = ''; $contact->customer_service = 0; } if ($contact->customer_service) { if ((int)$id_customer_thread) { $ct = new CustomerThread($id_customer_thread); $ct->status = 'open'; $ct->id_lang = (int)$this->context->language->id; $ct->id_contact = (int)($id_contact); if ($id_order = (int)Tools::getValue('id_order')) $ct->id_order = $id_order; if ($id_product = (int)Tools::getValue('id_product')) $ct->id_product = $id_product; $ct->update(); } else { $ct = new CustomerThread(); if (isset($customer->id)) $ct->id_customer = (int)($customer->id); $ct->id_shop = (int)$this->context->shop->id; if ($id_order = (int)Tools::getValue('id_order')) $ct->id_order = $id_order; if ($id_product = (int)Tools::getValue('id_product')) $ct->id_product = $id_product; $ct->id_contact = (int)($id_contact); $ct->id_lang = (int)$this->context->language->id; $ct->email = $from; $ct->status = 'open'; $ct->token = Tools::passwdGen(12); $ct->add(); } if ($ct->id) { $cm = new CustomerMessage(); $cm->id_customer_thread = $ct->id; $cm->message = Tools::htmlentitiesUTF8($message); if (isset($filename) && rename($_FILES['fileUpload']['tmp_name'], _PS_MODULE_DIR_.'../upload/'.$filename)) $cm->file_name = $filename; $cm->ip_address = ip2long($_SERVER['REMOTE_ADDR']); $cm->user_agent = $_SERVER['HTTP_USER_AGENT']; if (!$cm->add()) $this->errors[] = Tools::displayError('An error occurred while sending the message.'); } else $this->errors[] = Tools::displayError('An error occurred while sending the message.'); } if (!count($this->errors)) { $var_list = array( '{order_name}' => '-', '{attached_file}' => '-', '{message}' => Tools::nl2br(stripslashes($message)), '{email}' => $from, ); if (isset($filename)) $var_list['{attached_file}'] = $_FILES['fileUpload']['name']; $id_order = (int)Tools::getValue('id_order'); if (isset($ct) && Validate::isLoadedObject($ct)) { if ($ct->id_order) $id_order = $ct->id_order; $subject = sprintf(Mail::l('Your message has been correctly sent #ct%1$s #tc%2$s'), $ct->id, $ct->token); } else $subject = Mail::l('Your message has been correctly sent'); if ($id_order) { $order = new Order((int)$id_order); $var_list['{order_name}'] = $order->getUniqReference(); $var_list['{id_order}'] = $id_order; } if (empty($contact->email)) Mail::Send($this->context->language->id, 'contact_form', $subject, $var_list, $from, null, null, null, $fileAttachment); else { if (!Mail::Send($this->context->language->id, 'contact', Mail::l('Message from contact form').' [no_sync]', $var_list, $contact->email, $contact->name, $from, ($customer->id ? $customer->firstname.' '.$customer->lastname : ''), $fileAttachment) || !Mail::Send($this->context->language->id, 'contact_form', $subject, $var_list, $from, null, $contact->email, $contact->name, $fileAttachment)) $this->errors[] = Tools::displayError('An error occurred while sending the message.'); } } if (count($this->errors) > 1) array_unique($this->errors); else $this->context->smarty->assign('confirmation', 1); } } } inside public function setMedia() I added $this->addCSS(_THEME_CSS_DIR_.'contact-form.css'); $this->addJS(_THEME_JS_DIR_.'contact-form.js'); inside public function initContent() before $this->setTemplate(_PS_THEME_DIR_.'cms.tpl'); I added $this->assignOrderList(); $email = Tools::safeOutput(Tools::getValue('from', ((isset($this->context->cookie) && isset($this->context->cookie->email) && Validate::isEmail($this->context->cookie->email)) ? $this->context->cookie->email : ''))); $this->context->smarty->assign(array( 'errors' => $this->errors, 'email' => $email, 'fileupload' => Configuration::get('PS_CUSTOMER_SERVICE_FILE_UPLOAD') )); if (($id_customer_thread = (int)Tools::getValue('id_customer_thread')) && $token = Tools::getValue('token')) { $customerThread = Db::getInstance()->getRow(' SELECT cm.* FROM '._DB_PREFIX_.'customer_thread cm WHERE cm.id_customer_thread = '.(int)$id_customer_thread.' AND cm.id_shop = '.(int)$this->context->shop->id.' AND token = \''.pSQL($token).'\' '); $this->context->smarty->assign('customerThread', $customerThread); } $this->context->smarty->assign(array( 'contacts' => Contact::getContacts($this->context->language->id), 'message' => html_entity_decode(Tools::getValue('message')) )); and after public function initContent() I added protected function assignOrderList() { if ($this->context->customer->isLogged()) { $this->context->smarty->assign('isLogged', 1); $products = array(); $result = Db::getInstance()->executeS(' SELECT id_order FROM '._DB_PREFIX_.'orders WHERE id_customer = '.(int)$this->context->customer->id.' ORDER BY date_add'); $orders = array(); foreach ($result as $row) { $order = new Order($row['id_order']); $date = explode(' ', $order->date_add); $tmp = $order->getProducts(); foreach ($tmp as $key => $val) $products[$row['id_order']][$val['product_id']] = array('value' => $val['product_id'], 'label' => $val['product_name']); $orders[] = array('value' => $order->id, 'label' => $order->getUniqReference().' - '.Tools::displayDate($date[0], $this->context->language->id), 'selected' => (int)Tools::getValue('id_order') == $order->id); } $this->context->smarty->assign('orderList', $orders); $this->context->smarty->assign('orderedProductList', $products); } } Now in cms.tpl of my theme I did after {$cms->content} {if $cms->id == 25} {if isset($confirmation)} <p>{l s='Your message has been successfully sent to our team.'}</p> <ul class="footer_links"> <li><a href="{$base_dir}"><img class="icon" alt="" src="{$img_dir}icon/home.gif"/></a><a href="{$base_dir}">{l s='Home'}</a></li> </ul> {elseif isset($alreadySent)} <p>{l s='Your message has already been sent.'}</p> <ul class="footer_links"> <li><a href="{$base_dir}"><img class="icon" alt="" src="{$img_dir}icon/home.gif"/></a><a href="{$base_dir}">{l s='Home'}</a></li> </ul> {else} <p class="bold">{l s='For questions about an order or for more information about our products'}.</p> {include file="$tpl_dir./errors.tpl"} <form action="{$request_uri|escape:'htmlall':'UTF-8'}" method="post" class="std" enctype="multipart/form-data"> <fieldset> <h3>{l s='Send a message'}</h3> <p class="select"> <label for="id_contact">{l s='Subject Heading'}</label> {if isset($customerThread.id_contact)} {foreach from=$contacts item=contact} {if $contact.id_contact == $customerThread.id_contact} <input type="text" id="contact_name" name="contact_name" value="{$contact.name|escape:'htmlall':'UTF-8'}" readonly="readonly" /> <input type="hidden" name="id_contact" value="{$contact.id_contact}" /> {/if} {/foreach} </p> {else} <select id="id_contact" name="id_contact" onchange="showElemFromSelect('id_contact', 'desc_contact')"> <option value="0">{l s='-- Choose --'}</option> {foreach from=$contacts item=contact} <option value="{$contact.id_contact|intval}" {if isset($smarty.post.id_contact) && $smarty.post.id_contact == $contact.id_contact}selected="selected"{/if}>{$contact.name|escape:'htmlall':'UTF-8'}</option> {/foreach} </select> </p> <p id="desc_contact0" class="desc_contact"> </p> {foreach from=$contacts item=contact} <p id="desc_contact{$contact.id_contact|intval}" class="desc_contact" style="display:none;"> {$contact.description|escape:'htmlall':'UTF-8'} </p> {/foreach} {/if} <p class="text"> <label for="email">{l s='E-mail address'}</label> {if isset($customerThread.email)} <input type="text" id="email" name="from" value="{$customerThread.email|escape:'htmlall':'UTF-8'}" readonly="readonly" /> {else} <input type="text" id="email" name="from" value="{$email|escape:'htmlall':'UTF-8'}" /> {/if} </p> {if !$PS_CATALOG_MODE} {if (!isset($customerThread.id_order) || $customerThread.id_order > 0)} <p class="text select"> <label for="id_order">{l s='Order ID'}</label> {if !isset($customerThread.id_order) && isset($isLogged) && $isLogged == 1} <select name="id_order" > <option value="0">{l s='-- Choose --'}</option> {foreach from=$orderList item=order} <option value="{$order.value|intval}">{$order.label|escape:'htmlall':'UTF-8'}</option> {/foreach} </select> {elseif !isset($customerThread.id_order) && !isset($isLogged)} <input type="text" name="id_order" id="id_order" value="{if isset($customerThread.id_order) && $customerThread.id_order > 0}{$customerThread.id_order|escape:'htmlall':'UTF-8'}{else}{if isset($smarty.post.id_order)}{$smarty.post.id_order|escape:'htmlall':'UTF-8'}{/if}{/if}" /> {elseif $customerThread.id_order > 0} <input type="text" name="id_order" id="id_order" value="{$customerThread.id_order|escape:'htmlall':'UTF-8'}" readonly="readonly" /> {/if} </p> {/if} {/if} {if $fileupload == 1} <p class="text"> <label for="fileUpload">{l s='Attach File'}</label> <input type="hidden" name="MAX_FILE_SIZE" value="2000000" /> <div class="upload"> <input type="file" name="fileUpload" id="fileUpload" /> </div> </p> {/if} <p class="textarea"> <label for="message">{l s='Message'}</label> <textarea id="message" name="message" rows="15" cols="10">{if isset($message)}{$message|escape:'htmlall':'UTF-8'|stripslashes}{/if}</textarea> </p> <p class="submit"> <input type="submit" name="submitMessage" id="submitMessage" value="{l s='Send'}" class="button_large" onclick="$(this).hide();" /> </p> </fieldset> </form> {/if} {/if} where {if $cms->id == 25} is id of cms where I want have contact-form its working, but if You have some suggestions please notice me Hi, thanks alot this even works in 1.6 100% Link to comment Share on other sites More sharing options...
Guest locen Posted November 6, 2015 Share Posted November 6, 2015 Hi, what is the aCMS page address? whiere i can found it? Link to comment Share on other sites More sharing options...
sumit mohanty Posted February 9, 2016 Share Posted February 9, 2016 You can find your cms.tpl inside the theme/default folder. Link to comment Share on other sites More sharing options...
Debarshi Posted March 31, 2016 Share Posted March 31, 2016 I have created a form in cms page and stored the data using post method it easily done now i have to upload a file with that form but its not happening...how to solve that issue?? Link to comment Share on other sites More sharing options...
Debarshi Posted March 31, 2016 Share Posted March 31, 2016 I have created a form in the cms page it working fine now i have to upload an image with the form how to do that??? Link to comment Share on other sites More sharing options...
globosoftware.net Posted May 27, 2016 Share Posted May 27, 2016 Hi, If you don't have experience you can use module Form Builder Pro . It allows you to create any kind of form and display your form to anywhere. The module support shortcode so you are easy to add your form to cms page or product description. Thanks! Link to comment Share on other sites More sharing options...
ELBEZZAZI Posted September 16, 2016 Share Posted September 16, 2016 Hi, I am using PS 1.5.4.1 and I did somtething like this In CMSController.php after public function init() I added public function postProcess() { if (Tools::isSubmit('submitMessage')) { $fileAttachment = null; if (isset($_FILES['fileUpload']['name']) && !empty($_FILES['fileUpload']['name']) && !empty($_FILES['fileUpload']['tmp_name'])) { $extension = array('.txt', '.rtf', '.doc', '.docx', '.pdf', '.zip', '.png', '.jpeg', '.gif', '.jpg'); $filename = uniqid().substr($_FILES['fileUpload']['name'], -5); $fileAttachment['content'] = file_get_contents($_FILES['fileUpload']['tmp_name']); $fileAttachment['name'] = $_FILES['fileUpload']['name']; $fileAttachment['mime'] = $_FILES['fileUpload']['type']; } $message = Tools::getValue('message'); // Html entities is not usefull, iscleanHtml check there is no bad html tags. if (!($from = trim(Tools::getValue('from'))) || !Validate::isEmail($from)) $this->errors[] = Tools::displayError('Invalid email address.'); else if (!$message) $this->errors[] = Tools::displayError('The message cannot be blank.'); else if (!Validate::isCleanHtml($message)) $this->errors[] = Tools::displayError('Invalid message'); else if (!($id_contact = (int)(Tools::getValue('id_contact'))) || !(Validate::isLoadedObject($contact = new Contact($id_contact, $this->context->language->id)))) $this->errors[] = Tools::displayError('Please select a subject from the list provided. '); else if (!empty($_FILES['fileUpload']['name']) && $_FILES['fileUpload']['error'] != 0) $this->errors[] = Tools::displayError('An error occurred during the file-upload process.'); else if (!empty($_FILES['fileUpload']['name']) && !in_array(substr(Tools::strtolower($_FILES['fileUpload']['name']), -4), $extension) && !in_array(substr(Tools::strtolower($_FILES['fileUpload']['name']), -5), $extension)) $this->errors[] = Tools::displayError('Bad file extension'); else { $customer = $this->context->customer; if (!$customer->id) $customer->getByEmail($from); $contact = new Contact($id_contact, $this->context->language->id); if (!(( ($id_customer_thread = (int)Tools::getValue('id_customer_thread')) && (int)Db::getInstance()->getValue(' SELECT cm.id_customer_thread FROM '._DB_PREFIX_.'customer_thread cm WHERE cm.id_customer_thread = '.(int)$id_customer_thread.' AND cm.id_shop = '.(int)$this->context->shop->id.' AND token = \''.pSQL(Tools::getValue('token')).'\'') ) || ( $id_customer_thread = CustomerThread::getIdCustomerThreadByEmailAndIdOrder($from, (int)Tools::getValue('id_order')) ))) { $fields = Db::getInstance()->executeS(' SELECT cm.id_customer_thread, cm.id_contact, cm.id_customer, cm.id_order, cm.id_product, cm.email FROM '._DB_PREFIX_.'customer_thread cm WHERE email = \''.pSQL($from).'\' AND cm.id_shop = '.(int)$this->context->shop->id.' AND ('. ($customer->id ? 'id_customer = '.(int)($customer->id).' OR ' : '').' id_order = '.(int)(Tools::getValue('id_order')).')'); $score = 0; foreach ($fields as $key => $row) { $tmp = 0; if ((int)$row['id_customer'] && $row['id_customer'] != $customer->id && $row['email'] != $from) continue; if ($row['id_order'] != 0 && Tools::getValue('id_order') != $row['id_order']) continue; if ($row['email'] == $from) $tmp += 4; if ($row['id_contact'] == $id_contact) $tmp++; if (Tools::getValue('id_product') != 0 && $row['id_product'] == Tools::getValue('id_product')) $tmp += 2; if ($tmp >= 5 && $tmp >= $score) { $score = $tmp; $id_customer_thread = $row['id_customer_thread']; } } } $old_message = Db::getInstance()->getValue(' SELECT cm.message FROM '._DB_PREFIX_.'customer_message cm LEFT JOIN '._DB_PREFIX_.'customer_thread cc on (cm.id_customer_thread = cc.id_customer_thread) WHERE cc.id_customer_thread = '.(int)($id_customer_thread).' AND cc.id_shop = '.(int)$this->context->shop->id.' ORDER BY cm.date_add DESC'); if ($old_message == $message) { $this->context->smarty->assign('alreadySent', 1); $contact->email = ''; $contact->customer_service = 0; } if ($contact->customer_service) { if ((int)$id_customer_thread) { $ct = new CustomerThread($id_customer_thread); $ct->status = 'open'; $ct->id_lang = (int)$this->context->language->id; $ct->id_contact = (int)($id_contact); if ($id_order = (int)Tools::getValue('id_order')) $ct->id_order = $id_order; if ($id_product = (int)Tools::getValue('id_product')) $ct->id_product = $id_product; $ct->update(); } else { $ct = new CustomerThread(); if (isset($customer->id)) $ct->id_customer = (int)($customer->id); $ct->id_shop = (int)$this->context->shop->id; if ($id_order = (int)Tools::getValue('id_order')) $ct->id_order = $id_order; if ($id_product = (int)Tools::getValue('id_product')) $ct->id_product = $id_product; $ct->id_contact = (int)($id_contact); $ct->id_lang = (int)$this->context->language->id; $ct->email = $from; $ct->status = 'open'; $ct->token = Tools::passwdGen(12); $ct->add(); } if ($ct->id) { $cm = new CustomerMessage(); $cm->id_customer_thread = $ct->id; $cm->message = Tools::htmlentitiesUTF8($message); if (isset($filename) && rename($_FILES['fileUpload']['tmp_name'], _PS_MODULE_DIR_.'../upload/'.$filename)) $cm->file_name = $filename; $cm->ip_address = ip2long($_SERVER['REMOTE_ADDR']); $cm->user_agent = $_SERVER['HTTP_USER_AGENT']; if (!$cm->add()) $this->errors[] = Tools::displayError('An error occurred while sending the message.'); } else $this->errors[] = Tools::displayError('An error occurred while sending the message.'); } if (!count($this->errors)) { $var_list = array( '{order_name}' => '-', '{attached_file}' => '-', '{message}' => Tools::nl2br(stripslashes($message)), '{email}' => $from, ); if (isset($filename)) $var_list['{attached_file}'] = $_FILES['fileUpload']['name']; $id_order = (int)Tools::getValue('id_order'); if (isset($ct) && Validate::isLoadedObject($ct)) { if ($ct->id_order) $id_order = $ct->id_order; $subject = sprintf(Mail::l('Your message has been correctly sent #ct%1$s #tc%2$s'), $ct->id, $ct->token); } else $subject = Mail::l('Your message has been correctly sent'); if ($id_order) { $order = new Order((int)$id_order); $var_list['{order_name}'] = $order->getUniqReference(); $var_list['{id_order}'] = $id_order; } if (empty($contact->email)) Mail::Send($this->context->language->id, 'contact_form', $subject, $var_list, $from, null, null, null, $fileAttachment); else { if (!Mail::Send($this->context->language->id, 'contact', Mail::l('Message from contact form').' [no_sync]', $var_list, $contact->email, $contact->name, $from, ($customer->id ? $customer->firstname.' '.$customer->lastname : ''), $fileAttachment) || !Mail::Send($this->context->language->id, 'contact_form', $subject, $var_list, $from, null, $contact->email, $contact->name, $fileAttachment)) $this->errors[] = Tools::displayError('An error occurred while sending the message.'); } } if (count($this->errors) > 1) array_unique($this->errors); else $this->context->smarty->assign('confirmation', 1); } } } inside public function setMedia() I added $this->addCSS(_THEME_CSS_DIR_.'contact-form.css'); $this->addJS(_THEME_JS_DIR_.'contact-form.js'); inside public function initContent() before $this->setTemplate(_PS_THEME_DIR_.'cms.tpl'); I added $this->assignOrderList(); $email = Tools::safeOutput(Tools::getValue('from', ((isset($this->context->cookie) && isset($this->context->cookie->email) && Validate::isEmail($this->context->cookie->email)) ? $this->context->cookie->email : ''))); $this->context->smarty->assign(array( 'errors' => $this->errors, 'email' => $email, 'fileupload' => Configuration::get('PS_CUSTOMER_SERVICE_FILE_UPLOAD') )); if (($id_customer_thread = (int)Tools::getValue('id_customer_thread')) && $token = Tools::getValue('token')) { $customerThread = Db::getInstance()->getRow(' SELECT cm.* FROM '._DB_PREFIX_.'customer_thread cm WHERE cm.id_customer_thread = '.(int)$id_customer_thread.' AND cm.id_shop = '.(int)$this->context->shop->id.' AND token = \''.pSQL($token).'\' '); $this->context->smarty->assign('customerThread', $customerThread); } $this->context->smarty->assign(array( 'contacts' => Contact::getContacts($this->context->language->id), 'message' => html_entity_decode(Tools::getValue('message')) )); and after public function initContent() I added protected function assignOrderList() { if ($this->context->customer->isLogged()) { $this->context->smarty->assign('isLogged', 1); $products = array(); $result = Db::getInstance()->executeS(' SELECT id_order FROM '._DB_PREFIX_.'orders WHERE id_customer = '.(int)$this->context->customer->id.' ORDER BY date_add'); $orders = array(); foreach ($result as $row) { $order = new Order($row['id_order']); $date = explode(' ', $order->date_add); $tmp = $order->getProducts(); foreach ($tmp as $key => $val) $products[$row['id_order']][$val['product_id']] = array('value' => $val['product_id'], 'label' => $val['product_name']); $orders[] = array('value' => $order->id, 'label' => $order->getUniqReference().' - '.Tools::displayDate($date[0], $this->context->language->id), 'selected' => (int)Tools::getValue('id_order') == $order->id); } $this->context->smarty->assign('orderList', $orders); $this->context->smarty->assign('orderedProductList', $products); } } Now in cms.tpl of my theme I did after {$cms->content} {if $cms->id == 25} {if isset($confirmation)} <p>{l s='Your message has been successfully sent to our team.'}</p> <ul class="footer_links"> <li><a href="{$base_dir}"><img class="icon" alt="" src="{$img_dir}icon/home.gif"/></a><a href="{$base_dir}">{l s='Home'}</a></li> </ul> {elseif isset($alreadySent)} <p>{l s='Your message has already been sent.'}</p> <ul class="footer_links"> <li><a href="{$base_dir}"><img class="icon" alt="" src="{$img_dir}icon/home.gif"/></a><a href="{$base_dir}">{l s='Home'}</a></li> </ul> {else} <p class="bold">{l s='For questions about an order or for more information about our products'}.</p> {include file="$tpl_dir./errors.tpl"} <form action="{$request_uri|escape:'htmlall':'UTF-8'}" method="post" class="std" enctype="multipart/form-data"> <fieldset> <h3>{l s='Send a message'}</h3> <p class="select"> <label for="id_contact">{l s='Subject Heading'}</label> {if isset($customerThread.id_contact)} {foreach from=$contacts item=contact} {if $contact.id_contact == $customerThread.id_contact} <input type="text" id="contact_name" name="contact_name" value="{$contact.name|escape:'htmlall':'UTF-8'}" readonly="readonly" /> <input type="hidden" name="id_contact" value="{$contact.id_contact}" /> {/if} {/foreach} </p> {else} <select id="id_contact" name="id_contact" onchange="showElemFromSelect('id_contact', 'desc_contact')"> <option value="0">{l s='-- Choose --'}</option> {foreach from=$contacts item=contact} <option value="{$contact.id_contact|intval}" {if isset($smarty.post.id_contact) && $smarty.post.id_contact == $contact.id_contact}selected="selected"{/if}>{$contact.name|escape:'htmlall':'UTF-8'}</option> {/foreach} </select> </p> <p id="desc_contact0" class="desc_contact"> </p> {foreach from=$contacts item=contact} <p id="desc_contact{$contact.id_contact|intval}" class="desc_contact" style="display:none;"> {$contact.description|escape:'htmlall':'UTF-8'} </p> {/foreach} {/if} <p class="text"> <label for="email">{l s='E-mail address'}</label> {if isset($customerThread.email)} <input type="text" id="email" name="from" value="{$customerThread.email|escape:'htmlall':'UTF-8'}" readonly="readonly" /> {else} <input type="text" id="email" name="from" value="{$email|escape:'htmlall':'UTF-8'}" /> {/if} </p> {if !$PS_CATALOG_MODE} {if (!isset($customerThread.id_order) || $customerThread.id_order > 0)} <p class="text select"> <label for="id_order">{l s='Order ID'}</label> {if !isset($customerThread.id_order) && isset($isLogged) && $isLogged == 1} <select name="id_order" > <option value="0">{l s='-- Choose --'}</option> {foreach from=$orderList item=order} <option value="{$order.value|intval}">{$order.label|escape:'htmlall':'UTF-8'}</option> {/foreach} </select> {elseif !isset($customerThread.id_order) && !isset($isLogged)} <input type="text" name="id_order" id="id_order" value="{if isset($customerThread.id_order) && $customerThread.id_order > 0}{$customerThread.id_order|escape:'htmlall':'UTF-8'}{else}{if isset($smarty.post.id_order)}{$smarty.post.id_order|escape:'htmlall':'UTF-8'}{/if}{/if}" /> {elseif $customerThread.id_order > 0} <input type="text" name="id_order" id="id_order" value="{$customerThread.id_order|escape:'htmlall':'UTF-8'}" readonly="readonly" /> {/if} </p> {/if} {/if} {if $fileupload == 1} <p class="text"> <label for="fileUpload">{l s='Attach File'}</label> <input type="hidden" name="MAX_FILE_SIZE" value="2000000" /> <div class="upload"> <input type="file" name="fileUpload" id="fileUpload" /> </div> </p> {/if} <p class="textarea"> <label for="message">{l s='Message'}</label> <textarea id="message" name="message" rows="15" cols="10">{if isset($message)}{$message|escape:'htmlall':'UTF-8'|stripslashes}{/if}</textarea> </p> <p class="submit"> <input type="submit" name="submitMessage" id="submitMessage" value="{l s='Send'}" class="button_large" onclick="$(this).hide();" /> </p> </fieldset> </form> {/if} {/if} where {if $cms->id == 25} is id of cms where I want have contact-form its working, but if You have some suggestions please notice me I use your solution its work but where can i found the email ? Link to comment Share on other sites More sharing options...
gellert88 Posted February 1, 2017 Share Posted February 1, 2017 Hi, I am using PS 1.5.4.1 and I did somtething like this ... its working, but if You have some suggestions please notice me Hi folks, I wanted to add the default prestashop contact form to the product page (as a "Get a Quote" form). Notabene's solution seemed ok, and it probably is working for cms pages, but although I altered his solution to the ProductController.php instead of the CmsController.php, things just don't work. It doesn't load the store contacts, and it doesn't send any message (nor error message). Any ideas how can this be applied to the product page in Presta 1.6.1.9? Thanks! Link to comment Share on other sites More sharing options...
Aioras Posted May 26, 2017 Share Posted May 26, 2017 (edited) I've override the CmsController with the changes but, can anybody help me with an example of how to create the form in the cms? for example.. what to put in the <form action= ? > etc ok, I got it, I was doing something wrong in the cms.tpl now it's showing the form but it doesn't send any email - is like if there were no connection between .tpl and the controller :/ The connection was ok, but deggugin i've seen that $id_contact for sending email is null.. so I will try to give a solution for that thanks in advance! Edited May 26, 2017 by Aioras (see edit history) Link to comment Share on other sites More sharing options...
odeg Posted July 4, 2017 Share Posted July 4, 2017 (edited) if you want to use php code on cms page, you have to insert it in CMScontroller.php file located in controllers/front/ directory, in init() function. then you can easily create form in cms editor in back office or 1.set in your form action="http:/exampledomain.com/send.php" (absolute url) 2 create "send.php" for your form 3 put "send.php" in main directory Edited September 28, 2017 by odeg (see edit history) Link to comment Share on other sites More sharing options...
Ray UK Posted September 28, 2017 Share Posted September 28, 2017 Hi, im trying to implement this in a 1.7 install. one problem is the if $cms->id == 6 doesnt seem to function If I remove that if statement then the form obviously show on all cms page, which is fine whilst im testing as the site isnt live. But the the "subject" is blank, so I remove the check for the subject and the form goes through with no error. It doesnt show the confirmation message, and I dont receive any email (assuming its going to the email in the contacts setup in PS back office. Any ideas..Thanks Link to comment Share on other sites More sharing options...
odeg Posted September 28, 2017 Share Posted September 28, 2017 (edited) You can use editor (tiny mc) to prepare form code exactly in CMS page You want to modify. Not in CMS.tpl but in admin panel. https://gyazo.com/e77fc8d5d2bd3f103e2950d8a88ceb7f Just go to Your page and edit it using HTML</> to build a form. U must also create some "send.php "to make the form working. And place this file to the main directory.Click the webmaster name in footer here http://greenservice.pland you will see the example . One of CMS pages with a form. Edited September 28, 2017 by odeg (see edit history) Link to comment Share on other sites More sharing options...
Ray UK Posted September 29, 2017 Share Posted September 29, 2017 Hi odeg, I followed the instructions above and it worked ok on the 1.6 install, its just different on the 1.7. There is no cms.tpl, its not page.tpl and the coding is different. I think some of the variables must be different so its not going through. Link to comment Share on other sites More sharing options...
odeg Posted September 29, 2017 Share Posted September 29, 2017 In this method You don't need cms.tpl or any "file.tpl" in 1.7 You can modify one of yours pages here: IMPROVE>Design>pages> choose one between them or create one and You can prepare the form there. https://gyazo.com/fecf5bad7c448a49b92913ac858b9506 and after create some "send.php" and place it to your main directory for example: domaim.com/send.php and set it in < form action="domaim.com/send.php"....in your form Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now