> Предыдущий тред был тут
На самом деле тут >>373424 — но никто и не заметил
Побежал писать код? Стой, прочти сначала этот пост.
Как и чем отформатировать код
Важно писать код не как попало, а аккуратно, как принято. Почему? Ну потому, что другой человек, который будет смотреть твой код, вряд ли обрадуется, когда ему придется разбирать слипшиеся строчки, разбросанные в беспорядке скобки и написанные русскими словами названия переменных. Особенно плохо будет если это, например, код тестового задания, которое ты сделал, чтобы устроиться на работу. Ты же не хочешь, чтобы тебя называли быдлокодером?
Не бойся, сделать код аккуратным совсем не сложно. Самый универсальный способ — вставить его на сайт http://phpformatter.com и нажать кнопку Format. Робот сам выровняет твой код в лучших традициях.
Если ты используешь для редактирования кода IDE, то все еще проще (а если не используешь, то почему бы не начать?):
- Eclipse PDT — жми Ctrl + Shift + F для автоматического форматирования кода.
- Netbeans for PHP — жми Alt+Shift+F
- Zend Studio — жми Ctrl + A (выделить все), затем Ctrl + Shift + F
- PhpStorm — жми Ctrl+Alt+L
- PHPDesigner — поищи нужную опцию в меню, она там есть. Или жми Ctrl + Shift + F1
- Komodo IDE — правая кнопка -> Format Using...
Вот так, нажатием одной кнопки ты можешь сделать жизнь гораздо проще.
Как видишь, c IDE жизнь может быть намного проще (еще в них есть автодополнение, автоматическая проверка кода и подсветка ошибок, навигация по файлам и функциям и много чего еще).
Основные правила
Если ты вдруг решил выровнять код вручную, запомни эти правила:
- переменные и функции пишутся с маленькой буквы, подчеркивание не используется, используется camelCase, пример: $x, $numberOfPeople, printResults()
- название функции начинается с глагола, в стиле «сделайЧтоТо»
- не знаешь английский (неужели такое бывает?) Не беда, в 21 веке есть решение этой проблемы. Не пиши транслитом, открой лучше Гугл Транслейт или slovari.yandex.ru и найди название для переменной там
- в именах классов используется CamelCase, первая буква большая, «_» может использоваться
- мы предпочитаем подстановку переменных вместо конкатенации строк: "I am $age years old" — хорошо, 'I am ' . $age . ' years old' — плохо
- мы используем для отступов 4 пробела, а не табы (нужно настроить редактор, чтобы при нажатии Tab он вставлял 4 пробела)
скобки в for и if/else ставятся так (египетские скобки):
if (...) {
// ...
} else {
// ...
}
for (...) {
// .....
}
function bakeCookies(...)
{
// ...
}
Поигрался со Slim, и теперь хочу перейти на что-то более серьёзное.
Так вот, Yii 1, Yii 2 или Symphony2?
Правильно ли я нагуглил, что вторым юйем мало кто ещё пользуется?
Во, и еще вопрос: что делает кеширование в Twig?
Делает статичной ту небольшую часть логики, что есть в шаблоне (циклы там, условия) и в результате мы обрабатываем как обычно - сперва скрипт с логикой для страницы, потом шаблон, но вместо пересчитывания циклов и условий в Twig-шаблоне мы отдаём статическую страничку из кеша и при необходимости перезагружаем кеш?
>>377564
На php делал все задания по ООП, на мышах застрял, ну и я пообещал себе сделать позже, т.к. js для работы нужен больше.
>>377570
Вот, задача про компанию вектор.
В принципе все готово за исключением вывода таблицы, но пока делать не стал так как кажется что некоторые вещи надо бы иначе написать, а как хз. В частности мне не нравится то что я в конструкторе использую свойства которые появятся только в подклассах, но и не копировать же 4 раза 1 и тот конструктор.
http://ideone.com/7Cmtbr
http://ideone.com/7Q6avv
Задачка на функцию и банки. У меня в процессе возникло затруднение некоторое. В пхп якобы нельзя работать внутри функции с глобальными переменными, так? То есть если мне нужно в функции передавать какую-нибудь глобальную переменную, то мне нужно в описание функции добавить еще 1 переменную и глобальную передавать уже в неё при вызове функции?
>>377557
>искать надо не в check, а в накопленном к данному моменту пути, то есть видимо path.
Ну так check это и есть массив накопленного пути, а в path у нас записаны все точки.
ОП, ты как-то скидывал вот этот отзывчивый макет http://rghost.net/57060607. Так вот, пара вопросов по нему:
Там есть видео, я так понимаю его вставлять с помощью тега <video>? Также там на видео какие-то навороченные штучки(кнопка воспроизведения, полоса с продолжительностью) - это с помощью jQuery делается? Но я в него пока не умею.
Как можно сделать двойную тень?
И да, что вообще меняется при отзывчивой верстке? Сначала пишем html-код для компьютера, потом пишем css-код для мобильных(ненужным блоком просто устанавливаем display: none;, например?), потом уже пишем css для компьютеров?
Ананасы, фреймворки нужны или нет?
>>377546
Вот код 12 задачи, там только свойства посмотри.
>> Правильно ли я понимаю, когда мы пишем что-то подобное: Hamburger.type[Hamburger.SIZE_SMALL] у конструктора Hamburger появляется объект type с свойством-объектом SIZE_SMALL?
>Нет. Ничего само не появляется. Если ты ранее явно не создал свойство type то Hamburger.type вернет undefined
Надо писать сначала Hamburger.type ={}, потом Hamburger.type[Hamburger.SIZE_SMALL] = {}? Ну а в таком случае что произойдет? Создается объект type у конструктора, потом мы кладем в свойство этого объекта другой объект SIZE_SMALL и ему задаем свойства. В таком случае Hamburger.type[Hamburger.SIZE_SMALL] как-то связан с константой SIZE_SMALL?
>>377633
Код отклеился - http://jsbin.com/lubewuqa/2/edit
>>377579
Да, верно, Юи 2 малораспространен, хотя он лучше в том плане, что там код приведен к общепринятым стандартам, и меньше велосипедов.
> Так вот, Yii 1, Yii 2 или Symphony2?
Yii, а за ним Symfony 2.
> Во, и еще вопрос: что делает кеширование в Twig?
Когда ты пытаешься вывести шаблон, происходит следующее:
- разбор шаблона и преобразование его в PHP-файл (очень медленно)
- выполнение этого php-файла (быстро)
Кеширование позволяет не делать преобразование каждый раз, а сделать один раз и сохранить уже готовый php файл в временную папку, а потом сразу использовать его что ускоряет работу кода.
Или ты про какое-то другое кеширование говорил? Приведи ссылочку тогда.
>>377589
Ок, хорошо
>>377590
> if ($isChief == 1) {
> $this->coffeeConsumption *= 2;
Не, это неправильно. У тебя если у человека убрать статус шефа, то потребление кофе назад не вернется. Не надо изменять это свойство, надо просто учитывать то, что сотрудник шеф, при расчете потребления в отдельном методе (кстати, где он?).
Ну и мне кажется, надо сделать добавление шефа по-другому:
$chief = new Engineer(3);
$department->setChief($chief);
так гораздо гибче получается — не надо руками везде указывать isChief, а он поставится сам когда ты назначаешь кого-то шефом. Ну и придется у департамента сделать отдельное свойство шеф, а то сейчас у тебя например получить кто шеф в департаменте невозможно без поиска по всем сотрудникам.
Кстати, для параметра $rank можно задать значение по умолчанию = 1 чтобы его можно было не указывать.
> public function __construct ($name, $employees)
Это неудобно, передавать сотрудников сразу в конструкторе. Лучше сделать метод addEmployees() чтобы можно было сотрудников постепенно добавлять а их конструктора убрать.
> class Employee
Надо добавить abstract. Чтобы запретить создавать объекты Employee и показать что это лишь базовй класс для других.
Вместо 0/1 удобнее испольовать true/false для isChief: http://php.net/manual/ru/language.types.boolean.php (да, они не описаны в учебнике, я знаю).
> мне не нравится то что я в конструкторе использую свойства которые появятся только в подклассах,
Интуиция тебя не подвела, это действительно неправильно. Базовый класс ничего не знает о своих наследниках. Но мы можем добавить все эти свойства в базовый класс и записать туда например 0.
Также, по возможности используй тайп хинты: http://php.net/manual/ru/language.oop5.typehinting.php — они делают код лучше
>>377593
> В пхп якобы нельзя работать внутри функции с глобальными переменными, так?
Да. Функция должна работать с тем, что ей явно передано. Это делает ее независимой от остальной части кода.
> То есть если мне нужно в функции передавать какую-нибудь глобальную переменную, то мне нужно в описание функции добавить еще 1 переменную и глобальную передавать уже в неё при вызове функции?
Да.
Сделай еще чтобы функция не выводила сразу ответ через echo а возвращала через return сколько всего выполчено. А то может мы хотим что-то с этим результатом сделать, например, сравнить где выгоднее (кстати, допиши-ка чтобы он писал какой банк выгоднее).
>>377600
Ответил уже тут >>377641
>>377622
> Там есть видео, я так понимаю его вставлять с помощью тега <video>? Также там на видео какие-то навороченные штучки(кнопка воспроизведения, полоса с продолжительностью) - это с помощью jQuery делается? Но я в него пока не умею.
Можешь пока картинку поставить, а кнопки просто неподвижными элементами сверстать.
> Как можно сделать двойную тень?
И box-shadow и text-shadow позволяют указать несколько теней: http://htmlbook.ru/css/box-shadow
> И да, что вообще меняется при отзывчивой верстке?
Отзывчивая верстка — та, которая подстраивается под размер экрана (и другие характеристики устройства). То есть не пытается на маленьком экране выводиться вширь на 1000 px. Вместо этого блоки выстраиваются вертикально. Проверить можно, уменьшив окно браузера.
Просто отключать блоки не вариант, надо именно перестраивать, например вместо того чтобы ставить их горизонтально, ставить вертикально на малентком экране.
http://habrahabr.ru/post/119127/
http://habrahabr.ru/post/144003/
> Сначала пишем html-код для компьютера, потом пишем css-код для мобильных(ненужным блоком просто устанавливаем display: none;, например?), потом уже пишем css для компьютеров?
Можно в любом порядке, это непринципиально. Мне удобнее для больших экранов сначала сверстать а потом для маленьких. Но есть принцип mobile first когда сначала делают мобильную верисю.
>>377628
Да.
>>377633
> Надо писать сначала Hamburger.type ={}, потом Hamburger.type[Hamburger.SIZE_SMALL] = {}?
Да
> Создается объект type у конструктора
Да. Только правильнее «добавляется свойство type у конструктора Hamburger, в которое помещается пустой объект».
> потом мы кладем в свойство этого объекта другой объект SIZE_SMALL и ему задаем свойства.
Нет, мы добавляем свойство с именем, которое хранится в Hamburger.SIZE_SMALL (а там хранится 'SMALL').
Hamburger.SIZE_SMALL — это не объект, а просто строка 'SMALL'. Имя свойства может быть только числом или строкой, а не объектом.
> В таком случае Hamburger.type[Hamburger.SIZE_SMALL] как-то связан с константой SIZE_SMALL?
Никак не связан. Сравни:
> x['y'] = 1;
> В таком случае x['y'] как-то связан со строкой 'y'?
>>377634
То, что в Hamburger.type, Hamburger.filling, Hamburger.additive сделано верно.
Пытаюсь использовать file_get_contents на сайт с https и вот что мне пишет:
Warning: file_get_contents() [function.file-get-contents]: Unable to find the wrapper "https" - did you forget to enable it when you configured PHP?
Как это исправить, где что включить?
>>377667
http://stackoverflow.com/questions/1975461/file-get-contents-with-https
Тут пишут надо расширение openssl включить.
>>377668
Расскоментировал extension=php_openssl.dll, перезагрузил сервер. Все равно не работает. Расришерине лежит в папке.
>>377669
Может еще не тот конфиг редактируешь, проверь php_ini_loaded_file()
>>377649
http://ideone.com/7Q6avv
подправил задачку.
>>377682
В смысле не тот? php.ini, который у меня в папке шиндовс лежит. Нашел чувака, у которого такая же проблема, ему посоветовали какую-то программу скачать.
>>377696
>Ок, все верно
как тебе то что я вывожу имя банка через кейс? По другому не додумался как можно сделать кроме как сравнивая переменные с самими же собой.
>>377696
Всё, что нашло по stream wrapper
>>377700
По другому можно
if ($bank1 < $bank2 && $bank1 < $bank3) {
банк 1 выгоднее
}
Или положить цены в массив и найти наименьшую.
Твой вариант тоже норм.
>>377701
Ищи по слову openssl. У меня есть заголовок openssl, под ним написано
OpenSSL support enabled
И этот код работает:
error_reporting(-1);
$d = file_get_contents('https://www.google.com/');
var_dump($d);
Ты сервер перезапустил кстати?
>>377704
OpenSSL disabled. строку расскоментировал, сервер перезапускал.
>>377706
А ты в том ли файле раскомментировал строчку? Тут http://stackoverflow.com/questions/14291151/you-must-enable-the-openssl-extension-to-download-files-via-https пишут что например у WAMP свой конфиг.
Что у тебя за сборка кстати?
http://php.net//manual/ru/openssl.installation.php
Тут написано dll-ка должна быть доступна.
>>377706
И кстати, имей в виду, сборки предназначены для экономии времени опытных разработчиков. Начинающим лучше ставить все самому.
>>377708
помоги расшифровать регулярку
( [^,\s=\{\}]+ ( =\{ [^\}]+ \} | [^,\{\}]+ ) )+
>>377709
Ты читал ссылку? http://php.net//manual/ru/openssl.installation.php
Там надо чтобы библиотека ssleay.dll была доступна. Посомтри, где она у тебя хранится и чему равна PATH (посмотреть можно в свойствах системы вызываемых по Win + Pause (или Break?) -> дополнительно -> переменные среды).
Посомтри нет ли чего в логе ошибок (в папке Апача logs/error.log)
>>377709
Ты же заменил слово disabled на enabled в конфиге, да?
>>377716
Теперь всё работает, по крайней мере пишет SSL enabled. У меня оказывается не был прописан путь к пхп, хотя я его туда добавлял, когда устанавливал, мамой клянусь.
Протестил на https://google.ru, он работает, а этот тред нет.
[function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 503 Service Temporarily Unavailable
Так и должно быть?
>>377722
Да, тут же какая-то клаудфлаерская антиддос-хуита
ОП, прокомментируй пожалуйста решение задачи на функцию.
http://ideone.com/natdNO
>>377739
> Скопировано 3 раза. Попрбуй избавиться от копипасты.
Поправил. Норм?
http://ideone.com/uIH6Xr
ОПа, ответь за тот тред:
>while/endwhile применяется в шаблонах. 5000 надо выносить в переменную. Код лучше бы постить на ideone так как непонятно что он выодит и работает ли вообще.
Я ж написал, что на коленке код писал то есть абсолютно не думая, чисто на интуиции отталкивался трактовки задачи. Вайл/ендвайл я применял вместо скобок, нахуй скобки, когда можно словами написать. Зачем 5000 выносить в переменную, если это фиксированный ежемесячный платеж. Ладно еще в константу.
>Это называется костыли. Лучше бы нормально сделать, а то такой код поддерживать и развивать невозможно.
Ты про арифметику остатков не слышал да? Покажи свой код, будь добр.
>Прекрасно состоавлено (ну ок может и не очень).
Я тебе на пальцах объяснил почему задача некорректна, ты зачем такой сложный?
>Там в предыдущей более простой задаче (которую ты пропустил? зря) пояснено, что эти проценты добавляются к остатку кредита каждый месяц + добавляется фиксированная комиссия.
Какой предыдущей? Я эту задачу с джпега взял.
>>377739
> Рубипроблемы
Есть некоторые ПРОБЛЕМЫ в движке и стандарте, когда ты с языками, отличными от английского работаешь, но там скорее косметически неприятно. В данном случае проблемы нет и работать будет хоть с муслимскими иероглифами.
мимо-рубипроходил
ОП, решил малость оптимизировать свой файлообменник.
Нормально ли доверять $_FILES['userfile']['type'] и при скачивании файла записывать этот mimetype в заголовок или сначала проверять в скрипте (всякие getImageSize для проверки на изображение)?
ОП, дай советов по слайдеру - https://github.com/infinitecats/slider. Второй день изучаю события и пока что вот так. Дай советов по js-Коду. Что там можно изменить? У меня там кроссбраузерность сильно хромает.
И да, на каком этапе нужно переходить на jQuery? Я просто видел, что ты в прошлом треде писал, что стоит сначала пописать на чистом js, а потом перекатываться на jQuery/
>>377763
Что-то я какой-то косноязычный. Извиняй за кривой слог.
И еще вопрос. Почему крупные компании(Яндекс, Сбербанк) не используют на своих сайтах отзывчивый дизайн? У них просто разный код для разных устройств?
>>377763
Ну задумка такая, что надо сначала решить все задачки на DOM — а потмо переходить к jQuery. По нему я правда пока еще задачек не придумал.
>>377749
Ок, теперь верно. Хотя я бы не заводил переменную newSumm, а использовал creditSumm
>>377757
> Вайл/ендвайл я применял вместо скобок, нахуй скобки, когда можно словами написать.
Не любишь скобки — пиши на другом языке.
> Зачем 5000 выносить в переменную, если это фиксированный ежемесячный платеж.
Чтобы все исходные данные были в начале прогаммы и их удобно было поменять.
> Ладно еще в константу.
Константы не для этого используются.
> Ты про арифметику остатков не слышал да?
Не слышал. Я вижу, что вместо простого и логичного решения ты нагородил то, что мешает читать и поддерживать код. Какой смысл усложнять логику, если можно не усложнять?
Так любой быдлокодер может сказать, что он не быдлокодер, а просто использует нечеткую логику.
> Я тебе на пальцах объяснил почему задача некорректна, ты зачем такой сложный?
Ты не прав. Я согласен, что описание не очень точное, это я потом исправлю, но в общем другие аноны как-то понимают, что требуется. Тем более что в предыдущей задаче есть часть решения, и там уже написана формула увеличения долга.
> Какой предыдущей? Я эту задачу с джпега взял.
А не надо было учебник с середины проходить.
Почему одни выбирают CMS, а другие фреймворки?
>>377778
А что такое фреймворки и кмс? Набор библиотек или что?
>>377759
Переделал чуток.
Сделал проверки для миниатюрного изображения и аудио-плеера, игнорируя $_FILES['userfile']['type'].
Чуток почитал статьи, там указывают тип "application/octet-stream" при скачивании, сделал также. Отдаю файлы через апачевский XSendFile, правда XSenfFilePath никак не хочет указывать разрешённые директории.
>>377759
Это поле ставится браузером. Браузер может не знать о каком-то типе файла, а также может передать вместо него что угодно, потому доверять ему особо не стоит.
> и при скачивании файла записывать этот mimetype в заголовок
Определенно нет, а то злоумышленник сможет нужный ему заголовок сформировать.
>>377769
Яндекс определяет мобиыльные устройства по user-agent и пересылает их на мобильную версию сайта. Она отличается, возможно потому им удобнее поддерживать 2 версии сайта.
Если в браузере прописать юзер-агентом например Сафари на iPhone, то открывается другая версия страницы (в Хроме это можно сделать в настройках dev tools, в ФФ через расширения или правку конфига). То же и в маркете, и а
Ну и немного он адаптируется — попробуй поменять ширину окна, он тянется. То же и с яндекс-авто, маркетом.
Гитхаб тоже кстати на UA смотрит.
Сбербанк не регирует ни на ширину, ни на юзер-агент, ну видимо им это не надо.
>>377763
Тебе бы надо сделать github pages — чтобы страницу можно было на гитхабе просматривать.
И начинать лучше начиная с простых задач, например второй задачи про поле с клетками.
Если уж делать виджет галереи, то его требуется делать так, чтобы его можно было поместить на любую страницу без лишней настройки и без конфликтов. То есть, логично чтобы он использовался примерно таким образом:
<скрипт src="код"></скрипт>
<скрипт>
var gallery = new GalleryWidget({
root: someElement
});
</скрипт>
Число и размеры картинок не должны быть жестко заданы в коде.
classList — часть HTML 5, ты в курсе? Как и query selector кстати.
> var slide2 = document.querySelector('.slider .images > li:nth-child(2)');
> var slide3 = document.querySelector('.slider .images > li:nth-child(3)');
Это не годится, число слайдов надо в переменной хранить а не копипастить строчки. Ну и я не вижу работы с дом, ты бы легко мог использовать свойства children, nextSibling.
Код слайдера не должен лежать в глобальном контенксте, а должен быть офомлен в виде класса. А то ты засоряешь глобальные переменные своими.
Хотелось бы, чтобы слайды анимиовались и там, где нет CSS3. Для того тебе бы пригодился класс для анимации из одной из предыдыущих задачек.
При клике несколько раз по кнопке значок на ней выделяется и появляется синяя полоска. Надо либо использовать css-свойство запрещающее выделять текст либо отменять событие onselectstart или как-то так.
> class="hide"
> class="ahead"
Все имена классов должны быть с префиксом, иначе при вставлке на стороннюю страницу, будут конфликты.
> width: 500px;
Это тоже плохо. Что это за слайдер, у которого нельзя поменять ширину или поставить чтобы она равнялась ширине родиьеля?
Высота тоже жестко прописана в коде. Неудобно, удобнее когда это все само определяется размерами картинок.
Лучше сделать универсальное решение, которое можно поместить на любую страницу, без лишней настройки.
Ну и я не уверен, что это хорошо ставить все img прямо в коде. Это вызовет загрузку всех картинок, даже если пользователь их не будет смотреть. Лучше подгружать только текущую картинку и 2-3 следующих, а адреса картинок передавать в параметрах виджета. Правда, в этом случае мы не сможем для браузеров без JS отобразить картинки списком (а также поисковые системы их не проиндексируют) — но что поделать, для них можно оставить только первую картинку в виде img.
>>377778
CMS рассчитаны на создание сайтов без кодинга, через админку. Фреймворки на написнаие кода.
>>377785
А нахуя в некоторых вакансиях от кодеров требуют знания кмс?
>>377794
Потому что это вакансия для "Веб-мастера", а не кодера.
>>377804
>веб-мастер
>не умеет кодить
Какой он к хуям мастер тогда?
>>377805
Ну я работаю веб-мастером получается. Joomla и Webasyst теперь знаю вдоль и поперек. Но кодить все равно приходится, но по мелочи. Чаще для упрощения себе жизни, работая с огромным количеством файлов или товаров например.
Где можно скачать мускул беспатно без смс?
>>378040
http://dev.mysql.com/downloads/
MySQL Server - сама СУБД.
MySQL Workbench - удобный графический интерфейс к ней.
>>378072
Посмотри позязя, я правильный перечень установил?
В самоучителе по пхп еще написано, что для запуска нужно создать файл с расширением бат и прописать адрес: start c:\Home_server\mysql\bin\mysqld-nt.exe -u root
-standalone
exit
Но в папке бин папки Мускул Сервер 5.6 нет такого файла.
>>377774
Придурок, ты хоть знаешь что такое нечеткая логика? Короче, ясно все с тобой, я не буду тебе ничего доказывать, так как твоя глупость и упертость безгранична.
ой, какие дебильные задачи в факью, такое ощущение будто для школьника-дауна писали. ИИ И ШКАЛЬНИК ИГРАЮТ В КУБИКИ ...(ТУТ БУДЕТ МНОГО НАХУЙ НЕ НУЖНЫХ СЛОВ) УГАДАЙ В КАКИЕ КУБИКИ))) Бесит такой слащавый многословный тон, есть нормальные формальные задачи, с нормально поставленным заданием и решением в конце?
Вопрос по Битриксу, не бейте тапками. Краткая суть проблемы: надо было зафигачить почтовый шаблон, сам я жуткий ньюфаг в PHP и особенно 1С. Копипастнул код в нужный файл отсюда: http://blog-o-bitrix.ru/bitrix/otpravka-pisma-polzovatelyu-pri-smene-statusa-ego-zakaza-bitriks/ Потом прочёл здесь http://www.cyberforum.ru/1c-bitrix/thread449213.html что класс надо было переименовать. Сижу теперь с ошибкой в панели Администрирования и не знаю, как всё исправить, потому что доступ к серверу у одной жадной московской фирмы, а почтовую поебень мой работодатель теребит с меня. Fatal error: include_once(): Cannot redeclare class mail in /home/bitrix/www/bitrix/modules/main/classes/general/module.php on line 305 Как достать эту заразу? Помогите, умоляю.
>>378090
http://archive-ipq-co.narod.ru/l1/mou-ikkai.html
Ну раз крутой такой что вах вах решай эти. Ну или вот на ооп задачки внизу страницы имеются
http://archive-ipq-co.narod.ru/l1/pasta.html
>>378099
ой зевать аж начинаю. пойду попью кофе, покурю, сделаю копирайт и спать.
>>378111
Смотрю у тебя очень интересная и насыщенная жизнь, не жалко тратить свое время на постинг унылой ерунды в треде где такие клоуны как ты только вызывают улыбки у тутошних обитателей?
>>378074
Хочу уже взяться за задачу с кошками мышками, но ума не приложу с чего начать. пока что только создал массив $field['x'] = 100, $field['y'] = 100 и решил что вроде как тут 3 класса. Поле, кошка и мышка.
Почему у меня БД не создается? Скачал, установил и подклчил мускул (написано подключилось успешно), а бд не создается чому?
>>377568
Я тут исправляю сейчас по твоим замечаниям. Возник вопрос.
>Я тут еще подумал, а в чем смысл в раздельном логине для студентов и преподавателей?
Там ведь есть еще логин через социальные сети. Так вот если человек не зарегистрирован в системе и пытается залогиниться через них, я его не логиню, а сначала регистрирую. И если сделать страницу логина общей для всех пользователей, то я не смогу определить, кто это, преподаватель или студент. Соответственно не смогу назначить нужный тип в базе.
Самая адекватная идея, которая пришла мне в голову, спрашивать у пользователя кто он, когда при oauth регистрации мы выводим форму с просьбой указать групп(у/ы). Что скажешь?
И библиотека GD тоже не работает, хотя кавычки по инструкции в пхп.ини убрал, что ж такое?
>>378138
Какая версия php? И вообще: http://php.net//manual/ru/function.mysql-create-db.php
>>378155
Отказывает в доступе. Я правда бат. в мускуле не создал, поэтому?
>>378160
Для того, чтобы подключиться, нужно указать в майскуэле коннекте логин и пароль. Ты его полюбому должен был создавать при установке майскуэля. Если нет, то погугли как создать нового пользователя.
И mysql_* не используются сейчас, возьми учебник поновее.
Анончики, посоветуйте годной литературы по php/html/js.
>>378173
о, так там пользователь root по умолчанию стояла. Какой я тупой.
>>378174
да что за хуйня только что успешно создал ДБ, а теперь опять фейл!
Кортошки, тут верстальщиков полон тред, может кто подскажет - есть одна страница на бутстрампе с пикрилейтеда, нужно сделать колонки md-* до низа страницы, а контент в них - прокручиваемый отдельным скроллом.
фреймы и js не предлагать
>>378208
Таких компонентов тьма, да и стандартный owerflow:auto работает.
Ресь о том, как сделать колонку до низа страницы без указания факсированного размера, предварительно вычисляя его JS.
>>377780
Ну хорошо конечно, но ты бы мог еще и ссылочку на гитхаб скинуть, а то трудно что-то прокомментировать.
>>378074
> function addEmployees($employees)
Тут можно было добавить type hint: array $employees
> return count($this->employees) + 1;
Правильнее бы проверить есть ли шеф и если нет то не добавлять 1
> return round($employeesSalary);
Лучше возвращать число как есть, а округлять уже при выводе
> $total['employeesCount'][] = $employeesCount;
А зачем массив? Сразу складывай числа.
> foreach ($total as $value) {
> echo padLeft(array_sum($value), $columnWidth);
Этот код очень ненадежный, так как предполагает что элементы в массиве идут строго в определенном порядке. Плохо. Лучше явно перечислить поля, или например сделать массив с названиями полей.
В остальном, все хорошо.
>>378075
По моему, ты установил кучу ненужной фигни.
> В самоучителе по пхп еще написано, что для запуска нужно создать файл с расширением бат
Если ты установил MySQL как сервис в систему, то запустить его можно через окно управления сервисами (пуск -> services.msc) или командой net start mysql
Учти, что у денвера есть свой mysql, если тот запущен то он займет порт 3389 и второй mysql будет не запустить.
>>378090
http://codeforces.ru/
http://algolist.manual.ru/olimp/
http://acmp.ru/?main=tasks
>>378091
> Cannot redeclare class mail
Ты где-то видимо 2 раза подключил файл с определением класса, вот и ошибка. Попробуй найти где.
Если ты не разбираешься ни в Битрикс ни в PHP, то лучше вообще не берись за задачи, связанные с написанием кода — ничего не выйдет.
Тем более если речь о такой запутанной и сложной системе как битрикс — не разбираясь в ней, в ее потроха лезть не стоит. Надо сначала изучить архитектуру, почитать мануалы.
Тем более что твою задачу наверняка можно решить без написания кода, поставив какой-нибудь плагин или расширение. Лучше поищи в этом направлении.
>>378124
Начни с определения, какие классы будут, какие у них будут свойства и методы.
И давай в этой задаче использовать инкапсуляуию, то есть сделаем все свойства private/protected и публичными оставим только методы. Это позволяет разбить код на изолированные друг от друга классы и сделать его надежнее.
>>378140
> И если сделать страницу логина общей для всех пользователей, то я не смогу определить, кто это, преподаватель или студент. Соответственно не смогу назначить нужный тип в базе.
Да, ты прав.
> Самая адекватная идея, которая пришла мне в голову, спрашивать у пользователя кто он, когда при oauth регистрации мы выводим форму с просьбой указать групп(у/ы). Что скажешь?
Раз уж ты выводишь диалог то да, можно там и справшивать. Одна страница входа все же лучше чем две.
>>378154
Где подробности? Что phpinfo() показывает? Что в php.ini? сервер перезапускал?
>>378167
В ОП-посте есть немного.
По js — learn.javascript.ru
>>378200
Таблицей через display: table попробуй. Вообще, по моему тут нужен либо flexbox либо JS, средствами CSS так просто это не сделать.
Еще есть единица измерения wh (или vh?) — проценты от высоты окна, но она не везде работает.
>>378210
Выичслять через JS дурацкая идея так как размер не будет сам пересчитываться при изменении размеров окна или масштаба (это можно исправить) и при изменениях на странице (а это - нет).
>>378214
height 100% работает только если у родителя и всех предков стоит высота в пикселях или процентах, а не auto.
Оп, что нужно, чтобы сайт работал на телефоне, вернее выглядел в должном виде? Есть что-нибудь универсальное, что захватит большинство телефонов? Можешь ссылок кинуть. Как раз вот на работе на днях нужно будет проверить список сайтов на работоспособность на телефонах и исправить в случае чего. Все сайты с фиксированной шириной обычно.
>>377570
Анончики, самая первая попытка кодить после паскаля в школе и дельфи универа.
Нормально оформлено?
http://ideone.com/AtZzFp
if (condition) {
бла бла бла;
}
for (bla; bla; bla) {
бла бла бла;
}
function getName()
{
return blabla;
}
class Name
{
public bla;
}
if ($humanSum>$robotSum) {
echo "\nЧеловеки победили! \n";
} elseif ($humanSum==$robotSum) {
echo "\nНичья! \n";
} else {
echo "\nПобеда роботов! \n";
}
>>378265
То есть, для "ифов" вот так? Выглядит кашей, пмсм.
http://ideone.com/HwXDmj
Посоветуйте сайт (буржуйский если у нас аналогов нет), где много заданий для фрилансеров (на php соответственно) и можно мб хоть какую-то копеечку заработать или хотя бы задания оттуда поделать и понять, за что сколько платят.
>>378265
Ящитаю лучше так:
if ($humanSum>$robotSum) {
echo "\nЧеловеки победили! \n";
}
elseif ($humanSum==$robotSum) {
echo "\nНичья! \n";
}
else {
echo "\nПобеда роботов! \n";
}
Правильное решение? Можно ли через массив сделать?
Определить достоинство игральных карт по номеру
Игральным картам присвоены следующие порядковые номера в зависимости от их достоинства: "валет" - 11, "дама" - 12, "король" - 13, "туз" - 14. Порядковые номера остальных карт соответствуют их названиям("семерка", "восмерка" и т. д.). Вам нужно разработать программу, которая выводила достоинство карты по заданному номеру, который будет вводит пользователь.
<?php
$number=7;
switch ($number):
case 6:
echo "Шестерка";
break;
case 7:
echo "Семерка";
break;
case 8:
echo "Восьмерка";
break;
case 9:
echo "Девятка";
break;
case 10:
echo "Десятка";
break;
default:
echo "Неправильный номер карты";
endswitch;
Итак, php-кун, у меня тут появились кое-какие опасения над своим кодом. Работаю уже около полугода в одной конторе. Фреймворки здесь не используются, ООП по минимуму. Меня уже заебало получать json аяксом и парсить его. Хотелось бы повысить навыки. Итак правильно ли использовать такую хуйню:
В цикле var tmp += '<div><span>'+someValue+'</span></div>' и потом jQuery('#id').html(tmp).
В php у меня трудно с файлами, урлами, курлы не пользую и не знаю для чего это, ооп и фреймворки тоже.
Минимум знаний о протоколах, http, например, посылаемых заголовках и т.д., а именно как это можно использовать на практике.
Хочу узнать о модных js фишках, и я не имею ввиду jQuery().slideDown(). Вот о прототипах я не знаю. В общем необходимо узнать нахуя это нужно на практике.
>>378308
мб так даже - http://ideone.com/IqW7KD
>>378319
вот так ещё можно - http://ideone.com/PiWfG3
>>378219
Flexbox тоже много где не работает. А где работает, то работает по-разному.
>>378215
>Учти, что у денвера есть свой mysql,
А как отключить майсокл в денвере. Я еще посмотрел, у меня и в пхп есть папочка с мускулом.
Госпади, ну чомуя такой тупой. Ну нахуя я по сто раз эту датабазу создаю, если я ее уже один раз создал, конечно, будет ошибка. Чому я дебил?
>>378409
Ничего не понял про стректрейс, про ошибки. Ну да ладно.
Нахуя нужен быдлонедоязык пхп когда есть православный шарп ибущий мамок пхп-обезьянок в рот и в жопу?
>>377564
http://jsbin.com/hekole/10/edit?js,console
Оп, но я люблю динамичность, чтобы и объекты сами создавались, и считалось все само собой по запуску скрипта.
Ну ладно, я пришел задать пару вопросов.
Что лучше, создать объект Houses, в котором рандомно вычисляется количество домов и рандомно в каждом квартир, или создать рандомное количество объектов House, где в каждом рандомное количество квартир. Что будет быстрее и производительнее?
Что лучше: написать для каждого свойства метод setSomething или создать метод setProperties, который запишет в свойства рандомные значения?
Ну и так погуляй по коду, посмотри что не так.
Я пролистывал мимо этот тред сотню раз и каждый раз я думал, что его название созвучно словосочетанию: "Педрильный клуб любителей пощекотать очко". Теперь и вы об этом знаете. У меня всё, спасибо за внимание.
>>378238
По идее современные телефоны вполне хорошо отображают html5. Но для сайтов часто применяют адаптивную верстку — когда на узком экране содержимое выстраивается вертикально. Это считается удобнее, чем зумить и таскать страницу туда-сюда.
position fixed элементы могут работать не так.
Все, что основано на hover (наведении мыши), работать не будет.
Событие клика приходит с задержкой около 400 мс. Если хочешь мгновенную реакцию, надо ловить touch события.
Флеша нет.
Не css-анимации могут тормозить.
Если используются кастомные селекты или календарики, их надо не включать на мобильном. а оставлять обычный селект и input date.
>>378262
После if фигурные скобки не так поставлены. Пропусти код например через phpformatter.com — он тебе его поправит.
По программе — верно, только нет проверки на даблы.
>>378299
fl.ru, weblancer, odesk.
> и можно мб хоть какую-то копеечку заработать или хотя бы задания оттуда поделать и понять, за что сколько платят.
На это ориентироваться не стоит. На фриланс выикдывают обычно всякую рутину которой никто заниматься не хочет. Он годится как средство подработки, но лучше развиваться дальше и найти нормальную работу.
>>378308
Нет, это не по стандартам. Вот пример из стандарта PSR-2: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md#11-example
>>378351
> мб так даже
Ни в коем случае. Хватит выдумвать свои способы когда есть стандарт.
>>378319
Можно,
$cards = array(
6 => 'Шестерка',
7 => ....
);
http://jsbin.com/kamiy/6/edit?html,js,console
removeClass не работает. Почему?
>>378341
> В цикле var tmp += '<div><span>'+
Это лапша. Для этого лучше использовать шаблонизаторы. Есть такие:
- мощные handlebars (наследник mustache js)
- простенький JSRender как плагин jQuery, который наверно тут подойдет больше учиытвая что шаблон простой: http://habrahabr.ru/post/148573/
- microtemplating (который я бы поостергся использовать): http://ejohn.org/blog/javascript-micro-templating/
- сайт помогающий выбрать: http://garann.github.io/template-chooser/
Я бы советовал смотреть на синтаксис, ибо у многих шаблонизаторов он очень даже своеобразный.
> В php у меня трудно с файлами, урлами, курлы не пользую и не знаю для чего это, ооп и фреймворки тоже.
У меня есть урок по ООП для полных нулей в этом, не хочешь глянуть? http://archive-ipq-co.narod.ru/l1/pasta.html
Фреймворки — это вроде библиотек, содержащих готовый каркас приложения.
> Минимум знаний о протоколах, http, например, посылаемых заголовках и т.д., а именно как это можно использовать на практике.
Это проще всего в википедии почитать, описания кодов состояния и заголовков:
https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BA%D0%BE%D0%B2_HTTP
https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BA%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D1%8F_HTTP
Там часто используемых не так и много.
> Вот о прототипах я не знаю
Они нужны так как на них делается ООП, в jQuery кстати тоже.
> Хочу узнать о модных js фишках,
Ты бы сначала сам jS изучил. Не хочешь простые задачки порешать? https://gist.github.com/codedokode/ce30e7a036f18f416ae0
А так — это Require.JS/AMD, Backbone, underscore, Angular.
>>378355
Не знаю, там наверно панелька или что-то такое есть для управления серевером и для отключения.
>>378409
> this.checkType(this.size);
Это лучше делать сразу в конструкторе. Иначе если getCost не вызвывать то ошибка не обнаружится.
> if (this.extended[m] == this.extended[m - 1]) {
А это там, где добавляется добавка
А так, в остальном норм.
>>378413
Стектрейс — это список функций, внутри которых произошла ошибка. Показывается не только та функция, где она произошла, но и последовательность функций, из кторых она вызвана. Это помогает найти причины ошибки.
Соответственно, выбрасывая нестандартные исключения ты можешь остаться без стектрейса, что неудобно.
>>378422
> или создать рандомное количество объектов House,
Это конечно. Дома же разные бывают. Для каждого дома — свой объект.
> Что будет быстрее и производительнее?
Тут надо сделать правильнее, а не производительнее
> Что лучше:
Передавать число квартир в конструктор. С чего это дом должен сам генерировать число квартир в нем? То же отсноистя и к остальным случайным числам.
setPower надо вообще выпилить, это что-то непонятное.
Делай все как принято в ООП:
PowerUnit, есть метод посчитать вклад в энергетический баланс (аргумент: днем или ночью), который переопределен во всех потомках
Дом, есть свойство — число квартир
Солнечная панель, свойство — мощность
и так далее.
>>378429
У тебя в switch если ни один из вариантов не сработает происходит выход из функции без return
> if (!(typeof(type) in DefaultTypes)) {
Этот if надо перевернуть:
if (.. in defaultTypes) {
return ...;
}
> if (typeof(type) === 'object' && type.length)
Это неправильно, надо еще проверять что в length неотрицательное число и что есть свойства 0 ... length -1
>>378448
У тебя вообще почему-то слово klass добавляется: http://jsbin.com/kafiweyavoza/1/edit
Удалять класс удобнее регулярным выражением либо replace(). Учти, что класс может быть в нескольких экземплярах — тогда надо удалить все.
> removeClass не работает. Почему?
Потому что
> node.className.split(' ', classes1);
Второй аргумент зачем?
>>378452
http://jsbin.com/kafiweyavoza/3/edit?js,console
Чем удобнее? Мне с регулярками вот совсем не удобно работать. Да и забываться начали.
>>378453
Кстати как-то через json еще делают. Но я не вникал пока что.
>>378457
http://jsbin.com/bowix/8/edit?js,console
Остальное завтра доделаю.
Анон, зделол я задачки с narod.ru. Куда дальше топать?
http://ideone.com/jPWFK5
Можно прокомментировать вот это решение задачи?
>>378498
Норм. Я тупо сравнение для трех зделол после запила функции, а ты запилил для n-го кол-ва.
>>378457
http://jsbin.com/kafiweyavoza/5/edit?js,console
Ну вот.
На jquery более сложная функция: http://jsbin.com/mapute/3/edit?js,console
>>378450
PowerUnit - это PowerGrid по моему, да?
От isDay зависят не все классы.
>То же отсноистя и к остальным случайным числам.
Как тогда? Есть диапазон, и мощность колеблется в его рамках. Или я должен диапазоны всех классов держать в голове? А может выбрасывать исключения, которые указывают на максимальное значение?
>который переопределен во всех потомках
http://jsbin.com/hekole/14/edit?js,console
Значит нужен миксин? А пока свойства не копируются.
>>378215
http://ideone.com/lbr6yq
Нужна помощь с задачей про коше мышек, вообще не могу представить какие у кого должны быть свойство и как вообще все это дело писать. Непонимать абсолютно.
class Field
public $x = N;
public $y = N;
abstract class Animal
public $name;
public $x;
public $y;
class Cat extends Animal
class Mouse extends Animal
>>378460
Решать дополнительные задания, смотри сколько их у нас:
— на работу с датами: https://gist.github.com/codedokode/10539805
— по основам JS/DOM: https://gist.github.com/codedokode/ce30e7a036f18f416ae0
— сделать игру на JS: https://gist.github.com/codedokode/9933897
— по основам MySQL: https://gist.github.com/codedokode/10539213
— задача сделать клон rghost на фреймворке: https://gist.github.com/codedokode/9424217 (требуется знание MySQL, основ HTML/CSS)
— задача сделать борду, верстка уже сделана: https://github.com/codedokode/board-markup
В принципе, можно например изучить основы MySQL и переходить к файлообменнику — это хорошая задача, которая позволяет прокачать знания в разных областях и познакомиться с фреймворками.
У тебя вообще как с HTML/CSS? Изучал? не изучал? У меня в учебнике вроде есть 10 простых заданий на CSS.
Ну и стоило бы решения задач показать, может у тебя там ошибки есть? По ООП по крайней мере, это важная тема.
>>378554
Оп, а я первую зарплату получил на работе благодаря тебе.
>>378458
Я сейчас посмотрел, checkType не защищает от того например что мы поменяем местами size и filling или попробуем добавить в качестве добавки Hamburger.TYPE_SMALL. Надо бы это исправить.
Ну и это:
> if (arguments == arguments[i - 1])
ненадежная проверка. Надо сделать по-другому:
if (arrayContains(this.extended, arguments)) {
throw...
}
>>378498
Хорошо, что ты догадался использовать массив для банков. Так действительно удобнее. Считает программа правильно.
В строках 27-31 функция расползлась. Если вызов функции не помещяется в строчку, аргументы можно писать вертикально с отступом, как тут: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md#46-method-and-function-calls
Настрой IDE чтобы при нажатии Tab вставлялось 4 пробела, а не таб (такая настройка есть в любом нормальном редакторе, кроме блокнота). А то твой код будет разваливаться и разъезжаться в разных редакторах.
> payment = $debtAmount < $monthlyPayment ? $debtAmount : $monthlyPayment;
Используй min(). И обычно при переносе строк знак остается на первой строке:
$x = $y ?
$z :
$w;
А тут вообще все можно было в 1 строчку записать.
Анон, мне нужна помощь. Я хочу научиться писать на PHP, но не знаю как мне быть - учить самому по книжкам\гуглу или топать сюда http://web.xxi.kiev.ua/programming?_ga=1.94106397.1677494808.1374923540. Проблема в том что полтора года назад я ходил в это место на курсы вэбдиза и верстки и они мне не дали больше\понятнее чем гугл\курсы специалиста. Реально ли выучить ПХП самому?
>>378506
О, теперь более-менее нормально.
> if (!node.className && !hasClass(node, klass)) {
Вторая проверка hasClass зачем?
http://jsbin.com/rucarugafuce/1/edit — не добавляется класс add
Имена CSS классов чувствительны к регистру (вопрос на SO: http://stackoverflow.com/a/12533957 ). Использовать флаг i для регулярки нельзя.
> node.className = '';
> node.className += newClasses.trim();
Зачем += ? Почему нельзя сразу записать newClasses в className?
Ну и функция String.prototype.trim() появлилась только в ES5, то есть в IE8 ее нет, так что напиши пожалуйста и ее заменитель. Тебе наверно эта задача уже поднадоела, но я думаю, что исправив эти замечания, с ней можно будет закончить.
> На jquery более сложная функция
О, это очень хорошо что ты исходники jQuery читаешь. Продолжай их дальше читать.
Только у тебя по моему какой-то старый код. Новый на гитхабе: https://github.com/jquery/jquery/blob/master/src/attributes/classes.js#L55
Там чуть сложнее из-за того, что можно передать несколько классов сразу через пробел, а также передавать функцию (которая позволяет заменять классы, как ты наверно догадался).
Также, объект jQuery содержит коллекцию DOM элементов и может удалять классы у них всех сразу, что видно из этого:
> for ( i = 0, l = this.length; i < l; i++ ) {
> elem = this[ i ];
this — это ссылка на объект jQuery, который в ключах 0, 1, ... length - 1 хранит дом-элементы (то есть объект jQuery напоминает псевдомассив, если ты разберешь функцию его создания, то увидишь). Соответственно, в цикле мы удаляем классы у всех хранящихся в нем элементов.
И вместо регулярок там используется обычное удаление подстроки — возможно, ради оптимизации (так как генерация регулярного выражения занимает какое-то время, пусть и маленькое). Но видишь, там приходится использовать while так как если ты передаешь в replace строку вместо регулярки, то она заменяется только первый раз (из-за отсутствия флага g, который в JS сделан очень неудачно на мой взгляд, так как его все время забываешь поставить). И приходится заменять прбельные символы (табы, переводы строк) на пробелы этим выражением:
replace( rclass, " " )
чтобы поиск по строке работал.
Заметь также, вот это место:
> if ( elem.className !== finalValue ) {
> elem.className = finalValue;
Мы не записываем назад строку если она не поменялась — чтобы не запустить пересчет css-значений и перерисовку и вообще, чтобы поменьше обращаться к DOM. Я правда это не тестировал, но тоже слышал, что какие-то браузеры могут запустить пересчет css значений или перерисовку при записи в DOM.
>>378562
Делись кулстори, вдохнови тех кто еще в процессе учебы.
>>378570
Я пришел к выводу, что 1.8.2 самый оптимальный, т.к. на другие IE у меня по-крайней мере начинает ругаться.
>>378508
Ну так ты сам написал:
> default:
> return 'undefined';
Вот он и возвращает 'undefined'
Посмотри, что дает toString.call() для дом-объекта и исправляй логику. Она у тебя неправильная.
>>378511
> От isDay зависят не все классы.
Ну и что? Это не запрещает нам передавать его как аргумент в расчет баланса.
> Есть диапазон, и мощность колеблется в его рамках.
Не, ты не так понял (или я плохо объяснил), мощность панели каждый день постоянна, просто бывают панели разных мощностей.
> Значит нужен миксин?
Не нужен.
> А пока свойства не копируются.
А почему ты конструктор предка не вызываешь из конструктора потомка? Сам себя он не вызовет. Это ты наследование неправильно реализуешь.
> var structure = {
Думаю логичнее использовать массив, так как однотипных элементов сети может быть несколько, например несколько электростанций или домов.
>>378536
> вообще не могу представить какие у кого должны быть свойство и как вообще все это дело писать.
Очевидно, что у мышек и кошек есть много общего - их можно поместить на карту и двигать по ней. Логично сделать их наследниками общего класса Животное (или Юнит или Персонаж).
Свойства животных — координаты, у кошек добавляется сонливость. Должны быть методы перемещения по карте, у кошки еще метод «съесть мышку». Должен быть метод «сделать ход», который будет вызваться каждый ход.
Свойство карты — это массив находящихся на ней животных. Должны быть методы добавления и удаления с карты.
Ну и еще можно сделать объект Игра, который создает карту, животных, помещает их на нее, и считает ходы, в общем руководит процессом.
То, что у тебя написано, подойдет как основа.
По ООО вектор:
> $chief->isChief = true;
Такие вещи лучше делать через методы. В задачке про кошек сделай именно через методы. Иначе код получается сильно связанным: значение свойства можно поменять из любого места программы, а не только из самого класса.
> public function setChief(Employee $chief)
По хорошему, тут надо бы проверять, а нет ли у департамента существующего шефа, если есть то увольнять его, сбросив флаг isChief. Но в этой задаче шефов не меняют, потому я могу на это закрыть глаза.
Ну и проверять, а не является ли новый шеф шефом в другом департаменте? Если да, то убирать его оттуда, но опять же, в этой задаче можно обойтись без этого.
> $employeesSalary += $this->chief->getSalary();
Тут надо сначала проверять, а есть ли шеф.
В остальном, все хорошо.
>>378562
Молодец, что. Вдохнови тогда других анонов, а то некоторые не верят, что в нашем треде можно чему-то научиться.
>>378567
Реально, другие аноны изучали. Насчет книг, 2 хороших, годных книги (Зандстра и Шлосснейгл) указаны в ОП-посте, но чтобы за них взяться, надо сначала изучить основы HTML и PHP по любой другой книге.
Если уровень курсов тебе не понравился, то второй раз наверно не стоит идти.
Ну и в нашем треде ты всегда можешь уточнить, если тебе будет что-то непонятно.
>>378572
Да, в версии 2 перестали поддерживать IE8: http://jquery.com/browser-support/
Версия 1 в отдельной ветке: https://github.com/jquery/jquery/tree/1.x-master — но в ней вроде код тот же самый: https://github.com/jquery/jquery/blob/1.x-master/src/attributes/classes.js#L11
>>378574
> if (node.className.search(new RegExp('(\\s+|^)' + klass + '(\\s+|$)', 'g')) == -1) {
А что не hasClass? Короче бы вышло и читабельнее. И флаг g не нужен тут.
> node.className = '';
> node.className += newClasses.trim();
Зачем тут 2 строки когда можно написать одну?
> return (' ' + node.className + ' ').indexOf(' ' + klass + ' ') > -1;
Тут есть (как ты надеюсь заметил благодаря jQuery) подвох, что классы могут быть разделены другим пробельным символом вроде таба или перевода строки:
class1\tclass2
class1\nclass2
Надо бы их заменять на пробел (можно сделать замену \s+ -> ' ').
>>378574
Глянь еще эту строчку в jQUery: https://github.com/jquery/jquery/blob/master/src/attributes/classes.js#L154
>>378583
Буду пытаться учиться с вами, господа. Сейчас вспоминаю HTML\CSS, а то как-то было не до этого.
>>378571
Было сильное желание заработать денег, т.к. жил в нищите. Случайно наткнулся на этот тред. Загорелся, решил научиться. Это было где-то в феврале 2013 года, точно не помню. Думал быстро научусь за пару месяцев, хотел все и сразу. Первые задачи сам делал, в тред не выкладывал, т.к. быстро решались и был уверен в правильности.
Старые решенные задачи еще даже сохранились. Сейчас смешно смотреть на тот стиль написания.
Ну и пошло-поехало, делал одну задачу за другой. Сумма прописью мне трудно далась, бросал на недели даже. А сдача про банкомат так вообще был ад какой-то, месяц или больше (или 3 месяца?) я с ней возился лол (ОП наверное помнит). А после нее все пошло как по маслу, может благодаря ей я и разобрался во всех нюансах.
Во всех задачах ОПа самая решающая задача и поворотная - наверное про сдачу, где очень хорошо нарабатывается опыт.
Попутно с мая этого года я искал работу, побывал во всех студиях мухосранска, ждал заказы на фрилансе. И вот в начале июля мне позвонили и сказали подойти на собеседование. Спросили, что знаю и умею, а я ответил, CSS и HTML, а PHP и JS в процессе изучения. Ну меня и взяли. Теперь у меня собственное рабочее место, отличный коллектив, и рутинная работа лол.
Кстати мотивация такая сильная появилась довольно недавно, где-то с мая как раз, когда начались поиски. Сейчас мое просиживание за компом заключается в постоянном решении задач ОПа. Если выходной, то я с большой вероятностью просижу и прорешаю весь день какие-нибудь ОПовские задачи. Сейчас это как мания какая-то, мне это интересно. С работы прихожу и сразу сажусь на свое удобное место и решаю, решаю и решаю задачи ОПа постоянно допоздна, а потом просыпаю работу лол.
Такие дела, анончики.
>>378608
Лол, а у меня с банкоматом и прописью довольно легко вышло, буквально за день решил, а вот с кругом и считалочкой было сложнее, и я уже неделю застрял на задаче с поиском пути.
>>378608
А какие-нибудь проверочные задания тебе давали? По теории спрашивали?
Олсо, какая з/п?
>>378608
Больной для меня вопрос: сколько лет тебе?
30-летний-старикан-кун
>>378609
А там усложненная версия есть, где добавлены купюры по 200 и 2000, вряд ли ты ее за день решишь.
>>378612
Ничего не давали и теорию не спрашивали. З/п 20к сейчас, что для меня большие деньги лол по сравнению с былыми временами, когда жил на 100р в день. Через год думаю устраиваться в более крупную компанию на более крупную з/п, но уже с опытом.
>>378613
21лвл. В 30 легко устроиться также, нет разницы.
>>378618
Чем конкретно на работе занимаешься? Какие задачи тебе ставят?
Первые дни как вникал в проект? Сидел сам разбирался?
>>378624
Joomla, Webasyst, MODX, Wordpress, самописные движки. Верстаю сайты, запиливаю интернет магазины для местных барыг, иногда не только местных. Разбираюсь с джумлой, простые модули вроде получается писать. Мелкие задачи с js: кнопка вверх, плавная прокрутка, открывашка картинок и т.д. Разные задачи, хотя многое мне еще не доверяют, особенно касаемо php.
>>378635
>Joomla, Webasyst, MODX, Wordpress, самописные движки.
Да ты же контент-менеджер
Аноны, кто решает задачки на JS, обязательно используйте strict mode:
http://learn.javascript.ru/strict-mode
http://habrahabr.ru/post/118666/
>>378563
Как это организовать?
Что-то вроде Hamburger.price.size[Hamburger.TYPE_SMALL], но так не работает.
>>378655
Что организовать? Проверку что размер правильный? Можно сделать массив возможных размеров:
Hamburger.sizes = [Hamburger.SIZE_SMALL, ...];
И проверять что size в нем есть. Можно еще как-то.
>>378645
какой-то хуй сказал что надо использовать стрикт и все понеслись? сила интерпретатора в том чтобы не маяться хуйней с проверкой типов
http://jsbin.com/hezewa/3/edit?js,console
Оп, я твое задание невнимательно прочитал и создал такое вот поле. Интересно можно ли сократить код как-нибудь?
http://jsbin.com/datan/5/edit?js,console
Не работает.
>>378734
> Интересно можно ли сократить код как-нибудь?
Конечно, можно. Надо цвет ячейки задавать в том же цикле, где и создается таблица. Вычислить его нетрудно зная i и n
Цвет ячейки гораздо умнее задавать с помощью класса.
Алсо, где реакция на нажатие?
>>378657
> else if (typeof(type) === 'object' && type.length >= 0 && type[0]) {
Надо бы сделать нормальную проверку. type[0] не годится так как если там хранится false то это не сработает.
Надо проверять что length неотрицательное число и что есть свойства от 0 до length -1.
То, что в default, лучше вынести за switch, а default убрать — тогда отступов будет меньше. А то как-то многовато кода внутри switch
>>378650
> node.className = (node.className).replace(/\s+/g, ' ');
Вот это плохо. Лучше сохранять это в новую переменную, так как запись в className может вызвать пересчет css-свойств (reflow) и перерисовку (repaint), а функция проверки наличия класса не должна вызвать таких эффектов.
Пруф: открой инспектор в Хроме прямо на этой странице, там введи код:
function upd() { document.body.className += ' '; }
Затем перейди на вкладку Timeline и нажми запись (кружочек внизу), и выполни в консоли upd(). затем останови запись — там будет recalculate styles и layout. То есть при добавлении пробела к className происходит пересчет стилей, довольно тяжелый, так как страница большая (у меня 127 ms вышло).
Более того, пересчет стилей запускается даже если сделать
document.body.className += '';
то есть просто записать в className старое значение. Так-то!
>>378777
> newCell.style.borderWidth = '1px';
Это надо делать через css. Я бы еще border-collapse добавил.
> Не работает.
Посмотри отладчиком или сдампь что там в переменной e (точнее e.target) приходит.
Алсо, не вешай события через onclick (почему? потому что так ты затираешь предыдущий обработчик), onclick используется только в html-коде, а тут надо использовать addEventListener/attachEvent.
>>378781
Ох лол, почему-то имя тега прописными буквами приходит ('TD').
>>378802
http://jsbin.com/datan/11/edit?js,console
Работает! Только я кажется лишнего нагородил, наверное нужно оптимизировать как-то.
Оп, а мои функции addClass, removeClass, hasClass уже можно применять открыто вместо jQuery'вских, или еще можно как-то оптимизировать, сделать совершенней?
А то получилась бы моя библиотека по работе с классами.
>>378818
А можно сделать, чтобы при зажатой клавише мышки окрашивались квадратики на которых падает указатель? Можно было бы создать холст для рисования с маленькими ячейками. А также чтобы количество ячеек увеличивалось по размерам окна и уменьшалось соответственно. Подобие canvas получится.
>>378818
> Оп, а мои функции addClass, removeClass, hasClass уже можно применять открыто
Можно, только положи их в объект например dom (или любой другой) чтобы глобальные переменные не засорять:
var dom = {};
dom.addClass = function () ...
>>378821
> А можно сделать, чтобы при зажатой клавише мышки окрашивались квадратики на которых падает указатель?
Конечно, можно. Вместо click надо обрабатывать mousedown, mousemove и mouseup. Причем обрабатывать аккуратно: пока ты движешься по клеточке, mousemove может придти несколько раз, но перкрашивать ее надо один раз.
>>378818
> <a id="changeColor">
В задании требуется сделать кнопку, а для кнопок есть button type="button". Ссылка — это то, что куда-то ведет и есть href.
> if (document.addEventListener) {
Хорошая новость: attachEvent нужен только в ИЕ8 и ниже, так что скоро он перестанет быть нужен вообще.
> removeClass(target, 'white');
> addClass(target, 'black');
Достаточно только класса black вообще-то
> target.className == 'white')
Ненадежно, надо использовать hasClass а то если мы добавим еще какие-то классы, все сломается
Смену цветов при нажатии кнопки надо сделать без циклов. Подсказка: попробуй просто добавлять/убирать класс на самой таблице.
Кстати, сделай-ка еще функцию toggleClass которая либо убирает (если он уже есть) либо добавляет класс — она тут пригодится.
Первое жс задание на DOM http://jsfiddle.net/zqvyte8q/
http://ideone.com/CvTFln
первая задачка на регэкспы
http://ideone.com/5QXknw
Вот как мне записать в $pathDone весь проделанный путь? В промежуточных циклах функция вызывает саму себя и ничего не возвращает, как из неё извлечь данные? Переменные, которые я там создам все равно будут локальными.
>>378889
Такого больше нет в пхп. Только массив всех переменных $GLOBALS, но он мне не подходит, по понятным причинам.
Анон, насколько имеет смысл учить связку PHP/JS?
Есть желание пополам с необходимостью уехать из своих пердей с безработицей и нищетой в происках лучшей жизни. Судя по вакансиям, от начинающих макак требуют вообще знание пыхи+js+html+css. Хочу учить все это чтобы иметь больше шансов трудоустроиться на новом месте года через два-три.
Такой вот хитрый план. Ну, что скажешь?
ОП, делаю твой макет с отзывчивостью - https://github.com/infinitecats/infinitecats.github.io. Там пока сделано мало, но думаю, что косяков уже куча.
Там в макете есть шрифты, которых я не нашел(google.com/fonts, typekit.com, webfont.ru/). Я заменил Lucida Sans на Roboto, Segoe WP на OpenSans. А Lao UI - я так понимаю встроенный?
Как там делать картинки в топ-меню? Псевдоклассами? Спрайтщм можно? Или лучше по отдельности?
Там у мобильной версии у верхний части есть тенюшка. Лучше в один блок засунуть left-column и top-menu? Чтобы тень норм была. А то когда по отдельности видно разделение.
Правильно ли я делаю когда пишу в body font-size: 100% или лучше в px? И как сделать так, чтобы по уменьшению размера экрана уменьшался шрифт, И нужно ли вообще так делать, Или размер шрифта должен быть неизменным?
>>378888
Так, все оказалось ещё хуже, чем я думал. Я попробовал вбить маршрут с василеостровской до петроградской, чтобы не было зацикливания (так как соединяющие их точки -первые элементы соответствующих массивов) и она все равно не работает. Так что дело не только в зацикливании пути, но видимо функция еще и не вызывает саму себя больше одного раза, то-ли просто не может вытащить значение из вложенных функций в самую первую.
>>378826
http://jsbin.com/datan/17/edit?js,console
Все-таки класс .white может нужен? Что-то не выходит.
>>378778
>свойства от 0 до length -1
Я вот честно не знаю как это проверить. Разве что type[type.length - 1];
>>377651
Это вроде бы победа - http://jsbin.com/lubewuqa/3/edit
О, круто, только увидел задачи по DOM. Буду делать. После них я уже буду на достаточном уровне, чтобы переходить на jQuery?
Вторая жс задача про DOM http://jsfiddle.net/c98x5dud/
>>378937
Я думаю да. На jQuery будет тоже самое только написанное все за тебя.
>>378857
> if(!('className' in node)){
Для чего эта проверка?
Удаление классов нормально не работает: http://jsfiddle.net/j4p618cc/
> node.className.split(' ').indexOf(klass) > -1;
Тут пара моментов:
1) классы могут быть разделены не только пробелом, но и табом \t или переводом строки \n. Это редко, но бывает.
2) indexOf для массива появилась только в версии ES5 (то есть в новых браузерах, а мы пишем в этой задачке кроссбраузерные функции). Раз ты ее используешь, то напиши вместо этого метода свою функцию.
>>378878
Ох, тебе надо было номера разложить в 2 массива — правильные и неправильные, чтобы программа сама себя бы проверяла. А так, приходится глазами всматриваться в них и сравнивать.
Но ты правильно решил сделать список. Только его надо чуть улучшить.
Задачу надо проверить на большом числе телефонов, чтобы убедиться что твой код правильный.
Для этого давай добавим в программу тесты, чтобы сразу было видно, верно все работает или нет. Сделай 2 списка номеров (правильные и нет), добавь их в программу и напиши цикл, который их по очереди прогоняет через регулярку и проверяет что они определяются как надо (если нет — надо вывести какой именно номер не распознается правильно).
Вот список номеров:
Правильные: array('84951234567', '+74951234567', '8-495-1-234-567', ' 8 (8122) 56-56-56', '8-911-1234567', '8 (911) 12 345 67', '8-911 12 345 67', '8 (911) - 123 - 45 - 67', '+ 7 999 123 4567', '8 ( 999 ) 1234567', '8 999 123 4567');
Неправильные: array('02', '84951234567 позвать люсю', '849512345', '849512345678',
'8 (409) 123-123-123', '7900123467', '5005005001', '8888-8888-88',
'84951a234567', '8495123456a',
'+1 234 5678901', // неверный код страны
'+8 234 5678901', // либо 8 либо +7
'7 234 5678901' // нет +
);
К этому списку добавь еще свои номера и проверь. Я чувствую, там некоторые варианты не пройдут проверку.
Еще, по моему тут слишком сложно:
> (\s?-?\s?[(]?\s?\d\s?[)]?\s?-?\s?)
Вместо того чтобы подбирать комбинации символов, проще использовать вариант «любое число скобок, пробелов, минусов».
>>378888
> Вот как мне записать в $pathDone весь проделанный путь?
Перед тем как вызывать себя рекурсивно, копируешь $pathDone в новый массив и добавляешь туда точку, в которую идешь. Так, при каждом вызове функции будет добавляться по точке и в итоге в последний вызов функции придет полный путь.
А ты вместо этого делаешь что-то странное:
> $container=oneStep($paths, $paths[$point][$key1], $paths[$point][$key1]['time'], $key1, $target);
Не очень понятно зачем ты передаешь $paths[$point][$key1] в качестве $pathDone — там же должен идти массив пройденных точек, а не это.
> В промежуточных циклах функция вызывает саму себя и ничего не возвращает, как из неё извлечь данные?
Передаешь в функцию через аргументы, возвращаешь через return. Этого достаточно. Если надо вернуть несколько значений — возвращай массив.
Ну и может тебе стоит еще почитать про другие алгоритмы? Там может оказаться что-то попроще: https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%BF%D1%83%D1%82%D0%B8
>>378889
Не смотрел — не советуй.
>>378891
Не надо искать костыли когда можно сделать нормально.
>>378949
http://ideone.com/zYW3cL
Я вроде немного продвинулся вперёд, но все равно $pathDone придётся переделывать, как я понял.
>>378894
Если будешь хорошо стараться, то быстрее чем за «два-три» года выучишь. Смысл имеет так как php/js/html/sql/css — очень востребованный набор. Посмотри hh.ru b проверь сам.
В нашем треде кстати есть задачки на все эти технологии.
>>378902
Что-то я потерял макет. Ты можешь его куда-нибудь закачать?
> Там в макете есть шрифты, которых я не нашел
Ну если нет таких, то замени на похожие по внешнему виду и стилю.
Вот список web safe шрифтов, то есть которые скорее всего установлены:
http://sawarogu.3neko.ru/articles/spisok-bezorasnykh-shriftov-web-safe-fonts/
> Я заменил Lucida Sans на Roboto,
Lucida Sans поставляется вместе с Windows и маком если я не путаю. Только она там называется Lucida Sans Unicode (на маке — Lucida Grande). Если я не путаю ее с другим шрифтом.
> Segoe WP на OpenSans
Segoe UI — входит в Windows начиная с висты. По поводу WP в вики написано:
> Segoe WP is the Windows Phone 7 specific version of Segoe. The Segoe WP family is distributed with Microsoft Visual Studio 2010.
Версия доработанная в честь выхода Windows Phone. Думаю, можно заменить на Segoe UI с фоллбеком на OpenSans (хотя я не уверен, что у них размеры и пропорции букв совпадают).
> А Lao UI - я так понимаю встроенный?
Вряд ли, это как раз какой-то нестандартный.
> Как там делать картинки в топ-меню? Псевдоклассами? Спрайтщм можно? Или лучше по отдельности?
Если это иконки то да, спрайтами и псевдоэлементы after/before можно использовать, они вроде даже в IE8 работают.
> Лучше в один блок засунуть left-column и top-menu? Чтобы тень норм была. А то когда по отдельности видно разделение.
Видимо, да.
> Правильно ли я делаю когда пишу в body font-size: 100% или лучше в px?
100% от чего? Нет смысла это писать. лучше наверно в px.
> И как сделать так, чтобы по уменьшению размера экрана уменьшался шрифт,
Не надо. По идее в CSS есть например миллиметры и сантиметры (а в CSS3 и проценты от ширины окна), но ты ведь должен не только размер шрифта менять, но и всех элементов, картинок, а это очень заморочно. Плюс, как-то сделать чтобы шрифт не стал нечитаемым. Потому лучше использовать пиксели и неизменный шрифт размером как на макете.
ОП, в первой задаче по DOM нужно использовать регулярные выражения? С помощью innerHTML? Хотел попробовать сделать второй номер, но я так понимаю там нужны функции из первого?
>>378956
Макет раз - http://rghost.ru/57518135 (компьютер)
Макет два - http://rghost.ru/57518184(мобильник)
>>378902
А зачем там столько разновидностей Sans-serif шрифтов? Там макет так и сделан? Просто как-то странно когда используется много шрифтов похожего начертания, так обычно не делают так как должен быть контраст между разными шрифтами.
Алсо,
> @media screen and (max-width: 640px) {
> @media screen and (min-width: 1024px) {
А что если ширина окна 900 пикселей? Так не делают. Делают просто верстку для всех, а потом дополнения для маленьких экранов (или наоборот для огромных).
Алсо, что это за упоротые цифры:
> width: 49.01960784313725%;
> width: 78.46153%;
> 2.411764705882353em;
Это ненадежно, так как ты не знаешь с какой точностью работает браузер и как округляет числа. Не рассчитывай что выйдет ровно столько сколько ты написал, может получиться на 1-2 пикселя больше или меньше.
>>378903
Попробуй сделать чтобы она выводила точки которые обрабатываются, чтобы было наглядно видно что вызвается и что передается в функцию. Слишком много только не выводи, а то на ideone если лимит на объем вывода.
>>378908
Не нужен. Белая клетка — та, у которой нет класса black (а когда цвета перевернуты то наоборот). Этого вполне достаточно.
> Что-то не выходит.
Попробуй что-нибудь поменять.
> <input ... />
В HTML слеш в конце не ставится, он ставится в XML и XHTML. Полная история: http://softwaremaniacs.org/blog/2005/12/19/xhtml-you-say/
> newCell.width = '28px';
Это надо делать через CSS а не JS.
> return false;
Зачем?
> border-spacing: 0;
Чтобы не было жирных линий, используй border-collapse
>>378960
>что это за упоротые цифры
Лол, ну я прочитал книгу Итана Маркота "Отзывчивый веб-дизайн", ну и там прямо так и делалось. А как тогда?
>>378960
Так как делать ширину? В % или px? А шрифты в em или в px? Сначала сделать общий css, потом для каких экранов доделывать?
Чому у меня из-за
if(in_array("$key", $pathDone)){
continue;
}
страница показывает NULL?
>>378913
Циклом
>>378930
> SIZE_SMALL = 'МАЛЕНЬКИЙ';
Ой, вот так делать не стоит, название лучше записать в Hamburger.type. Не надо в константах хранить информацию.
> for (var size in Hamburger.type) {
> if (hamburger == size) {
А зачем здесь цикл? Цикл нужен чтобы сделать много действий подряд.А у нас действие одно — задать размер гамбургера.
> return 'Несуществующий вид гамбургера. Попробуйте снова.';
Используй исключения и throw new Error(). Твой вариант ошибки не сработает если тот, кто вызвал функцию, не проверяет что она возвращает. А вот исключение — сработает.
> (arguments[2] && additive === undefined)
Как это условие может выполниться? additive же и есть аргумент с индексом 2 если считать с нуля. Что это вообще должно делать?
> this.order.additive = Hamburger.additive[typeAdditive];
> this.text += ', Добавка: ' + typeAdditive;
> this.correctAddi = true;
По моему, это неправильный подход. Так не принято делать в ООП. Это не ООП, а непонятно что.
Какие свойства есть у гамбургера?
- размер
- начинка
- список добавок
Все остальное (text, correctHamb, generalPrice) можно вычислить исходя из этих данных с помощью методов. Раз их можно в любой момент вычислить, значит их нет смысла вообще хранить как свойства. Меньше свойств — меньше геморроя по поддержанию их в актуальном состоянии.
Ты немного все переусложнил. Вместо
> this.order.additive
можно написать this.addditive — так и проще и короче.
В общем, предлагаю воспользоваться принципом «не преумножай сущности» и выпилить все свойства, кроме указанных трех.
Функция makeSelection должна только задавать параметры гамбургера (и проверять что они верные).
А если заводить кучу свойств, то ты замучаешься их потом обновлять например при изменении в заказе или удалении добавок.
> return 'Количество калорий: ' + this.generalCal;
Это неудобно. Может я захочу сложить число калорий в нескольких гамбургерах, как это сделать если ты возвращаешь не число, а текст? Возвращай число, а текст дописывай где-нибудь в другом месте, например в отдельной функции.
>>378967
http://jsbin.com/bowix/13/edit?js,console
Оп, я доделал. Проверь.
>>378937
Да.
>>378941
> column.height = tbHeight;
Ой не, вот это не используй — это какие-то древние свойства 20-летней давности. Используй CSS вместо JS для этого.
> row.style.borderColor = 'black';
Используй CSS а не JS
> document.getElementById('table').onclick
Давай будем использовать addEventListener так как на onclick можно повесить только один обработчик (тут он один, но все равно это дурная практика). onclick — он для использования в HTML-коде.
> (hasClass(target, 'fill_black')) ? removeClass(target, 'fill_black'): addClass(target, 'fill_black');
Используй тут if, не пиши так, так как явное лучше неявного. Алсо, тут можно бы написать функцию toggleClass(node, klass) которая включает/выключает класс.
Кнопка «сменить цвет» не работает — она все закрашивает черным, а должна менять местами черное и белое.
>>378971
Чет я не догоняю как без цикла сменить всем ячейкам цвет. Писать рекурсивный toggleClass? По производительности все равно будет как цикл.
>>378960
>а когда цвета перевернуты то наоборот
Наоборот что? Черная клетка та, у которой нет класса .black?
>>378950
> $pathDone=array($pathDone, "$point=>$key"=>$paths[$point][$key]);
Не, это какие-то костыли. После нескольких вызовов ты получишь массив с кучей вложенных элементов вида
array(array(array(array(....))))
и с ним невозможно будет работать. Сделай лучше нормальный массив, одноуровневый.
> $container=oneStep($paths, $pathDone, $time, $key, $target);
> return $container;
По идее ты должен попробовать проложить путь через каждую точку в цикле и выбрать наилучший и его вернуть, а не самый первый.
> но все равно $pathDone придётся переделывать, как я понял.
ну да
>>378957
> регулярные выражения?
можно
> С помощью innerHTML?
ну ты попробуй, а я прокомментирую и скорее всего скажу что это неправльно.
> Хотел попробовать сделать второй номер, но я так понимаю там нужны функции из первого?
да, они там пригодятся.
>>378959
Спасибо
>>378962
Не писать по 10 знаков после запятой, а максимум 1-2 и понимать, что браузер все равно округлит так как захочет, плюс-минус пара пикселей и макет должен это выдержать.
>>378963
Ширину можно и в %. Шрифт — в пикселях.
> Сначала сделать общий css, потом для каких экранов доделывать?
Потом для маленьких (то есть смартфонов).
>>378964
Не знаю.
>>378969
> throw new Error('Неверные данные');
Лучше писать 'Неверные данные, size=' + size — это поможет тебе же при отладке программы.
> this.checkForSimilarExtended(arguments);
А она сработает если добавить одну и ту же добавку несколькими отдельными вызовами addExtended? Очевидно нет: http://jsbin.com/veqogomunuke/1/edit
В остальном, все нормально.
>>378981
Я пытаюсь сделать одноуровневый массив, но что-то не выходит. Пробовал делать и $pathDone[]=$key и через array_push, но в любом случае он выводит 0, не знаю почему. Получается только
через $pathDone=array($pathDone, $key) с кучей вложенных массивов.
>По идее ты должен попробовать проложить путь через каждую точку в цикле и выбрать наилучший и его вернуть, а не самый первый.
Без return рекурсивная функция не работает, я бы с радостью просто записывал результат в переменную, а не сразу возвращал её, но тогда вызов подфункции ничего нам давать не будет.
>>378981
http://jsbin.com/veqogomunuke/3/edit?js,console
Миссия выполнена.
> Я пытаюсь сделать одноуровневый массив, но что-то не выходит.
Проверь, что ты туда кладешь. Надо класть только названия станций, а не все подряд. И
$pathDone[]=$key
должно работать. Проверь, что в $key.
> Без return рекурсивная функция не работает, я бы с радостью просто записывал результат в переменную, а не сразу возвращал её, но тогда вызов подфункции ничего нам давать не будет.
А ты записывай не в переменную, а в массив, а потом выбирай из массива лучши вариант и возвращай его.
>>378984
> this.checkForSimilarExtended(this.extended);
Проще перед добавлением каждой добавки в this.extended проверить, есть ли она уже там.
Алсо, если ты делаешь вложенный цикл, то лучше бы обойтись без него. А если никак, то внутренний цикл лучше начинать не с 1 а с i + 1.
А в остальном, верно.
>>378985
http://ideone.com/J5Yqkk
>$pathDone[]=$key
Не работает. Прост пустой массив получается.
>>378960
>> return false;
>Зачем?
Я просто подумал, что без него цвет просто мигнет. Где-то читал про это. Где-то же на onclick ставят return false;
>>378987
>>378985
Да и насчет
>А ты записывай не в переменную, а в массив, а потом выбирай из массива лучши вариант и возвращай его.
Мне все равно придется возвращать что-то, массив ли или переменную. Допустим мы вызываем функцию для трех точек.
1. Вызывается функция oneStep.
2. Она в свою очередь вызывает саму себя.
3. Третья функция таки находит цель и возвращает результат из else локальной переменной container второй функции. Загвоздка в том, что эта вторая функция ничего не будет возвращать самой первой, если мы не напишем return $container, то есть все равно сразу придется возвращать первый попавшийся результат, иначе вызов второй функции просто не даст ничего и страница будет пустой.
>>378982
>css-правила
Типа таких http://jsfiddle.net/c98x5dud/2/ ?
Ненавижу css! Понимаю что декларативный язык все такое, но почему даже моя умная IDE WebStorm не может анализировать css и написать что ты упоролся и пишешь ерунду. Как вообще тестируют css если он не выводит ошибки и вообще нихера не делает.
http://jsbin.com/datan/22/edit?js,console
Оп, я сделал.
>>378998
Спасибо. Ты помог мне разобраться.
>>378987
Ты сделал очень большую ошибку. Ты вместо -1 написал в начале
error_reporting(0);
А это значит не показывать сообщения об ошибках. Исправь это для начала.
> Не работает. Прост пустой массив получается.
Значит, в массив ничего не кладется и до строчки $pathDone[]=$key; он просто-напросто не доходит. Ищи, почему.
>>378990
А ты не гадай а читай мануалы
http://learn.javascript.ru/#book-toc-425
в частности это http://learn.javascript.ru/default-browser-action
>>378993
> Мне все равно придется возвращать что-то, массив ли или переменную.
Верно.
> Загвоздка в том, что эта вторая функция ничего не будет возвращать самой первой, если мы не напишем return $container, то есть все равно сразу придется возвращать первый попавшийся результат, иначе вызов второй функции просто не даст ничего и страница будет пустой
Неверно. Ты можешь вызвать функцию oneStep несколько раз в цикле, результаты сложить в массив, а потом пройтись по массиву, выбрать лучший и в итоге его вернуть через return.
иначе твоя функция проверяет только первый вариант в каждой точке и не способна найти путь через другие точки.
> иначе вызов второй функции просто не даст ничего и страница будет пустой.
Почему, если в функции стоит return, рано или подзно он выполнится.
>>378998
Ты наверно его плохо знаешь. Я например, не ненавижу, он прост и логичен.
В общем да, примерно так и надо. Исправь еще другие замечания только.
Все, я ушел.
>>378998
Глазами тестируют то что в браузере выводится.
>>378999
Пожалуйста. ОП полностью прав: если что-то можно сделать с помощью css или html - это нужно делать с помощью ccs или html.
>>379005
http://jsbin.com/datan/25/edit?js,output
Начал сапера делать. Меня интересует переменная table, и почему она не видна функции setFlag. А может сделать свойство table у Field?
Тоже пойду отдохну.
>>378947
http://ideone.com/2WE2WW
Вот переделал слегка. Сейчас еще попробую с регекспом пошаманить на предмет
>> (\s?-?\s?[(]?\s?\d\s?[)]?\s?-?\s?)
Вместо того чтобы подбирать комбинации символов, проще использовать вариант «любое число скобок, пробелов, минусов».
А так скидываю рабочую версию просто.
http://ideone.com/Uxtnrs
Почему теперь не работает? NULL возвращает для некоторых точек, а для некоторых всё нормально.
>PHP Warning: in_array() expects parameter 2 to be array, null given in /home/7t2r3S/prog.php on line 145
От этой херни я не знаю как избавиться. Объявлять массив в начале функции? Тогда массив будет равен 0 всегда. Выставить аргумент по умолчанию тоже не вариант.
Аноны, посмотрите задачу на проверку номера телефона и приведение его к единому формату, не понимаю что за ошибка в 9 строке. http://ideone.com/E5gUSw
>>379183
а если читая сначала?
>^+
то что ^ может встретиться хуеву гору раз?
>>379181
Так, хорошо, первую ошибку исправил. Теперь, в $result должны же убираться символы не входящие в $regexp1, но они остаются, почему ?
>>379183
+ в регулярных выражениях это "обязательно встретится минимум 1 раз и до бесконечности". Если тебе нужен знак плюс, то его надо экранировать.
>?7?8
Я так понял у тебя должно быть либо +7, либо 8, но у тебя регулярка допускает и то и другое сразу, то есть номер +78....
Алсо, я делал примерно так 8([0-9]\\-\\s\\(\\)){9}, не ручаюсь за правильность, но суть ты думаю уловил.
>>379186
http://ideone.com/3CC52W
В таком случае у тебя неправильное регулярное выражение. Нужно искать НЕ цифры, и заменять их (только не $0, эта переменная соответствует всему регулярному выражению в скобках).
>>379189
Понял, спасибо. Вот перепиленная версия, для двух случаев, но я ошибся где-то в if, снова.
>>379200
Вроде нет ошибки. И вместо
>?7?8?
Лучше всё-таки сделать (\\+7)|8), потому-что в текущей версии программы можно написать во первых любую первую цифру, во вторых ввести 12 значный номер, начинающийся с +78
>>379200
Ссылка отвалилась http://ideone.com/EI18CL
>>379203
Точно, так будет лучше, чем писать новое выражение
>>379204
Так ты ; забыл перед if
И еще один регэксп зачем-то зафигачил.
>>379207
Мне уже стыдно спрашивать, но допиливаю ту задачу, теперь в ответе пытаюсь заменить +7 на 8, пока придумал только такой громоздкий способ, который ещё почему-то не работает. http://ideone.com/9FWYFx
>>379221
Объясню сразу как должно работать, получившуюся в результате
первого preg_replace строку мы проверяем, если видим, что первый символ 7, то заменяем её на 8.
>>379221
>>379225
http://ideone.com/3CC52W Я думаю это можно было сделать проще (Оп пояснит, когда вернется), но пока так.
ОП, или еще кто из более менее продвинутых няш, посоветуйте мануал, книгу, видеокурс в свободном доступе, где можно основательно освоить работу печенек, сессий, гетов и почтов. Где ни смотрел - галопом по европам, примеров минимум и что-то не до конца я понял.
Аноны, проверю все вечером или завтра, сейчас некогда.
>>379282
Все, кроме сессий — это части протокола HTTP, потому я бы советовал тебе изучить именно его. GET/POST связан еще с темой html-форм, потому если ты в них плохо разбираешься, то почитай http://htmlbook.ru/samhtml5/formy
Протокол HTTP позволяет получать данные с сервера и отправлять на сервер. И запрос и ответ на него состоят из трех частей: первой строки, заголовков и необязательного тела.
В HTTP есть разные методы (виды запросов), из них главные — это GET (используется для получения страницы или файла с сервера и для отправки форм вроде формы поиска), POST (используется для отправки HTML-форм на сервер, в том числе закачки файлов). Еще есть HEAD — это то же самое что и GET но при HEAD сервер отслыает клиенту только заголовки ответа, а тело не отправляет.
Куки — средство хранения информации на клиенте (в браузере), сервер их может ставить с помощью HTTP-заголовка Set-Cookie, после чего клиент (браузер) сохраняет их и начинает посылать их обратно в заголовках с каждым запросом к серверу. Например, можно каждому посетителю ставить в куку уникальный номер и таким образом их различать.
Сессии — это способ хранения данных не на клиенте, а на сервере (так что клиент не может ни прочитать данные ни подменить), они в PHP построены поверх кук, то есть на сервере создается файлик/запись в базе данных, генерируется длинный идентификатор к ней и кладется в куку.
В общем, читай про HTTP. Где взять хороший и наглядный учебник я не знаю, потому дам ссылки, которые выглядят подходяще:
https://ru.wikipedia.org/wiki/HTTP
http://portscan.ru/article-protocol-http.html
https://tech.yandex.ru/education/shri/msk-2012/talks/537/
PHP автоматически извлекает данные запроса и заголовки и помещат их в _POST, _GET, _COOKIE и _SERVER перед запуском твоего скрипта. Ему остается только взять их оттуда и что-нибудь сделать.
Можешь почитать учебник PHP:
http://php.net/manual/ru/language.variables.external.php
http://php.net/manual/ru/reserved.variables.php
http://php.net/manual/ru/features.file-upload.post-method.php
Также, ты можешь открыть инспектор в Хроме или ФФ (Ctrl + Shift + I), там открыть вкладку Network и загрузить какой-нибудь сайт и посмотреть, какие там запросы отправляются, какие заголовки. Советую посмотреть все это самому.
Если есть еще какие-то вопросы или что-то непонятно, задавай, я потом отвечу.
>>379292
>PHP автоматически извлекает данные запроса и заголовки и помещает их в _POST, _GET, _COOKIE и _SERVER
>автоматически
Вот оно, волшебное слово. Почему-то каждый раз, когда я слышу о какой-то фишке, то представляю, что мне нужно будет ее чуть ли не самому реализовать на языке. Почему - не знаю. О том, что в языке/программе/протоколе все давно реализовано и довольно просто оперируется с помощью функций и переменных, я и думать не могу. Поэтому каждый раз дико фэйлю и боюсь даже попробовать.
>>378956
>>378960
https://github.com/infinitecats/infinitecats.github.io - там пока сверстанный хедер, пока без мобильника.Потяжелее, чем прошлый
PHP-анон подскажи про два вопроса.
1) Надо сделать скрипт, который постоянно крутится при старте сервера. Он не вызывается никакой страницой, просто постоянно запущен. Допустим, им выполняются определенные долгие вычисления. CRON-хуен не предлагать, серверная машина на винде
2) Без сложных костылей уметь связаться с этим постоянно запущенным скриптом другим скриптом, который запускается обычно, от набора его url-а в браузере. Авансом шлю няшу
>>379008
> dom.addEvent(table,
Ты используешь в глобальном коде переменную, которая нигде раньше не создана. С чего оно должно работать?
> Меня интересует переменная table, и почему она не видна функции setFlag
Видна, если ты ее передаешь.
>>379170
Работает верно, на все эти сложные \s?-? я бы заменил на «любое число пробелов, минусов, скобок»
>>379173
А зачем ты NULL в pathDone передаешь в самом начале? Вот тут:
> $testvar=oneStep($paths, NULL, 0, 'vas' , 'gor');
Ошибка в том, что ты в одной переменной хранишь данные разных типов (null и массив). Храни всегда данные одинакового типа (только массив) и проблем таких не будет. Потому что трудно писать надежный код когда у тебя в переменной то массив то просто null.
>>379200
Тебе тот же совет что и другим анонам: проверь свою программу на списке номеров:
Правильные: array('84951234567', '+74951234567', '8-495-1-234-567', ' 8 (8122) 56-56-56', '8-911-1234567', '8 (911) 12 345 67', '8-911 12 345 67', '8 (911) - 123 - 45 - 67', '+ 7 999 123 4567', '8 ( 999 ) 1234567', '8 999 123 4567');
Неправильные: array('02', '84951234567 позвать люсю', '849512345', '849512345678',
'8 (409) 123-123-123', '7900123467', '5005005001', '8888-8888-88',
'84951a234567', '8495123456a',
'+1 234 5678901', // неверный код страны
'+8 234 5678901', // либо 8 либо +7
'7 234 5678901' // нет +
);
adsggasga
Макаба обезумела или что?
>>379221
Чтобы заменить +7 (точнее 7 в начале) на 8, надо написать регулярку такого типа:
«искать 7 в самом начале строки»
И ее заменять на 8. Там есть символ чтобы указать что надо искать только текст в начале строки, а не середине или в конце.
>>379228
Хорошо, но проверь свою программу на списке номеров в посте выше.
>>379302
тебе ответ тут: http://paste2.org/648a7bY7 (спам фильтр)
>>379441
Оп, проверь пикчу - >>379439
Я не знаю, почему не посты не отправляются.
Вот
http://ideone.com/Uxtnrs
http://ideone.com/iLn1TI
Ни один способ без передачи нулл не работает.
>>379302
Ты не бойся, а попробуй использовать.
>>379319
> font-size: 17px;
Всегда когда указываешь font-size, указывай рядом line-height. На body надо задавать основной шрифт, то есть которым пишется например текст новости.
Меню у тебя больше по высоте чем на макете.
Всегда обращай внимание на выравнивание иконок относительно текста. Почтовый конверт у тебя уехал вверх.
Стрелки на слайдере не совпадают по яркости с макетом, на макете темнее.
> .header {
> width: 1300px;
А почему тут ширина фиксированная? Попробуй уменьшить масштаб в браузере — шапка не тянется на всю ширину. И наоборот, на более узком окне (например 1200px) появляется прокрутка.
> .header .slider-controls .ahead {
> left: 1128px;
Лучше использовать right
Плеер надо сделать из компонентов, то есть кнопки и полоса прогресса — отдельными элементами.
Насчет фона, у меня есть интересная мысль, как его попробовать сжать из 250 Кб до меньшего размера. Можно сделать 2 слоя — размытый фон в jpg и текстура для сеточки в прозрачном png. Размытый JPEG очень сильно жмется, и может быть, тут будет гораздо меньше чем 250 Кб. Попробуй-ка.
То же самое кстати можно делать, когда есть картинка с текстом: жмем текст в PNG, а фон в JPG — получается экономия.
> .header .slider-controls .ahead .img-ahead {
Слишком много классов. .header и .ahead можно смело выкинуть. Обычно хватает 2 классов — блок и элемент в этом блоке.
> .header .slider .slide-text h2:nth-child(2) {
Тут лучше использовать CSS-класс а не nth-child
> <li class="about"><div class="top-menu-icon icon-about"></div><a href="#">About us</a></li>
Слишком много букв. Можно записать так:
<li class="about"><span class="icon"></span><a href="#">About us</a></li>
Или даже использовать псевдоэлемент :before и выкинуть спан.
> <div class="back"><div class="slider-controls-img img-back"></div></div>
<div class="back"><div class="slider-img"></div></div>
При наведении на кнопку слайдера она увеличивается, и картинка в ней мылится. Нельзя увеличивать растровые картинки. Лучше бы сделать изначально большую картинку, и по умолчанию выводить уменьшенной.
Странно, что h1 у тебя идет позже чем h2. Я бы сделал
h1 (одним тегом) — The Cool, The Minimal
h2 — LOREM IPSUM SIT AMET
> <h2>Better design</h2>
Это точно не заголовок. h2 тут можно убрать.
Слайды ты сделал не совсем верно. Там идет горизонтальный прокручиваемый ряд элементов, и пост с видео, и твиттер — это 2 равноценных записи в этой ленте. Они должны быть на одном уровне.
>>379348
> серверная машина на винде
Сделай свою службу или пропиши в автозапуск (правда, службу перезапустят при падении в отличие от автозапуска). Или планировщик, но тут логичнее службу.
> Без сложных костылей уметь связаться с этим постоянно запущенным скриптом другим скриптом
- давать задания через таблицу в БД
- через NoSQL очередь вроде http://habrahabr.ru/post/44907/ и https://www.rabbitmq.com/tutorials/tutorial-two-php.html (очередь нужна если большие нагрузки, если маленькие хватит и таблицы, только с блокировками разберись)
- через сокеты, но придется придумать протокол и писать сервер. Можно например JSON-RPC поверх HTTP.
- через средства IPC: http://habrahabr.ru/post/193270/ — если они работают под виндой
>>379439
Значит твой скрипт кривой и его надо исправлять. А в pathDone передавать не NULL, а пустой массив. Очеивдно же что изначально пройденный путь пустой.
>>379440
А, у меня то же.
>>379442
И чем 0 лучше чем NULL? Я же написал, надо для pathDone передавать только массивы.
Алсо, еще и ideone отключился теперь. Пойду спать.
>>379438
>Ты используешь в глобальном коде переменную, которая нигде раньше не создана.
Где-то она создана все равно:
var table = document.createElement('table');
http://jsbin.com/datan/37/edit?js,console
Я не понимаю.
>Ты используешь в глобальном коде
Через call, apply не работает.
>>379467
> Где-то она создана все равно:
Во-первых, программа выполняется сверху вниз. Ты должен сначала создать переменную, а потом использовать, а не наоборот. Во-вторых, твоя переменная создается внутри функции, значит она локальная, и снаружи (в глобальном коде) она не видна и доступ получить к ней невозможно.
По моему, ты что-то путаешь. Почему к моменту dom.addEvent(table... эта переменная должна существовать и что в ней по твоему должно быть?
> Я не понимаю.
Сравни: http://jsbin.com/muxiwojuhuli/1/edit?html,console
var a = 100;
console.log(a); // 100
console.log(b); // undefined
var b = 200;
>>377570
господа, иду постепенно по шагам инструкции от няшного-добра-ему-вообще-молодец анона http://archive-ipq-co.narod.ru
Столкнулся с проблемой исправления ошибок в тексте по регекспу. Суть в том, что при поиске отсутствия пробела после запятой, в регекспе важен следующий после неё символ, который, при true срабатывании, отличается от пробела.
Как исправить эту ошибку, не проебав этот самый символ, ведь заменяется всё попавшее под регексп?
Вот для примера:
http://ideone.com/6ZVlwa
Знаю, что, наверняка, малоэффективно использую код, и буду благодарен за помощь.
Ананасы, я тут немного потыкался в пехопе, в верстку, пробежался по js, прочитал, что такое фреймворк, cms, ide, mvc и другие страшные слова, отчего у меня случился лютый летчик. А я всего-то хотел немного поднатореть в веб-кодинге, напейсать пару каких-нибудь сайтов для себя уже посоветовали напейсать какой-нибудь велосипедный свитор, сферический магазин, загрузчик фоточек и прочие визитки чтобы было с чем идти проситься на джуна.
Анон, выкинь из этого списка то, что мне нахуй не нужно, а что следует почитать-посмотреть-попробовать:
Р. Никсон - Создаем динамические веб-сайты с помощью PHP, MySQL, javascript и CSS. 2-е издание
видосики из интернетов: developerstarter, infospir, knowcity и прочая, и прочая
samouchitelPHP56sfericheski-v-vakuume.pdf
HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов.fb2
Joomla3, wordpress, drupal
php_enhanced_ru.chm
Люк Веллинг, Лора Томсон - Разработка web-приложений с помощью PHP и MySQL (4 издание) - 2010
Stroganov_Vash_Pervi_Sait_PHP.djvu
Курс профессионального javaScript [2013]
Программирование на JavaScript (jQuery,AJAX) (2013) уровень б
Я специально вывалил содержимое папки с собранной мной инфой, чтобы анону был понятен уровень пиздеца, творящегося сейчас у меня в голове. Информации масса, ее слишком много, чтобы было понятно, с какого конца и за что браться.
Пока дрочу задачки из ОП-поста. Будущее туманно.
>>379593
>Книги
Пиздос.
Выкинь все на хуй. По порядку.
PHP->PHP.net/docs->expirience->
исследование шаблонизаторов->
MDN->CSS->
MDN->Java ScriptRe ference->
expirience->
ищешь популярные framworks->
дрочишь сайтики->
.....->
Succes! You are monkey!
>>379507
Оп, вот я идиот. Я смотрел на функцию createField и не видел, что творится вокруг. А там и вправду table откуда-то берется. Просто консоль мне твердила, что ошибка на 78 строке.
Ну ладно, буду внимательней.
>>379593
>Программирование на JavaScript (jQuery,AJAX) (2013) уровень б
погромирование уровня /b/
ОП, решал задачу и не могу понять, почему так получается:
function recurs($var){
$var++;
if($var<3)
recurs($var);
echo $var;
}
$var = 0;
recurs($var);
>>379658
Потому, что рекурсивно вызываешь функцию, которая вызывает echo только когда var<3, а это произойдет в 3-й итерации рекурсивного вызова, когда условие var<3 не выполнится и функция echo сработает напечатав по порядку 3 2 1, по мере выхода из рекурсивных функций.
Используй For или .each
Почему-то самоподрываюсь на минах http://jsfiddle.net/ct0q0yL2/ и too much recursion
Я вообще не могу вникнуть в этот птичий язык:
class Model {
public $text;
public function __construct() {
$this->text = 'Hello world!';
}
}
class View {
private $model;
private $controller;
public function __construct(Controller $controller, Model $model) {
$this->controller = $controller;
$this->model = $model;
}
public function output() {
return '<h1>' . $this->model->text .'</h1>';
}
}
class Controller {
private $model;
public function __construct(Model $model) {
$this->model = $model;
}
}
//initiate the triad
$model = new Model();
//It is important that the controller and the view share the model
$controller = new Controller($model);
$view = new View($controller, $model);
echo $view->output();
Подскажите что прочитать что бы понимать что тут написано. В PHP могу и довольно не плохо.
>>379680
Пажи с флагом. Я подрываюсь на минах, когда в коде пытаюсь открыть якобы не заминированную клетку. В консоле все видно Флаг будет просто символ, через Cell.prototype.setText поставить проще простого.
ребят подскажите. Решал задачу:
Школьник решил купить айфон и для этой цели взял кредит. Сумма кредита — 40000 р., банк каждый месяц начисляет 3% за пользование кредитом и 1000 р. комиссии (да, а ты думал, обойдешься процентами?). После этого, тоже каждый месяц, наш герой идет в банк и платит 5000 р (сэкономленных на школьных завтраках). Вопрос, когда он избавится от долга? Во сколько школьнику обошелся айфон?
Вот таким скриптом:
<?php
$opName = 'школьник';
for ($i = 40000; $i <= 0; $i = $i - 2800) {
echo "{$i}-оплата кредита — {$opName}\n";
}
Не понимаю где ошибка.
>>379692
пиздец я обосрыщ. Почитал ниже решение с примером.
Видимо мне никогда не научиться...
>>379681
Блядь, это очень похоже на массивы, но нахуя столько сложностей то?
Пытаюсь понять зачем нужен ООП
>>379705
У тебя хуёвый пример. ООП это шкаф с полочками для книг, шкаф для многих строк кода. Понять пользу шкафа трудно, когда у тебя одна книга. Найти выше в тредах пример про кошку/мышку и попробуй сделать его без ООП, а потом с ООП, и опиши для себя разницу.
>>379707
Но ведь книги нужно хранить в библиотеке и искать их просто крикнув библиотекарю "пошёл и достал мне чего-нибудь интересного".
Не могу найти задачу, про которую ты гоСпасибо.
>>379709
>Не могу найти задачу, про которую ты гоСпасибо.
Криворукий я.
Помоги нагуглить задачу про котов и мышей, заранее спасибо.
>>379709
> Но ведь книги нужно хранить в библиотеке и искать их просто крикнув библиотекарю "пошёл и достал мне чего-нибудь интересного".
Речь не об этом. Я говорю про подход к организации хранения информации (кода), или все книги лежат в общей стопке, или у тебя есть шкаф, где на полочках написано, что за книги там лежат. Про кошку-мышку есть ссылка в ОП-посте на его сайте.
>>379712
А если я рассовываю разные функции по разным файлам? Например у меня есть файл с функциями нужными для управления пользователями. Есть файл с функциями работы с изображениями. Это плохой подход к программированию? Или он плох при работе в команде?
http://jsbin.com/luboh/6/edit?js,output
Не пойму почему одна мина только появляется. Да и так, ОП, посмотри на код, верный путь выбрал?
>>379737
Но i--; не защищает от расстановки 2 двух мин на одну и ту же клетку.
Я заметил, что вот такая штука не срабатывает:
innerHTML == '' , когда дело касается проверки.
Еще хотел спросить, как реализовать сохранение в памяти, что на клетке находится мина, если я ее пометил флажком? Вот это будет главной проблемой, как уместить 3 знака на клетке. По-моему я уже свернул с верной дороги. Что думаешь?
>>379564
> Как исправить эту ошибку, не проебав этот самый символ, ведь заменяется всё попавшее под регексп?
Ты можешь использовать в выражении для замены специальные конструкции:
$0 — вставляет текст, захваченный регулярным выражением
$1 — вставляет текст, захваченный первыми круглыми скобками
$2 — вторыми
И так далее.
Пример:
$text = "кошка кошке кошку";
$text = preg_replace("/кош(ка|ке)/ui", 'соба$1', $text);
echo $text; // собака собаке кошку
Здесь $1 заменяется на «ка» или «ке», которые попадают в первые круглые скобки в регулярке.
>>379593
Нормальные книги по PHP — Зандстра и Шлосснейгл (названия в ОП-посте) — но они для тех, кто уже что-то знает. Книга «Р. Никсон - Создаем динамические веб-сайты с помощью PHP, MySQL, javascript и CSS» даст общее представление о PHP/MySQL/JS/CSS, но уровень в ней довольно низкий, так что годится только для знакомства.
По яваскрипту нормальные книги — это Фленаган «Javascript, Полное руководство, 6-е издание» (не пятое и ниже), но она огромная и трудна для начинающих, и Дуглас Крокфорд «яваскрипт, сильные стороны».
Остальные книги, которые ты тут упомянул, я не знаю, но по моему они дублируют друг друга.
Будь осторожен, книги по PHP в большинстве пишут авторы, которые сами толком не умеют на нем программировать, ничему хорошему они не научат.
Кстати, аноны, кто учит яваскрипт, если есть время, советую почитать книгу Крокфорда «Javascript сильные стороны» (Javascript the Good Parts) — она полезная и небольшая. Ее автор — очень профессиональный и опытный программист (как и автор learn.javascript.ru кстати).
И у меня кстати есть еще мини-задачка для яваскриптщиков:
if (x) {
...
}
Перечислите все значения x при которых if не сработает. Это так называемые ложные (falsy) значения. Всего их 6.
if (x !== x) { .. }
Чему должно быть равно x чтобы это условие сработало?
>>379678
Надо для мины эффект пострашнее сделать. Например, чтобы при наступлении на мину поле несколько раз быстро мигало, перекрашиваясь по очереди в черный и желтый цвет.
У таблиц есть методы insertRow() ( http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-39872903 ), а у строк — insertCell ( http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-68927016 )
Еще инфа:
http://learn.javascript.ru/traversing-dom#таблицы
https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement (англ.)
> и too much recursion
Допустим я кликнул в пустую клетку A. Ты открываешь ее, затем для каждой соседней клетки по очереди вызываешь clickEvent. Она открывает соседнюю клетку B, которая тоже пустая, и из-за этого вызывает clickEvent для всех соседних с B клеток, в том числе A. И так до бесконечности.
> & # 9760
А точка с запятой где? Почитай-ка https://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%B5%D0%BC%D0%BE%D0%BD%D0%B8%D0%BA%D0%B8_%D0%B2_HTML
> if (!(currentElement instanceof Cell)) {
> throw 'Element from around not instance of Cell'
> }
Для таких случаев (когда обязательно должно выполняться условие) есть функция assert (точнее есть такое название, а функцию ты должен сам написать), которая используется так:
assert(currentElement instanceof Cell);
Это короче и читабельнее чем if, и любой нормальный программист понимает что значит assert.
> clickEvent
Лучше назвать clickCell или даже openCell, название функции должно начинаться с глагола.
Исправь баги, и снова покажи код, оценим твой ООП.
>>379678
> var columns = rows[rowIndex].childNodes;
Это очень ненадежно, так как по идее между узлами <td> в дереве DOM например могут быть текстовые узлы с пробелами:
<td></td> (пробелы) <td></td>
В твоем случае их нет, но если заменить алгоритм генерации таблицы, то они могут появиться. То есть этот код работает на честном слове. Такой код, естественно, писать нельзя.
Используй вместо childNodes свойство children (которое содержит только HTML-элементы) либо, что лучше, используй свойства rows[] и cells которые есть у таблиц в ДОМе.
> this.tdElemtnt = tdElement;
Опечатки.
>>379681
Это код для тех, кто разбирается в ООП. Если не разбираешься, то сначала прочти мой урок по ООП для чайников http://archive-ipq-co.narod.ru/l1/pasta.html и реши пару задач оттуда.
Алсо, почитать можно Зандстру или Шлосснейгла (названия книг в ОП-посте)
>>379700
Это задача сложная, некоторые ее с десятого раза сдавали.
>>379709
Но ведь можно и не писать код, а сказать кому-нибудь «эй, напиши этот код за меня».
>>379711
http://archive-ipq-co.narod.ru/l1/pasta.html в конце страницы
>>379714
Это подход с использованием костылей и техник 15-летней давности, без ООП тебя не возьмут на нормальную работу и ты не сможешь пользоваться современными фреймворками, другие программисты будут смеяться над тобой, и да, он плох тем что с увеличением размера кода он превращается в помойку. В ООП есть инкапсуляция, наследование и полиморфизм, а у тебя тут разве что инкапсуляция на честном слове (что один файл не будет трогать переменные из другого файла).
Мой урок по ООП (ссылка выше) очень простой, и в нем любой может разобраться, советую почитать. То, что ты учился по кривому учебнику без ООП, не повод от него отказываться.
>>379714
Вот смотри еще пример. У тебя есть файл, который управляет пользователями (добавляет, удаляет, изменяет свойства пользователей в БД). Допустим, есть второй файл, который вызывает функции из него. Например, второй файл обходит всех пользователей в базе (вызывая функции из первого файла) и меняет в их именах большие буквы на маленькие.
Допустим, мы хотим протестировать второй файл, но не обращаясь к реальной базе данных (ибо в этом случае мы еще тестируем и базу данных, а это нам не нужно, да и работать будет медленно). В мире ООП мы просто делаем вместо класса работы с пользователями класс-заглушку (который не обращается к базе данных, а просто меняет данные о пользователе в массиве внутри себя) и подсовываем второму файлу. После чего смотрим в эту заглушку и убеждаемся что там все имена пользователей стали с маленькими буквами.
А как это сделать у тебя?
Это был пример «полиморфизма» (возможности вместо одного класса подсунуть другой), который невозможен в случае использования функций.
>>379793>>379792
Тащемта я сегодня ночью понюхал амфетамина и прочитал книгу по ООП. Мэтт Зандстра - PHP. Объекты, шаблоны и методики программирования - 2011.
Все стало просто и понятно. Написал пару классов сам. Как всегда, зря я этого боялся. Мог бы еще лет 5 назад это сделать и мог бы на собеседованиях хвастаться тем что могу в ООП.
>тебя не возьмут на нормальную работу и ты не сможешь пользоваться современными фреймворками, другие программисты будут смеяться над тобой
Лол, придумали какие-то правила и живут в своем мирке. Программисты страннее чем я думал. Это как у тян "мужчина должен".
>В мире ООП мы просто делаем вместо класса работы с пользователями класс-заглушку
В мире процедурного программирования я просто закомментирую пару строк в функции что бы она перестала общаться с базой данных и хранила информацию в массиве.
Спасибо за ответы, вы мне очень помогли. Люблю вас.
Как сделать авто-обновление постов как в чатах? Что-бы не рефрешить страницу постоянно, а "по тихому"? Сидишь, типо, и новые посты появляются.
>>379813
jQuery по таймеру спрашивает у php скрипта новые посты и добавляет их в блок.
Самое простое это .load()
>>379740
Неправильно читать innerHTML и с чем-то его сравнивать. Это тупиковый путь.
Правльных вариантов 2:
1) Сделать объект Cell и в нем хранить информацию о клетке как другой достопочтенный анон: >>379678
2) Хранить информацию в data-* аттрибутах вроде data-isMine= "1" и использовать get/setAttribute()
>>379740
> Я заметил, что вот такая штука не срабатывает:
> innerHTML == '' , когда дело касается проверки
Все работает, это ты неприавльно что--то делаешь. Сдампь в консоль чему равен innerHTML
> Но i--; не защищает от расстановки 2 двух мин на одну и ту же клетку.
Проверяй и не ставь мину туда где она есть
>>379813
Аякс или вебсоекты. Второе лучше.
>>379838
Да ну, непраивльно, перезагружать весь блок если ничего не поменялось.
>>379804
> придумали какие-то правила и живут в своем мирке.
Не придумали, а вывели из опыта (которого у тебя нет)
> я просто закомментирую пару строк в функции
Это автоматические тесты, которые например запускаются на каждый коммит. Замучаешься комментировать.
>>379692
Сделай цикл. Каждый месяц прибавляй проценты/комиссию, потом смотри чему равен долг и плати 5000 или меньше. И учитывай выплаченную сумму. И так пока долг до нуля не дойдет.
Твой код не работает так как процент начисляется на текущий остаток долга, он не одинаковый каждый месяц.
>>379641
Самостоятельное изучение тоже может быть плохо, так как в сети и на stack overflow много плохих и неграмотных примеров, особенно на легких языках вроде HTML, JS, PHP.
Учитесь лучше в нашем треде. Мы быдлокод заставляем исправлять.
>W5.2 Некто кладет в банк 10000 р. Банк начисляет 10% годовых (то есть, каждый год на счету становится на 10% больше, чем в прошлом году). Напиши программу, считающую, через сколько лет в банке будет миллион? Сколько лет будет этому некто? Доживет ли некто до этого дня, если сегодня ему 16 лет?
65 лет 1 067 189 рублёу?
>>379949
> Аякс или вебсоекты. Второе лучше.
Наверное, ты хотел сказать «long polling и вебсокеты».
>>379788
>Для таких случаев (когда обязательно должно выполняться условие) есть функция assert (точнее есть такое название, а функцию ты должен сам написать), которая используется так:
assert(currentElement instanceof Cell);
Мне же нужно выбросить исключение с конкретным текстом, а функция assert одна. Вообще assert по-моему используют в тестах для проверки выражения и вывода какой-то шаблонной инфы. Не вижу как тут можно заюзать assert
>>379788
>Допустим я кликнул в пустую клетку A. Ты открываешь ее, затем для каждой соседней клетки по очереди вызываешь clickEvent. Она открывает соседнюю клетку B, которая тоже пустая, и из-за этого вызывает clickEvent для всех соседних с B клеток, в том числе A. И так до бесконечности.
У меня же проверка
//если клетка уже открыта заканчиваем событие
if(!currentCell.close){
return true;
}
ХЗ откуда тут рекурсия
>>379447
https://github.com/infinitecats/infinitecats.github.io - исправил. Там немного блока с контентом + хедер мобилки.
>Всегда когда указываешь font-size, указывай рядом line-height.
Я вот не знаю какую ставить. В фш написано, что "Авто".
>Стрелки на слайдере не совпадают по яркости с макетом, на макете темнее.
Там только левая темная, видно из-за того, что нельзя назад листать. Классы для js, наверное, потом сделаю.
>Плеер надо сделать из компонентов, то есть кнопки и полоса прогресса — отдельными элементами.
Посмотри, у меня какая-то дурная кнопка получилась. Видимо не так. Случайно не с помощью jQuery? Я просто пока его не освоил(пока DOM прохожу).
>Насчет фона, у меня есть интересная мысль, как его попробовать сжать из 250 Кб до меньшего размера. Можно сделать 2 слоя — размытый фон в jpg и текстура для сеточки в прозрачном png. Размытый JPEG очень сильно жмется, и может быть, тут будет гораздо меньше чем 250 Кб. Попробуй-ка.
То же самое кстати можно делать, когда есть картинка с текстом: жмем текст в PNG, а фон в JPG — получается экономия.
Я что-то ничего не понял. Можно по шагам? Там вроде все одной картинкой сразу сделано, вот я так и вырезал.
>Слишком много классов. .header и .ahead можно смело выкинуть. Обычно хватает 2 классов — блок и элемент в этом блоке.
Я просто посмотрел, у меня потом еще один слайдер. Думал чтобы не запутаться. У меня там вообще много классов css-файле. Сократить? По 2-3 сделать?
>Слайды ты сделал не совсем верно. Там идет горизонтальный прокручиваемый ряд элементов, и пост с видео, и твиттер — это 2 равноценных записи в этой ленте. Они должны быть на одном уровне.
Я это исправлю, как дойду до туда.
http://habrahabr.ru/post/119127/ - ты мне давал ссылочку... Я там посмотрел, если уж совсем по хардкору, то нужно 4 макета? не знаешь, верстальщиков не заставляют додумывать отзывчивый дизайн?
Кстати, я правильно там делаю, когда картинкам(в топ-меню иконкам, логотипу) задаю фиксированные размеры?
ОП, как тебе мой быдлокод? Правильно?
http://ideone.com/8NpHlS
>>379788
Все, понял что я мудак Проверка клетки на close/open есть, но выставить клетке свойство close я забыл. Теперь все работает.
>>379988
Покажи. У тебя еще target is null на 57 строке. Вот jsbin более требователен, он ничего не выводит.
Пыханы, на работе начинаем разработку нового проекта. Руководитель хочет домен в зоне .рф, какие подводные камни?
>>380004
Ну вроди как-то так http://jsfiddle.net/8awrh5n2/
>У тебя еще target is null на 57 строк
null может быть только если не находит элемент с нужным id
>Вот jsbin более требователен, он ничего не выводит
Не люблю jsbin т.к. не понял как там сохранить код
Еще нужно добавить кнопку новой игры и надписи win/loose и замечания ОП наверное будут.
>>380020
Долго делал? Я вот скоро сам доделаю. Но со структурой ООП у меня опять косячно вышло.
>>379954
Да, примерно так.
>>379959
long polling — это костыль для браузеов не поддеживающих вебсокеты, а не особая технология.
>>379960
Ну если тебе принципиально текст на тот случай написать, то да. А так, assert используют когда хотят указать какое-то условие, которое всегда должно соблюдаться.
>>379964
Тогда сделай в начале функции вывод x и y по которым произошел клик и посмотри в чем дело.
>>379976
> у меня потом еще один слайдер
Можно дать им разные классы, header-slider и feed-slider
> Кстати, я правильно там делаю, когда картинкам(в топ-меню иконкам, логотипу) задаю фиксированные размеры?
да
> Я вот не знаю какую ставить. В фш написано, что "Авто".
Скорее всего около 1.2. Можешь линейкой померять расстояние между 2 линиями строк.
> у меня какая-то дурная кнопка получилась.
Сделай треугольник картинкой тогда
> Я что-то ничего не понял. Можно по шагам? Там вроде все одной картинкой сразу сделано, вот я так и вырезал.
Ну если невозможно, то жаль. Так, многовато 250 Кб на 1 картинку.
> верстальщиков не заставляют додумывать отзывчивый дизайн?
Обычно нет. Тут у нас и 2 макетов хватит.
> Сократить? По 2-3 сделать?
Там многие классы излишние: .back .img-back — тут явно back лишний.
http://jsbin.com/luboh/17/edit?js,output
Оп, смотри код до 105 строки, дальше старые ненужные вещи, которые позже разберу.
Хочу реализовать вот что: все классы (Cell, Field, Game) независимы, но они при этом прослушивают друг друга. Cell сам обрабатывает события на себе и меняет свое состояние. Field открывает соседние ячейки, проверяет на на что-нибудь еще, например, на выигрыш, когда все мины пойманы. Ну а Game будет заниматься логикой.
Cell к примеру вообще не знает о Game и Field, а Field интересуется только своими ячейками.
Верны рассуждения?
Но я не знаю куда вынести события. Раз события вешаются на table, то и должны они быть вне 3-х классов. Но опять же в этих событиях начинаются различные проверки и тогда опять появляется путаница.
У меня в голове возник еще один вариант, можно уже пользоваться готовыми объектами-узлами и приписывать им свойства и методы?
Я хочу построить идеальную внутреннюю структуру этой игры на ООП, чтобы наконец разобраться во всех нюансах.
Какой структуры нужно придерживаться?
>>379979
Хотя ответ правильный, но решение неверное. Тут надо сделать функцию расчета кредита и вызвать ее с разными аргументами. Код будет проще и короче.
Алсо, что с форматированием? Такой код надо пропускать через phpformatter.com прежде чем постить.
>>380005
Никаких
>>380020
Неплохо для начала, но да, надо определение победы (остались нераскрытыми только мины) и чтобы хотя бы надпись или окошечко появлялось, и возможность начать новую игру.
> if (!('className' in node)) {
> return false;
Это зачем? Когда оно срабатывает?
> node.className = node.className.split(klass).join('');
Это неприавльный код. Пример, есть className 'klass kla klasses' и мы пытаемся удалить kla
> (hasClass(node, klass)) ?
Тут нужно использовать if
> this.mineField = tableModel;
Одинаковые вещи надо называть одинаково
> if (this.mineField[y][x] === undefined)
Эта проверка сработает только для неприавльного x, для непраивльного y вылетит искючение так как будет
(undefined)[x]
> this.currentCell = this.mineField[y][x];
> return this.currentCell;
Странно, функция называется получитьКлеточку, но при этом она тихонько меняет какое-то свойство. Это неочевидно и неожиданно и потому плохо. Менять currentCell надо методом вроде задатьТекущуюКлеточку.
> table {
Если ты хочешь чтобы твою игру можно было поместить на любую страницу, надо использовать классы с префиксом, например
.sapper-table
.sapper-table td
Иначе ты меняешь вид таблиц не только в своей игре, а на всей странице.
> currentCell.setText(aroundMine);
Это можно написать один раз, а не два
> currentCell.setText('');
Я бы сделал у Cell методы toggleFlag() и showMine()
Алсо, по второму клику флаг должен убираться.
> this.mineField[yIndex][xIndex]
Это повторяется 4 раза подряд, нехорошо
> (aroundCells.isMine) ? mineCount++ : 0;
Тут нужен if, а не костыли
> addEventListener('contextmenu',
Это неприавльно. contextmenu — это событие попытки вызвать меню. Оно может быть вызвано например кнопкой справа от пробела или еще как-то. Тебе нужно не оно, а событие mousedown (для открытия клетки тоже), а в нем уже смотреть какая кнопка нажата.
Использование mousedown позволит избавиться от задержки которую вносит onclick
>>380082
> все классы (Cell, Field, Game) независимы, но они при этом прослушивают друг друга.
Вообще, это усложнение. События (паттерн Observer) обычно используют при взаимодействии например компонентов от разных производителей, чтобы расширить их не залезая в их код. В твоем случае связь гораздо проще:
Field владеет и управляет всеми Cell
Game владеет и управляет Field
И потому тебе не нужна подписка на события. Game в любой момент может сделать this.field.doSmth(), а Field может сделать this.getCellAt(x, y).doSmthElse()
> Cell к примеру вообще не знает о Game и Field, а Field интересуется только своими ячейками.
Это верно.
> Cell сам обрабатывает события на себе
Это не получится так как Cell много, а обработчик клика будет один
> Но я не знаю куда вынести события.
Пусть Game слушает их и вызвает нужный метод Field вроде открытьЯчейку или поставитьФлажок. А тот уже меняет состояние нужной ячейки и делат еще что-то.
> можно уже пользоваться готовыми объектами-узлами и приписывать им свойства и методы?
Узлами DOM? Ой, что-то у меня ощущение что ты хочешь что-то усложнить и запутать. DOM нужен для изменений на странице, это средство отображения информации и все.
>>380024
С 17 августа, где-то по 2 часа в день.
>со структурой ООП у меня опять косячно вышло.
Перфекционизмом не страдаю, по мне лучше написать кривую структуру чем не написать вовсепхп обезьяна жи есть А потом можно отрефакторить и сделать все по красоте.
>>380082
Это твой код? На мой взгляд ты совершенно напрасно в методе Field.prototype.createField используешь глобальный объект table. Логичней было бы чтобы класс получал скажем в конструкторе объект html таблицы. Ну и у Cell если есть isOpened то зачем тебе isClosed?
>>380107
Почему напрасно?
>скажем в конструкторе объект html таблицы
Table и есть объект.
>>378967
http://jsbin.com/lubewuqa/4/edit - гамбургеры. Там пока только makeSelection рабочая.
Слушай, makeAddative должна внутри makeSelection вызываться? Или нет?
Может все-таки order сделать свойством? Я просто не знаю, как мне потом работать с заказом, если он внутри makeSelection. Вызывать makeSelection внутри calcPrice и calcCalor? Как ему(makeSelection) тогда аргументы нужные передать?
>>380118
Table это объект html. В ООП да и вообще в программировании глобальные переменные не приветствуются, но дело твое
Первая задача по DOM - http://jsbin.com/qebovupucuke/1/edit?js,console
ОП, а во второй задаче надо вешать событие клика на всю таблицу? Если да, то что потом, как задать конкретной ячейке новый класс? Я пока думаю, что как-нибудь через event.clientX / event.clientY, но думаю, что это как-то сложно. Можешь подсказать, или дать название темы из учебника?
Оп , посмотри пожалуйста почту.
>>380088
>И потому тебе не нужна подписка на события
Так, про это подробнее расскажи.
Ты об этом: http://learn.javascript.ru/custom-events ?
http://jsbin.com/fuwohe/3/edit?js
Оп, я не понимаю как работает этот код.
Наверное это самая непонятная строка:
handlers.apply(this, [].slice.call(arguments, 1));
Наверное здесь trigger и вызывает событие. Поясни.
http://jsbin.com/dagoxeleburo/2/edit?js
Почему все зависает, если на 95 строке написать:
this.cells[y] = [];
>>380170
> function uncorrectHamb(message) {
Нехорошо, ты при каждом вызове makeSelection создаешь новую функцию. Зачем? Надо создать ее один раз, так:
Hamburger.IncorrectArgs = function ...
То же относится и к checkTypeHamb, checkFilling. Не надо этот бардак, когда функции создаются внутри функций, лучше сделать их методами Hamburger
> Слушай, makeAddative должна внутри makeSelection вызываться? Или нет?
Как хочешь, так и делай
> Может все-таки order сделать свойством?
Я тебя не понимаю. Есть гамбургер, у него ровно 3 свойства: размер, начинка, список добавок. Зачем что-то усложнять? какая от этого выгода?
Вот смотри, ты решил усложнить и складывать все в одно свойство вместо трех: this.order. Допустим, мы захотим написать метод getFilling(). В случае с 3 свойствами он пишется элементарно:
...getFilling = function () { return this.filling; }
В твоем случае, надо будет писать целый алгоритм по обходу массива order и определению, что именно там является начинкой. Мне кажется, нужно не усложнять жизнь и сделать обычные свойства.
>>380170
> Я просто не знаю, как мне потом работать с заказом, если он внутри makeSelection.
Не понял, что значит «он внутри makeSelection»? Все, что нужно, ты можешь сохранить в свойства объекта.
> Вызывать makeSelection внутри calcPrice и calcCalor?
Зачем, не понимаю? Объясни, как ты представляешь себе использование этого класса.
>>380215
> node.getAttribute('class').
Есть свойство node.className, его писать короче.
> function hasClass(node, klass) {
Неплохо, но есть более короткий способ: добавляем к className справа и слева пробелы и ищем в нем как в строке подстроку ' ' + klass + ' '. Для удаления, можно удалять регулярным выражением.
Также, учти, что имена классов могут быть разделены не только пробелом. но и табом (\t) и переводом строки (\n).
> if (classes == klass) {
> classes.splice(i, 1);
Не удалит если один класс идет 2 раза подряд: http://jsbin.com/dakodalamayu/1/edit?console (последний пример)
Всем привет. В этом официальном ИТТ треде мы все еще изучаем PHP (и некоторые другие языки для веба вроде JS), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то хочет изучить этот язык, кто-то хочет просто размять мозги и заняться чем-то полезным.
Это тред для начинающих. Не написал за свою жизнь ни одной программы? Ты наш человек.
Требуемые знания: умение читать. Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Netbeans PHP или PhpStorm (необязательно).
Предыдущий тред был тут: >>369682
У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru Если ты ньюфаг, просто решай задачки оттуда, они там реально простые, и пости сюда ссылки на решения, мы посмотрим и скажем, правильно или нет и дадим совет, если можно что-то улучшить. Если не совсем ньюфаг, напиши, что ты знаешь, что нет, что хочешь изучить, я дам тебе какую-нибудь задачку посложнее. После прохождения учебника напиши, ОП даст тебе более сложные задания.
Правила: ведем себя воспитанно, помогаем новичкам, постим ссылки на решения задачек, ОП их проверяет и дает советы и замечания.
ОП, как всегда, помогает и дает советы, отвечает на самые нубские и простые вопросы. У ОПа есть почта, так что даже если он не появляется в треде уже неделю, вы всегда можете написать ему что-то хорошее. ОП обычно занят, но где-то раз в сутки в треде появляется.
Оформляй код аккуратно!!! например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492
Что почитать?
Мануал по PHP — http://www.php.net/manual/ru/langref.php
Начинающим: Никсон Р. - Создаем динамические веб-сайты с помощью PHP (аноны говорят, она не очень хорошая)
Сайт phptherightway
По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
JS: learn.javascript.ru
Позиционирование в CSS: http://softwaremaniacs.org/blog/category/primer/ (снизу вверх).
MySQL: https://gist.github.com/codedokode/10539213
Слишком простые задачи? Напиши что знаешь, что хочешь изучить и придумаем тебе задачку посложнее.
Сайт опять упал!!!!! Не паникуй, а открой http://rghost.net/45000175
Где архивы предыдущих тредов? Известно, где, на mediafire: http://www.mediafire.com/download/gza5360wdzqd743/threads-archive-pr-1..17.zip (189Мб, треды 1-17 из pr), http://www.mediafire.com/download/kgzl1f9366gc6ed/threads-archive-11..20.zip (72 Мб, треды 11-20 из b). Также один анон выложил все на дропбокс: https://www.dropbox.com/sh/4sb69jrx9qwrpcw/-nY5ia__VC (ок, он иногда не работает)
Как начать пользоваться командной строкой — gist.github.com/anonymous/9378956452c8e4a72ac8
Расскажи про поиск работы, фриланс etc Информация о фрилансе есть в /wrk . Также, походи по сайтам вроде hh.ru, hantim.ru, geekjob, fl.ru, посмотри, поизучай ситуацию. Имей в виду, кроме фриланса, где ты 2 дня ищешь заказ, полдня обсуждаешь за бесплатно суть работы, день делаешь и еще 2 дня слушаешь от заказчика что он о тебе думает, есть удаленная работа — продаешься в рабство, и занимаешься только программированием, задачи тебе будут подкидывать наготово. Ищется по слову «удаленно» на перечисленных сайтах. Зарплата на удаленной работе может быть меньше чем в офисе в столице, но больше чем в твоей деревне.
В общем, давайте начинать уже!