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

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Не надо никаких джойнов в данном случае.

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

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    echo '<b>'.$user.'@'.$host.':'.($pwd=='/home/'.$user?'~':$pwd).'#</b> ';
    Ответ написан
  • Как исправить строку в переменной foreach и поделить ее на число?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    В принципе смарти позволяет выполнять многие фунации пхп напрямую (зависит от версии), например можно попробовать такой код {floor(floor($module_data.PRODUCTS_PRICE*100)/10000)}
    Ответ написан
    Комментировать
  • Как по-нормальному вытащить smarty переменную в php код?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Дело в том, что смарти - это шаблонизатор, т.е. он отвечает за представление (рендеринг) данных перед отдачей в браузер и его работа обычно начинается тогда, когда работа контроллера уже завершена. Именно по этой причине прямых путей передачи чего-либо из смарти обратно в код не предусмотрена, т.к. оно не нужно обычно.

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

    В общем я категорически не рекомендую пытаться что-то передавать из смарти обратно в код, только если это не отрендеренный шаблон, например, письма, который рендерится до завершения работы контроллера. Во всех остальных случаях односторонний поток данных обязателен.
    Ответ написан
    Комментировать
  • O'reilly smarty шаблон, почему не грузит шаблон в браузере?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Так смарти не может найти шаблон по указанному пути C:/Program Files/EasyPHP-DevServer-14.1VC9/data/localweb/temp/index.tpl, т.е. надо файлик index.tpl закинуть в папку C:/Program Files/EasyPHP-DevServer-14.1VC9/data/localweb/temp/

    Файл в приложении к делу прямого отношения не имеет, проблема не в нём.
    Ответ написан
    Комментировать
  • Почему sleep() ведет себя странно?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Перед sleep закрывай сессию и не будет такой шняги.

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

    Если ты второй запрос отправишь под другой сессией, например из другого браузера или в режиме инкогнито, то такой ерунды не будет...
    Ответ написан
  • Кто как делает html формы?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Я много, долго и упорно делал на jQuery+Vanilla JS сложные динамические формы, которые строил генератор по мета-данным.

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

    К тому же прямые манипуляции на DOM для меня стали еще большим злом.

    В общем от jQuery как основного движка на фронтенде я отказался категорически, сейчас плотно изучаю React+Redux и ище с ними, предварительно проведя исследования по основным мейнстримовым фреймворкам и библиотекам для фронтенда.

    Мне зело симпатишна идея рулить состоянием, а чтобы интерфейс при этом выстраивался автоматически.

    Ну и на бэкенде до кучи решил мигрировать на Node.JS, ибо это позволяет отказаться от веб сервера как обязательного элемента-посредника между фронтендом и бэкендом, к тому же это позволяет хранить активное состояние нативно, что доставляет неимоверно.

    В совокупности с ES-2015 это всё становится приятнее и интереснее.

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

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    За любым фреймворком лежит опыт и мировоззрение его разработчиков. У любого фреймворка есть глубинная философия, его смысл, для чего он создан, какие проблемы решает, в каком контексте. Не смотря на то, что, казалось бы, разные фреймворки решают набор примерно одних и тех же проблем, делают они это очень по разному.

    Несомненно найдется немало людей, способных использовать какой-либо инструмент, не вникая в матчасть и процессы, просто запомнив последовательность "правильных" действий. И это даже будет работать, хотя бы какое-то время.

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

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

    И вот тут, чтобы действительно справляться, необходимо ПОНИМАТЬ, как это работает, почему так а не иначе, и как с помощью этого решать поставленные задачи. Если чего-то не хватает, или оно работает не так как надо, а это весьма частые явления, то ПОНИМАНИЕ процессов дает свободу РЕШАТЬ эти тупиковые, казалось бы, вопросы.

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

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

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

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

    Я достаточно долго писал на голом PHP, задача облегчения себе жизни встала у меня еще 2009 году. После исследований на тему какой же фреймворк мне для себя выбрать, не отходя от станка и продолжая производить продукт, я пришел к выводу, что порог качественного вхождения весьма высок а контексты мутные. Описываются апи, даются примеры и туториалы (многие из которых не работают или работают криво), но вот самый цимес, глубинную философию, почему то, никто не раскрывает...

    В результате я плюнул на тщетные попытки, и просто, из проекта в проект, собрал свой мини фреймворк, который решает задачи в том контексте, который выработался за годы у меня, решает понятным и прозрачным для меня способом, под полным, 100% контролем с моей стороны.

    Сейчас же я взял паузу, и намерен полностью мигрировать с PHP на JavaScript. При всей моей любви и уважении к PHP, в нем определенные вещи даются слишком большими усилиями, так-что игра не стоит свечей.
    Ответ написан
    1 комментарий
  • В чем суть роутера на 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, или что-то еще, имеется несколько конвертеров на выходе, подключается тот, который запросил экшен.
    Ответ написан
    Комментировать
  • Я хочу хорошую библиотеку на PHP для MySQL. Я зажрался, или такое есть и активно используется?

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

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

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

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

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

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

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    попробуйте вот так

    foreach ($mapping->data as $key->$item) {

    Кстати в представленном JSON нет поля name... может быть надо использовать $key или $item->destination?
    Ответ написан
  • Стоит ли хранить результаты капчи в Cookie?

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

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    И, все таки, писк трендов - один универсальный сайт с адаптивной версткой, что для ПК, что для мобильных. Копаем в сторону BootStrap или Zurb Foundation.
    Ответ написан
    Комментировать
  • Как разбить php скрипт на части?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Если уж делать ЧПУ, то по типу /up/rez1/rez2, и да, этим занимается роутер, ну и немного .htaccess магии с RewriteRule...
    Ответ написан
    Комментировать
  • Перенос переменной из одного файла в другой?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    А зачем в коде такие конские отступы?

    М.б. сессии как-то попробовать использовать для эмуляции сохранения состояния?
    Ответ написан
    Комментировать
  • Динамичный сайт без PHP?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    SPA ныне рулит. За выяснением значения аббревиатуры направляю в гугл... :)
    Ответ написан
    Комментировать
  • Где правильно подключить smarty в mvc?

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

    Например если контроллер сообщил, что для представления данных ему нужен JSON, или, упаси Боже, XML, то смарти вообще не подключается, стало быть нет накладных расходов.

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

    Возвращаясь к смарти... На одном проекте у меня с разработчиком были тёрки о том, как конкретно подключать шаблоны смарти. Он ратовал за подключение в контроллере и ручное управление рендерингом блоков и шаблонов, я же настаивал на иерархически вложенных блоках и сборке через инклюды в самих шаблонах.

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

    В общем я целиком и полностью за ультра-радикальное разделение логики формирования/обработки данных от логики представления и самого представления.

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

    Так вот, данный подход, после небольшой тренировки и промывания мозгов разработчика и верстальщика, позволил им работать над проектом ПОЛНОСТЬЮ НЕЗАВИСИМО друг от друга и параллельно.

    По хорошему если развить идею, то получим нечто более витиеватое, нежели просто MVC, который больше выглядит как MC(V->CV) + то же самое на клиенте, где это подхватывается уже Angular.JS, Ember.JS и иже с ними. В самом простом случае имеем C в виде JS/jQuery, или CV в виде JS/jQuery+шаблонизатор (например standalone handlebars).

    И тенденции таковы, что в обозримом будущем на бэкенде вообще может остаться только функция аутентификации/авторизации и проксирования модели до хранилища данных. Хотя, с другой стороны, для ускорения первичной загрузки одностраничных приложений сейчас все чаще начинают говорить о серверном рендеринге начальной конструкции. Как бы получаем новый виток эволюции, но на совершенно другом уровне, и это отнюдь не PHP.
    Ответ написан
    Комментировать