Ответы пользователя по тегу Веб-разработка
  • В каком виде хранят данные Гугл-документы и похожие сервисы?

    @alexalexes
    Только не пытайтесь в базе хранить буквальное представление ежедневника как двумерной сетки из квадратиков - где пишут заметки на определенный день. Сетка ежедневника - это просто удобная форма вывода данных, но не способ их хранения.
    Хранится это все будет, скорее всего линейно и банально списком заметок с заданными начальными и конечными интервалами:
    Таблица заметок:
    id - идентификатор заметки
    begin_date - начало интервала
    end_date - конец интервала
    comment - заметка
    Вот это минимум, что будет содержаться в базе данных в ее таблице.
    А уже как будете получать данные этой таблицы и строить представление по дням, рисовать календарик - это уже не задача СУБД, а приложения, которое будет использовать эти данные.
    Ответ написан
    2 комментария
  • Как отправить GET запрос с нужным значением?

    @alexalexes
    Не привлекая JS, можно поместить все включенные галки в ассоциативный массив:
    <input type="checkbox" name="tags[{{ tag }}]">
    Если выбрать галку 1 и 3, то на стороне сервера можно перехватить такую структуру как ассоциативный массив:
    {'tags' : { 'Тег1': 'On', 'Тег3': 'On'} }
    PS: можно сделать неассоциативный массив:
    <input type="checkbox" name="tags[]" value="{{ tag }}">

    {'tags' : [ 'Тег1', 'Тег3'] }
    Ответ написан
    Комментировать
  • Счетчик количества людей?

    @alexalexes
    Самый простой путь - воспользоваться сервисами аналитики от Google или Яндекс, установив модули аналитики в нужные разделы сайта.
    Если гибкости их функционала недостаточно, то придется в первую очередь разрабатывать свою систему логирования посетителей сайта. А уже на основании логов этой системы вы сможете доставать такие показатели для отдельных объектов на своем сайте.
    Ответ написан
    Комментировать
  • В чём отличие результатов кодировок `encodeURI`, `encodeURIComponent` и `application/x-www-form-urlencoded`?

    @alexalexes
    Отличия в охвате специальных символов, которые подвергаются конвертированию.
    Функция encodeURI меньше охватывает символов, а функция encodeURIComponent - больше.
    Но ни та, ни другая не достигает стандарта RFC 3986, чтобы считаться полностью правильно закодированным в вид контента application/x-www-form-urlencoded (смотрите документацию по encodeURI).

    PS: Со стороны php сервера такая же история. Есть urlencode/urldecode - которые неполные по RFC 3986, а есть rawurlencode/rawurldecode - которые полностью удовлетворяют стандарту RFC 3986. При кастомном конструировании http пакетов предпочтительно использовать последние.
    Ответ написан
    1 комментарий
  • Как сделать фиксированный header во Vue?

    @alexalexes
    Вам нужно только свойство position: sticky для header, для этого js не нужен.
    https://developer.mozilla.org/ru/docs/Web/CSS/position
    Ответ написан
    Комментировать
  • Как организовать обработку url запросов на сайте на стороне сервера?

    @alexalexes
    Но это очень ресурсозатратно, поэтому я хочу создать отдельный серверный обработчик, занимающийся абсолютно всеми обращениями к сайту. Допустим, если сайт называется asd.com, то любое обращение через asd.com (asd.com/registration, asd.com/documents/users, asd.com и т.д.) должно проходить через этот скрипт. Сам скрипт, считывая url запрос, выдавал бы определенный нужный файл, а сама строка url при необходимости изменялась бы при помощи js (pushState и replaceState например)

    Ну, вы уже описали технологию, берете любой популярный веб-сервер - php, node.js, python, asp net и реализовываете.
    А каким образом вообще можно организовать сервером обработку url

    Любой запрос, прежде чем попасть на выполнение в серверный скрипт попадает на обработку на http сервер.
    Скорее всего, вы будете работать с apache или nginx. Ответ на этот вопрос кроется в искусстве конфигурирования файла htaccess или nginx.conf.
    PS: После того, как http сервер перенаправит запрос согласно правилам конфиг. файла до нужной точки входа - тому файлу-скрипту, с которого начнется выполнение кода на сервере, сам скрипт точки входа может передать управление другому исполняемому файлу компоненту или просто подключать нужные скрипты, согласно параметрам url. Этот процесс называется роутингом, а координирующий скрипт - роутер.
    Если вы поищите "Роутер или роутинг в <любимая среда разработки/фреймворк>" то найдете пример реализации.
    Причем, роутинг можно реализовывать, как на стороне сервера (роутинг php/laravel/node.js), так и на стороне клиента (клиентские фрейворки, например vue).
    Самый наколеночный вариант будет выглядеть так.
    После того, как научитесь создавать многокомпонентное серверное приложение и связывать их, можете посмотреть, что такое Rest API, GraphQL, TreeQL.
    Ответ написан
    Комментировать
  • Как реализовать прокрутку текста с помощью табов?

    @alexalexes
    1. Определяете список заголовков.
    2. Определяете offsetTop у каждого заголовка.
    3. Определяете scrollTop у прокручиваемого блока.
    5. Определяете по offsetTop-ам i-ый и i+1 заголовок, где находится значение scrollTop.
    6. Для стрелки вверх делаете scrollTo до i-ого заголовка.
    7. Для стрелки вниз делаете scrollTo до i+1 заголовка.
    8. Если i-ого или i+1 заголовка нет, то гасите кнопку.
    9. На событии скроллинга нужно анализировать пункты 1-8, чтобы кнопки вовремя гасились.
    Ответ написан
    Комментировать
  • Как очистить корзину после заказа?

    @alexalexes
    Посмотрите функцию showCart. При каких условиях она рисует пустую корзину, такое состояние поставьте в cart.
    function delGoods()
    {
        cart = {}; // ... я поставил пустой объект, к примеру.
        saveCart();
        showCart();
    }
    Ответ написан
    Комментировать
  • Поиск почты по user/ID?

    @alexalexes
    Если сайт - это форум, то в некоторых форумных фреймоврках (например, IPBoard) предусмотрен вывод страницы списка зарегистрированных пользователей, которая доступна авторизованным пользователям с определенным уровнем прав или стажем (числу написанных сообщений и т.д.). Выводить такой список или нет и в каком объеме предоставлять контакты профиля решает администрация сайта и сами пользователи, если предусмотрены настройки в профиле.
    Остальные способы доступа к списку пользователей сайта требует либо членства в администрации сайта, либо не легальны.
    Ответ написан
    Комментировать
  • Как составить такой запрос с поиском по тегам?

    @alexalexes
    Решение 1 - с модификацией запроса под определенный набор параметров.
    Сколько одновременных тегов должно присутствовать на входе, столько и будет join-ов таблицы тегов.
    SELECT p.*, u.name FROM posts p
    JOIN users u ON u.id = p.user_id
    JOIN postTags pt1 ON pt1.post_id = p.id and pt1.tag_id = 3
    JOIN postTags pt2 ON pt2.post_id = p.id and pt2.tag_id = 5
    JOIN postTags pt3 ON pt3.post_id = p.id and pt3.tag_id = 7
    WHERE p.user_id = 4

    PS: Если в where указали конкретного пользователя, то users мы присоединяем полностью (без left), так будет работать быстрее.
    Решение 2 - контролируем число уникальных тегов на выходе.
    Select a.*
    from
    (
    SELECT p.*, u.name, count (distinct  pt1.tag_id) over (partition by p.id) unik_tag_count
     FROM posts p
    JOIN users u ON u.id = p.user_id
    JOIN postTags pt1 ON pt1.post_id = p.id
    WHERE p.user_id = 4
    and pt1.tag_id in (3, 5, 7)
    ) a
    where  a.unik_tag_count = 3 -- уникальное кол-во тегов на один пост
    Ответ написан
    6 комментариев
  • Можно ли дать права на редактирование информации, без полного доступа к сайту?

    @alexalexes
    Не знаком с Битрикс.
    Но для любой CMS должно быть доступно такое решение:
    1) Создание роли контент-менеджера под определенный тип контента CMS (роль несет в себе необходимые ограничение к объектам CMS и FTP каталогу);
    2) Создание аккаунта пользователя контент-менеджера, и закрепление его за ролью;
    Ответ написан
    Комментировать
  • Как передать данные из COM порта в JS?

    @alexalexes
    Среда выполнения JS в браузере изолирована от железа, поэтому тут нужна полноценная реализация клиент-серверного приложения.
    Компьютер с COM-портом будет выступать в качестве веб-сервера.
    На этом сервере необходимо реализовать серверный скрипт, который подключится к COM и будет осуществлять транзит по HTTP с клиентом - браузером.
    А уже на стороне клиента API будет реализовано посредством JS, а получение данных - AJAX-ом.
    Вот пример как сделать серверную часть на NodeJS.
    Ответ написан
    Комментировать
  • Как правильно хранить аватарки пользователей на node.js?

    @alexalexes
    https://habrahabr.ru/post/37686/
    Тут для PHP, но для любого backend концепция от этого не поменяется.
    1) Перенаправляем все ссылки для получения картинок на скрипт для проверки прав доступа.
    2) Проверяем права доступа пользователя по сессионным данным;
    3) Все ОК, сессия пользователя жива, файл существует, пользователь является владельцем файла или каким-то образом относится к нему (хотя бы для чтения) - передаем команду nginx серверу отдать файл из защищенного каталога.
    4) Не ОК, отдаем пользователю 404.
    3.1) Нет nginx ? Читаем файл серверным скриптом (лучше небольшими порциями, для экономии оперативной памяти сервера), отдаем пользователю данные с соответствующим mime-тайпом. На стороне клиента отданные данные прорисуются в img теге или в background-e DOM-элемента, не принципиально, каким образом прилетели бинарные ресурсы от сервера.
    Ответ написан
    Комментировать