• Где лучше качество кода?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    Макс , потому что тернарник вместо переменной затрудняет чтение.
    А так мы в явном виде выполняем тернарник, сохраняем результат этого выполнения в переменную с нормальным названием и потом используем эту переменную.
  • Как вывести число из строки, если в строке есть знак ">" PHP?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    Без регулярок:
    if (strpos($str_test, '>') !== false) {
        print_r(substr($str_test, strpos($str_test, '>')+1));
    }
  • Как разделить данные в функции array_column?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    BD_ l3ftoverZ!,
    Во-первых, чем лучше? Использовать или нет альтернативный синтаксис - это вкусовщина. Я предпочитаю этого не делать.
    Во-вторых, у вас в последней строке ошибка.
  • Редирект на страницу запроса?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    pavelsa, что-что вы получаете? Можете скинуть пример ответа?
    Антон Шаманов, что за чушь вы несете?
  • Редирект на страницу запроса?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    pavelsa, вы можете сделать автоматическую отправку новой формы с помощью JS. Или вы можете после нажатия пользователем кнопки "Отправить", отправлять AJAX-запрос на сервер с данными формы и получать в ответе новый id и targets, после чего подменять их и отправлять форму стандартным способом.
    Грубо, примерно так:

    var isFormPrepared = false;
    
    $('form').on('sumbit', function(ev) { 
        var form = $(this);
       
        if (!isFormPrepared) {
            ev.preventDefault();
            $.post({
                ...
            }).done(function(result) {
                form.find('[name="label"]').val(result.label);
                form.find('[name="targets"]').val(result.targets);
                isFormPrepared = true;
                form.submit();
            })        
        }
    })
  • Редирект на страницу запроса?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    pavelsa, никак, вы не можете передавать тело при перенаправлении. Вы хотите разместить форму для оплаты? Тогда вам не нужен php, размещайте просто HTML-форму:
    <form method="POST" action="https://money.yandex.ru/quickpay/confirm.xml">
        <input type="hidden" name="receiver" value="41001xxxxxxxxxxxx">
        <input type="hidden" name="formcomment" value="Проект «Железный человек»: реактор холодного ядерного синтеза">
        <input type="hidden" name="short-dest" value="Проект «Железный человек»: реактор холодного ядерного синтеза">
        <input type="hidden" name="label" value="$order_id">
        <input type="hidden" name="quickpay-form" value="donate">
        <input type="hidden" name="targets" value="транзакция {order_id}">
        <input type="hidden" name="sum" value="4568.25" data-type="number">
        <input type="hidden" name="comment" value="Хотелось бы дистанционного управления.">
        <input type="hidden" name="need-fio" value="true">
        <input type="hidden" name="need-email" value="true"> 
        <input type="hidden" name="need-phone" value="false">
        <input type="hidden" name="need-address" value="false">
        <label><input type="radio" name="paymentType" value="PC">Яндекс.Деньгами</label>
        <label><input type="radio" name="paymentType" value="AC">Банковской картой</label>
        <input type="submit" value="Перевести">
    </form>

    ... или делайте аналогичные действия с помощью JS.
  • Как группировать материалы с учетом ч/з?

    Immortal_pony
    @Immortal_pony
    Делаешь orderBy + where за последние двадцять дней. То, что ты бы делал и без твоей говно-групировки, только быстрее и проще.

    ... и мы получаем 15 элементов после группировки на клиенте вместо 20, потому что 5 дней не было никаких событий. Проблема в том, что клиент не знает количество элементов после группировки пока не сгруппирует.

    Что за бред? Человек делает АПИ, а не монолит с рендерингом на сервере. У него приложение - SPA, которое само по себе АПРИОРИ JS. И momentjs, весом в 22кб gzip, в сравнении с всем фронтовым приложением не весит нихрена.

    Какая разница, SPA это или нет? Из таких вот моментов и раздувается приложение на ровном месте.
    И перенос подобной логики на сервер поможет с этим справиться.

    Еще вопрос: что если тебе нужно в одном запросе отправить две даты: одна от юзера, а вторая - с какого-нить гуглосервиса в UTC. Будешь делать на каждую дату по параметру? Или конвертить гуглодату по оффсету в юзерскую дату, а потом на беке снова назад? Или второй параметр ignore?

    Если предполгается, что даты могут приходить в разных таймзонах, то да, необходимо дать возможность указания таймзоны для каждой даты. Впрочем, вы углубляетеся в дебри сослагательного наклонения. Тут нам уже необходим конкретный пример с конкретной проблемой. Опишите предполагаемую архитектуру приложения и какой функционал необходимо добавить, а я могу подготовить вам решения и уточнить их плюсы и минусы если реализация будет вынесена на серверную сторону.

    future proofing - не, не слышал

    Слышал про преждевременную оптимизацию. Очень вредная штука.

    Конечно не нужен. Кому нужны индексы? Кому нужна гарантия целостности данных?

    На мелких проектах - никому. Пустая трата денег заказчика.
  • Сортировка на уровне запроса либо sortBy на коллекции laravel?

    Immortal_pony
    @Immortal_pony
    Можно на уровне запроса, но структуру базы данных для этого неплохо было бы знать.
  • Как группировать материалы с учетом ч/з?

    Immortal_pony
    @Immortal_pony
    Извини, но это хуйня какая-то.

    Вынесу это в начало как образец вашей аргументации. Впечатляет и убеждает, ага.

    он, в примере, необходимо сгруппировать данные по дате с учетом таймзоны клиента. Предположим, а таблице с данными 100000 записей. Их все на клиент перекинуть и там группировать?

    Вернется то 100 тысяч записей что с группировкой, что без, и перекинуть нужно будет сто тысяч в обеих случаях - в чем разница?

    Разница в том что при серверной группировке нет необходимости отдавать все 100000 записей клиенту. Достаточно отдать одну страницу - например, сгруппированные записи за 20 дней.


    Лол. То есть отдавать одни и те же данные дважды, просто потому что фронту лень работать с датами? От бека идет минимальный нужный набор данных. Данные от бека должны быть МАКСИМАЛЬНО независимыми от фронта.

    Опять данные кому-то должны, эх. Задача в том, чтобы у пользователя максимально быстро открылся сайт. Плюс предварительной обработки данных на сервере в том, что, во-первых, пользователю не придется скачивать js-код, который будет заниматься обработкой на его стороне, а, во-вторых, клиентскому устройству не придется этот код исполнять.

    Мда. А давайте ка придумаем велосипед, которым ОЧЕНЬ УДОБНО пользоватся, а так же забудем о консистентности (в каждом запросе одни и те же данные могут означать разные вещи - что есть пиздец), ради того, что бы.. что бы что? Я так и не понял, нахрена так делать.

    Это опять какая-то ваша вкусовщина. По данному параметру в запросе можно будет определить часовое смещение пользователя. И если сервер принимает его в нескольких форматах - это нормально и это тоже абсолютно обычный подход. Вам примеров?


    Именно негласный. Точно такой же, как и хранение дат в UTC в базе, а не в чем-то другом. Или использование utf8mb4 вместо utf8/любой другой в mysql. Или расстановка foreign ключей. Или тайп-хинтинг + var аннотации. Продолжать?

    Все вышеперечисленное является рекомендациями или способами решения каких-то проблем. Бездумное следование этим практикам также пагубно как и бездумное их игонорирование.
    Приведу примеры, когда эти рекомендации спокойно можно игнорировать. Или даже нужно.

    использование utf8mb4 вместо utf8/любой другой в mysql.

    Если не планируется мультиязычности, то никакой разницы.

    расстановка foreign ключей

    Вредный overhead на мелких проектах. Не нужен.

    тайп-хинтинг + var аннотации

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

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    "Перестала работать" довольно расплывчатое определение. Уточните, пожалуйста, что именно проиходит, какая ошибка возникает?
  • Как группировать материалы с учетом ч/з?

    Immortal_pony
    @Immortal_pony
    Ну да, почему бы и нет - покрыть весь проект raw'ами и разгребать это говно через годик :)

    Raw именно для этого и создан - чтобы сконструировать запрос, который позволяет сделать sql, но для которого нет специальной конструкции в query builder'е. Что ж у вас со всеми инструментами-то проблема какая-то?

    Это известный и вполне рабочий подход.

    Да ну? Известный где, в твоих проектах?

    В моих проектах в том числе. Достаточно посмотреть changelog MySQL'я - там видно, что добавляются функции для удобной работы с JSON, потому что это востребовано. По аналогичному же пути чуть раньше пошел и PostgreSQL - и там и там можно хранить json в строках, делать по нему выборки и, конечно, делать удобную агрегацию необходимых данных. Если интересно, то статьи на эту тему легко гуглятся, как и вопросы на StackOverflow

    И как это не относится? Код НУЖНО писать хорошо. Примера вверху это не касается. Даже и близко. СОВСЕМ.

    Если вы не знаете какого-то подхода, то это не значит что он плох. Развивайтесь.
  • Как группировать материалы с учетом ч/з?

    Immortal_pony
    @Immortal_pony
    Alex Wells, я не вижу проблем в том чтобы написать гидрацию при необходмиости. Уверен, что подобные решения уже реализованы для Laravel.

    это твой говнокод выше с имитацией json'а. Я вообще в ахуе, что кому то пришла такая идея в голову.

    Это известный и вполне рабочий подход. Если вам он неизвестен или претит по эстетическим соображениям, то это никак не относится к нашей дискуссии.
  • Является ли это стейт-машиной?

    Immortal_pony
    @Immortal_pony Куратор тега JavaScript
    zlodiak , не совсем. Состояние - это то, без чего не может существовать машина состояний :) Но по ссылке описано и определение паттерна "Состояние" и машина состояний, да
  • Как отследить нажатие на кнопку php?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    Я не могу сделать так:
    1.Нажатие на кнопку
    2.Изменение значение переменной
    ???

    Кратко - нет. Добро пожаловать в мир скриптовых языков.

    Все работает так:
    1. Пользователь вбивает в адресной строке адрес вашего сайта
    2. Сервер подготавливает ответ (html). В этот момент инициализируются перемнные, им задаются значения, и т.д.
    3. Сервер передает заканчивает свою работу. Все перемнные удаляются из памяти.
    4. Клиент получает данные от сервера.
    5. Пользователь видит html, подготовленный сервером.

    Последующие действия пользователя могут инициализировать новый запрос на сервер, но тогда ВСЕ пермеменные будут инициализовваться заново.
  • Как группировать материалы с учетом ч/з?

    Immortal_pony
    @Immortal_pony
    kingcomp_ru,
    имейте уважение к чужому времени. Вам дали наводку, поискать могли и сами.
    В сообществах полно информации почему не стоит хранить часовые пояса в БД.
    The Problem with Time & Timezones - Computerphile
    Что должен знать о времени каждый программист

    По этим ссылкам нет никакой информации о том что сервер не может отдавать данные с учетом таймзоны, если она указана как один из параметров. Именно этот случай мы и рассматриваем.

    Alex Wells,
    при этом принимать таймзону как параметр

    - может. Вопрос - нахрена?

    Чтобы не проводить операции фильтрации и группировки на клиенте, конечно.
    Вон, в примере, необходимо сгруппировать данные по дате с учетом таймзоны клиента. Предположим, а таблице с данными 100000 записей. Их все на клиент перекинуть и там группировать?

    Где ответ на вопрос с публичным АПИ? Будете к каждому запросу лепить таймзону как параметр?

    Да, конечно. Если API endpoint позволяет менять результаты выборки в зависимости от таймзоны, этот параметр следует принимать. Можно сделать его опциональным и по умолчанию использовать таймзону сервера или UTC. В любом случае это должно быть указано в документации.

    Еще вопрос: как будете выводить дату, если по ТЗ нужно вывести ее в двух часовых зонах - локальной и по Moscow? Ваш лучший вариант - спарсить дату в указанной таймзоне momentjs'ом, предварительно указав таймзону, и засетать Moscow. Консистентность? Не, не слышал.

    Я не понимаю вашей проблемы. Что и куда выводить? Что и откуда парсить? Что такое "засетать"?
    Если от сервера вам надо получить две даты какого-то события - одну в UTC, а одну в часовом поясе пользователя, то сервер их и отдаст.

    Еще вопрос, который я уже задавал: каким образом будете фиксить неправильное время на ПК клиента? Вы можете гарантировать, что у каждого, кто пользуется вашим фронтом, будет верное время? Нет? Каким образом будете компенсировать? Добавлять ВТОРОЙ параметр, помимо таймзоны, типа offset и указывать кол-во часов-минут?

    Не совсем понимаю проблему. Клиент указывает в качестве параметра таймзону и в зависимости от нее изменяется выборка на сервере. Если нет уверенности, что таймзона поддерживается сервером, то можно указывать значение offset прямо в параметре timezone. mysql-функция CONVERT_TZ прекрасно умеет работать с таким способом указания таймзоны.

    Это негласный стандарт, конечно же. Такой же, как и ХРАНЕНИЕ дат в UTC.

    Ах негласный. Ну тогда все понятно, конечно.
  • Как группировать материалы с учетом ч/з?

    Immortal_pony
    @Immortal_pony
    Alex Wells,
    это даже и близко не то, что хочет автор. Ему нужно выделить разные ключи, а вы делаете group by по СУБД, который к этому не имеет никакого отношения

    СУБД прекрасно это умеет. Я не виноват, что вы не в курсе.

    Кроме того, если у вас есть нужда писать ТАКОЕ (три функции, пять параметров) - значит вы что-то делаете не так.

    Опять из вас вкусовщина полезла или обоснуете?
  • Как группировать материалы с учетом ч/з?

    Immortal_pony
    @Immortal_pony
    Nikita Kravchenko, возможно это связано с тем что группировку вы делаете уже после get. Вот примерный код на чистом sql, который должен получиться:

    SELECT 
        RIGHT(LEFT(CONVERT_TZ(`date`, '+00:00', '+10:00'), 10), 5) AS 'day',
        CONCAT('[', GROUP_CONCAT(JSON_OBJECT('id', `id`, 'date', `date`)), ']') AS 'data'
    FROM 
        `news` 
    GROUP BY 
        RIGHT(LEFT(CONVERT_TZ(`date`, '+00:00', '+10:00'), 10), 5)


    Результат: 5cf7c6e486ead898375599.png
  • Как группировать материалы с учетом ч/з?

    Immortal_pony
    @Immortal_pony
    мешают стандарты, принятые в разработке.

    Какие стандарты? Кем принятые? Имена, явки, фамилии, ссылки?

    АПИ не должно быть привязано ни к какому юзеру, и, следовательно, никакой таймзоны он не знает.

    Каким образом одно следует из другого? API может быть не привязано к пользователю и при этом принимать таймзону как параметр. Как и любой другой параметр.

    Стандартизация. Везде UTC. Потому что так проще всем.

    Опять какие-то стандарты, которые вы придумали для самого себя?

    ... и т.д., и т.п. Если вы ссылаеть на какие-то стандарты, то приложите ссылки на эти стандарты - почитаем, обсудим. А до тех пор это вкусовщина, выдаваемая вами за истину в безапляционном тоне.
  • Как группировать материалы с учетом ч/з?

    Immortal_pony
    @Immortal_pony
    А что мешает передать backend'у таймзону пользователя?
    Кому группировка "должна" быть на фронте?