• Зачем дублировать функции php в Bitrix?

    @alexalexes
    1) Чтобы выдержать стандарт именования методов и всегда быть в русле ООП-архитектуры, даже если функция пустяковая;
    2) Повысить переносимость кода от одной версии PHP до другой (кто знает, какую разрядность переменной будет возвращать microtime() завтра и будет ли это привычный float).
    3) Функция microtime() в методе вызвана с параметром, а это уже специфичное применение функции - запилим под нее отдельный метод.
    Ответ написан
    Комментировать
  • Как оптимально получить симметричные данные в таблице?

    @alexalexes
    Элементарно, заджойнте ту же самую таблицу саму на себя.
    select *
    from t as t1
    join t as t2 on t1.user_id1 = t2.user_id2
                     AND t2.user_id1 = t1.user_id2
    Ответ написан
    2 комментария
  • Как получить id элемента с определенным классом по которому кликнули?

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

    @alexalexes
    Если чисто "механически" сообщить значение top от одного элемента превью к соответствующему элементу со схожим id = data-mini, то это можно сделать так:
    var e_prevs = $('div.side div.preview'); //выбираем все превью-элементы
    e_prevs.each(function(index) //пробегаемся по превью элементам
    {
       var id = this.id; //this - это текущий элемент превью, получаем его id.
       var link = $('div.main div.element[data-mini=' + id + ']')[0]; //находим элемент-ссылку, у которого есть схожий атрибут data-mini.
       var top_e_prev = this.offsetTop; // получаем знач. свойства от начала страницы
       link.offsetTop = top_e_prev; // присваиваем это значение ссылке
    });

    Чтобы элементы фактически встали по одной высоте, нужно указать правильные CSS-свойства position опорного контейнера div.container {position: relative;}, а превью-контейнерам давать абсолют, но тут нужно смотреть, как на такие изменения отреагирует весь остальной контент, находящийся в том же контейнере.

    PS: Или наоборот передавать свойства...
    var main_els = $('div.main div.element');
    main_els.each(function (index)
    {
       var data_mini = this.dataset.mini;
       var link = $('div.side div.preview#' + data_mini)[0];
       var top_el = this.offsetTop;
       link.offsetTop = top_el;
    });
    Ответ написан
  • Как скачать изображение с поле input?

    @alexalexes
    Самый простой вариант - отправить запросом на сервер и ответить тем же содержимым, что отправили серверу с таким же mime-тайпом (предусмотреть все необходимые заголовки отдачи файла).
    Ответ написан
    Комментировать
  • Как делаются нестандартные элементы форм доступными, кроссбраузерными?

    @alexalexes
    В идеале, в шапке страницы сайта должен быть переключатель версии дизайна для слабовидящих (по значимости такой же как RUS/ENG).
    Тут есть рекомендации, как сделать версию сайта для слабовидящих. В том числе, обозначен совет, как сделать так, чтобы скринридеры читали заголовки полей формы, но сами заголовки визуально не отображать.
    Если лейбл нужно скрыть, расположите его перед полем, используйте привязку атрибута for и специальный класс для вспомогательных технологий:

    .visually-hidden {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    border: 0;
    padding: 0;
    clip: rect(0 0 0 0);
    overflow: hidden;
    }
    Этот класс скрывает лейбл визуально, но его прочтут скринридеры. Обратите внимание, что скринридеры и другие вспомогательные технологии, как и браузеры, скрывают элементы с использованием display: none и visibility: hidden.
    Ответ написан
    4 комментария
  • Как посчитать количество дней с учетом всех выходных в MySQL?

    @alexalexes
    select count(*) as work_day_count --считаем, что осталось после отсечения выходных и праздников
      from (SELECT distinct t1.*, t1.c1 + INTERVAL iterator.day DAY as dt_day
                 FROM (select STR_TO_DATE("01.10.2018", "%d.%m.%Y") c1,  STR_TO_DATE("22.10.2018", "%d.%m.%Y") c2 union all
                       select STR_TO_DATE("22.10.2018", "%d.%m.%Y") c1,  STR_TO_DATE("10.11.2018", "%d.%m.%Y") c2 ) t1 --таблица с проверяемыми интервалами
     
     join (select @start_day := @start_day + 1 as day
             from news,  -- любая произвольная таблица с числом строк, больше чем ширина максимально возможного интервала дней, который можно рассмотреть этим запросом
                  (select @start_day := -1) init_day --инициализация переменной start_day 
          ) iterator --итератор дней, ведет отсчет с 0 и до куда надо (до максимального интервала, который может быть)
       on (t1.c1 + INTERVAL iterator.day DAY) <= t1.c2 --верхнее ограничение итератора
                    and (t1.c1 + INTERVAL iterator.day DAY) not in -- отсекаем выходные и праздники
    (select STR_TO_DATE("06.10.2018", "%d.%m.%Y") c1 union all
     select STR_TO_DATE("07.10.2018", "%d.%m.%Y") c1 union all
     select STR_TO_DATE("13.10.2018", "%d.%m.%Y") c1 union all
     select STR_TO_DATE("14.10.2018", "%d.%m.%Y") c1 union all
     select STR_TO_DATE("20.10.2018", "%d.%m.%Y") c1 union all
     select STR_TO_DATE("21.10.2018", "%d.%m.%Y") c1 union all
     select STR_TO_DATE("27.10.2018", "%d.%m.%Y") c1 union all
     select STR_TO_DATE("28.10.2018", "%d.%m.%Y") c1 union all
     select STR_TO_DATE("03.10.2018", "%d.%m.%Y") c1 union all
     select STR_TO_DATE("04.11.2018", "%d.%m.%Y") c1 union all
     select STR_TO_DATE("10.11.2018", "%d.%m.%Y") c1 union all
     select STR_TO_DATE("11.11.2018", "%d.%m.%Y") c1) -- тут делаем выборку выходных дней и праздников
    order by dt_day ) a
    Ответ написан
    Комментировать
  • В чем причина странного поведения сайта в разных броузерах?

    @alexalexes
    Издателем сертификата, случайно, является "Kaspersky Anti-Virus Personal Root Certificate"?
    Тогда вырубите свой антивирус и обновите страницу.
    Ответ написан
    Комментировать
  • Как принудительно установить Cookie на своем сайте?

    @alexalexes
    Поставили тег Javascript, а сами пример показываете с подключением CSS, хотя он и рядом не стоял.
    В общем, это предмет целой статьи, изучайте.

    PS: Есть подозрение, что вам нужно настроить на стороне сервера какой-то особый отклик на GET-параметр "wmc-currency=EUR", но вы должны понять, нужно ли вам это, потому что есть другие решения для установки кук и они работают в JS.
    Ответ написан
    3 комментария
  • PascalABC - Простая рисовалка на клавишах, вопросы?

    @alexalexes
    1)
    при нажатии на кнопки происходит задержка, т.е. - нажимаю "вправо", "вправо", "вправо","вниз","вниз", а рисунок идёт "вправо", "вправо","вправо","вправо","вниз". Как исправить?

    Все дело в использовании бесконечного цикла while.
    Такой стиль программирования характерен для микроконтроллеров.
    В высокоуровневых языках пользуются обработчиками событий, в вашем случае нужно добавить обработчик нажатия клавиши и уже в нем расписать действие на событие, а не ждать пока это событие наступит.
    2) То полотно, по которому вы рисуете, должно поддерживать многослойность. Рисунок на одном слое, курсор - на другом. Иначе никак.
    PS: С PascalABC не знаком.
    Решение расписано на общих концепциях любого языка программирования.
    Ответ написан
    Комментировать
  • Можно ли класть на QI беспроводную зарядку телефон без беспроводной зарядки?

    @alexalexes
    Телефоны с QI и без него отличаются только наличием или отсутствием в своем корпусе индукционной катушки и контроллера заряда от этой катушки.
    QI зарядка в свою очередь не микроволновая и не индукционная печь, с ее стороны тоже есть катушка с контроллером, который обладает элементами обратной связи, призванных обнаружить присутствие другой катушки и регулировать мощность подачи тока, чтобы не спалить саму себя и окружающую электронику.
    Не будет по близости другой катушки, тогда зарядка перейдет в режим ожидания с минимальным потреблением тока - на этом все.
    Убедиться в наличии обратной связи, то есть, увидеть разницу токов потребления во время заряда и без, можно, подключив к QI зарядке такой гаджет:
    https://ru.aliexpress.com/item/USB/32887677996.html
    Ответ написан
    1 комментарий
  • Нужен ли слепой 10-ти пальцевый набор?

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

    @alexalexes
    Оборачиваете блок в ссылку.
    <a href="какая-то_ссылка">
    <div class="block__element">
        <img src="<?= SITE_TEMPLATE_PATH; ?>/assets/pictures/image.jpg" alt="" class="block__bg">
        <div class="block__title">
             <span class="block__title-name">Жилищная инициатива</span>
             <p>ул. Попова №150</p>
        </div>
    </div>
    </a>

    или так
    <div class="block__element">
        <a href="какая-то_ссылка">
        <img src="<?= SITE_TEMPLATE_PATH; ?>/assets/pictures/image.jpg" alt="" class="block__bg">
        <div class="block__title">
             <span class="block__title-name">Жилищная инициатива</span>
             <p>ул. Попова №150</p>
        </div>
        </a>
    </div>

    Для тега A обязательным является только атрибут href - его-то роботы и будут анализировать, как точку перехода на другую страницу.
    Еще одно применение тега A - якорь на странице.
    Вы пытались изобразить именно это применение, но делается якорь при помощи атрибута name, а не href.
    <div class="block__element">
        <a name="какой-то_якорь"></a>
        <img src="<?= SITE_TEMPLATE_PATH; ?>/assets/pictures/image.jpg" alt="" class="block__bg">
        <div class="block__title">
             <span class="block__title-name">Жилищная инициатива</span>
             <p>ул. Попова №150</p>
        </div>
    </div>

    Чтобы страница прокрутилась именно до этого якоря при переходе на нее, нужно воспользоваться ссылкой вида "адрес_страницы#какой-то_якорь".
    Ответ написан
  • 4+2 озу или 2+2?

    @alexalexes
    Отсутствие двухканальности не так заметно, как эффект свопа при нехватки памяти.
    Лучше, конечно, добавить памяти по максимуму, чтобы отсрочить то время, когда памяти будет не хватать (если ноутбук доживет до этого времени).
    4 гиг ОЗУ - сейчас может обеспечить только комфортный серфинг сайтов, раскрытых на несколько вкладок.
    PS: Убедитесь что у вас 64-разрядная ОС, или вам не будет в напряг ее поставить, если у вас 32-битная.
    PPS: Попадаются экземпляры материнок (возможно, и в контексте ноутбуков), которые очень странным образом выделяют видеопамять из памяти ОЗУ, так что при определенных конфигурациях планок для ОС остается половина номинального объема ОЗУ, и никакие шаманства с настройками биос не позволяют добиться соотношения Объем установленной памяти = Объем видео памяти + Остальная доступная память.
    Ответ написан
    2 комментария
  • Как правильно сгруппировать массив php?

    @alexalexes
    Если строки в массиве строго форматированы, и путь всегда начинается с "/home/каталог", то, чтобы получить ключ для вновь сформировываемого массива, достаточно функции explode(), если вам нужно более гибко искать название каталога, то придется вычленять его регулярным выражением.
    <?
      $input_arr = [
      "/home/fol1/test.txt",
      "/home/fol1/Browsers/test2.txt",
      "/home/fol2/Browsers/test3.txt",
      "/home/fol2/Browsers/ttre/test2.txt"
      ];
      $out_arr = [];
      foreach($input_arr as $item)
      {
        $folders = explode('/', $item);
        $key = $folders[2];
        if(!isset($out_arr[$key]) || !array_key_exists($item, $out_arr[$key])) // если еще не был такой путь
          $out_arr[$key][] = $item;
      }
      print_r($out_arr);
    ?>
    Ответ написан
    Комментировать
  • Как написать запрос если переменная пустая?

    @alexalexes
    Если метод where может принимать пустую строку, то так.
    where(isset($sub_id) ? "sub_id=$sub_id" : "")
    Пустота может быть разная.
    Если у вас пусто это '', то нужно сравнивать так:
    $sub_id !== ''

    Если null, то так
    !is_null($sub_id)
    Ответ написан
    Комментировать
  • Как отправить mp3 файл на сервер?

    @alexalexes
    1) Можно традиционным образом. В форме использовать тег input с типом file с выставленным ограничением принимать только *.mp3. Форма отправляется по кнопке с типом submit.
    2) Продвинутым способом. В форме также используется тег input с типом file с выставленным ограничением принимать только *.mp3. Отличие в том, что вам нужно поля формы отправить непременно только через ajax-запрос. В этом случае поле с файлом вычитывается с помощью объекта FileReader (старые браузеры его не имеют, например, IE 10-, так что для них не катит способ), формируется особым образом бинарный пакет запроса и этот пакет в виде base64 передается аяксом на сервер.
    PS: какой бы способ отправки вы бы не выбрали, файл в любом случае можно прицепить к форме только по инициативе пользователя, не зависит от того, используете вы простую отправку формы или пытаетесь забрать файл из input-а FileReader-ом.
    Ответ написан
    Комментировать
  • Как правильно соединить две таблицы?

    @alexalexes
    Лучше, если у вас все типы новостей будут в одной таблице, а различаться будут по section_id (соответственно, 0 - без темы, 1 - футбол, 2 - хоккей и тд.)
    Тогда запрос на порционную выборку делается элементарно.
    select a.*
      from (select n.*,
                  rank() over (partition by n.section_id order by n.publication_date desc) rnk -- нумеруем порядок новости в пределах каждой секции по порядку даты публикации
                from news n) a
    where a.rnk < 10 -- сколько новостей выводить на каждую секцию
    order by a.section_id, a.publication_date desc
    Ответ написан
    Комментировать
  • Как пропускать трафик через сайт МТС, чтобы он не тратился?

    @alexalexes
    Если у вас есть человек в компании, кто развернет для вас личный прокси-сервер, то почему бы и нет.
    А так - нет.
    Ответ написан
    Комментировать
  • Отправка двух форм по нажатию одной кнопки?

    @alexalexes
    У вас при первом отображении $_SESSION["a"] и $_SESSION["b"] не заполнены, соответственно, при выводе второй формы будет вот так.
    <input type="hidden" id = "nserver" name="nserver" value="">
          <input type="hidden" id = "registrar" name="registrar" value="">

    Придумайте, как обработать состояние, когда поля nserver === '' и registrar === '' или как забить $_SESSION["a"] и $_SESSION["b"] дефолтными значениями, и будет работать.
    Ответ написан