Задать вопрос
  • Как избавиться от пустого цикла без которого ничего не работает?

    Rickkk
    @Rickkk
    Цикт имеет значение, т.к. заполняет переменную $tag последним элементом из массива $tags. А затем в последующем коде данная переменная используется вот так - 'tag' => $tag->slug,
    Попробуйте заменить цикл на выражение
    $tag = array_pop($tags);
    Ответ написан
    7 комментариев
  • Как вызывать функцию только по отношению к дочернему общему блоку кнопки?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Класс лучше переключайте не у .img-block, а у их самых дальних не общих предков, т.е., у .documents_block. В этом случае не придётся переписывать js-код, если вдруг потребуется стилизовать ещё-что то, кроме .img-block, или если решите изменить внутреннюю структуру .documents_block. Вместо .класс дополнительные стили надо будет прописывать у .класс .img-block.

    const itemSelector = '.documents_block';
    const buttonSelector = `${itemSelector} .open-doc-list`;
    const contentSelector = '.documents-content';
    const activeClass = 'active';
    const toggleEffect = 'slideToggle'; // или fadeToggle, или toggle
    const onClick = e => $(e.currentTarget)
      .closest(itemSelector)
      .toggleClass(activeClass)
      .find(contentSelector)
      [toggleEffect]();
    
    
    // обработчик клика подключаем к кнопкам
    $(buttonSelector).click(onClick);
    
    // или, если предполагается добавление новых блоков уже после подключения
    // обработчика, то лучше будет повесить его на документ, тогда всё будет
    // работать как надо без каких-либо дополнительных действий
    $(document).on('click', buttonSelector, onClick);
    Ответ написан
    1 комментарий
  • Contact form 7, как определяется место для ошибки?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Все довольно просто...
    При отправке запроса контактной формы через аякс вам приходит ответ от сервера.
    Вот скрин:
    5ea16ffe0552b755242029.png
    А дальше скрипт обработчик согласно ответу от аякс вставляет нужные span с сообщениями.
    Вот, скрин:
    5ea1703e2a537503850244.png
    <span role="alert" class="wpcf7-not-valid-tip">Поле обязательно.</span>

    Для стилизации используйте этот класс wpcf7-not-valid-tip

    А вот, и другой блок, который показывает сообщение от сервера:
    5ea170875a08c465802817.png
    Стилизуйте класс - wpcf7-response-output
    <div class="wpcf7-response-output wpcf7-display-none wpcf7-validation-errors" style="display: block;" role="alert">Одно или несколько полей содержат ошибочные данные. Пожалуйста проверьте их и попробуйте ещё раз.</div>


    где то ошибка о не заполненой форме отображается снизу в контейнере формы, где то она выходит за пределы этой формы, где то есть ошибка "Поле не заполнено", где то нет

    Возможно, что стили для тега span просто перезаписываются и соответственно в этом проявляется и все различие
    Ответ написан
    3 комментария
  • Будут ли считаться такие страницы дублями друг друга?

    @Gooooroooo
    Структура, дизайн и оформление может быть одинаковым, ПС к такому критично не относятся. Главное правильно собрать и кластеризировать СЯ, чтобы избежать каннибализации и смысловых дублей страниц на сайте. Ну и текст должен быть хорошо структурирован и полезен для пользователя. SEOшные тексты, контент ради контента и вот такие портянки Яндекс не любит, а страницы с таким наполнением скорее всего высоко ранжироваться не будут.
    Про продвижение и под Яндекс и под Google можно почитать тут. Еще с статье толково описаны все пунктики, на которые обращают внимание ПС, так что рекомендую :-)
    Ответ написан
    Комментировать
  • Есть ли разница вставки svg в html как код и вставки как картинку .svg?

    LenovoId
    @LenovoId Куратор тега SVG
    svg, css,js
    Если вставить SVG как img или как background то теряется возможность анимации
    Если же SVG просто статичная картинка то разницы нет
    Ответ написан
    4 комментария
  • Как вставить изображение с кривым краем в фигме?

    mixail_fet
    @mixail_fet
    Дизайнер веб-интерфейсов
    1. Создаешь фигуру
    Скриншот
    5e77838422e0a525585692.jpeg

    2. Сдвигаешь ее точки
    Скриншот
    5e7783bc29613529727493.jpeg

    3. Загружаешь в нее картинку
    Скриншот
    5e7783cf84fc6723624993.jpeg


    Готово
    5e7783e3b2e98026317049.jpeg
    Ответ написан
    3 комментария
  • Книга по сео для разработчика?

    SeaInside
    @SeaInside
    16 лет пилю все эти штуки
    Это не то чтобы ответ, просто мысли на тему.
    Вряд ли найдёте что-то толковое, SEO - очень конкурентная ниша, в которой очень много магии, а также дремучего идиотизма.
    До сих пор встречаются уникумы, требующие, чтобы у h1 в разметке не было указано никаких атрибутов (включая class) и прочее в таком духе.
    Лучший способ в одном месте сразу получить нужную информацию - найти какую-нибудь SEO-контору, которая вам кажется профессиональной, и заказать у них аудит сайта, после чего курить документ, который они составят.

    Без этого, всё что вы можете сделать:
    1. Следить за семантикой (использование к месту правильных тегов вместо диватоза, туда же ссылки вместо кнопок);
    2. Сделать графический контент максимально доступным для поисковиков (alt'ы изображений (можно через figure и figcaption), альтернативное описание SVG-графики)
    3. Сделать текстовый контент максимально доступным для поисковиков (верная структура заголовков, использование микроформатов там, где уместно).
    4. Следить за скоростью загрузки (является одним из факторов ранжирования, а также улучшает поведенческие факторы)
    5. Следить за доступностью (пока вроде как нигде не учитывается, но я верю, что в свете трендов это будет влиять в дальнейшем. Кроме того, доступность - это не только про людей с ограниченными возможностями, это также улучшает UX в целом, что способствует улучшению поведенческих факторов).

    Остальное (манипуляция ссылками со слэшами и без, жонглирование абсолютными и относительными ссылками и прочее) вам в одной конторе скажут делать так, в другой скажут по-другому - а поисковики на прямой запрос ответят "мы не раскрываем детали работы поисковой системы".
    Ответ написан
    Комментировать
  • Как получить ссылку на текущую таксономию без указания айди и имени?

    deniscopro
    @deniscopro Куратор тега WordPress
    WordPress-разработчик, denisco.pro
    Если на странице термина:
    $cat_id = get_queried_object_id();
    $cat_link = get_term_link( $cat_id );

    Если внутри цикла записей:
    $terms = get_the_terms( get_the_ID(), 'НАЗВАНИЕ_ТАКСОНОМИИ' );
    echo get_term_link( $terms[0] );
    Ответ написан
    Комментировать
  • Как оптимизировать слайдер с 50 фотографиям?

    1. отлавливать скролл и инициализировать слайдер после того, как блок с ним будет виден пользователю
    if (window.innerHeight + document.documentElement.scrollTop === 
    document.documentElement.offsetHeight) {
        sliderInit();
    }

    2. оптимизировать и !кропать картинки, поскольку они даже в блоках с фиксированными и меньшими шириной и высотой будут загружать своё полное разрешение
    3. intersection observer
    4. поглядеть советы в аналогичном треде
    Ответ написан
    Комментировать
  • Как оптимизировать слайдер с 50 фотографиям?

    Можете использовать IntersectionObserver.
    Как это работает?
    На нужный dom-элемент навешивается наблюдатеть с колбеком, внутри которого можно делать всё, что угодно. В вашем случае при срабатывании element.isIntersecting это будет загрузка всех стилей/скриптов слайдера и его инициализация.

    Посмотрите пример: https://codepen.io/alnidok/pen/eYNeGMQ

    Поддерживается практически всеми современными браузерами:
    https://caniuse.com/#feat=intersectionobserver
    Ответ написан
    Комментировать
  • Почему left:50% + transform:translateX(-50%) = середина?

    notiv-nt
    @notiv-nt
    Как ваше ничего? Да, моё тоже
    left 50% — 50% от родителя
    transform 50% — 50% самого элемента
    Ответ написан
    Комментировать
  • Как задать высоту контейнера равной высоте контента с абсолютным позиционированием?

    Aetae
    @Aetae
    Тлен
    Нет. Абсолютно позиционированный элемент полностью выпадает из потока. Только javascript'ом.
    Ответ написан
    Комментировать
  • Как в реальном времени обновлять переменную пока изменяется input range?

    Lebezniy
    @Lebezniy
    Веб разработка
    Используйте событие input вместо change.
    Он позволяет получать value в режиме реального времени.

    Пример можно посмотреть здесь: События формы.
    Ответ написан
    3 комментария
  • Как в реальном времени обновлять переменную пока изменяется input range?

    hzzzzl
    @hzzzzl
    oninput="calc(this)"
    Ответ написан
    Комментировать
  • Как решить проблему с нарушением кодировки при выгрузке файлов через ФТП?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    У вас там на странице указана кодировка "windows-1251".
    Нужно везде использовать utf-8 и таких проблем не будет.
    1. Смените кодировку редактора, чтобы буквы стали нормальными, вырежьте текст страницы в буфер обмена.
    2. Смените кодировку редактора на utf-8 и вставьте текст страницы обратно. Кириллица должна остаться нормальной, но уже в другой кодировке.
    3. В теге meta укажите charset=utf-8.
    4. Сохраните и залейте FTP
    5. ...
    6. PROFIT!!!111
    Ответ написан
    Комментировать
  • Гугл карты платные?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Да, ты должен ввести данные карты и если превысишь бесплатные лимиты то с тебя сразу же спишут деньги.
    Ответ написан
    Комментировать
  • Как добавить еще одну переменную в со строкой?

    mrerberg
    @mrerberg
    Yep
    Привет!

    Во-первых, данные типа { title, term } ты можешь положить в массив и создать компоненты, промапавшись по массиву, проще будет и кода меньше.
    Во-вторых, тебе никто не мешает `term` сделать объектом или массивом.

    Возможно, я не совсем понял, что ты хочешь, в таком случае, опиши нагляднее или псевдокодом
    Ответ написан
    1 комментарий
  • Как добавить еще одну переменную в со строкой?

    GreyCrew
    @GreyCrew
    Full-stack developer
    Тут нужно скорее знание не реакта, а объектов.
    Вот то, что ты отдаешь в параметре data ты отдаешь в виде объектов title и term.
    Собственно внутри компонента TrainBox2 ты к ним обращаешься через параметр props.data

    Ты можешь в объекте data создать ещё одни объект (к примеру term2), тогда внутри будет обращение props.data.term2
    <TrainBox2 data={{title=" something text", term : "some term", term2 : "some term 2"}} />

    внутри
    <div className="one_floor_top">
      <div className="floor_big">{props.data.title}</div>
      <div className="floor_small">{props.data.term}</div>
      <div className="floor_big">{props.data.title}</div>
      <div className="floor_small">{props.data.term2}</div>
    </div>


    Либо создать ещё один параметр, тогжа внутри уже обращайся, как props.data2.term
    <TrainBox2 
      data={{title=" something text", term : "some term"}} 
      data2={{title=" something text", term : "some term"}}
    />

    внутри
    <div className="one_floor_top">
      <div className="floor_big">{props.data.title}</div>
      <div className="floor_small">{props.data.term}</div>
      <div className="floor_big">{props.data2.title}</div>
      <div className="floor_small">{props.data2.term}</div>
    </div>


    PS. не надо больше кода - скриншотами, это плохо, неудобно и неправильно, договорились?
    Ответ написан
    3 комментария
  • Как каждые несколько секунд убирать класс у одного блока и добавлять другому с таким же классом?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Как перебирать элементы массивоподобных объектов по кругу с задержкой:

    function interval(arr, delay, callback) {
      let i = ~-arr.length;
    
      return arr.length
        ? setInterval(() => callback(arr[i], arr[i = -~i % arr.length]), delay)
        : null;
    }
    
    // или
    
    function interval(arr, delay, callback) {
      let timeoutId = null;
    
      arr.length && (function step(i) {
        timeoutId = setTimeout(() => {
          callback(arr[i++], arr[i %= arr.length]);
          step(i);
        }, delay);
      })(arr.length - 1);
    
      return () => clearTimeout(timeoutId);
    }

    Перебираем элементы, удаляем/добавляем класс:

    interval(
      document.querySelectorAll('.banner-block'),
      300,
      (prev, curr) => {
        prev.classList.remove('active');
        curr.classList.add('active');
      }
    );

    Если понадобится остановить переключение класса, то надо предварительно сохранить результат выполнения функции interval, для первой версии передавать этот результат в clearInterval, а для второй вызвать его.
    Ответ написан
    1 комментарий
  • Появление и исчезание кнопки "Показать полностью" в зависимости от длинны текста?

    const str = 'Очень длинная строка';
    
    if (str.length <= 200) {
      document.querySelector('.button').style.display = 'none';
    }
    Ответ написан
    2 комментария