Итак, очередная задача заключается в создании формочки

advertisement
Итак, очередная задача заключается в создании формочки отправки телефона:
В добрый путь…
Итак, шаг первый, создаем шаблон, отвечающий за вывод этой формочки. Назовем его,
скажем, 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>
Download