Задать вопрос
  • Ошибка обновления Linux CentOS 7?

    PeterLS
    @PeterLS
    Руководитель веб-студии
    Поменяйте домен:
    sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo
    sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/*.repo
    sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/*.repo
    
    sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
    sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
    
    yum clean all
    Ответ написан
    Комментировать
  • Laravel echo socket.io клиент, как реализуется авторизация?

    PeterLS
    @PeterLS
    Руководитель веб-студии
    В моём случае проблема оказалась из-за несовместимости версий.
    Понял это после того, как добавил отображение ошибки подключения:
    this.echo.connector.socket.on('connect_error', (error) => {
      console.error('Ошибка подключения к Socket.IO серверу', error);
    });
    Ответ написан
    Комментировать
  • Как разбить одномерный массив на двумерный из строки?

    PeterLS
    @PeterLS
    Руководитель веб-студии
    Ваш регулярное выражение \(\,\s*0\s*\,\s*\) использует круглые скобки, которых нет в исходной строке, это приводит к тому, что замены не происходит.
    Ваша исходная строка представляет собой массив в квадратных скобках [], а не в круглых (), и вместо пробела с запятой, ,, Вам необходимо заменить , 0, на ], [.
    Также, чтобы удалить последний , 0, вы можете сначала выполнить отдельную замену для этого случая.

    Вот исправленный код:
    const str = "[3, 2, 1, 0, 5, 6, 4, 0, 1, 5, 3, 0, 2, 2, 2, 0]";
    
    // Заменяем все вхождения ', 0,' на '], [' 
    let replacedStr = str.replace(/, 0,/g, "], [");
    
    // Удаляем последнее вхождение ', 0' (в конце строки перед закрытием скобки)
    replacedStr = replacedStr.replace(/, 0\]/, "]");
    
    // Для безопасной работы с JSON.parse обрамляем весь массив в дополнительные скобки
    replacedStr = "[" + replacedStr + "]";
    
    console.log(replacedStr); // Выводит строку в нужном формате
    
    // Преобразуем строку в JSON
    const jsonArray = JSON.parse(replacedStr);
    
    console.log(jsonArray); // Выводит массив массивов

    Выполнив этот код, вы получите желаемый результат в виде массива массивов:
    [[3, 2, 1], [5, 6, 4], [1, 5, 3], [2, 2, 2]]
    Ответ написан
  • Почему может не передаваться сумма в раздробленный заказ?

    PeterLS
    @PeterLS
    Руководитель веб-студии
    Судя по коду, вы используете правильный подход для создания отдельных заказов для каждой позиции. Однако, есть несколько моментов, на которые стоит обратить внимание:

    1. Проверьте, что метод $basketItem->getPrice() действительно возвращает корректную цену товара, и она больше нуля. Если цена возвращается нулевая, возможно, нужно использовать другой метод или смотреть дополнительные параметры товара.
    2. Убедитесь, что товары в корзине имеют установленную цену и количество. Вы можете проверить эти параметры, прежде чем создавать новые позиции.
    3. Проверьте, не влияют ли скидки или налоги на итоговую цену товара. Возможно, при создании нового заказа данные параметры не учитываются, и поэтому сумма получается нулевая.
    4. Убедитесь, что вы передаете правильный ID товара в метод createItem. Ошибка здесь может привести к некорректному формированию цены.
    5. В вашем коде нет учета налогов и скидок. Это может быть причиной того, что итоговая сумма получается нулевой. Убедитесь в том, что вы корректно копируете все необходимые параметры из оригинальной корзины в новую, включая налоги, скидки и т.д.
    6. После создания нового заказа вам также может потребоваться установить его свойства, такие как адрес доставки, способ оплаты и т.д., аналогичные тем, что были в оригинальном заказе.

    Если проблема сохраняется, рекомендую вам подробнее проанализировать объект $result, который возвращается после сохранения заказа, чтобы увидеть, не идут ли там какие-либо ошибки, которые могут указывать на причину проблемы.
    Ответ написан
  • Как получить константы в php из другого файла в классе?

    PeterLS
    @PeterLS
    Руководитель веб-студии
    Первый файл ru.language.php:
    define('CONST_1', 'value 1');
    define('CONST_2', 'value 2');


    Второй файл:
    require('ru.language.php');
    echo CONST_1;


    Define: https://www.php.net/manual/ru/function.define.php
    Require: https://www.php.net/manual/ru/function.require.php
    Ответ написан
  • Ozon API как получить ценник товара c Озон картой?

    PeterLS
    @PeterLS
    Руководитель веб-студии
    Официально (по API) получить цену по карте ("зелёный ценник") нельзя. Единственный вариант – это парсинг. Но парсить Озон не так-то просто, там тоже не дураки сидят. Но способы есть, обращайтесь!
    Ответ написан
    Комментировать
  • Как достать из массива json массив?

    PeterLS
    @PeterLS
    Руководитель веб-студии
    Пробуйте методом тыка с дампами.
    try {
      $item = json_decode('your json');
    } catch (\Exception $e) {
      dd($e);
    }
    dd($item);
    dd($item->associatedModel);
    dd($item->associatedModel->toArray()); // if collection


    Ну а тут по другому никак))
    Ответ написан
    Комментировать
  • Как разнести админ панель и основной сайт по разным проектам в laravel?

    PeterLS
    @PeterLS
    Руководитель веб-студии
    Я думаю что при решении таких задач проще всего расписать все минусы и плюсы и принять решение:
    + распределение нагрузки
    + в каком-то смысле выше уровень безопасности, но это спорный вопрос
    + независимая (в каком-то смысле) разработка

    - в 2 раза больше кода (библиотеки, сервисы, политики, модели и многое другое дублируется)
    - сложнее техническая поддержка
    - увеличивается шанс повреждения БД
    - независимая разработка

    Лично моё мнение – разносить на 2 раздельных проекта нецелесообразно. На отдельный домен (поддомен) – возможно. Делается это для того чтобы распределить нагрузку на PHP. Делается это с помощью настройки префикса у маршрутов. Но делать это нужно, опять таки, если действительно требуется. Тут сложно судить не зная что у вас за ресурс и сколько часов разработки в него заложено.
    Ответ написан
  • Как ограничить доступ пользователя к записи?

    PeterLS
    @PeterLS
    Руководитель веб-студии
    1) В модели Record создай метод-отношение recordsForShowing.
    2) В контроллере RecordController в методе index() выводи все записи.
    3) В контроллере RecordController в методе show() добавь проверку:
    public function show(App\Models\Record $record) {
        // если пользователь не авторизован или не существует в таблице user_records то выдаем ошибку "недостаточно прав"
        abort_if(!auth('web')->check() || $record->recordsForShowing()->where('user_id', auth('web')->id())->count() < 1, 403);
            
        // дальше обычным образом показываешь запись
        return view('template_name', compact('record'));
    }


    Тогда список записей смогут увидеть все пользователи, но вот посмотреть полную запись только выбранные пользователи.
    Ответ написан
    4 комментария
  • Можно ли сделать регистрацию на сайте только по профилю в Инстаграм?

    PeterLS
    @PeterLS
    Руководитель веб-студии
    Подводный камень - прохождение верификации в Фэйсбук. Нужно будет подтвердить домен, бренд, название компании. Прикрепить документы. В остальном все ровно.
    Ответ написан
    3 комментария
  • При переносе Laravel проекта что-то пошло не так, как исправить?

    PeterLS
    @PeterLS
    Руководитель веб-студии
    Ответ написан
    Комментировать
  • Как сделать выход из аккаунта с указанного устройства laravel?

    PeterLS
    @PeterLS
    Руководитель веб-студии
    Один из вариантов, с помощью Middleware проверять наличие строки в БД (можно не при каждом обновлении страницы, а каждую минуту, например):
    select 1 from sessions where id = 'current_session_id' and user_id = 'current_user_id';
    Если нет строки (ранее удалена сессия из админки) сбросить авторизацию.
    Ответ написан
    Комментировать
  • Как обновить домен laravel в каком файле?

    PeterLS
    @PeterLS
    Руководитель веб-студии
    .env в корне сайта (там где vendor, tests, app)
    Ответ написан
    Комментировать
  • Создание через админ панель дочерних страниц laravel 8?

    PeterLS
    @PeterLS
    Руководитель веб-студии
    Во-первых, добавьте в таблицу pages столбец parent_id (nullable, default null, связь на pages->id).
    Во-вторых, в модели Page настройте связи на pages (HasMany).

    По поводу роутов одно из решений это парсинг URL-адреса.

    // routes/web.php в самом конце
    Route::get('{slug}', 'Controller@parse')->where('slug', '([0-9A-Za-z-/]+)');
    
    // прикладываю один из своих рабочих вариантов. тут парсятся не только страницы, но и категории (с мультивложенностью), продукты
    // app/http/controllers/controller.php
    public function parse(Request $request) {
            $urlArray = explode('/', $request->path());
    
            if (count($urlArray) === 1) {
                $page = Page::where('slug', $urlArray[0])->first();
                if (!empty($page)) {
                    return (new PageController)->show($page);
                }
    
                $category = Category::where('slug', $urlArray[0])->where('parent_id', 1)->first();
                if (!empty($category)) {
                    return (new CategoryController)->show($request, (new ProductFilters($request)), $urlArray[0]);
                }
            } else {
                $parentCategory = NULL;
                $i = 1;
                foreach ($urlArray as $urlArrayItem) {
                    $lastStep = $i === count($urlArray);
    
                    $category = Category::where('slug', $urlArrayItem);
                    if (is_null($parentCategory)) {
                        $category->where('parent_id', 1);
                    } else {
                        $category->where('parent_id', $parentCategory->id);
                    }
    
                    if (empty($category->first())) {
                        if ($lastStep) {
                            $product = $parentCategory->products()->where('slug', $urlArrayItem)->active()->first();
                            if (!empty($product)) {
                                return (new ProductController)->show($urlArrayItem);
                            }
                        }
    
                        abort(404);
                    } else {
                        if ($lastStep) {
                            return (new CategoryController)->show($request, (new ProductFilters($request)), $urlArrayItem);
                        }
    
                        $parentCategory = $category->first();
                    }
    
                    $i++;
                }
            }
    
            abort(404);
    }
    Ответ написан
  • Как сделать систему уровней?

    PeterLS
    @PeterLS
    Руководитель веб-студии
    Храни количество заработанных очков (exp).
    Соответственно, при выборе данных из БД всегда сможешь быстро получить уровень (тут уже пиши формулу какую хочешь).

    Например:
    $exp = 487; // количество очков опыта у отдельного пользователя
    $step = 50; // шаг = 50 очков опыта
    $level = floor($exp / $step); // быстро посчитаешь уровень.


    Если уровень нужен часто, то можешь помимо очков опыта хранить и посчитанное значение (пересчитывай его процедурой в БД при обновлении значения очков)
    Ответ написан
    Комментировать
  • Что лучше: отдельные запросы SELECT или их группировка?

    PeterLS
    @PeterLS
    Руководитель веб-студии
    Лучше группировать, так как на на соединение с mysql сервером тоже требуется время.
    Более того, если значения result не большие и ваш mysql сервер поддерживает работу с JSON, то лучше сравнивать сразу в запросе (работа с JSON).
    Ответ написан
    Комментировать
  • Интеграция Сбербанк Бизнес Онлайн. Возможно ли в принципе?

    PeterLS
    @PeterLS
    Руководитель веб-студии
    Комментировать
  • Как правильно сделать разветвление в форме отправки?

    PeterLS
    @PeterLS
    Руководитель веб-студии
    А почему не работает? Вы как валидируете форму? На стороне PHP? Тогда посмотрите чтобы у input-ов не было атрибута require (проверять заполненность будете уже на стороне сервера).
    Но лучше проверять валидность на стороне клиента. Тогда с помощью JS будете проверять определенные поля на заполненность, в зависимости от выбранного варианта, шага и тд. Но это не исключает проверки на стороне сервера.
    Посмотреть бы код.
    Ответ написан
    Комментировать
  • Как реализовать парсинг бухгалтерского баланса и отчета о финансовых результатах, если они в виде фотографии?

    PeterLS
    @PeterLS
    Руководитель веб-студии
    Есть сайты, в которых можно за определенную плату распознавать изображения. У некоторых есть подобие API.
    К примеру, сайты antigate.com, captchabot.com, anti-captcha.net, wisetrend.com. (Последние 2 ссылки, там кажется можно протестировать бесплатно)
    Можно еще использовать GOCR jocr.sourceforge.net
    И вызвать ее из PHP:
    $output = shell_exec('/usr/local/bin/gocr -i ' . escapeshellarg($image_file));

    А дальше - чисто вопрос программистских навыков. Все это дело проверить регулярными выражениями, разбить в определенную структуру и записать в БД.
    Ответ написан
    Комментировать
  • Multi WP нужен плагин для быстрого копирования записи по сайтам сети / поддоменам?

    PeterLS
    @PeterLS
    Руководитель веб-студии
    Я бы на один из сайтов написал модуль, который заносил бы информацию напрямую в БД других сайтов.
    Далее добавляешь на один сайт, а информация добавляется не только на него, но и на остальные.
    Ответ написан