• Как сформировать общий polygon имея несколько соседних?

    Enokin
    @Enokin
    Full-stack разработчик
    На счет php не сталкивался с такой проблемой, но на js можно сделать с помощью библиотеки turfjs

    let turf = require('@turf/turf');
    
    let polygon1 = turf.polygon([[[0,0], [0,1], [1,1], [1,0], [0,0]]]);
    let polygon2 = turf.polygon([[[0.5,0.5], [0.5,1.5], [1.5,1.5], [1.5,0.5], [0.5,0.5]]]);
    // С помощью booleanIntersects можно понять что есть пересечения полигонов
    if (turf.booleanIntersects(polygon1, polygon2)) {
        let merged = turf.union(polygon1, polygon2);
        console.log(merged)
    } else {
        console.log('Полигоны не пересекаются');
    }
    Ответ написан
  • Как перенести строку в ссылке, в php?

    Enokin
    @Enokin
    Full-stack разработчик
    $text = $_POST['name'];
    $work = $_POST['work'];
    $result = 'Пришло сообщение!! ' . '<br>От: ' . $text . '<br>Что нужно: ' . $work;
    
    // Убедитесь, что все символы в $result корректно закодированы для использования в URL
    $result_encoded = urlencode($result);
    
    $sendToTelegram = fopen("http://api.telegram.org/bot##################/sendMessage?chat_id=##########&parse_mode=html&text={$result_encoded}", "r");
    Ответ написан
  • Как проверить два объекта по шаблону?

    Enokin
    @Enokin
    Full-stack разработчик
    const template = {
        d: "какие то слова к которым не нужно привязываться, главное что бы был ключ d",
        m: "Числовое целое поле"
    };
    
    function validateAgainstTemplate(obj, template) {
        let keys = Object.keys(obj);
        for (let key of keys) {
            if (!template.hasOwnProperty(key)) return false;  // если в шаблоне нет такого ключа
            if (key === "m" && obj[key] !== 1) return false;  // если значение ключа m не равно 1
        }
        return true;  // если все проверки пройдены
    }
    
    let testObj1 = {
        d: "слово",
        m: 1
    };
    
    let testObj2 = {
        d: "слово",
        m: 23,
        s: "слово 2"
    };
    
    console.log(validateAgainstTemplate(testObj1, template));  // true
    console.log(validateAgainstTemplate(testObj2, template));  // false
    Ответ написан
    1 комментарий
  • Почему laravel может не видеть csrf-токен?

    Enokin
    @Enokin
    Full-stack разработчик
    А у вас точно доступен тег через
    <meta name="csrf-token" content="{{ csrf_token() }}">
    через $('meta[name="csrf-token"]').attr('content')?
    Ответ написан
  • Как выполнить запрос н-раз?

    Enokin
    @Enokin
    Full-stack разработчик
    Через setTimeout и нужно делать

    let counter = 0;
    
    const doRequest = () => {
      // Увеличиваем счетчик
      counter++;
    
      // Выполняем запрос
      fetch('https://your-request-url.ru')
        .then(response => response.json())
        .then(data => {
          console.log(data);
    
          // Если счетчик меньше 5, устанавливаем таймер для следующего запроса
          if (counter < 5) {
            setTimeout(doRequest, 5000); // Устанавливаем задержку в 5 секунд
          }
        })
        .catch(error => console.error(error));
    };
    
    // Начинаем выполнение
    doRequest();
    Ответ написан
    Комментировать
  • Как определить, что дата прошла?

    Enokin
    @Enokin
    Full-stack разработчик
    let strDate = "May 2021"; 
    let dateToCheck = new Date(strDate);
    let currentDate = new Date();
    
    // Обнуляем время, чтобы сравнение было только по дате (день, месяц, год)
    dateToCheck.setHours(0,0,0,0);
    currentDate.setHours(0,0,0,0);
    
    if(dateToCheck.getTime() < currentDate.getTime()){
        console.log("Дата уже прошла");
    } else {
        console.log("Дата еще не наступила");
    }
    Ответ написан
    3 комментария
  • Как с angular (typescript) заполнить шаблон документа Word?

    Enokin
    @Enokin
    Full-stack разработчик
    Посмотри на такие библиотеки как mammoth.js или docxtemplater.
    Ответ написан
    Комментировать
  • Как выполнить авто установку временного дополнения при запуске Firefox?

    Enokin
    @Enokin
    Full-stack разработчик
    Firefox поддерживает использование политик предприятий для управления различными аспектами браузера, включая установку дополнений. Вы можете создать JSON-файл с политикой, который указывает Firefox устанавливать определенные дополнения при запуске
    {
      "policies": {
        "Extensions": {
          "Install": ["https://addons.mozilla.org/firefox/downloads/file/3579254/ublock_origin-1.37.2-an+fx.xpi"],
          "Locked":  ["uBlock0@raymondhill.net"]
        }
      }
    }


    Этот JSON-файл указывает на установку uBlock Origin из AMO и блокирует его удаление. Файл политик должен быть сохранен под именем policies.json в каталоге distribution, который находится в том же каталоге, что и исполняемый файл браузера.
    Ответ написан
    5 комментариев
  • Как реализовать правильную конвертация аудиофайлов fluent-ffmpeg?

    Enokin
    @Enokin
    Full-stack разработчик
    Нужно будет самостоятельно указать необходимый кодек, исходя из формата, в который вы хотите конвертировать аудиофайл

    const codecs = {
        'ogg': 'libopus',
        'mp3': 'libmp3lame',
        'flac': 'flac',
        'aac': 'aac',
        // другие форматы и кодеки...
    };
    
    async function convertTo(inputPath, outputPath) {
        return await new Promise((resolve, reject) => {
            const format = outputPath.substring(outputPath.lastIndexOf('.') + 1);
            const codec = codecs[format];
            
            if (!codec) {
                reject(new Error(`Кодек для формата "${format}" не найден`));
                return;
            }
    
            ffmpeg(inputPath)
                .audioCodec(codec)
                .toFormat(format)
                .on('error', (err) => {
                    reject(err);
                })
                .on('end', () => {
                    console.log('Успешная конвертация');
                    resolve();
                })
                .save(outputPath)
        })
    }
    Ответ написан
    Комментировать
  • Как сделать вывод своих сообщений об ошибке в lumen 10?

    Enokin
    @Enokin
    Full-stack разработчик
    В файле обработчика исключений (App\Exceptions\Handler.php) вы можете определить, как эти исключения будут отображаться.

    // Создание собственного класса исключения
    class MyException extends Exception {}
    
    // Бросаем исключение
    throw new MyException('Сообщение об ошибке');
    
    // Обработка исключения в Handler.php
    public function render($request, Throwable $e)
    {
        if ($e instanceof MyException) {
            return response()->json(['error' => $e->getMessage()], 400);
        }
    
        return parent::render($request, $e);
    }
    Ответ написан
  • Как заполнить таблицу случайными значениями времени?

    Enokin
    @Enokin
    Full-stack разработчик
    INSERT INTO goals (ID_матча, ID_стадиона, ID_команды, ID_игрока, Время)
    VALUES 
    (9, 1, 1, 1, DATEADD(SECOND, RAND()*(86400), '00:00:00')),
    (10, 2, 2, 2, DATEADD(SECOND, RAND()*(86400), '00:00:00')),
    (11, 3, 3, 3, DATEADD(SECOND, RAND()*(86400), '00:00:00')),
    (12, 4, 4, 4, DATEADD(SECOND, RAND()*(86400), '00:00:00')),
    (13, 5, 5, 5, DATEADD(SECOND, RAND()*(86400), '00:00:00')),
    (14, 6, 6, 6, DATEADD(SECOND, RAND()*(86400), '00:00:00')),
    (15, 7, 7, 7, DATEADD(SECOND, RAND()*(86400), '00:00:00'))

    В этом запросе RAND() * 86400 генерирует случайное число от 0 до 86400 (количество секунд в сутках), а DATEADD () преобразует это число в формат времени.
    Ответ написан
    5 комментариев
  • Как лучше оптимизировать вывод данных?

    Enokin
    @Enokin
    Full-stack разработчик
    Вот пример на php + mysql. Если навесить индексы на поля будет весьма быстро работать
    $limit = 10; // количество записей на одну страницу
    $page = $_GET['page']; // получаем номер страницы из URL
    
    $offset = ($page - 1) * $limit;
    
    // получаем параметры выбора пользователя
    $param1 = $_GET['param1'];
    $param2 = $_GET['param2'];
    $param3 = $_GET['param3'];
    
    // подготавливаем и выполняем запрос
    $stmt = $pdo->prepare('SELECT * FROM my_table WHERE column1 = :param1 AND column2 = :param2 AND column3 = :param3 LIMIT :limit OFFSET :offset');
    $stmt->bindValue(':param1', $param1);
    $stmt->bindValue(':param2', $param2);
    $stmt->bindValue(':param3', $param3);
    $stmt->bindValue(':limit', $limit, PDO::PARAM_INT);
    $stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
    $stmt->execute();
    
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    Ответ написан
  • Как написать функцию с колбеком и через секунду выводить в консоль число?

    Enokin
    @Enokin
    Full-stack разработчик
    Если правильно понял, то можно так

    let timer;
    function func(n, callback) {
        if (n <= 10) {
            console.log(n);
            if (callback) {
                timer = setTimeout(() => {
                    callback(n + 1, callback);
                }, 1000);
            }
        } else {
            clearTimeout(timer);
        }
    }
    
    func(1, func);
    Ответ написан
    Комментировать
  • Laravel+vue как сделать выпадающий список?

    Enokin
    @Enokin
    Full-stack разработчик
    1. Создание API-эндпоинта в Laravel.
    public function index() {
        $items = Item::all();
        return response()->json($items);
    }
    
    // api.php
    
    Route::get('/items', 'ItemController@index');

    2. Создание компонента Vue.js. В коде используется axios для отправки HTTP-запросов npm install axios
    // ItemSelect.vue
    
    <template>
        <select v-model="selectedItem">
            <option v-for="item in items" :key="item.id" :value="item.id">
                {{ item.name }}
            </option>
        </select>
    </template>
    
    <script>
    export default {
        data() {
            return {
                items: [],
                selectedItem: null
            }
        },
        mounted() {
            this.fetchItems();
        },
        methods: {
            fetchItems() {
                axios.get('/api/items')
                    .then(response => {
                        this.items = response.data;
                    })
                    .catch(error => {
                        console.error(error);
                    });
            }
        }
    }
    </script>
    Ответ написан
    1 комментарий
  • Как оптимально получить материнские элементы из базы?

    Enokin
    @Enokin
    Full-stack разработчик
    На php можно так попробовать, но тут не один запрос

    $query = "SELECT id, pid, name FROM your_table";
    $result = $mysqli->query($query);
    
    $items = [];
    while($row = $result->fetch_assoc()){
        $items[$row['id']] = ['pid' => $row['pid'], 'name' => $row['name']];
    }
    
    function buildTree(array $elements, $parentId = 0) {
        $branch = array();
    
        foreach ($elements as $element) {
            if ($element['pid'] == $parentId) {
                $children = buildTree($elements, $element['id']);
                if ($children) {
                    $element['children'] = $children;
                }
                $branch[] = $element;
            }
        }
    
        return $branch;
    }
    
    $tree = buildTree($items);
    Ответ написан
  • Не удается связать две таблицы через foreign. Как исправить ошибку 1215?

    Enokin
    @Enokin
    Full-stack разработчик
    $table->unsignedInteger('category_id')->nullable()->index();

    Сделай так. Он тебе пишет что не может сделать из-за того что в category_id нельзя постить null значения
    Ответ написан
    Комментировать
  • Можно ли в input type number без js визуально разбить число на разряды?

    Enokin
    @Enokin
    Full-stack разработчик
    Нет, невозможно визуально разделить число при вводе типа "number" без JavaScript. Ввод типа "number" допускает только числовой ввод, и любое форматирование или визуальное разделение цифр должно выполняться с помощью JavaScript.
    Ответ написан
    Комментировать
  • Как использовать require() в Vite?

    Enokin
    @Enokin
    Full-stack разработчик
    В Vite, метод require() по умолчанию недоступен. Вместо этого Vite использует импорт ES6 для обработки зависимостей. Чтобы импортировать модуль fs, вы можете использовать следующий код:
    import fs from 'fs';
    Ответ написан
    Комментировать
  • Помогать в regex можете?

    Enokin
    @Enokin
    Full-stack разработчик
    $string = '[480p]\/storage\/458f706a\/hls\/stream_2.m3u8,[720p]\/storage\/458f706a\/hls\/stream_1.m3u8,[1080p]\/storage\/458f706a\/hls\/stream_0.m3u8';
    preg_match_all('/([^,]+)/', $string, $matches);
    
    print_r($matches[0]);

    Ответ будет таким
    Array
    (
        [0] => [480p]\/storage\/458f706a\/hls\/stream_2.m3u8
        [1] => [720p]\/storage\/458f706a\/hls\/stream_1.m3u8
        [2] => [1080p]\/storage\/458f706a\/hls\/stream_0.m3u8
    )
    Ответ написан
    Комментировать
  • Как избежать замены ID в JOIN?

    Enokin
    @Enokin
    Full-stack разработчик
    Если я правильно понял вопрос. Можно так попробовать
    $groups = DB::table('groups')
    ->join('balances', function ($join) {
                    $join->on('balance.group_id', '=', 'groups.id ')
    ->where('balances.balance', '!=', 0);
                })
    ->distinct()
    ->get();
    Ответ написан
    Комментировать