Laravel 5 - унылое говно, можно попробовать 4 - говорят он легкий и простой в изучении, но это уже не в тренде
Sf - имеет довольно высокий порог вхождения, и нужно слишком много абстагироваться чтобы понять как с ним работать.
Zend - жирный. Нужно много литературы (мануалов) лопатить чтобы начать его пользовать без написания велосипедов (впринцие справедливо и для Sf/Laravel/Yii, но зенд имеет больше готовых фич уже в себе и их надо знать чтобы использовать фв на 100%), А использовать встроенный функционал
Silex, Slim - не имеют на борту нормальных оберток для БД, но роутинг, вьюхи и контроллеры уже есть, так что в принципе можно попробовать
Yii1 - функционально богат, но тоже нужно время на вход чтобы понять как быстро и правильно с ним работать
Yii2 - красивее первой части, ближе к Laravel/Sf но имеет тоже много абстракций
CI/Kohana - советовать не буду, они свое отжили и вряд ли найдут много поклонников, да и документация и комьюнити у них не очень
Следует отметить что все последнии версии фреймворков используют композер, а это очень удобно. Не нужно скачивать зип архивы и думать как их вставить в приложение, все происходит само собой и готово к использования с минимум усилий для интеграции. Так же практически везде требуется ПХП версии 5.4 используются немйспейсы (ПСР-4) и короткие записи массивов.
Еще я порекомендую Django, RoR, ExpressJS. но это другие языки
никто не мешает вам содержать оба типа данных. иметь столбецы total_views, today_views, week_views, month_views в таблице с сущностью и отдельно хранить детализированный отчет с точностью до секунды, кто, Когда и при каких обстоятельствах просматривал
Я и задал вопрос: как победить GMT ? Одно время с сервера, другое клиентское.
я вам сказал как решить разницу
с сервера отдаете 3 метки времени и конвертируете их в даты. так как вам нужно не абсолютное (или текущее) время, а всего лишь разницу (внимание! для отображения сколько часов осталось, то не имеет значения в какой часовой зоне сервер или браузер)
с сервера будьто аякс или при загрузке страницы дефайните 3 переменных в формате таймстамп
тут нужно учесть что для джаваскрипт таймстамп - это милисекунды, в то время как в пхп - это секунды!
то есть при создании дат мы умножаем каждую метку времени на 1000
это в принципе пример как передать и обработать дату из пхп в джс
далее Внимание! то что я говорил о разделении задач
1) рассчет процентов для прогрессбара и отображения как таковых
2) рассчет остатка времени
3) реализация таймера обратного отсчета исходя из пункта 2
зачем парить мозг по синхронизации. я не читал те длинные куски кода, но дам совет. присылайте с сервера 3 метки времени (старт, текущая, конец) формат нужно смотреть исходя из задания, можно голый тамйстамп или же в формате Y-m-d H:i:s
на клиенте все метки преобразовываете в date
var current_dt =new Date(current_date_from_server);
var end_dt =new Date(end_date_from_server);
далее рисуете прогресс бар исходя из серверных данных
напишите простенькую функцию которая будет рассчитывать оставшееся время исходя из двух значений. ну короче разложите свою большую задачу на мелкие части и поэтапно реализуйте каждую часть. ну а проблемы если появятся то срашивайте в гугле, а после тут (если не получится) только не по простыне кода, а по конкретному вопросу
объективно говоря да. скорее всего у вас уровень джуниора. но есть одно но. каждая компания имеет свои субъективные тайтлы, которые зачастую не корелируют с общепринятыми. плюс ко всему этому как говорится все хотят жениться на красивой и умной, но отнюдь не очень красивые тоже выходят замуж, точно так же и тут, если в вакансии требуется какой-то скил, а у вас его нет - не стесняйтесь предложить свою кандидатуру туда и вполне возможно что и ваших знаний хватит для того чтобы вас приняли на работу.
избегайте прямой лжи в резюме и не стоит перечислять все возможные аббревиатуры которые вы встречали. зачастую как раз стунденты пишут все и вся в своих резюме, включая навыки работы в ворде и пеинте.
когда у вас уже есть некоторый опыт, то лучше указать в резюме технологии с которыми работали и примеры работ + краткое описание о себе, образовании и предыдущих местах работы (только если они относятся к вашей желаемой должности). То есть если вы работали продавцом, а пишите резюме на программиста, то лучше не указывайте это в резюме
ну и собственно достаточно худое резюме может быть компенсировано собеседованием или хорошо выполненным тестовым заданием. так что дерзайте
средний... если подразумевать middle, то мало знать только язык. то что вы должны знать core языка это само собой разумеется. помимо всего должны уметь оптимально применять тот или инной инструмент языка, уметь работать с различными библиотеками, интегрироваться с любыми системами, знать клиентскую часть, знать бд и средства работы с ней.
короче как мидл вы должны уметь решить любую задачу самостоятельно не загружая вечными вопросами коллег, так что делайте выводы.
ну а базовый уровень (junior) должен знать синтаксис языка и уметь применять его, так же должен уметь писать несложные алгоритмы (Добавление)
вообще открываете любую вакансию в интернете и смотрите перечень требований. вот если возьмете 10-20 вакансий к примеру на уровень middle software engineer и выберете наиболее часто встречающиеся технологии - это должно у вас быть в резюме. если что-то не знаете - вперед в гугл, потом википедия, потом хабр ну и еще несколько тематических статей или видеоуроков + разбор примеров на практике или просто реализовать что-то свое с использованием той или иной технологии
после можете писать в СиВи что умеете с этим работать
так же часто востребованным является работа с различными API
если вопрос в том как хранится автоинкремент, то да. мускул запоминает максимльное значение и использует его для генерации нового значения. и откатывать его назад не имеет ни логического не практического смысла. какая вообще разница какой порядок. да хоть начнутся с 1000 и будут инкрементироваться на 7 единиц за раз. главное чтобы было уникально.
для того чтобы лучше понять представьте 2 случая и поразмыслите над ними
1) у вас были записи 1,2,3,4,5,6. Вы удалили 2 и 4 (да! не последнюю, а некоторые внутри таблицы) и представьте что данных этих не 6 строчек, а миллион. будет удобно каждый раз искать пустую дырку в значениях при вставке нового элемента?
это на счет производительности
2) представьте что у вас есть блог и каждая статья в нем имеет свой уникальный айдишник. и вот у вас есть статья с айди 6. многим пользователям она понравилась и они решили ею поделиться на других ресурсах (форумах, статьях). и тут кто-то вздумал удалить эту статью, а новый пользователь создал другую и занял место (айдишник) предыдущей. и получится что у всех ссылках разбросанных по интернету будет ссылка на совершенно постороннюю статью. это правильно по вашему мнению?
lulukyan любой фреймворк/цмс/велосипед который написан с использованием ООП должен иметь либо автолоадер (а соответственно довольно-таки проработанную структуру файлов/папок), либо реквайрить/инклудить эти же самые классы/файлы в ручную в каждом файле
если используется автолоадер, значит все не так плохо потому что скорее всего названия классов будут соответствовать названиям файлов, точнее вы можете увидеть в автолоадере вашего фреймворка
если же вариант без автолоадера что очень маловероятно, и в случае если так и есть - очень печально, вы можете найти в коде вызовы include(once)/require(once) и отследить какие файлы были подключены и попытаться найти искомый класс внутри них
но общая рекомендация для второго случая такова что лучше отказаться от использования подобного кода ибо будет тяжело, трудносопровождаемо и для каждого нового члена команды это будет масса головной боли
ну и все же обзаведитесь нормальной ИДЕ, зачем заниматься мазохизмом?
читать исходный код полезно, однако если перечитывать все и вся, на это уйдет слишком много времени. поэтому фанатизм не стоит проявлять.
В вашем случае намного полезнее читать описание АПИ используемого класса и метода - это практически то же самое что читать мануал по конкретной системной функции языка
как узнать? кликнуть в вашей ИДЕ через контрол по вызываемому методу и она автоматически переведет вас в нужный класс и реализацию этого метода.
Если же речь идет о том как найти изначальный метод из переопределенного, то нужно кликнуть по родительскому классу (который у вас наверняка есть в конструкции extends) и найти во вновь открытом классе искомый метод, или если ИДЕ из разряда JetBrains - прямо возле метода есть значек показать переопределенный метод или метод который переопределил данный.
Вобщем изучайте инструменты, которыми пользуетесь. В крайнем случае руками находите файл с классом в файловой системе и в том файле уже ищите метод через стандартный поиск
если попробовать поискать то можно найти ВСЕ!
проблема лишь в том как привильно спрашивать
так что начните задавать правильные вопросы и начнете получать правильные ответы, даже без того чтобы спросить это на форуме. поверьте. более чем 100% ваших проблем уже решены и выложены в открытом доступе
просту нужно прити и взять. и никогда не нужно себя ограничивать в том что рано чтоо-то учить. если есть интерес то нужно его утолять
блочные теги тоже будут в тексте? ибо они спровоцируют дополнительные строки при визуальном отображении в то время как по факту у вас будет тех же 5 строк разделенных брейками