• Что может заказчик спросить у меня за сайт который не дал конверсию?

    Ну так логично, что дома всем не нужны. Может, просто в регионе 116 все себе дома уже построили и нужно подождать? А то аудитория узкая. Вот, два страждущих дом нашлось, уже хорошо для такой узкой ниши.
    Ответ написан
    Комментировать
  • В каком стеке web технологий одновременно: высокий порог входа, высокие зарплаты и в целом не проблема найти удалёнку?

    как всем только фулстеков подавай

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

    В нормальных достойных проектах работают только узкие специалисты, там даже версткой занимается верстальщик, а не фронтендер, и даже тесты там пишет тестировщик, а не разработчик. Зато каждый - эксперт.
    Ответ написан
  • Почему не нужна конкатенация для http/2?

    Рискну предположить со своими знаниями, что конкатенация давала буст к производительности на http\1 потому, что в старом протоколе на каждый запрос тратились килобайты сопутствующей информации, а также миллисекунды получения. Это dns-резольвинг, установка соединения и т.п. Чтобы это минимизировать, был даже специальный атрибут тэга link, rel="dns-prefetch" (еще preconnect, prefetch, и некоторые другие).

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

    И я так понял, что rel="prefetch" на второй версии http тоже более не имеет смысла.
    Ответ написан
    2 комментария
  • Как записать в свойство php класса данные из wpdb->get_results() Wordpress?

    class User{
    
      private $id;
      private $data_from_wbdb_get_results;
    
      publick function __construct($id){
        global $wpdb;
        $this->id = $id;
        $this->data_from_wbdb_get_results = $wpdb->get_results("SELECT * FROM table WERE id=$this->id");
      }
    
    }
    Ответ написан
    1 комментарий
  • Как задать порядок загрузки файлов в input type="file" multiple?

    Берете все загруженные и отсортированные пользователем или автоматически картинки, и отправляете в json на сервер. Нативные контролы вам тут никак не помогут, нужно ручками сделать. При каждом handleFiles обновляйте массив с файлами, откуда будете брать, чтобы DOM не тормошить, при каждой сортировке тоже. В общем-то очень просто.
    Ответ написан
    Комментировать
  • Можно ли в react использовать компонент вместо Router?

    Я в своем проекте сделал надстройку над react-router, главным образом потому, что там коряво реализована интеграция с redux. У react-redux-router из коробки диспатч экшена происходит после того, как произошел собственно роутинг, т.е. налицо костыль; у меня же смена роута является следствием экшена, что мне и было необходимо достичь.

    Поэтому ответ - да, можно, но без роутера все равно не обойтись. Если вас не устраивает нативный роутер, создайте свой собственный, где слушаете history, и там можете управлять флоу как вам удобно. А дальше уже в обработчиках ваших экшенов будете производить все проверки и в редьюсере менять стейт.

    Например, код моего роутера:
    spoiler
    import React from 'react';
    import createHistory from 'history/createHashHistory';
    import { Router } from 'react-router-dom';
    import * as routerActions from './Actions/RouterActions';
    
    class HashRouter extends React.Component {
        constructor(props, context) {
            super(props, context);
    
            this.history = createHistory();
            this.history.listen(this.onHistoryChange.bind(this));
    
            this.store = this.props.store || this.context.store;
        }
    
        /**
         * Just initialize start route.
         */
        componentDidMount() {
            const { location } = this.history;
            
            const User = new UserEntity;
            const accessLevel = User.getRole();
    
            const routes = RoutesRepository.getRoutesBy(accessLevel);
            const match = RoutesRepository.getMatch(location, routes);
    
            this.store.dispatch(
                routerActions.routeChange(match)
            )
        }
    
        render() {
            return <Router history={this.history}>
                {this.props.children}
            </Router>;
        }
    
        /**
         * When user change browser history, 
         * dispatch actions for change routes.
         * 
         * @param  location Object
         * @param  action String
         * @return void
         */
        onHistoryChange(location, action) {
            if(!this.store) {
                return null;
            }
    
            const User = new UserEntity;
            const accessLevel = User.getRole();
    
            const routes = RoutesRepository.getRoutesBy(accessLevel);
            const match = RoutesRepository.getMatch(location, routes);
    
            this.store.dispatch(routerActions.routeChange(match));
        }
    }
    Ответ написан
    3 комментария
  • Деактивация мозга?

    Это ты стареешь просто.
    Ответ написан
    Комментировать
  • Как правильно изменять checkbox react?

    Самый лучший вариант - не использовать стейт. Вообще. Зачем он для чекбоксов? Это настолько раздуто и избыточно в 99% случаев, что хочется рвать волосенки на голове каждый раз, когда кто-то это использует. К счастью, React предоставляет uncontrolled inputs, чем я вам и рекомендую воспользоваться. Поскольку каждый раз, когда для таких компонентов используется стейт, означает, что данные сохраняются для последующей обработки, а последующая обработка в 99% случаев - отправка формы или иные ее события.

    Но конечно, если при щелчку на чекбокс надлежит вызвать какое-то событие, без коллбэка не обойтись.
    Ответ написан
    Комментировать
  • Пагинация Wordpress?

    С пагинацией все просто. У вас там должен быть кастомный QP_Query по таксономии, которую вы выводите (на сервере, там, где получаете данные). В этот WP_Query в качестве аргументов передаете значение `paged` из GET, которое и являет собой текущую страницу. Соответственно при каждом запросе на сервер меняете это значение в GET параметрах.
    Ответ написан
    Комментировать
  • Как сделать платежную систему с залогом?

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

    Можно сделать опцию "переводить \ возвращать сразу на карту", а то и вовсе сделать пункт пополнения кошелька неявным (при переводе и заморозке автоматически переводим замораживаемую сумму в виртуальную валюту и храним на счету пользователя, ему показываем, сколько заморожено). На апворке, например, вообще один банковский счет и они уже разграничивают у себя в базе, где чье.

    Возможны юридические тонкости и нюансы, но тут уже не ко мне.
    Ответ написан
    Комментировать
  • На какое событие делать wp_insert_term?

    1. Регистрация кастомных типов записей и прочих плюшек происходит на init, т.к. иначе их просто не будет в системе (хотя относящиеся к ним записи могут быть при этом в бд). Так, register_custom_post_type и register_taxonomy просто изменяют глобальные переменные.
    2. А вот wp_insert_term нужно вызывать только один раз. Надлежит понимать, что он отличается от всех этих register_taxonomy и прочего тем, что пишет данные не в глобальную переменную для нужд ядра, а в базу, и соответственно повторные вызовы приведут в лучшем случае к дублированию данных. Событие? Тот же init сгодится, только не забудьте поставить какой-нибудь флаг или банальную проверку на существование таксономий \ терминов. Какой-нибудь is_terms_added в wp_options.
    Ответ написан
  • Как правильно сделать универсальную защита от xss-атак и sql-инъекций?

    Ничего не нужно фильтровать. Просто перед тем, как выводить контент, заменяете html-сущности (для предотвращения xss) на соотв. символы и используете PDO (для предотвращения инъекций).
    Ответ написан
    Комментировать
  • Не банальный небольшой Angular проект для портфолио - идеи?

    Сделайте проект на Angular для портфолио, который генерирует \ собирает \ предлагает проекты на Angular для портфолио
    Ответ написан
    2 комментария
  • Программное решение для упорядочивания жизни?

    Wordpress. Не имеет качественного визуального редактора? Ересь! Gutenberg настолько крут, что половина visual composer'ов с их ценниками отваливаются еще на подлете, не выдерживая конкуренции с решением "из коробки". Но если уж так надо, то можете рассмотреть MotoPress или тот же Visual Composer, но, повторюсь, в эру Gutenberg они в принципе уже и не нужны.
    Ответ написан
    1 комментарий
  • Не умею верстать под IE. Есть ли какие нибудь гайды или видео по верстке под это кривое убожество?

    На самом деле там все довольно просто. В общем и целом caniuse и вперед, в зависимости от версии. На почти любое современное решение есть менее современная альтернатива. Не всегда, конечно, svg со сложными анимациями или там переходы с background-blend-mode не сделать без js на старых версиях, но, следуя принципам content first и graceful degradation, на украшательства в пограничных случаях можно и подзабить. Главное - контент.

    P.S. Вы ничего не знаете о боли, покуда не попробуете сверстать под IE6 )
    Ответ написан
    Комментировать
  • Почему в PHP проще остальных языков парсить JSON?

    Да, это PHP настолько крутой и удобный. Он (как и тот же JS) показывает, что язык программирования может быть простым и удобным с одной стороны, и функциональным и мощным, наполненным высокопрофессиональными фичами - с другой.
    Ответ написан
  • Какие самые лучшие методы деббагинга вы можете посоветовать?

    console.log и alert спешат на помощь! а где они не справятся, зовите Гаечку в лице react-dev-tools
    Ответ написан
    Комментировать
  • Верстка блока "как мы работаем" со стрелками между элементами, как оптимальнее?

    Если просто, то нарезать картинок и решить в лоб, где каждая цифра и стрелка - отдельный блок с текстом. Можно фоном или просто картинкой с position absolute (внутри блока).

    Если заморочиться, то цифры svg, стрелки тоже svg (плюс трансформ на искажение для изогнутости), так будет очень удобно адаптив делать: убрать transform и стрелки стали прямыми. С точки зрения производительности этот способ гораздо лучше первого.
    Ответ написан
    Комментировать