• В чем суть роутера на php?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Встречал "сайты", где весь код упакован в километровую простыню с кучей if/case, внутри которых и обрабатывались те или иные запросы. В целом это плохо по многим причинам, одна из которых - в интерпретатор при каждом запросе вгружается очень много кода, который надо распарсить и пр., и 99% которого не используется принципиально.

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

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

    Для своего движка я сделал предельно простой роутер, который на входе ждет название модуля и его экшена, которому необходимо передать обработку запроса, причем модуль, по сути - это просто папка внутри папки modules, а экшен - это некая папка внутри папки модуля, т.е. modules/[module]/[action]/[action].php, соответственно модуль/экшен добавляется в проект через создание пары папок и файла. Все остальные параметры ЧПУ передаются в экшен в переменной GET.

    Таким образом все что делает роутер - генерирует путь, и проверяет, есть ли там соответствующий файл PHP, и если есть - подгружает его и передает ему управление.

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

    Подобный подход практикуется в JavaScript фреймворке Ember.JS, под подходом я подразумеваю весьма жесткие соглашения относительно структуры и именования папок, и файлов проектов.

    Шаблоны в моих проектах точно так же находятся в строго определенных местах и подключаются экшенами автоматически, если тип их выдачи HTML, иначе генерится JSON, или что-то еще, имеется несколько конвертеров на выходе, подключается тот, который запросил экшен.
    Ответ написан
    Комментировать
  • Как сделать отправку формы через ajax без удаления post?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Слать обычным сабмитом на урл, куда редиректишься, событие сабмит перехватывать и делать проверку обычными if, если поля заполнены верно - возвращать true, иначе false. В общем как Роман Макаров написал. Тут AJAX вообще никаким боком не нужен...
    Ответ написан
    Комментировать
  • Отправка данных из нескольких форм с помощью одного ajax-обработчика. Как?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Предыдущий ответ годный, я бы еще вот так сделал $form = $(this); вместо $form = $('.form-action-1'), ибо автор явно не понимает что команда делает вовсе не то, что он хочет на самом деле...
    Ответ написан
    Комментировать
  • Как ограничить себя от беспрерывных ajax запросов?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Можно попробовать дико извратиться и поставить заголовки кеширования на 5 минут PHP-скриптом. Я так не делаю, но почему бы нет?...

    Т.е. браузер будет в течении 5 минут отдавать данные из своего кеша, и запрос до сервера не дойдет как не крутись... Если не кешировать, то сервер будет давать отлуп, но в целом нежелательная нагрузка будет иметь место, что не айс...
    Ответ написан
    Комментировать
  • JS Замена строк таблицы?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    В самом запущенном случае у каждой строки должен быть уникальный айди, и в получаемых с сервера данных для строк тоже должны быть айди и признак. что данная строка была изменена с момента итерации Х. Так же с сервера приходит номер текущей итерации, который с каждой рассылкой увеличивается. Т.е. трем разным клиентам отправляется одинаковый номер текущей итерации, который инкрементируется только в момент изменения данных каким-либо из пользователей. Далее клиент обновляет все строки в диапазоне своего текущего номера итерации и нового, полученного с сервера, после чего присваивает своему локальному номеру итерации серверный.

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

    Разумеется надо как-то каждое изменение сопрягать с номером итерации и хранить эти мета-данные.

    Надеюсь не слишком сложно объяснил.
    Ответ написан
  • Как обновить обработчики jquery внутри блока продружаемого pjax'ом?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Нужно что-то вроде $(document).on('click', '#mybtn', function() { ... } );
    Ответ написан
    Комментировать
  • Почему посылается большое количество запросов от AJAX?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Попробуй preventDefault() и stopPropagation()

    Я бы не стал использовать ссылки, переназначая на них обработчики событий. Не смотря на то, что это весьма распространенная практика, лично у меня она вызывает диссонанс. Это все равно что купить гусеничный трактор, отрезать ему гусеницы, приделать колёса и так на нем рассекать, радуясь своей изобретательности... :)

    В приведенном коде явного криминала не увидел, хотя сам подход мне кажется сомнительным... Объясню свою позицию с точки зрения рацио и здравого смысла - HTML сгенеренный на сервере дорог. Нынче модно с сервера получать JSON, и шаблонизацию прогонять client-side. Это на порядок экономичнее, стало быть та же самая шелесяка в датацентре выдержит на порядок больше нагрузку...

    А если еще типовые повторяющиеся вещи кешировать...
    Ответ написан
    Комментировать
  • Эффективно ли регистрировать сайт в каталогах?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Для начала надо зарегистрировать сайт в яндекс.вебмастер, чтобы боты яндекса оперативнее индексировали сайт, заодно там будет видно что и как происходит. Далее качественынй контент сейчас наиболее существенный критерий при индексации, насколько мне известно. Если сайт коммерческий и активное продвижение имеет смысл и позволяет рентабельность, я бы обратил внимание на тот же яндекс.директ. Аналогичные сервисы имеются и у гугла, но там есть смысл заморачиваться, если надо продвигать сайт помимо РФ.
    Ответ написан
    2 комментария
  • Возможна ли переквалификация в разработчики после 30 без профильного высшего образования?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Любой уважающий себя разработчик имеет от одного до нескольких pet-проектов, на который обкатывает интересные ему технологии, методологии и пр.

    Тут не надо думать, тут надо делать. Ставить задачу, декомпозировать ее на элементы, решать элементы, собрать обратно как лего в рабочий проект. Путь тернистый, грабель будет собрано прилично, это и есть ценный опыт.
    Ответ написан
    Комментировать
  • Как отловить ошибку загрузки фрейма?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Если фрейм грузится с того же домена, что основная страница, во фрейме поставить на onload чтобы дергало функцию в родителе, а в родителе отслеживать по таймауту, был вызов из дочернего фрейма или нет... Если фрейм грузится из другого источника, то с ним вообще затруднительно как-либо взаимодействовать... Как вариант его можно проксировать через свой домен, и подвешивать на него нужный обработчик...
    Ответ написан
    Комментировать
  • Я хочу хорошую библиотеку на PHP для MySQL. Я зажрался, или такое есть и активно используется?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Я много лет пользуюсь DBSimple Дмитрия Котерова dklab.ru/lib/DbSimple/manual.html
    Очень доволен.
    Ответ написан
    Комментировать
  • Печать фото на предмете: заливка фото на сайт и редактирование прям на модели, каким образом реализуется? что почитать?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    На объекты сложной формы изображения наносятся водно-пленочным способом

    www.youtube.com/watch?v=_CA0DR4GSQg

    Чтобы рассчитать все искривления надо неслабо разбираться в геометрии, тригонометрии и еще Бог весть в чем. Это задача совсем не для начинающих...
    Ответ написан
    Комментировать
  • Чем вы пользуетесь, sprintf или оператором(точкой) для внедрения параметров в строку в PHP?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Я пользую DBSimple для этих целей, очень удобно.
    Ответ написан
    Комментировать
  • Как заставить цикл отработать 1 раз, не зависимо от запросов пользователей?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Начнем с того, что Вы постоянно опрашиваете один и тот же урл, стало быть этот код не имеет прямого отношения к запросу конкретного пользователя. Тем более раз Вы хотите отдавать одни и те же данные в течении часа всем пользователям, то Вам нужно сделать следующее:
    1) Опрашивать урл по крону, и его выдачу складывать в кеш
    2) По запросу пользователям отдавать данные из кеша

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

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

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Одна проблема, не факт что у юзера ссылка окажется рабочей, т.к. сайт может проверять наличие авторизации при доступе по ссылке на скачивание, а авторизовывался отнюдь не юзер...
    Ответ написан
    Комментировать
  • Какой сейчас самый "невинный" антивирус?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Если нет серьезных причин пользоваться именно Windows, настоятельно рекомендую подумать о миграции в сторону *nix систем, либо, если позволяют финансы, в сторону Apple.

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

    Причем у большинства софта есть аналоги, может быть не такие навороченные, но в целом работу работающие... А под Apple так и полные аналоги.

    Кроме того, в целом, я бы рекомендовал всю активность, что не связана напрямую с работой с таким софтом, все же перенести на *.nix системы, например лазанье по интернетам.

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

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Если события поступают достаточно часто, то при успешной обработке писать в поле mictorime(TRUE).
    Перед отработкой проверять это поле и текущий microtime(TRUE) и отбрасывать событие, если еще не вышел расчетный таймаут. Для 200 событий в минуту таймаут будет 60/200.
    Ответ написан
    Комментировать
  • Можно ли задать условие в CSS?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Как вариант, если надо именно на клиенте, то надо немного переделать верстку, сделать 2 класса типа .day и .night, и скриптом применять один из классов блоку в зависимости от условия...

    А так предыдущий камент вполне раскрывает суть.
    Ответ написан
    Комментировать
  • Найти лучший способ сделать пагинацию?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Адская формулировка вопроса...
    Ответ написан