• Как правильно пройтись циклом внутри другого?

    vhood
    @vhood
    Не забывайте отмечать решения
    Одиакового ничего, идея скорее всего выводить по идексу в массиве

    Значит нужно по индексу и связывать
    <?php foreach ($arItem['PROPERTIES']['IMG_BEFORE']['VALUE'] as $index => $arImgBeforeSrc): ?>
        <?php $arImgAfterSrc = $arItem['PROPERTIES']['IMG_AFTER']['VALUE'][$index] ?>
        <div class="cocoen">
          <img data-src="" class="blog-list__item-image<?=($arParams['ROUNDED_IMAGE'] ? ' rounded' : '');?>" src="<?=CFile::getPath($arImgBeforeSrc);?>" alt="">
          <img data-src="" class="blog-list__item-image<?=($arParams['ROUNDED_IMAGE'] ? ' rounded' : '');?>" src="<?=CFile::getPath($arImgAfterSrc);?>" alt="">
        </div>
    <?php endforeach ?>

    Только в коде не учтен момент, когда изображение "после" может отсутствовать. Во избежание ошибки, вторую картинку лучше в условии выводить и в объявлении переменной $arImgAfterSrc проверку сделать.
    Ответ написан
    Комментировать
  • Как лучше инициализировать объект?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    типа, антипаттерн...

    но это все равно вызов метода в конструкторе, что не приветствуется.

    Бред. Вот кем не приветствуется - вот он пускай и не приветствует и тихо миро плавает в своем болотце. Спокойно вызывайте приватный инициализатор в конструкторе - это как раз нормально. Конструктор - это и есть инициализатор объекта. Он даже называется "конструктор" - сборщик объекта. Его для этого и придумали. Выносить часть инициализации из инициализатора - на самом неделе не самая умная идея. А вот разбить инициализацию на разные логические части и разнести в разные методы - как раз таки очень даже хорошая практика. Декомпозиция, небольшие и простые функции/процедуры и все такое прочее.
    Ответ написан
    2 комментария
  • Почему return не возвращает значение?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    let makeItDouble = (text) => {
      let i = text + text;
      return i;
    };
    
    console.log(makeItDouble("I never look back"));
    Return всё прекрасно возвращает. Но то, что он возвращает, нужно сохранять в переменную или использовать сразу. Переменная i находится внутри функции и снаружи недоступна. Если бы можно было делать так, как вы написали, то и смысла в return бы не было.
    Ответ написан
    Комментировать
  • Как из объекта Bitrix\Crm\ItemIdentifier вытащить нужные данные?

    IvanU7n
    @IvanU7n
    nothing interesting here
    они приватные, достать их снаружи простыми способами нельзя
    но у этого объекта есть методы доступа, типа getEntityTypeId(), getEntityId() и т.п.
    Ответ написан
    Комментировать
  • Почему у задачи такое решение?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    А как вы код написали, если не можете понять, как он работает?

    Вы открывали документацию функции, читали, что она делает и какие аргументы принимает?
    Ну, давайте я вам её сюда скопирую:
    Parameters
    indexStart
    The index of the first character to include in the returned substring.
    indexEnd Optional
    The index of the first character to exclude from the returned substring.
    Description
    If indexStart < 0, the index is counted from the end of the string. More formally, in this case, the substring starts at max(indexStart + str.length, 0).
    If indexEnd < 0, the index is counted from the end of the string. More formally, in this case, the substring ends at max(indexEnd + str.length, 0).


    зачем нужен (-2, -1)
    Для выполнения вот этого условия задачи: "если слово заканчивается на мягкий знак, то получите предпоследнюю букву". Я искренне не понимаю, что тут можно добавить...
    Ответ написан
  • Ошибка отправки электронной почты. Linux. Sendemail.?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Да, всё так. В ошибке на нижней строчке всё подробно описано.
    Ответ написан
    3 комментария
  • Как это работает?

    Функция работает корректно только для числа 10.
    Во второй и четвертой строке замени 10 на num.
    Не забывай про тесты!)
    Ответ написан
    Комментировать
  • Почему при подключении скрипта в теге head возникает ошибка?

    vhood
    @vhood
    Не забывайте отмечать решения
    Разберем вопрос:

    он уже есть в самом html документе
    браузер разбирает HTML документ постепенно

    js должен видеть
    это в каком контракте написано?

    почему если скрипт подключить в теге head то получим ошибку, а если внизу body то всё нормально
    потому что скрипт блокирующий и браузер выполняет его до того, как появляется H1

    Варианты решения:
    1. Оставить скрипты внизу body, что-бы выполнялись после загрузки вышестоящих тегов
    2. Атрибутом defer указать браузеру, что выполнять скрипт нужно после построения DOM дерева
    3. Прослушивать события страницы на стороне JS, работать с тегами только после построения DOM дерева
    Ответ написан
    Комментировать
  • Как правильно: setTime или new Date?

    tolmasoft
    @tolmasoft Автор вопроса
    Программист, сервис-инженер
    Отвечая на свой же вопрос по производительности - setTime работает на треть быстрее
    Ответ написан
    Комментировать
  • Как исправить ошибку, c обновлением JSON запроса?

    @TimsTims
    Ошибка заключается в том, что браузер , выполняя инструкции веб сервера (в F12 посмотрите что вам приходит в заголовке "cache") закешировал ваш json. Вариантов решения несколько:
    1) самый правильный - докрутить настройки веб сервера, чтобы он на файлы с типом json выдавал заголовок cache: nocache
    2) костыльный вариант - в своем js скрипте когда обращаетесь к json, приписывайте ещё через знако вопроса метку времени. Браузер будет думать, что это что-то новое, в Кеше этих данных ещё нет, и отправит новый запрос.
    То есть вместо
    Fetch ("....json")
    Пишите
    Fetch ("....json? timestamp")
    Ответ написан
    1 комментарий
  • Как сделать запрет закрытия задачи, если есть подзадачи в Битрикс24?

    @Kontrael
    Этот пример вам не подойдет. В нем иллюстрируется добавление пункта меню в сделки.
    Файл init.php создается вручную в папке `/local/php_interface/`. Но прежде чем делать это, почитайте про него в курсе
    Бездумное использование этого файла может приводить к падению сайта в любом месте.
    Но в вашем случае, можно обойтись без него.
    В вашем случае алгоритм действий такой:
    1. Почитать про события.
    2. Вам нужны события задач
    Пример подключения обработчика события(это не готовый пример для вас, его нужно изменить под себя):
    \Bitrix\Main\EventManager::getInstance()->RegisterEventHandler(
        'tasks',
        'OnBeforeTaskUpdate',
        $this->MODULE_ID,
        '\MyCompany\Handlers\CTask',
        'OnBeforeTaskUpdate',
        "1"
    );

    Подробнее про 'RegisterEventHandler' тут
    Этот код можно выполнить в консоли, в админке. Но имейте ввиду, что удалять его нужно тоже выполнением кода или вручную в БД.
    3. В этом обработчике вам нужно определять, является ли задача родительской. Если да, то запрашивать ее дочерние задачи и смотреть, если ли среди них открытые. Если да, то отменять событие закрытия задачи.
    Список задач можно получить так
    Ответ написан
    Комментировать
  • Почему постраничный вывод данных из бд не работает?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    $count_m = "82;Тут очевидно синтаксическая ошибка сразу. Молчу про то, что числа намеренно передаются строками...

    if($this->page==1) {
    	$page = 1;
    }
    else {
    	$page = (int) $this->page;
    }
    Это что за магия? Что оно вообще делает? Что будет если единица ВНЕЗАПНО попадет в блок else??

    $start = ceil($count_m/$m_per_page);А теперь подумайте, как должна называться переменная, считающая общее количество страниц.

    суть в том, что когда формируется limit 72, 24, т.е 3 страница,
    Стоит пройти курс арифметики за 2 класс, и посчитать что 3 страница будет limit 48, 24.
    limit 24, 24 - вторая и limit 0, 24 - первая.
    Ответ написан
    1 комментарий
  • Входит ли текущая дата в интервал, если года разные?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    $date = new DateTimeImmutable();
    $isInAcademicYear = (
        $date <= new DateTimeImmutable('31 May') ||
        $date >= new DateTimeImmutable('01 September')
    );
    var_dump($isInAcademicYear); // true
    Ответ написан
    1 комментарий
  • Как делать максимально безотказные бэкапы корня сайта и mysql в динамике?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега MySQL
    Делают read-only реплику и бэкапят её обычным способом.
    Ответ написан
    Комментировать
  • Как написать обновление для модуля Битрикс?

    Ge1i0N
    @Ge1i0N
    Если модуль локальный, и обновление через маркет не подходит, то как вариант - написать функцию что заберет и перекинет файлы куда надо и просто вызвать её из php-консоли, через агента или еще как-то в зависимости от сложности обновления.
    Также никто не запрещает вызвать класс инсталлятора модуля и руками заново запустить функцию установки не удаляя его.
    Ответ написан
    Комментировать
  • PHP Warning: Illegal string offset как решить?

    karabanov
    @karabanov
    Системный администратор
    Illegal string offset от того, что к строке совершена попытка обратиться, как к массиву.
    Ответ написан
    Комментировать
  • Странное поведение str_replace() при заменах в HTML?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    $html = str_replace(' /" ', '/" ' ,$html);Есть ненулевая вероятность попасть в какой-то текст, но в целом ей можно пренебречь.
    Ответ написан
    Комментировать
  • Какой хост внутри контейнера?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Попробуй указать имя хоста контейнера напрямую через hostname

    db:
        ports:
          - 5432:5432
        hostname: 'db'
        restart: always
        build:
          context: docker
          dockerfile: db.Dockerfile
        env_file:
          - configuration/db.env
        volumes:
          - .:/docker-entrypoint-initdb.d
          - ./dump:/var/www/dump
          - dbdata:/var/lib/postgresql/data
    Ответ написан
    Комментировать