Поддержка Проблемы и решения Хранение данных в wp_posts и wp_postmeta

Просмотр 15 ответов — с 106 по 120 (всего 145)
  • Автор Dmitry Kohan

    (@dmay1989)

    @yube , спасибо, но имеет ли смысл устанавливать плагин только из-за одной ссылки ? может быть есть другой «ручной» способ без привлечения плагина ?
    спасибо заранее за ответ

    Автор Dmitry Kohan

    (@dmay1989)

    @yube , спасибо, но имеет ли смысл использовать плагин только из-за одной ссылки ? может быть есть другой «ручной» способ без привлечения плагина ?
    заранее спасибо за ответ

    Модератор Юрий

    (@yube)

    Конечно, есть. Но имеет ли смысл разбираться с каким-то bootstrap_menu (если от него вообще что-то зависит), если существует уже готовый плагин? По крайней мере, есть ли смысл для меня? 😉

    Автор Dmitry Kohan

    (@dmay1989)

    понял, буду разбираться, ещё раз спасибо!

    Автор Dmitry Kohan

    (@dmay1989)

    @yube , снова прошу Вашего прощения, можно Ваш совет:
    столкнулся с такой ситуацией: пользователи из фронт-энда вводят записи через форму ввода (в форме 5 элементов input), последний input в форме ввода — это календарь — на основе выбранной даты календаря из базы данных выбирается индекс через ajax-запрос, и если пользователь прям «очень быстрый» — выбрал дату и мгновенно нажал Сохранить появляется ошибка:
    Warning: A non-numeric value encountered in /home/user2077509/www/iepa.efp.by/wp-content/themes/infrcost/forms/form_gas.php on line 35
    Я так понимаю ajax-запрос не успевает отработать ? верно ? как это можно устранить или обойти ? или только поместить данный input с календарем поближе к началу формы ?

    Модератор Юрий

    (@yube)

    1. Сделать submit изначально disabled.
    2. В момент начала ajax-запроса также выставлять disabled.
    3. По success запроса снимать disabled.
    Можно не только дизаблить, но и прятать. И показывать на его месте

    Автор Dmitry Kohan

    (@dmay1989)

    @yube , спасибо, а можете пояснить пункт 2 и 3 — я так понимаю это нужно делать через JS, а как связать с wp_ajax_ ? ps извините, если задал глупый вопрос, совсем запутался, голова уже совсем сложно варить) как отслеживать начало, ход ajax-запроса и его success?

    if( wp_doing_ajax() ){
    add_action('wp_ajax_get_index', 'ajax_build_index');
    }
    function ajax_build_index() {
        global $wpdb;
        $table_prefix = $wpdb->get_blog_prefix();
        $date_in_usage = $_POST['indexes'];
        $index_build = $wpdb -> get_var("SELECT index_value FROM {$table_prefix}ic_indexes WHERE date_operation = '$date_in_usage'");
        echo "$index_build";
        wp_die();
    }

    и JS

    heatDate.change(function(){
    		var heatDateValue = $(this).val();
    		jQuery.post(
    			myTheme.ajaxurl,
    			{
    				action: 'get_index',
    				indexes: heatDateValue
    			},
    			function (response) {
    				$heatHidden.val(response);
    				if (heatDateValue >= '2017-01' && heatDateValue <= '2020-01')
    					$heatIndex.text('i=' + response);
    						else 
    							$heatIndex.text(response);
    			});
    	});
    Модератор Юрий

    (@yube)

    а как связать с wp_ajax_ ?

    Никак. Это не нужно. Всё внутри js.

    как отслеживать начало, ход ajax-запроса и его success?

    Начало перед jQuery.post, конец внутри function (response) {}. Ход не нужен.

    выкл/вкл
    jQuery("input[type=submit]").attr("disabled", true);
    jQuery("input[type=submit]").removeAttr("disabled");

    Автор Dmitry Kohan

    (@dmay1989)

    @yube , а если ajax-запросов в форме последовательно выполняется несколько (2), то нужно проверять все это в каждом запросе, верно ? и ещё раз огромное спасибо

    Модератор Юрий

    (@yube)

    нужно проверять все это в каждом запросе, верно ?

    Верно.

    Но если форма заполняется в несколько обязательных итераций, то разблокировать можно только по окончании последней, то есть, когда все данные готовы.

    Еще можно не кнопку блокировать, а выставлять флаг и проверять его на on submit формы. Возможно, так даже правильнее, если форма может быть отправлена по Enter.

    Автор Dmitry Kohan

    (@dmay1989)

    @yube , спасибо огромное, реализовал, все работает, но при тестировании столкнулся с проблемой, когда быстро нажимаешь по кнопке отправки формы, то одна и та же запись может сохраниться 2 раза. Получается нужно также делать submit disabled и после её нажатия, когда данные формы отправляются ? Не подскажете как это правильно реализовать?

    heatTypeBox.change(function(){
            var heatAreaType = $(this).val();
            jQuery("#heatSend").attr("disabled", true);//перед ajax-запросом кнопка Сохранить неактивна
    		jQuery.post(
                myTheme.ajaxurl,
                {
                    action: 'get_city',
                    city: heatAreaType
                },
                function (response) {
                    $heatNameBox.html(response);
                    jQuery("#heatSend").removeAttr("disabled");//по завершении ajax-запроса кнопка Сохранить активна
                });    
        });

    Нужно как-то проверять на on submit формы и блокировать кнопку?

    Модератор Юрий

    (@yube)

    Нужно как-то проверять на on submit формы и блокировать кнопку?

    Да. Как-то так

    jQuery('form').on('submit', function () {
       jQuery('input[type=submit]').attr("disabled", true);
    });
    
    Автор Dmitry Kohan

    (@dmay1989)

    @yube , спасибо, сделал так — кнопка блокируется, но данные введенные пользователем в форму не сохраняются. Код блокировки

    jQuery("#heat_form").on("submit", function () {
       jQuery("#heatSend").attr("disabled", true);
    });

    я вставил в custom.js, который подключаю через wp_enqueue_script в functions.php. Данные введенные пользователем в форму обрабатываю так:

    if (isset($_POST['heat_send'])) {
        include( get_stylesheet_directory()  . '/forms/form_heat.php' );
    }

    и при наличии выше обозначенного кода блокировки в custom.js файл form_heat.php вовсе не обрабатывается. Подскажите, пожалуйста, что я сделал не так ?

    Автор Dmitry Kohan

    (@dmay1989)

    @yube , попробовал уже и таким образом:

    <?php if (isset($_POST['heat_send'])) {
        include( get_stylesheet_directory()  . '/forms/form_heat.php' );
    } ?>
    <form class="form-horizontal" action="" method="post" id="heat_form" onSubmit="formDisable(this)">
    ...

    а в custom.js разместил функцию formDisable :
    `function formDisable(form) {
    var btn = document.getElementById(‘heatSend’);//кнопка
    btn.disabled = true;
    return true;
    }`
    В результате кнопка неактивна в процессе отправки данных, а форма не отправляется и наверное form_heat.php не отрабатывает. Не пойму почему? Помогите, пожалуйста

    Модератор Юрий

    (@yube)

    @dmay1989, Вы действительно считаете, что я могу умозрительно собрать из обрывков кода страницу с формой и скриптами и выполнить трассировку событий? За комплемент спасибо, но Вы сильно переоцениваете мои способности. Я и в браузере далеко не всего могу в режиме read only поставить диагноз, а уж мысленно — и подавно. Придется Вам самостоятельно солить по вкусу и варить до готовности.

Просмотр 15 ответов — с 106 по 120 (всего 145)
  • Тема «Хранение данных в wp_posts и wp_postmeta» закрыта для новых ответов.