0 Пользователей и 1 Гость просматривают эту тему.
  • 16 Ответов
  • 596 Просмотров
*

timofe

  • Захожу иногда
  • 51
  • 0 / 0
Всем привет!
Есть готовая форма, по которой идет расчет заказа - http://www.nevafartuk.ru/calculate

При расчете формула считает именно те параметры, которые пользователь вводит.
Например, если вводим ширину и высоту панели менее 100 см (например 80см и 50см), то и считает менее 80см и 50мс.

А нужно, чтобы расчет велся от 100 см. и выше, при условии, что вводить в поля мы можем и меньшие значения...

Как сделать?
Спасибо!
*

sivers

  • Завсегдатай
  • 1231
  • 157 / 0
Код
var width = 80;
var height = 120;
var square = (width < 100 ? 100 : width) * (height < 100 ? 100 : height);
На связи в телеге @sivers
*

timofe

  • Захожу иногда
  • 51
  • 0 / 0
А где это использовать?
Спасибо!
*

sivers

  • Завсегдатай
  • 1231
  • 157 / 0
А где это использовать?
Это JS. Пример расчета с проверкой - если аргумент меньше 100, то считается как 100.
Аналогично надо подправить вашу формулу расчета - она ведь там тоже на JS.
На связи в телеге @sivers
*

timofe

  • Захожу иногда
  • 51
  • 0 / 0
У меня там нет Js
*

sersergio

  • Новичок
  • 6
  • 0 / 0
Добрый день, форумчане.
Посоветуйте пожалуйста, как можно решить вопрос правильного составления формулы с условиями, что если выбрали одно, то значит такой коэффициент, а если выбрали другое, то другой коэффициент.
Т.е. есть два коэффициента - год и объём и три группы коэффициентов. Выбрав один год и нужный объём, у тебя должен подобраться нужный коэффициент, при этом сам объём представляет собой интервал от и до...
Буду признателен, если подскажите или направите, где можно посмотреть.
С уважением,
Сергей
*

sivers

  • Завсегдатай
  • 1231
  • 157 / 0
Если количество вариантов небольшое и не требует регулярной правки, то проще всего прям в JS все условия и коэффициенты прописать. Если ж требуется возможность правки через админку, тогда лучше задать значения коэффициентов в атрибутах полей (они ж доступны для считывания из JS), а саму логику в JS-скрипте.
На связи в телеге @sivers
*

sersergio

  • Новичок
  • 6
  • 0 / 0
Если количество вариантов небольшое и не требует регулярной правки, то проще всего прям в JS все условия и коэффициенты прописать. Если ж требуется возможность правки через админку, тогда лучше задать значения коэффициентов в атрибутах полей (они ж доступны для считывания из JS), а саму логику в JS-скрипте.

Нет, количество вариантов небольшое и не требуется регулярной правки (т.е. коэффициенты постоянны).
А подсказать, на каком-то простом примере можете? Я понимаю, что в поле js нужно занести условия, но с языком скрипта не знаком, а по аналогии можно было бы попробовать. Если это конечно удобно. Откровенно, я новичок в этом и мне хотя бы какой-нибудь пример для эксперимента.
Буду признателен за подсказку.
*

gartes

  • Завсегдатай
  • 1330
  • 104 / 5
  • Е = mс²
Цитировать
А подсказать, на каком-то простом примере можете?
Давайте ссылку на форму - поможем !
*

sersergio

  • Новичок
  • 6
  • 0 / 0
Давайте ссылку на форму - поможем !

Хорошо, к сожалению ссылку на саму форму не смогу выслать, т.к. собираю сайт на локальном сервере. А что касается примера, то форма похожа на форму расчёт стоимости автомобиля, который завозят из-за рубежа:

Параметры для расчёта:

Возраст автомобиля: до 3-х лет; от 3 до 5 лет; старше 5 лет

Объём двигателя: (указывается точный объём)

А далее идет расчёт по условиям:
1. Если машина до 3-х лет то у неё при объёме двигателя:
до 1000 куб. см - коэфф. 2
от 1001 до 1500 - коэф. 2,5
от 1501-1800 - коэф. 3

2. Если машина от 3 до 5 лет, то у неё при объёме двигателя:
до 1000 куб. см - коэфф. 1,5
от 1001 до 1500 - коэф. 1,8
от 1501-1800 - коэф. 2,1

3. Если машина более 5 лет, то у неё при объёме двигателя:
до 1000 куб. см - коэфф. 3
от 1001 до 1500 - коэф. 3,5
от 1501-1800 - коэ. 4

Следовательно расчётный параметр будет определяться как объём двигателя * коэфф. который соответствует году.

Надеюсь, я подробно описал.
Я немного умею составлять формулы в экселе и я это сделал, но вот с программирование на js - никогда не сталкивался.

Буду признателен за помощь и учёбу в этом деле.



*

sivers

  • Завсегдатай
  • 1231
  • 157 / 0
Т.е. объяснять придется на пальцах?
Тогда проще всего составить массив (в пхп), в котором использовать оставные ключи вида "2-3", где 2 - индекс объема, 3 - индекс возраста. Каждому такому ключу вписать значение. Массив вывести на страницу в виде json (JS их хорошо читает). А далее делаете 2 селекта в форме, которые будут возвращать индексы объема и возраста, из них составляете ключ и ищете значение в том json-е.

Это вот в теории.

А чтоб на практике это написать - нужна сверстанная форма.
На связи в телеге @sivers
*

sersergio

  • Новичок
  • 6
  • 0 / 0
Т.е. объяснять придется на пальцах?
Тогда проще всего составить массив (в пхп), в котором использовать оставные ключи вида "2-3", где 2 - индекс объема, 3 - индекс возраста. Каждому такому ключу вписать значение. Массив вывести на страницу в виде json (JS их хорошо читает). А далее делаете 2 селекта в форме, которые будут возвращать индексы объема и возраста, из них составляете ключ и ищете значение в том json-е.

Это вот в теории.

А чтоб на практике это написать - нужна сверстанная форма.

И с php у меня тоже никак )) ладно, поищу варианты с php
*

gartes

  • Завсегдатай
  • 1330
  • 104 / 5
  • Е = mс²
Цитировать
к сожалению ссылку на саму форму не смогу выслать, т.к. собираю сайт на локальном сервере.
То Вам сюда
И в обще что тут простынь сообщений и нет ни какой формы ? )))
Есть же такая функция которая так называется  calculationFormulaInRSForm ))) - А Вы что не знали ?
Вот Она !
Код
/**
 * Формула расчета в RSForm
 * @param $form - форма
 * @param carAge  возраст автомобиля
 * @param volume - объём двигателя
 * @param _test - если TRUE - то форма не отправляется это для тестов
 */
function calculationFormulaInRSForm($form, carAge, volume, _test) {
    var $ = jQuery;
    // пределы возроста
    var dataAge = [3, 5]

    // пределы для поиска и коэф
    var dataVolume = [
        // 1. Если машина до 3-х лет то у неё при объёме двигателя:
        {
            1000: 2,
            1500: 2.5,
            1800: 3,
        },
        // Если машина от 3 до 5 лет, то у неё при объёме двигателя:
        {
            1000: 1.5,
            1500: 1.8,
            1800: 2.1,
        },
        // 3. Если машина более 5 лет, то у неё при объёме двигателя:
        {
            1000: 3,
            1500: 3.5,
            1800: 4,
        },
    ]

    // пока пустые переменные
    var res, control = false, indexData = 2, $result;
    // переменная для хранения предыдущего значения
    var previousValue = 0
    var previousValueVolume = 0

    // перебераем пределы взростов
    $.each(dataAge, function (i, a) {

        res = between(carAge, previousValue, a);
        // если возраст в пределе
        // запоминаем индекс объекта в массиве dataVolume
        if (res) indexData = i;
        // Запоменаем предедущий возраст
        previousValue = a;
    })
    // в случае если возрвст не был в пределах от 0 до 3 и от 3 до 5
    // значит indexDataVolume останеться значение по умолчанию === 2 то есть из последнего



    // Перебираем объект с пределами из масива
    // i - индкс eg(1500)
    // a - значение eg(2.5)
    $.each(dataVolume[indexData], function (i, a) {
        // Кидаем в метод поиска промежутка
        res = between(volume, previousValueVolume, i);
        // если volume в промежутке
        if (res) {


            var utter = new window.SpeechSynthesisUtterance(volume * a);
            window.speechSynthesis.cancel();
            window.speechSynthesis.speak(utter);

            if (typeof _test !== 'undefined') {
                console.log(volume * a)
                console.log(a)
                console.log(volume)
                return;
            }
            // находим поле для вставки результата
            $result = $form.find('#result');
            // объём двигателя * коэфф и устанавливаем значение
            $result.val(volume * a);
            // отправляем форму на серв.
            $form.submit()
        }
        // если volume не в промежутке
        // Запоминаем это значение и прибавляем единицу
        previousValueVolume = i++;
    })
    // если результат не найден
    if (!control) {
        // что-то пошло не так
        alert('Something went wrong! :(')
    }

    /**
     * метод для поиска промежутка
     * в случае если x в промежутке - return true else false
     * @param x
     * @param min
     * @param max
     * @returns {boolean|boolean}
     */
    function between(x, min, max) {
        return x >= min && x <= max;
    }
}

 :laugh: Ну это конечно - я пошутил - Это я написал только что для Вас ! )))

Used :
Код

/**
 #button - кнопка с ID="button"
 #carAge - <input id="carage" /> - возраст автомобиля
 #volume - <input /> - объём двигателя

 #result - <input type="hidden" id="result" /> - то что отправит резултат на серв.
 */

// Вешаем обработчик на кнопку отправить форму
jQuery('body').on('click' , '#button' , function (event) {
    // обрываем действие отправить форму
    event.preventDefault()

    // находим форму для того что бы ее потом отправить (все же)... и не только !
    var $form = $(this).closest('form');

    // Получаем возраст автомобиля
    // Получаем значение объём двигателя
    // Поставил + для того что бы значение из input было числом
    var carAge = +$form.find('#carage').val();
    var volume = +$form.find('#volume').val();
    calculationFormulaInRSForm( $form , carAge , volume )
});
Вот  и все !  8)
А то сидят тут и рассуждают взяли и написал !
« Последнее редактирование: 18.04.2020, 20:23:23 от gartes »
*

gartes

  • Завсегдатай
  • 1330
  • 104 / 5
  • Е = mс²
UPD : Правильно так в коде тоже исправил
Код
jQuery('body').on('click' , '#button' , function (event) {

#button - кнопка с ID="button"

Да - Если мы вешаем на любую кнопку то просто button - то есть для каждой
Если нужно по ID === #button

*

sersergio

  • Новичок
  • 6
  • 0 / 0
Вот  и все !  8) А то сидят тут и рассуждают взяли и написал !
Спасибо за помощь. Буду разбираться. Если возникнут вопросы (а они возникнут )) ) - я напишу. По результатам также отпишусь.
*

gartes

  • Завсегдатай
  • 1330
  • 104 / 5
  • Е = mс²
Спасибо за помощь. Буду разбираться. Если возникнут вопросы (а они возникнут )) ) - я напишу. По результатам также отпишусь.

8)
*

sersergio

  • Новичок
  • 6
  • 0 / 0
8)

Добрый день.
У меня такой вопрос: моих знаний не достаточно и чтобы сделать, так как нужно, необходимо выучить видимо javascript, но не готов я сейчас это делать. Вы можете помочь в решении данного вопроса за вознаграждение и объяснить на этом примере суть шагов. Я в целом понимаю в очень общем плане, но к сожалению не знаю с какой стороны подступиться. Буду признателен за готовность. Как можно связаться и обсудить возможное взаимодействие, если это возможно
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

RSForm не отображается на сайте

Автор Helix33

Ответов: 6
Просмотров: 157
Последний ответ 17.05.2020, 10:46:01
от Helix33
RSForm + SSL (http://сайт/component/rsform?task=ajaxValidate)

Автор DamianTrash

Ответов: 0
Просмотров: 56
Последний ответ 28.04.2020, 10:38:12
от DamianTrash
RSForm! Pro - ограничение доступа к форме через ввод пароля

Автор ermek

Ответов: 2
Просмотров: 190
Последний ответ 12.04.2020, 09:32:36
от ermek
RSForm Pro 2.2.8: настройка фильтра на странице директории отправленных данных

Автор jobberlab

Ответов: 0
Просмотров: 227
Последний ответ 27.11.2019, 11:50:50
от jobberlab
Как снять выбор (check) с радио-кнопки (radio button) в RSForm?

Автор vasmed

Ответов: 2
Просмотров: 424
Последний ответ 11.10.2019, 12:12:15
от vasmed