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

    Zoxon
    @Zoxon
    Веб-разработчик
    Проверять по useragent и просто не отображать банальным if
    Но тут есть подводные камни.
    Ответ написан
    2 комментария
  • Как улучшить код отображения модального окна?

    @stasov1
    без уникального id не получиться, просто это может быть data-атрибут, иначе как понять какое именно модальное окно показать пользователю? Мы делаем так - все кнопкам которые открывают модалки даем data-id="1", data-id="2" и так далее, и точно так же размечаем сами модалки общий wrapper и конкретно окно с data-id, после клика проверяем data-id и показываем модальное окно с соответствующим data-id. Вместо data-id и цифр может быть что угодно, например data-popup="one"
    Ответ написан
    Комментировать
  • Как улучшить код отображения модального окна?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Сформулируйте вопрос более конкретно - что вы хотите от нас услышать.

    modal.classList.contains('open')
    Бессмысленная проверка, remove просто проигнорирует класс, которого нет.
    https://developer.mozilla.org/en-US/docs/Web/API/E...

    .onclick = function()

    Не стоит назначать обработчики через свойства объекта.
    https://learn.javascript.ru/introduction-browser-e...
    https://jsfiddle.net/koceg/1y38k8t8/
    Ответ написан
    3 комментария
  • Почему не работает анимации?

    Clever_Coyote
    @Clever_Coyote
    Код
    Нельзя применять анимации к display:none.
    Ответ написан
    1 комментарий
  • Как снизить нагрузку на сервер?

    maximw
    @maximw
    150 уникальных посещений в день не такая уж большая нагрузка даже для MODx Revo.
    Проверьте на всякий случай не завелась ли у вас какая-нибудь гадость.
    Ответ написан
    Комментировать
  • Как сохранить класс дочернего элемента?

    @ssumatokhin
    $('.parent-list > li').removeClass('active');
    Ответ написан
    Комментировать
  • Какой наиболее верный способ подключения шрифтов на сайт?

    @mfred
    Лучше css гугл подключаю так

    для локального хранения пользовался www.fontsquirrel.com/tools/webfont-generator
    он и css и шрифты генерит из нужных
    Ответ написан
    Комментировать
  • Какой наиболее верный способ подключения шрифтов на сайт?

    Serj-One
    @Serj-One
    i'm sexy and i know it
    Локально
    www.fontsquirrel.com/tools/webfont-generator
    @font-face {
        font-family: 'Play';
        src: url('../fonts/play-regular-webfont.eot');
        src: url('../fonts/play-regular-webfont.eot?#iefix') format('embedded-opentype'),
             url('../fonts/play-regular-webfont.woff2') format('woff2'),
             url('../fonts/play-regular-webfont.woff') format('woff'),
             url('../fonts/play-regular-webfont.ttf') format('truetype'),
             url('../fonts/play-regular-webfont.svg#playregular') format('svg');
        font-weight: normal;
        font-style: normal;
    }
    Ответ написан
    3 комментария
  • Какой наиболее верный способ подключения шрифтов на сайт?

    Logos_Intellect
    @Logos_Intellect
    Android developer
    Конечно, лучше локально хранить их. Я подключаю через css, можно ещё через javascript, но оно того не стоит
    Ответ написан
    4 комментария
  • Какие существуют правила хорошего дизайна?

    kawabanga
    @kawabanga
    на хабре помню всплывала очень интересная статья по этому вопросу, там советы дизайнеру именно о том, как готовить дизайн для верстальщика. Там в статье был особый упор на сетку и на то, чтобы верстальщик сразу видел в комментариях код, с помощью которого можно все сделать на css.
    UPD. Во, нашел, статья на подобии этой была - habrahabr.ru/post/175083

    20 «НЕ» для веб-дизайнеров
    habrahabr.ru/post/52019

    К слову, Sketсh 3 инструмент позволяет создавать дизайны, которые более приятны верстальщикам.

    а пока, что по поиску гугла нашел
    - habrahabr.ru/sandbox/41405
    - habrahabr.ru/post/173271
    - habrahabr.ru/post/159141
    - habrahabr.ru/post/197588
    - habrahabr.ru/post/145295
    Ответ написан
    4 комментария
  • Области применения JS в современном IT?

    @nirvimel
    Кроме js вы пробовали только php, и этот горький опыт заставил вас остановить свой выбор на js? Не стоит на таком примере делать выводы обо всех других языках. В сфере профессионалов принято не подыскивать новые задачи под единственный известный язык, но, наоборот, подбирать (и изучать при необходимости) язык исходя из стоящих задач. Прежде чем останавливать свой выбор на каком-то конкретном языке или стеке технологий вам нужно сначала определиться с тем кругом задач, о области которых вам интересно работать, и потом подходить к выбору инструментов для решения этих задач. Все зависит от того что вас интересует: web-разработка, фронтэнд, бекэнд, десктопные приложения или мобильные, разработка игр, больше/меньше заниматься пользовательским интерфейсом, может быть, системное программирования?
    Ответ написан
    7 комментариев
  • Где можно почитать про правила построения Web страниц?

    Я читал книгу HTML5 и CSS3. Разработка сайтов для любых браузеров и устройств автор Бен Фрейн
    Ответ написан
    Комментировать
  • MODx Revo. Возможна ли динамическая передача параметров в сниппет?

    ruslan_aleev
    @ruslan_aleev
    MODX с cat-Art.ru
    Как вариант - добавляете get параметр в url, который появляется в зависимости от действий пользователя, а в sortBy вызываете сниппет, которые будет обрабатывать эти get-параметры, и в зависимости от параметров выводить DESC или ASC.
    Есть еще tvFilters для getResources, смотрите в ту сторону.
    Ответ написан
    1 комментарий
  • Как правильно написать авторизацию/аутентификацию?

    @enibeniraba
    Очень сильно упрощенно, без ООП и паттернов):
    Авторизация:
    session_start();
    if (!empty($_SESSION['user_id']))
    	die('Вы уже авторизованы');
    	
    $user = get_user_by_login($_POST['login']);
    if (!$user)
    	die('Пользователь не найден');
    	
    if ($_POST['pass'] !== $user['pass'])
    	die('Неверный пароль');
    
    $_SESSION['user_id'] = $user['id'];
    die('Привет, '.$user['login']);

    При этом в куки пользователя запишется session_id, а в сессию user_id.

    Проверка:
    session_start();
    if (empty($_SESSION['user_id']))
    	die('Нет прав');
    
    $user = get_user_by_id($_SESSION['user_id']);
    if (!$user || !$user['active'])
    {
    	unset($_SESSION['user_id']);
    	die('Нет прав');
    }


    Выход:
    session_start();
    unset($_SESSION['user_id']);


    Если нужен доступ только с одного устройства (последнего, с которого был вход), то храним на сервере последнюю сессию пользователя и при каждом запросе:
    if ($user['session_id'] !== session_id())
    {
    	unset($_SESSION['user_id']);
    	die('Нет прав');
    }


    Если с нескольких, то делать ничего не нужно.

    При oauth авторизации через внешние сервисы в сессии и куках будет все то же самое.
    В бд добавятся 2 поля auth_provider и auth_provider_id.
    В auth_provider у тебя будет vk или fb или google... в auth_provider_id - id пользователя в vk, fb...
    Когда юзер нажимает кнопку войти через vk, ты его редиректишь на контакт. Там он что-то делает. Потом контакт его редиректит к тебе с ?code=request_code.
    Ты используя code делаешь запрос к api контакта на получение access_token.
    Получив access_token, делаешь запрос к api на получение инфы о пользователе. В этой инфе должен быть какой-нибудь уникальный id (auth_provider_id).
    Если у тебя нет пользователя с таким auth_provider_id для провайдера vk, то создаешь его либо без логина, либо генерируешь что-нибудь, без пароля.
    Если пользователь был создан или он был до этого, помещаешь в сессию user.id и считаешь пользователя авторизованным.

    PS:
    По каждой строчке ответа есть нюансы, но думаю общая картина такая.
    Естественно лучше написать класс для пользователя, чтобы использовать что-то вроде:
    $user->is_auth();
    $user->auth_by_id($user_id);
    $user->unauth();
    Ответ написан
    13 комментариев
  • Как правильно написать авторизацию/аутентификацию?

    dasha_programmist
    @dasha_programmist
    ex Software Engineer at Reddit TS/React/GraphQL/Go
    Есть два варианта хранения данных об авторизованном пользователе:
    1) В куки (так по умолчанию используется в асп.нет): необходимые данные (claims) шифруются machineKey и отдаются пользователю в http-only куках, таким образом при каждом запросе на сервер они присылаются, расшифровываются и далее можно проверить в необходимых местах.
    плюсы: полностью stateless, нет надобности обращаться к БД
    минусы: при необходимости "выбить" сессию со стороны сервера нужно поднимать более сложную логику и хранить флаги в промежуточном хранилище (проверять что если для такого-то пользователя требуется завершить, то такие действия, иначе другие);
    2) Ключ сессии: после успешной аутентификации авторизуем пользователя и claims храним на сервере в быстрой памяти или БД (key-value), где ключ - ключ сессии, значение - любые данные.
    плюсы: есть полный контроль состоянием авторизации (как и возможность завершить сессию со стороны сервера, так и сменить пользователю роль(или другие параметры) "на лету")
    минусы: организация доп. прослойки - кэша или хранение в БД (медленно), при перезапуске/падении сервиса сессии клиентам потребуется перелогиниться.

    1
    1.1 В куки писать или ключ сессии или шифрованные данные о пользователе, сессия - абстрактное понятие (это пара: ключ и данные), ключ должен быть защищенным, т.е. трудным к копированию (хотя бы зрительно трудно запомнить), уникальным (чтобы не возникло коллизий: двум разным пользователям выдался один и тот же ключ, т.е. это не должна быть хэш-функция от логина-пароля или IP или чего-то неуникального).
    1.2 В асп.нет существуют атрибуты авторизации (в которых можно расставлять проверки на требование таковой, роль, конкретный пользователь), в общем смысле логика такова: поступил запрос на сервер, далее нужно посмотреть к какому ресурсу идёт обращение (защищенному или свободному), если ресурс защищен, то проверить куки (ключ сессии или шифрованные данные), расшифровать/получить данные о сессии из кэша и предпринять решение: пускаем или не пускаем (отдаём 401/403 или отдаем 200/404/...).
    1.3 Завести на сервере (в кэше или БД) словарь , при алгоритме проверки сессии добавить условие проверки на наличие записи в словаре.
    1.4 С нескольких - словаря не нужно.

    2
    2.1 Даже если пользователь входит через ВК всё равно нужно отдавать свои ключи сессий/шифрованные данные, а вот внутри данных уже хранить access_token от вк-шной сессии, так очень маленькая вероятность, что токен ВК утечет, а если утек ключ сессии, то действия будут ограничены только функционалом сайта.
    2.2 После расшифровки куки или данных по ключу сессии делать доп запрос на сервер ВК с токеном, который сохранился при аутентификации (access_token), запрос простой, например получить имя пользователя, если ВК выдал что токен просрочен или ошибку, то сессию закрывать или куки с данными обнулять.
    Ответ написан
    3 комментария
  • Почему в shopkeeper 3 не работае метод добавления товара helper?

    @ChernovGV
    Смотрите, что пишет js-консоль, ищите и устраняйте конфликты.
    Попробуйте использовать стандартные чанки вывода товара и корзины.
    Закомментируйте весь не требуемый для этой задачи js код
    Ответ написан
    1 комментарий
  • Как убрать index.php из урла?

    @ShamblerR
    RewriteEngine On
                # Директива включает редиректы.
    RewriteBase /
      # Без директивы (.*) = /$1 будет /var/wwww/site/$1 с ней = /$1
    
    
    ############################################################################
    ####  Убираем index.php, если он есть в конце URL                       ####
    ############################################################################
    RewriteCond %{REQUEST_METHOD} =GET
                #Выявляем GET запрос в URL (не POST)
    RewriteCond %{REQUEST_URI} ^(.*)/index\.php$
                #URL cодержит index.php в конце.
    RewriteRule ^(.*)$ %1/ [R=301,L]
                #Удалить index.php из URL.
    Ответ написан
    6 комментариев
  • Почему отображаются знаки вопроса у некоторых букв (modx revolution)?

    ruslan_aleev
    @ruslan_aleev
    MODX с cat-Art.ru
    Косяк в кодировке базы, нужно сменить кодировку и в базе, не только в конфиге.
    Была такая проблема в evolution, помимо смены кодировки в базе, помогло еще и следующее - modx.im/blog/questions/2636.html
    Ответ написан
    Комментировать
  • В выдачу яндекса попала страница https://site.ru. Как убрать?

    XXX
    @XXX
    Решение где-то рядом
    mydarck это решается очень просто. На сайт добавьте атрибут rel="canonical". Чтобы на странице https://site.ru и на странице http://site.ru в коде была указана одна каноническая ссылка с верным протоколом.
    <link rel="canonical" href="http://site.ru"/>
    После переидексации проблема будет решена.

    UPD:
    Сайт нормально открывается по http?
    Попробуйте поискать первопричину, почему поисковики проиндексировали страницу по https. Может где-то на сайте или в sitemap.xml ссылки не верно адресованы, в файле robots.txt параметр host не верно задан, посмотрите с каким протоколом добавлен сайт в инструменты вебмастеров, может на сайте настроен какой-то корявый редирект. Не исключены ошибки со стороны тех, кто занимался сайтом до Вас или умышленное вредительство.
    Ответ написан
    8 комментариев