Как сделать пустое поле для заполнения...

Тема в разделе "Shop-script", создана пользователем HellDoc, 30 авг 2008.

Статус темы:
Закрыта.
Модераторы: kadurinho
  1. HellDoc

    HellDoc Постоялец

    Регистр.:
    28 май 2007
    Сообщения:
    89
    Симпатии:
    11
    Вопрос :

    Нужно сделать пустое поле которое клиент бы сам заполнял при оформлении заказа. Аля коментарии к заказу. Только не такое большое + обязательное заполнение + возможность влючать и выключать в админке.

    Итак - есть идеи?
     
  2. Plushev

    Plushev Постоялец

    Регистр.:
    28 июл 2008
    Сообщения:
    57
    Симпатии:
    3
    1 ищещь страницу которая отвечает за добавления, там где эта форма
    2 По примеру других полей делаешь своё поле (copy&paste) только меняешь название textarea или input что у тебя там,поля в базе данных, каких то переменных там я думаю понятно будет

    3 создаёшь это поле в базе данных

    4 радуешься)
     
  3. HellDoc

    HellDoc Постоялец

    Регистр.:
    28 май 2007
    Сообщения:
    89
    Симпатии:
    11
    Итак - было предложение в приват сделать за 30 данный хак...Но предлагатель пропал ( - а вещь нужная. Еще есть желающие?
     
  4. Caurus

    Caurus

    Регистр.:
    21 фев 2008
    Сообщения:
    348
    Симпатии:
    285
    Слушай а я подумал теоретически можно изменить коментарии к заказу только

    1) Сделать его меньше... (подробнее можно про что ты... количество букв или в ширину???)
    2) Сделать обязательным
    3) Возможность отключения его в админке...

    Все правильно?
     
  5. HellDoc

    HellDoc Постоялец

    Регистр.:
    28 май 2007
    Сообщения:
    89
    Симпатии:
    11
    Ну представь что это поле для ввода номера телефона при этом обязательное.
     
  6. Caurus

    Caurus

    Регистр.:
    21 фев 2008
    Сообщения:
    348
    Симпатии:
    285
    вот таким сделать надо? Даешь добро на изменения комментариев...
     
  7. HellDoc

    HellDoc Постоялец

    Регистр.:
    28 май 2007
    Сообщения:
    89
    Симпатии:
    11
    Нет -коментарии я использую активно для другой цели...)

    Мне именно нужно чтобы клиент заполнял при заказе одно или более полей сам ручками и причем обязательно. Да сейчас я использую поле - коментарии - но процентов 20 клиентов продолжает игнорить красный шрифт о обязательном заполнении )
     
  8. Caurus

    Caurus

    Регистр.:
    21 фев 2008
    Сообщения:
    348
    Симпатии:
    285
    Ну что я сделал.....

    Будем пробовать. Итак... Работы много смотри не запутайся... и я могу, где что забыть, так что пробуй у меня все работает главное будет вспомнить, где я и что правил... а то в 4 часа ночи мозги закипали уже...... главное копии файлов сделай.

    Начнем:

    1) Нам нужны файлы:

    • а) templates/frontend/tmplXX/order4_confirmation.tpl.html
    • б) templates/frontend/tmplXX/order4_confirmation_quick.tpl.html
    • в) includes/order4_confirmation.php
    • г) includes/order4_confirmation_quick.php
    • д) core_functions/order_functions.php
    • е) templates/backend/custord_new_orders.tpl.html
    • ё) templates/email/admin_order_notification.txt

    XX - номер шаблона

    2) В файле order4_confirmation.tpl.html делаем:

    после
    PHP:
    <p>
            {
    $smarty.const.STRING_ORDER_COMMENT}:<br>
            <
    textarea name="order_comment" cols="40" rows="5"></textarea>
        </
    p>
    всталяем
    PHP:
    <p>{if $smarty.const.CONF_ORDER_COMMENT1 == '1'}
            
    Допполе:<br>
            
            <
    textarea type="text" name="order_comment1" cols="40" rows="5" required></textarea>
           {else}{/if}
        </
    p>
    далее находим около 186 строки
    PHP:
    <form name='MainForm' method=POST>
    добавляем
    PHP:
    onSubmit "return checkform(this)"
    получаем
    PHP:
    <form name='MainForm' method=POST onSubmit "return checkform(this)">
    далее после
    PHP:
    <input type=hidden name='totalUC' value='{$totalUC}'>

    </
    form>
    встявляем
    PHP:
    {literal}
    <
    script language='JavaScript'>
            function 
    checkform(f) {
     var 
    errMSG ""
          for (var 
    0i<f.elements.lengthi++) 
          if (
    null!=f.elements[i].getAttribute("required")) 
                 if (
    isEmpty(f.elements[i].value)) 
               
    errMSG += "  " f.elements[i].name "\n";      
           if (
    "" != errMSG) {
               
    alert("Не заполнены обязательные поля: ДОП поля" );
               return 
    false;
           }
    }
                    function 
    isEmpty(str) {
      for (var 
    0str.lengthi++)
         if (
    " " != str.charAt(i))
             return 
    false;
         return 
    true;
    }    
                        
                        
    </script>{/literal}
    там где написано - Доп. поле: и ДОП поля замени на то что у тебя там будет.... я назвал так. у тебя иначе.

    3) В файле order4_confirmation.php делаем:

    находим
    PHP:
    $orderID ordOrderProcessing(
                        
    $_GET["shippingMethodID"], $_GET["paymentMethodID"],
                        
    $_GET["shippingAddressID"], $_GET["billingAddressID"], 
                        
    $shippingModuleFiles$paymentModuleFiles$_POST["order_comment"], 
                        
    $cc_number,
                        
    $cc_holdername
                        
    $cc_expires,
                        
    $cc_cvv,
                        
    $_SESSION["log"], $smarty_mail$shServiceID );
    и добавляем
    PHP:
    $_POST["order_comment1"],
    получаем
    PHP:
    $orderID ordOrderProcessing(
                        
    $_GET["shippingMethodID"], $_GET["paymentMethodID"],
                        
    $_GET["shippingAddressID"], $_GET["billingAddressID"], 
                        
    $shippingModuleFiles$paymentModuleFiles$_POST["order_comment"], $_POST["order_comment1"],
                        
    $cc_number,
                        
    $cc_holdername
                        
    $cc_expires,
                        
    $cc_cvv,
                        
    $_SESSION["log"], $smarty_mail$shServiceID );
    4) В файле core_functions/order_functions.php делаем :

    находим около 84 строки
    PHP:
    $q db_query"select orderID, customerID, order_time, customer_ip, shipping_type, ".
            
    " payment_type, customers_comment,  statusID, shipping_cost, order_amount, ".
            
    " order_discount, currency_code, currency_value, customer_email, ".
            
    " shipping_firstname, shipping_lastname, ".
            
    " shipping_country,    shipping_state, shipping_zip, shipping_city, ".
            
    " shipping_address, billing_firstname, billing_lastname, ".
            
    " billing_country, billing_state, billing_zip, billing_city, ".
            
    " billing_address, cc_number, cc_holdername, cc_expires, cc_cvv, shippingServiceInfo ".
            
    " from ".ORDERS_TABLE." ".$where_clause." ".$order_by_clause 
            
    );
    добавляем
    PHP:
    customers_comment1,
    получаем
    PHP:
    $q db_query"select orderID, customerID, order_time, customer_ip, shipping_type, ".
            
    " payment_type, customers_comment, customers_comment1, statusID, shipping_cost, order_amount, ".
            
    " order_discount, currency_code, currency_value, customer_email, ".
            
    " shipping_firstname, shipping_lastname, ".
            
    " shipping_country,    shipping_state, shipping_zip, shipping_city, ".
            
    " shipping_address, billing_firstname, billing_lastname, ".
            
    " billing_country, billing_state, billing_zip, billing_city, ".
            
    " billing_address, cc_number, cc_holdername, cc_expires, cc_cvv, shippingServiceInfo ".
            
    " from ".ORDERS_TABLE." ".$where_clause." ".$order_by_clause 
            
    );
    далее находим около 330 строки
    PHP:
    function _getOrderById$orderID )
    {
        
    $sql "select ".
            
    "    orderID, ".
            
    "    customerID, ".
            
    "    order_time, ".
            
    "    customer_ip, ".
            
    "    shipping_type, ".
            
    "    payment_type, ".
            
    "    customers_comment, ".
            
    "    statusID, ".
            
    "    shipping_cost, ".
            
    "    order_discount, ".
            
    "    order_amount, ".
    добавляем
    PHP:
    "    customers_comment1, ".
    получаем
    PHP:
    function _getOrderById$orderID )
    {
        
    $sql "select ".
            
    "    orderID, ".
            
    "    customerID, ".
            
    "    order_time, ".
            
    "    customer_ip, ".
            
    "    shipping_type, ".
            
    "    payment_type, ".
            
    "    customers_comment, ".
            
    "    customers_comment1, ".
            
    "    statusID, ".
            
    "    shipping_cost, ".
            
    "    order_discount, ".
            
    "    order_amount, ".
    находим
    PHP:
    $smarty_mail->assign"customer_ip"$order["customer_ip"] );
        
    $smarty_mail->assign"order_time"format_datetime($order["order_time"]) );
        
    $smarty_mail->assign"customer_comments"$order["customers_comment"] );
    это 489 строка или рядом - добавляем
    PHP:
    $smarty_mail->assign"customer_comments1"$order["customers_comment1"] );
    получаем
    PHP:
    $smarty_mail->assign"customer_email"$order["customer_email"] );
        
    $smarty_mail->assign"customer_ip"$order["customer_ip"] );
        
    $smarty_mail->assign"order_time"format_datetime($order["order_time"]) );
        
    $smarty_mail->assign"customer_comments"$order["customers_comment"] );
        
    $smarty_mail->assign"customer_comments1"$order["customers_comment1"] );
    далее находим около 574 строки
    PHP:
    function ordOrderProcessing(
            
    $shippingMethodID$paymentMethodID,
            
    $shippingAddressID$billingAddressID
            
    $shippingModuleFiles$paymentModulesFiles$customers_comment
            
    $cc_number,
            
    $cc_holdername
            
    $cc_expires,
            
    $cc_cvv,
            
    $log
            
    $smarty_mail$shServiceID 0)
    добавляем
    PHP:
    $customers_comment1,
    получаем
    PHP:
    function ordOrderProcessing(
            
    $shippingMethodID$paymentMethodID,
            
    $shippingAddressID$billingAddressID
            
    $shippingModuleFiles$paymentModulesFiles$customers_comment$customers_comment1,
            
    $cc_number,
            
    $cc_holdername
            
    $cc_expires,
            
    $cc_cvv,
            
    $log
            
    $smarty_mail$shServiceID 0)
    далее около 790 строки находим
    PHP:
    $sql "insert into ".ORDERS_TABLE.
                
    " ( customerID, ".
                
    "    order_time, ".
                
    "    customer_ip, ".
                
    "    shipping_type, ".
                
    "    payment_type, ".
                
    "    customers_comment, ".
                
    "    statusID, ".
                
    "    shipping_cost, ".
                
    "    order_discount, ".
    добавляем
    PHP:
    "    customers_comment1, ".
    получаем
    PHP:
    $sql "insert into ".ORDERS_TABLE.
                
    " ( customerID, ".
                
    "    order_time, ".
                
    "    customer_ip, ".
                
    "    shipping_type, ".
                
    "    payment_type, ".
                
    "    customers_comment, ".
                
    "    customers_comment1, ".
                
    "    statusID, ".
                
    "    shipping_cost, ".
                
    "    order_discount, ".
                
    "    order_amount, ".
    находим около 828 строки
    PHP:
    " values ( ".
                    
    xEscapeSQLstring($customerID).", ".
                    
    "'".xEscapeSQLstring($order_time)."', ".
                    
    "'".xEscapeSQLstring($customer_ip)."', ".
                    
    "'".xEscapeSQLstring($shippingName)."', ".
                    
    "'".xEscapeSQLstring($paymentName)."', ".
                    
    "'".xEscapeSQLstring($customers_comment)."', ".
    добавляем
    PHP:
    "'".xEscapeSQLstring($customers_comment1)."', ".
    получаем
    PHP:
    " values ( ".
                    
    xEscapeSQLstring($customerID).", ".
                    
    "'".xEscapeSQLstring($order_time)."', ".
                    
    "'".xEscapeSQLstring($customer_ip)."', ".
                    
    "'".xEscapeSQLstring($shippingName)."', ".
                    
    "'".xEscapeSQLstring($paymentName)."', ".
                    
    "'".xEscapeSQLstring($customers_comment)."', ".
                    
    "'".xEscapeSQLstring($customers_comment1)."', ".
    находим около 956 строки
    PHP:
    function ordGetOrder$orderID )
    {
        
    $orderID = (int) $orderID;
        
    $q db_query"select orderID, customerID, order_time, customer_ip, ".
             
    " shipping_type, payment_type, customers_comment, ".
             
    " statusID, shipping_cost, order_discount, order_amount, ".
             
    " currency_code, currency_value, customer_firstname, customer_lastname, ".
    добавляем
    PHP:
    customers_comment1,
    получаем
    PHP:
    function ordGetOrder$orderID )
    {
        
    $orderID = (int) $orderID;
        
    $q db_query"select orderID, customerID, order_time, customer_ip, ".
             
    " shipping_type, payment_type, customers_comment, customers_comment1, ".
             
    " statusID, shipping_cost, order_discount, order_amount, ".
             
    " currency_code, currency_value, customer_firstname, customer_lastname, ".
    и того получаем 7 новых добавленей.. проверяй что б не запутаться. Если в кратце то мы сделали копии
    PHP:
    customers_comment
    в этом файле.

    5) В файле templates/backend/custord_new_orders.tpl.htm

    находим
    PHP:
    <td>{$smarty.const.TABLE_ORDER_COMMENTS}: <b>{$order.customers_comment|replace:"<":"&lt;"}</b></td>
    это комментарии обычные для заказа. Вот под ними нам надо сделать еще одно колонку и вписать туда
    PHP:
    <td>Допполе.:
                          <
    b>{$order.customers_comment1}</b></td>
    так будет вывод данных которые написаны в этом поле. И опять Доп. поле.: замени на название которое надо.

    6) В файле templates/email/admin_order_notification.txt

    найди
    PHP:
    {$smarty.const.STRING_CUSTOMER_COMMENTS}: {$customer_comments}
    после вставь
    PHP:
    Допполе: {$customer_comments1}
    7) Делаем запрос к базе SQl после этого запроса в админке в Настройка->Корзина и оформление заказов появится свойство Заполнение Доп. Поля при оформлении заказа там ставим галку и заполнять надо. Убираем галку уходит поле заполнения:

    PHP:
    INSERT INTO `Имя твоей базы данных`.`SS_settings` (
    `
    settingsID` ,
    `
    settings_groupID` ,
    `
    settings_constant_name` ,
    `
    settings_value` ,
    `
    settings_title` ,
    `
    settings_description` ,
    `
    settings_html_function` ,
    `
    sort_order
    )
    VALUES (
    '260''6''CONF_ORDER_COMMENT1''1''Заполнение Доп. Поля при оформлении заказа''Необходимость заполнения Доп.Поля при оформлении заказа''setting_CHECK_BOX(''7'
    );
    8) Теперь находим в файле templates/frontend/tmplXX/order4_confirmation_quick.tpl.html
    PHP:
    <p>
            {
    $smarty.const.STRING_ORDER_COMMENT}:<br>
            <
    textarea name="order_comment" cols="40" rows="5"></textarea>
        </
    p>
    после вставляем
    PHP:
    <p>{if $smarty.const.CONF_ORDER_COMMENT1 == '1'}
            
    Допполе:<br>
            
            <
    textarea type="text" name="order_comment1" cols="40" rows="5" required></textarea>
           {else}{/if}
        </
    p>
    далее ниже после
    PHP:
    <input type=hidden name='totalUC' value='{$totalUC}'>

    </
    form>
    всталяем
    PHP:
    {literal}
    <
    script language='JavaScript'>
            function 
    checkform(f) {
     var 
    errMSG ""
          for (var 
    0i<f.elements.lengthi++) 
          if (
    null!=f.elements[i].getAttribute("required")) 
                 if (
    isEmpty(f.elements[i].value)) 
               
    errMSG += "  " f.elements[i].name "\n";      
           if (
    "" != errMSG) {
               
    alert("Не заполнены обязательные поля: ДОП поля" );
               return 
    false;
           }
    }
                    function 
    isEmpty(str) {
      for (var 
    0str.lengthi++)
         if (
    " " != str.charAt(i))
             return 
    false;
         return 
    true;
    }    
                        
                        
    </script>{/literal}
    9) в файле includes/order4_confirmation_quick.php находим
    PHP:
    $orderID ordOrderProcessing(
                
    $_GET["shippingMethodID"], $_GET["paymentMethodID"],
                
    00
                
    $shippingModuleFiles$paymentModuleFiles$_POST["order_comment"], 
                
    $cc_number,        $cc_holdername
                
    $cc_expires,    $cc_cvv,
                
    null$smarty_mail$shServiceID );
    добавляем
    PHP:
    $_POST["order_comment1"],
    получаем
    PHP:
    $orderID ordOrderProcessing(
                
    $_GET["shippingMethodID"], $_GET["paymentMethodID"],
                
    00
                
    $shippingModuleFiles$paymentModuleFiles$_POST["order_comment"], $_POST["order_comment1"],
                
    $cc_number,        $cc_holdername
                
    $cc_expires,    $cc_cvv,
                
    null$smarty_mail$shServiceID );
    Уффф.... Вроде все.... Делай все по очереди. И если будут ошибки, пиши сюда. Еще раз скажу у меня все ОК. Так что или я неточность указал.. или ты ошибся, когда копировал, зацепил лишнюю запятую.. точку или другую хрень. В любом случае отпишись, что и как получилось. Если надо изменить форму ввода данных сделать меньше, то скажи и справлю. Удачи в пробе.

    Только что проверил все еще раз... С нуля за 5 минут поставил, но я знал что и куда ставить! Все работает. :yahoo::ay:

    Вот скрин при нажатии на кнопку оформить выпадает ошибка и останавливается выполнение сценария + вид в админке только у тебя слова другие будут:

    [​IMG][​IMG]
     

    Вложения:

    • error.jpg
      error.jpg
      Размер файла:
      102,3 КБ
      Просмотров:
      5
    • admin.jpg
      admin.jpg
      Размер файла:
      23,1 КБ
      Просмотров:
      2
    ndmitry и HellDoc нравится это.
  9. HellDoc

    HellDoc Постоялец

    Регистр.:
    28 май 2007
    Сообщения:
    89
    Симпатии:
    11
    афигеть ))) Так - ну это - выделю часа 2-3 на тестинг седня.... Придетца на живую резать так что нада оккуратно
     
  10. HellDoc

    HellDoc Постоялец

    Регистр.:
    28 май 2007
    Сообщения:
    89
    Симпатии:
    11
    При попытке выполнить мускул запрос :

    PHP:
    SQL-запрос

    INSERT INTO `wwwwowshopwsuser`.`SS_settings` (
    `
    settingsID` ,
    `
    settings_groupID` ,
    `
    settings_constant_name` ,
    `
    settings_value` ,
    `
    settings_title` ,
    `
    settings_description` ,
    `
    settings_html_function` ,
    `
    sort_order
    )
    VALUES (
    '260''6'' CONF_ORDER_COMMENT1''1''Заполнение Доп. Поля при оформлении заказа''Необходимость заполнения Доп.Поля при оформлении заказа''setting_CHECK_BOX(''7'



    Ответ MySQL:  
    #1062 - Duplicate entry '260' for key 1
    и соответственно при оформлении поля нет (хз почему) и выдает ошибку

    PHP:
    Unknown column 'customers_comment1' in 'field list' SQL query insert into SS_orders customerIDorder_timecustomer_ipshipping_typepayment_typecustomers_commentcustomers_comment1statusIDshipping_costorder_discountorder_amountcurrency_codecurrency_valuecustomer_firstnamecustomer_lastnamecustomer_emailshipping_firstnameshipping_lastnameshipping_countryshipping_stateshipping_zipshipping_cityshipping_addressbilling_firstnamebilling_lastnamebilling_countrybilling_statebilling_zipbilling_citybilling_addresscc_numbercc_holdernamecc_expirescc_cvvaffiliateIDshippingServiceInfo values 1'2008-09-03 17:50:00''78.21.49.24''''Yandex.money''asd'''20019.82'USD'1'Maddoc''Maddoc''maddocbe@gmail.com''''''''''''''''''''''''''''''''''''''','' )
    в аттаче файлы которые менял.

    Работа проделана супер - вот только я немного не то хотел )))))

    Смотри : при покупке товара ты выбираешь

    Товар1. Цена 10 юсд
    Дополнительные характиристики : Цвет : Черный +1 юсд
    Дополнительные характиристики : Доставка : Быстро + 2 юсд
    Дополнительные характиристики : Ваш телефон : [__________] <--- пустое поля для ввода.
    Итого : 12 юсд

    [Оформить заказ]
     
Статус темы:
Закрыта.