• Как выполнить выражение PHP?

    @BatteryLow
    Если нужны сложные вариации выражений, то гуглите в сторону лексических анализаторов. Если просто арифметика, то эвал как уже советовали раньше вполне сойдет, главное НЕ ВЗДУМАЙТЕ в него пихать код из внешних источников, либо проводите хотя бы проверку на допустимые символы регуляркой.
    Ответ написан
    Комментировать
  • Как выполнить скрипт через jquery?

    @BatteryLow
    Реализуется это с помощью метода $.ajax() в инете обучающих статей море по нему, большинство знакомство с ним начинали со статей Антона Шевчука они разьясняют все на пальцах, но возможно уже устаревшие, так что лучше естественно смотреть оф дкументацию .

    Вот самый элементарный пример отправки запроса:
    $.ajax({
      url: '/path/to/php/script/',
      type: "POST",
        data:  ({ 'param_1':  1, 'param_2': 0 } ),
        beforeSend: function(){
          $('#button').text('Работаю').addClass('disabled');
        },
        success: function(response){
          $('#button').text('Работа сделана').removeClass('disabled');
        },
        error: function(){
          $('#button').text('Ошибка. Попробуйте еще раз').removeClass('disabled');
        }
       }
    );


    Если вам нужна именно загрузка файлов, то велосипедов луше не городить, а воспользоваться любым подходящим плагином - www.unheap.com/section/inputs-forms/uploading
    Ответ написан
    4 комментария
  • Как составить регулярку на PHP для замены синтаксиса логики псевдокода в синтаксис TWIG?

    @BatteryLow Автор вопроса
    В общем если кому пригодится поступил в итоге так:

    Рекурсивно сформировал массив с содержимым скобок в строке функцией:
    function recursiveSplit($string, $layer, &$result) {
            preg_match_all("/ЕСЛИ\((([^()]*|(?R))*)\)/",$string,$matches);
    
            if (count($matches) > 1) {
                for ($i = 0; $i < count($matches[1]); $i++) {
                    if (is_string($matches[1][$i])) {
                        if (strlen($matches[1][$i]) > 0) {
                            $result[$layer][]=$matches[1][$i];
                            $this->recursiveSplit($matches[1][$i], $layer + 1, $result);
                        }
                    }
                }
            }
        }

    Дальше опять же рекурсивно но, начиная с нижнего уровня(для реализации возможности вложенных ветвлений) прошелся по этому массиву разбивая строки с содержимым скобок с помощью explode (если не получалось, то значит это просто математическое выражение оно обрамлялось в {{ }} для твига) на логическую часть, ветки прохождения проверки и не прохождения соответственно, из этого формировал строку с синтаксисом твига, и заменял на неё псевдокод в исходной строке.

    Попахивает говнокодом конечно, но ничего более внятного мой мозг выдать не смог.
    Ответ написан
    Комментировать