• Как посчитать разницу во времени с прибавкой нескольких дней?

    nalomenko
    @nalomenko
    Руководитель отдела разработок в студии «Lava»
    Есть замечательная функция mktime(), которая может правильно (в том числе с учетом перехода на летнее/зимнее время) прибавлять нужное кол-во единиц измерения времени к известной дате и времени. Например, дата на 30 дней больше чем имеющаяся:
    $newtime = mktime($hour, $minute, $second, $month, $day + 30, $year);


    Ну и вычесть дату из time() можно этим же образом.

    К тому же в Вашем распоряжении есть класс DateTime(), у которого есть конструктор, в который можно передать строку таймштампа, как исходная строка даты у Вас, после чего извлечь из него юниксовый timestamp с помощью метода getTimestamp().

    $timeObj = new DateTime("2015-01-02 00:42:39");
    $time = $timeObj.getTimestamp();
    $time_now = time();
    $difference = $time_now - $time;
    Ответ написан
    Комментировать
  • В двух словах, что такое БЭМ?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    БЭМ - это такая методология вёрстки от Яндекса. Она подразумевает разбиение страниц на отдельные смысловые блоки (комментарий, пост, заголовок, футер, форма, инпут и т.п.). Каждый блок может состоять из других блоков. Основная идея - как можно больше повысить возможность повторного использования уже написанных блоков, для чего используются модификаторы. Плюс, БЭМ подразумевает отказ от каскадных стилей, потому что они препятствуют повторному использованию.
    Например, на странице есть два разных заголовка (например, отдельно в статье, и отдельно во врезке). Как все привыкли делать это? есть код заголовка:
    <h1 class="header">Заголовок</h1>
    И мы ставим эти заголовки в текст статьи и во врезки:
    <article class="article">
        <h1 class="header">Заголовок</h1>
        <p>Текст текст текст</p>
    </article>
    <aside class="incut">
        <h1 class="header">Заголовок</h1>
        <p>Текст текст текст</p>
    </aside>

    Тогда обычно мы используем каскад, чтобы стилизовать заголовок во врезке:
    .header {font-size: 2em; padding-bottom: 1.5em;}
    .incut .header {text-decoration: italic;}

    Всё хорошо, но теперь мы не можем просто перенести эти стили заголовка во врезке в другое место, потому что эти стили привязаны именно ко врезке (классу incut). Плюс, что ещё хуже, если к элементу привязано несколько различных стилей, образующихся подобными каскадными правилами, то перенести такой внешний вид в другое место становится очень трудоёмко. А также, из-за большей специфичности каскадных стилей, их сложнее "перебить" новым стилем.
    БЭМ предлагает отказаться от каскадных стилей и создавать отдельные стили-модификаторы:
    <article class="b-article">
        <h1 class="b-article__header">Заголовок</h1>
        <p>Текст текст текст</p>
    </article>
    <aside class="b-article b-article__incut">
        <h1 class="b-article__header b-article__header_incut">Заголовок</h1>
        <p>Текст текст текст</p>
    </aside>


    .b-article__header {font-size: 2em; padding-bottom: 1.5em;}
    .b-article__header_incut {text-decoration: italic;}


    Чем больше проект, тем выгоднее использование подобной методологии. На маленьких и средних проектах БЭМ может быть избыточен. Хотя вот была статья habrahabr.ru/company/yandex/blog/234905 про использование в маленьких проектах.

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

    Ну вот. Получилось не в двух словах, но менее подробно качественно описать БЭМ не получится, имхо.
    Ответ написан
    Комментировать
  • Верстка под iPhone

    Как во время вопрос этот подоспел))) Я только что его решила. Верстала сайт для iphone ретина макет был на 640 потом когда всё закончила прошу выслать картинки для ретины на что мне и ответил тимлид что мол это и есть макет под ретину и делают они так специально мол уменьшить легко а увеличить то качество спадёт.
    Думала - думала как это всё закончить побыстрее а то так старалась пиксель в пиксель а тут такое... Ну сначала Я прошла ступень с meta - штука вообще бесполезная так как на экранах nokia разрешением 480 (lumia) мы получим выхлоп ещё тот. На самсунгах и других не проверяла, но как же Я вышла из этой ситуации... Да легко! Но пришлось повозиться с расчётами под 480.
    И так мы имеем макет 640 и нам нужно сделать его под 320 и желательно под 480 (плюс возможно накидать другие).
    Первое что необходимо сделать так это у нашего body поставить ширину шрифта 10px а далее все шрифты прописывать в em причём если на макете шрифт 18px то мы пишем 1.8em.
    Когда закончили править 640, приступим к 320. И так мы указываем ширину текста для body 5px и весь шрифт у нас готов, после берём в руки калькулятор и все значения в пикселях делим на 2. Если нужно под 480 то шрифт 7.5 и делим все значения на 1.5.
    И тут у нас выходит что и овцы целы и волки сыты...
    Да и ещё... единственное что нужно будет прописать в meta это
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    иначе работать не будет.
    Картинки для ретины устанавливаем так
    @media screen and (-webkit-min-device-pixel-ratio: 2), screen and (-moz-min-device-pixel-ratio: 2), screen and (-ms-min-device-pixel-ratio: 2), screen and (-o-min-device-pixel-ratio: 2), screen and
    (min-device-pixel-ratio: 2) {
                        .assessment li {
                                background-image: url(../media/images/sprite-1@2x.png); /* will be downloaded on retina displays */
                        }
                    }

    Пиксель перфект может резайзить макеты так что Вы сможете с лёгкостью проверить их на соответствие
    Ответ написан
    Комментировать
  • Русские аналоги Disqus

    an2kor
    @an2kor
    Cackle. Пока что это всё, что знаю из русских.
    Ответ написан
    4 комментария
  • Динамическое добавление полей в форме?

    nixmale
    @nixmale
    <div id="parentId">
      <div>
        <nobr><input name="name[1]" type="text" style="width:300px;" />
        <select size="1" name="type[1]" style="width:150px;">
          <option value="text">Текстовое поле</option>
          <option value="int">Целое число</option>
          <option value="float">Число-цена</option>
        </select>
        <a style="color:red;" onclick="return deleteField(this)" href="#">[—]</a>
        <input name="url[1]" type="text" style="width:300px;" />
        <a style="color:green;" onclick="return addField()" href="#">[+]</a></nobr>
      </div>
    </div>
    
    <script>
    var countOfFields = 1; // Текущее число полей
    var curFieldNameId = 1; // Уникальное значение для атрибута name
    var maxFieldLimit = 25; // Максимальное число возможных полей
    function deleteField(a) {
      if (countOfFields > 1)
      {
     // Получаем доступ к ДИВу, содержащему поле
     var contDiv = a.parentNode;
     // Удаляем этот ДИВ из DOM-дерева
     contDiv.parentNode.removeChild(contDiv);
     // Уменьшаем значение текущего числа полей
     countOfFields--;
     }
     // Возвращаем false, чтобы не было перехода по сслыке
     return false;
    }
    function addField() {
     // Проверяем, не достигло ли число полей максимума
     if (countOfFields >= maxFieldLimit) {
     alert("Число полей достигло своего максимума = " + maxFieldLimit);
     return false;
     }
     // Увеличиваем текущее значение числа полей
     countOfFields++;
     // Увеличиваем ID
     curFieldNameId++;
     // Создаем элемент ДИВ
     var div = document.createElement("div");
     // Добавляем HTML-контент с пом. свойства innerHTML
     div.innerHTML = "<nobr><input name=\"name[" + curFieldNameId + "]\" type=\"text\" style=\"width:300px;\" /> <select size=\"1\" name=\"type[" + curFieldNameId + "]\" style=\"width:150px;\"><option value=\"text\">Текстовое поле</option><option value=\"int\">Целое число</option><option value=\"float\">Число-цена</option></select> <a style=\"color:red;\" onclick=\"return deleteField(this)\" href=\"#\">[—]</a> <input name=\"url[" + curFieldNameId + "]\" type=\"text\" style=\"width:300px;\" /> <a style=\"color:green;\" onclick=\"return addField()\" href=\"#\">[+]</a></nobr>";
     // Добавляем новый узел в конец списка полей
     document.getElementById("parentId").appendChild(div);
     // Возвращаем false, чтобы не было перехода по сслыке
     return false;
    }
    </script>
    
    Ответ написан
    1 комментарий