Итак, очередная задача заключается в создании формочки отправки телефона: В добрый путь… Итак, шаг первый, создаем шаблон, отвечающий за вывод этой формочки. Назовем его, скажем, phoneback.tpl.html со следующим содержимым: <!-- phoneback.tpl.html --> <form name="form_phone" method="post" action="?ukey=feedback"> <input type="hidden" name="send" value="yes"> <input type="hidden" name="phoneback" value="yes"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td><table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="5"><img src="{$smarty.const.URL_IMAGES}/l2.gif" width="5" height="18" /></td> <td bgcolor="#FFFFFF">{literal} <input name="message_phone" type="text" class="login" шd="textfield3" value="Введите свой телефон" onblur="if (this.value == '') { this.value = 'Введите свой телефон' }" onfocus="if (this.value == 'Введите свой телефон') { this.value = '';}"/> {/literal}</td> <td width="5"><img src="{$smarty.const.URL_IMAGES}/l1.gif" width="5" height="18" /></td> </tr> </table> </td> <td width="25" align="right"> <input type="submit" value="" class="btn_ok" width="18" height="18" /></td> </tr> <tr> <td height="5"></td> <td align="right"></td> </tr> </table> <span class="perezvon">Оставьте свой номер телефона для связи с Вами</span> </form> <!-- /phoneback.tpl.html--> Затем, чуть чуть правим шаблон обратной связи, так именно его обработчик будет использоваться для вывода сообщений, открываем файл feedback.tpl.html и переписывем последнюю строку (когда-то там было просто else): {elseif $sent == 1} <p align="center">{"feedback_msg_sent_successfully"|translate}</p> {elseif $sent == 2} <p align="center">Спасибо, что выбрали наш магазин. Мы перезвоним Вам в ближайшее время.</p> {/if} Шаг третий, финальный — правим код для класса обработки сообщений, файлик лежит тут: /webasyst/published/SC/html/scripts/modules/feedback/class.feedback.php , исправить нужно функцию methodFeedback(): function methodFeedback(){ global $smarty; $Register = &Register::getInstance(); /*@var $Register Register*/ $Message = $Register->get(VAR_MESSAGE); /*@var $Message Message*/ // code by levinside 03.03.2010 9:59 if (isset($_POST['phoneback'])) { $message_phone = ( $_POST['message_phone'] ); // end levinside code } elseif (isset($_POST['feedback'])){ $customer_name = ( $_POST['customer_name'] ); $customer_email = ( $_POST['customer_email'] ) ; $message_subject = ( $_POST['message_subject'] ) ; $message_text = ( $_POST['message_text'] ); } else { $customer_name = ''; $customer_email = ''; $message_subject = ''; $message_text = ''; } if(isset($_POST['feedback']) && !valid_email($customer_email)){ Message::raiseMessageRedirectSQ(MSG_ERROR, '', 'msg_error_wrong_email', '', array('feedback_data' => $_POST)); } //validate input data if (isset($customer_name) && isset($customer_email) && isset($message_subject) && isset($message_text) && isset($_POST['send']) && trim($customer_email)!='' && trim($customer_name)!='' && trim($message_subject)!='' && trim($message_text)!='' && valid_email($customer_email)){ if(CONF_ENABLE_CONFIRMATION_CODE){ require_once(DIR_CLASSES.'/class.ivalidator.php'); $iVal = new IValidator(); if(!$iVal>checkCode($_POST['fConfirmationCode'])){ Message::raiseMessageRedirectSQ(MSG_ERROR, '', 'err_wrong_ccode', '', array('feedback_data' => $_POST)); } } $customer_name = str_replace(array('@','<','\n'), array('[at]', '', ''), $customer_name); $customer_email = str_replace(array('\n','<'), '', $customer_email); //send a message to store administrator ss_mail(CONF_GENERAL_EMAIL, $message_subject,"{$customer_name} ({$customer_email}):\n". $message_text,false,array('From'=>$customer_email,'Sender'=>$customer_email,' FromName'=>$customer_name)); RedirectSQ('sent=1'); // code by levinside 03.03.2010 9:59 } elseif ( !empty($message_phone) ) { //send a message to store administrator ss_mail(CONF_GENERAL_EMAIL, "Позвоните мне, пожалуйста!","Форма отправки телефона (no-replay):\n".$message_phone, false); RedirectSQ('sent=2'); // end levinside code } elseif( isset($_POST['feedback']) || isset($_POST['phoneback']) ){ Message::raiseMessageRedirectSQ(MSG_ERROR, '', 'err_input_all_required_fields', '', array('feedback_data' => $_POST)); } //extract input to Smarty if(Message::isMessage($Message) && $Message->is_set() && isset($Message->feedback_data)) { $smarty->assign('feedback_data', $Message>feedback_data); } if (isset($_GET['sent'])) { $smarty->assign('sent', intval($_GET['sent'])); } set_query('sent=','',true); $smarty->assign('conf_image', URL_ROOT.'/imgval.php?'.generateRndCode(4).'=1'); $smarty->assign('main_content_template', 'feedback.tpl.html'); } Вот так, просто, быстро, хотя, возможно, не совсем адекватно, но ковырять внутренности еще сильнее немного лень. Зато таким макаром на почту админу валится письмо с просьбой позвонить, а пользоватедю в ответ вываливается Ваше кастомное сообщение. PS: верстку таблицами неприемлю, но когда люди нанимают верстальщика и покупают подобное, то не переверстывать же мне все это дело? PS2: тут у меня в коде вставки имени другого человека. ну так повелось :) менять поздно, а grepить удобно. Перенос живого магазина с движка ShopScript на движок WebAsyst Досталось мне в наследство несколько проектов на этом самом движке(ShopScript). Поскольку разработчик в какой-то момент понял ущербность своего создания, то поддерживать его перестал, но это не помешало ему выродить новое и более страшное монстрообразное существо по имени WebAsyst. А потому пришлось переносить все «живые» проекты с одного движка на дургой. Производитель пишет, что все это легко и просто — дунул, плюнул, скрипт запустил — и пей себе кофе в сторонке, да только в реальности все оно совсем не так. Итак, один из первых жучков с которым мне пришлось столкнуться при переносе — это скрипт переноса базы магазина. Вашу же маму, дорогие товарищи. Тут куча проблем просто. Во-первых, появились в описании товаров, в статьях и прочих текстах два странных символа «rn». Ну ясен пень откуда оно все пошло, надо лечить, не руками же по всему сайту лазить. Во-вторых, у товаров с выбираемыми характеристиками появилась одна новая и прекрасная дополнительная «Не определено». По мне — так похуй, да только не каждому владельцу магазина понравится. Так и произошло с моими — им не понравилось. Что делать? — Лечить. Тут все просто — в шаблоне с описанием продукта появилась строчка. Открываем файлы product_brief.html product_brief.tpl.html product_params_selectable.html в папке temlates и просто удалаляем эту строку: <option value='' rel="0">{"str_not_defined"|translate|escape:'html'}</option> В-третьих, корзина. В админке есть возможность переключать возможность открытия корзины: в отдельном окне или в том же самом. Старый вариант корзины перестал существовать как таковой. А заказчик хотел «как было». Как показал дебаг js, лечение очень простое. В файлике: webasyst/published/SC/html/scripts/modules/cart/scripts/shopping_cart.php Просто меняем строку: $jsgoto = isset($_POST['checkout']) ?'?ukey=checkout&view=noframe' : (isset($_POST['ppe_checkout_x']) ?'ppexpresscheckout2=1&view=frame' : (isset($_POST['google_checkout_x']) ?'googlecheckout2=1&view=frame':'')); на строку $jsgoto = isset($_POST['checkout']) ?'?ukey=checkout&view=frame' : (isset($_POST['ppe_checkout_x']) ?'ppexpresscheckout2=1&view=frame' : (isset($_POST['google_checkout_x']) ?'googlecheckout2=1&view=frame':'')); Корзина, кстати, открывается в отдельном окне. В-четвертых, кнопка логаута. Ну или если выражаться родым прекрасным — стандартная кнопка выхода из сессии просто не работает. Линк там не тот. Но на всех проектах переделывть уже начинает доставать. Лечение простое, в файле: /webasyst/published/SC/html/scripts/templates/frontend/ladyspring/authorizati on.html меняем линк для кнопки в этом кусочке кода: <div class="pink"> <a href="{'?ukey=office'|set_query_html}">{'pgn_my_account'|translate}</a><br /> <a href="{'logout=yes'|set_query_html}">{"lnk_logout"|translate}</a> </div> на <div class="pink"> <a href="{'?ukey=office'|set_query_html}">{'pgn_my_account'|translate}</a><br /> <a href="{'?ukey=logout'|set_query_html}">{"lnk_logout"|translate}</a> </div>