Задать вопрос
  • Как русифицировать письма - Mail Laravel?

    snowmage
    @snowmage
    Для русификации писем вам нужно скачать файл https://github.com/caouecs/Laravel-lang/blob/maste... и положить его в папку /resources/lang
    Ответ написан
    Комментировать
  • Объединение двух запросов и их вывод в пагинацию как?

    @NubasLol
    $goods1 = Goods::where('siteID', $siteID)->where('popular', 1);
    $goods2 = Goods::where('siteID', $siteID)->where('popular', 2);
    
     $vivod = $goods1->unionAll($goods2)->paginate(12);
    Ответ написан
    Комментировать
  • Объединение двух запросов и их вывод в пагинацию как?

    JhaoDa
    @JhaoDa
    LaravelRUS Team
    Читал ли ты документацию по коллекциям?

    Хотя мне видится, что надо читать документацию по Query Builder, потому что если оба запроса вернут хотя бы по сотне вариантов, то будет весело.
    Ответ написан
    7 комментариев
  • Не показывается картинка на мобильной версии в SAFARI?

    @weart
    Совокупность background-attachment:fixed и cover на мобильном сафари не будет работать.
    Ответ написан
    Комментировать
  • Сервис оптимизации изображений?

    ArsenyMatytsyn
    @ArsenyMatytsyn
    Руководитель frontend направления, предприниматель
    В ларавеловской приблуде надо использовать image.intervention.io/api/stream и ухудшать качество, комбинируя с размерами.
    Если собирается морда, то gulp + gulp-imagemin отличное решение.

    Впрочем, ничего не заменит ручной обработки изображений. Автоматика убивает качество не только по цифрам, но и по визуальной составляющей, в то время, как используя различные форматы можно выиграть в качестве и размерам.

    Да и в целом с изображениями достаточно сложно. Экспорт тому пример.

    Если проблема в показателях по PagesSpeed, то проще, и может быть правильнее, будет использовать скрипт ленивой загрузки. Но это отдельная тема о разговоре.
    Ответ написан
    Комментировать
  • Не работает javascript - preventDefault как сделать?

    @DanKud
    Во-первых вы хотите повесить событие click на элемент только после клика onclick на нем, а не при созданием документа.
    Во-вторых вы пытаетесь повесить событие на условие, результатом которого будет не объект, а значение true или false
    Да и не совсем понятно для чего вообще вы пытаетесь поставить условие elements[i].id === id. Нужно просто прописать не внутри функции, а в основной части скрипта:

    var elements = document.querySelectorAll(".noLink1");
    for (var i = 0; i < elements.length; i++) {
        elements[i].addEventListener('click', function(e) {
            e.preventDefault();
            alert("ok");
        }, false);
    }
    Ответ написан
  • Как скрыть блок при повторном нажатии на javascript?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Как заставить работать по-быстрому:
    function navFunction(id) {
      for (const n of document.querySelectorAll('.dropdown2-content')) {
        n.classList[n.id === id ? 'toggle' : 'remove']('show');
      }
    }

    Но вообще, тут многое можно изменить:

    Разметка - вырезать инлайновые обработчики клика и атрибуты id.

    Стили - будем плясать от корневых элементов (так удобнее; кроме того, если в будущем захотите стилизовать в "открытом" дропдауне что-то кроме контента, то не будет необходимости добавлять этим элементам классы, и, соответственно, не придётся переписывать код):

    .dropdown2 .dropdown2-content {
      display: none;
    }
    
    .dropdown2.show .dropdown2-content {
      display: block;
    }

    Код - вместо id будет смотреть на взаимное расположение элементов (переключаем класс у предка нажатой кнопки, у остальных удаляем):

    const containerSelector = '.dropdown2';
    const buttonSelector = `${containerSelector} .dropbtn2`;
    const activeClass = 'show';
    
    
    // делегирование, назначаем обработчик клика один раз для всех кнопок
    document.addEventListener('click', e => {
      const button = e.target.closest(buttonSelector);
      if (button) {
        document.querySelectorAll(containerSelector).forEach(function(n) {
          n.classList[n === this ? 'toggle' : 'remove'](activeClass);
        }, button.closest(containerSelector));
      }
    });
    
    // или, назначаем обработчик клика каждой кнопке индивидуально
    const onClick = function({ currentTarget: t }) {
      this.forEach((n, i) => n.classList[n.contains(t) ? 'toggle' : 'remove'](activeClass));
    }.bind(document.querySelectorAll(containerSelector));
    
    document.querySelectorAll(buttonSelector).forEach(n => {
      n.addEventListener('click', onClick);
    });
    Ответ написан
    Комментировать