Skip to content
  • 12 Темы
    30 Сообщения
    kirilljsK

    @ArtemL 9dd813ef-3396-406a-a2a4-6fab36d201fe-image.png

  • 9 Темы
    17 Сообщения
    kirilljsK

    Следующая проблема с которой я столкнулся, заключается в типах модулей (хотя я явно указал типы в user.d.ts), а именно когда мы получаем request.user:

    const getUser = async (request: FastifyRequest, reply: FastifyReply) => { try { const userId = (request.user as { id: string }).id; const user = await userService.findOneByUserId(userId); reply.status(200).send(user); } catch (err) { throw new Error("Пользователь с указанным id не найден"); } };

    В принципе в этом же коде и кроется ответ: (const userId = (request.user as { id: string }).id), явно указать что в request.user всегда будет id: string.

    Я также нашел обсуждение на github на эту тему - ссылочка, хотя проблема старая, судя по всему один хер она почему-то нормально не фиксится.

    Надеюсь это кому-то поможет 🙂

  • 1 Темы
    1 Сообщения
    kirilljsK

    Чтобы создать хлебные крошки в MODX, вам нужно создать отдельный чанк breadcrumbs и использовать pdoCrumbs из плагина pdoTools.

    Подробнее о параметрах pdoCrumbs можно почитать в документации - ссылка.

    Вот пример кода для ваших хлебных крошек:

    <div class="container breadcrumbContainer"> <nav aria-label="breadcrumb"> [[!pdoCrumbs? &showHome=`1` &tplWrapper=`@INLINE <ol itemscope itemtype="http://schema.org/BreadcrumbList" class="breadcrumb listStyleNone pt15 pb15">[[+output]]</ol>` &tpl=`@INLINE <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem" class="breadcrumbItem breadcrumbItemHome"><a itemprop="item" href="[[+link]]"><span itemprop="name">[[+menutitle]]</span></a><meta itemprop="position" content="[[+idx]]"></li>` &tplCurrent=`@INLINE <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem" class="breadcrumbItem breadcrumbItemActive br-new active"><span itemprop="name">[[+menutitle]]</span><meta itemprop="position" content="[[+idx]]"></li>` &tplHome=`@INLINE <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem" class="breadcrumbItem"><a itemprop="item" href="[[+link]]"><span itemprop="name">[[+menutitle]]</span></a><meta itemprop="position" content="[[+idx]]"></li>` ]] </nav> </div>

    В этом примере применяются schema.org для улучшения SEO. Вы можете использовать мои наработки и адаптировать их под свои сайты.

    Снимок экрана 2025-01-14 в 14.49.43.png

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

    Снимок экрана 2025-01-14 в 14.49.56.png

  • 0 Темы
    0 Сообщения
    Нет новых сообщений
  • 0 Темы
    0 Сообщения
    Нет новых сообщений
  • 10 Темы
    21 Сообщения
    kirilljsK
    1. Объект Intl

    Объект Intl позволяет форматировать числа, даты и валюту с учетом разных локалей и параметров.

    Он предоставляется с множеством свойств, которые обеспечивают быстрое и безупречное форматирование данных.

    Рассмотрим пример форматирования валюты:

    let num = 100; let RupeeFormatter = new Intl.NumberFormat("en-IN", {style: "currency", currency: "INR"}) let RupeeFormatted = RupeeFormatter.format(num); console.log(RupeeFormatted) // ₹100 let USDFormatter = new Intl.NumberFormat("en-IN", {style: "currency", currency: "USD"}) let USDFormatted = USDFormatter.format(num) console.log(USDFormatted) // $100 2. Оператор ??

    Оператор ?? присваивает переменной значение по умолчанию, если она null или undefined.

    Используйте данный оператор, если сомневаетесь в существовании у объекта того или иного свойства. Если свойство отсутствует, переменной присваивается значение по умолчанию.

    Пример:

    let user = {} let name = user.name ?? "Anonymous" console.log(name) // "Anonymous" 3. Object.fromEntries()

    Метод Object.fromEntries() преобразует массив пар “ключ-значение” в объект.

    Возьмем следующий массив и создадим из него объект, как показано ниже:

    let arr = [["name", "Alice"], ["age", 25]] let obj = Object.fromEntries(arr); console.log(obj) // {name: "Alice", age: 25} 4. Array.flat()

    Метод Array.flat() преобразует вложенный массив в один единственный.

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

    Пример:

    let arr = [1, [2, [3, [4]]]]; let flat = arr.flat(Infinity) console.log(flat) // [1, 2, 3, 4] 5. Оператор ?

    Оператор ?. обеспечивает доступ к свойствам объекта без проверки, является ли он null или undefined.

    Используйте его, когда не знаете, существует ли объект или нет.

    Пример:

    let user = null let age = user?.age console.log(age) // undefined 6. Array.reduce()

    Метод Array.reduce() применяет функцию к каждому элементу массива и суммирует результат в одно значение.

    Пример сложения всех чисел массива:

    let arr = [1, 2, 3, 4, 5] let sum = arr.reduce((a, b) => a + b) console.log(sum) // 15 7. String.repeat()

    Метод String.repeat() создает новую строку, повторяя заданную строку указанное количество раз.

    Пример:

    let str = "js".repeat(10) console.log(str) // 'jsjsjsjsjsjsjsjsjsjs' 8. Array.from()

    Метод Array.from() создает новый массив из массивоподобного или итерируемого объекта.

    Пример:

    let str = "Hello" let arr = Array.from(str) console.log(arr) // ["H", "e", "l", "l", "o"] 9. Math.hypot()

    Метод Math.hypot() находит квадратный корень из суммы квадратов его аргументов.

    Так, сумма квадратов 3 и 4 равна 25, а квадратный корень из 25 равен 5. Следовательно, Math.hypot(3, 4) возвращает 5.

    Пример:

    let hyp = Math.hypot(3, 4); console.log(hyp) // 5 10. Object.assign()

    Метод Object.assign() копирует значения всех перечисляемых собственных свойств из одного или нескольких исходных объектов в целевой объект.

    Пример:

    let obj1 = {a: 1, b: 2}; let obj2 = {c: 3, d: 4}; let obj3 = Object.assign(obj1, obj2) console.log(obj3) // {a: 1, b: 2, c: 3, d: 4}
  • 0 Темы
    0 Сообщения
    Нет новых сообщений
  • 2 Темы
    3 Сообщения
    kirilljsK

    @Jspi а как связать две таблицы? К примеру таблицу городов к пользователю ?

  • 1 Темы
    1 Сообщения
    kirilljsK

    Метка времени Unix (Unix timestamp) — это способ отслеживания времени как абсолютного количества секунд, прошедших с определенного момента. Этот момент называется эпохой Unix и соответствует 1 января 1970 года по UTC.

    Основные характеристики метки времени Unix: Начало отсчета: 1 января 1970 года (00:00:00 UTC). Абсолютное значение: Количество секунд, прошедших с начала эпохи до указанной даты и времени. Универсальность: Независимо от географического положения, метка времени Unix остается постоянной. Применение: Широко используется в компьютерных системах для отслеживания и сортировки информации, привязанной к дате и времени, в динамических и распределенных приложениях. Примеры конвертации: 1 час = 3600 секунд 1 день = 86400 секунд 1 неделя = 604800 секунд 1 месяц (примерно 30.44 дней) = 2629743 секунд 1 год (примерно 365.24 дней) = 31556926 секунд Важное событие: 19 января 2038 года: На этой дате Unix Time Stamp прекратит работу из-за 32-разрядного переполнения. После этой даты миллионы приложений потребуют либо адаптации на новые системы отсчета меток времени, либо миграции на 64-разрядные системы.

    Таким образом, метка времени Unix является важным инструментом для точного отслеживания и обработки временных данных в компьютерных системах.

  • 1 Темы
    2 Сообщения
    ManulM

    @Jspi На данный момент плохо работает в wsl2, вылетает ошибки при переименовании запросов, игнорирования папок не работает, в итоге он в коллекциях показывает и git папку и node_modules.

    Поэтому советую вот что: если вы пользуетесь wsl, то лучше разворачивать проект не в wsl а в родительской ОС (windows)

  • 3 Темы
    3 Сообщения
    kirilljsK

    WordPress-logotype-standard.png

    Мэтт Мулленвег, основатель WordPress и владелец компании Automattic, заблокировал учётные записи пяти участников (Joost, Karim, Se Reed, Heather Burns и Morten Rand-Hendriksen), которые продвигали идеи создания форка WordPress и изменения модели управления в сообществе. Мэтт отметил, что поддерживает создание форков и заблокировал эти учётные записи, чтобы стимулировать переход от обсуждений к действиям.

    По словам Мэтта, форки полезны для открытых проектов. Даже один участник, работающий в неправильном направлении, может нарушить совместную работу. Форки позволяют экспериментировать с новыми подходами к разработке и формами лидерства. Мэтт выразил интерес к смелым идеям, обсуждаемым заблокированными участниками, и надеется увидеть, что из этого получится. Он считает, что форк даст возможность сообществу попробовать что-то новое.

    Мэтт также подчеркнул, что открытый код предоставляет возможность взять WordPress и реализовать своё видение в новом проекте без необходимости получения разрешения. Если в новом проекте удастся достичь значительных результатов, сообщество сможет перенести эти улучшения обратно в WordPress. Именно возможность обмена идеями между проектами делает открытый код движущей силой инноваций. Мэтт предложил провести совместный саммит разработчиков WordPress и форка через год, чтобы оценить достигнутые результаты и извлечённые уроки.

    Кроме того, Мэтт иронично высказался о идее создания децентрализованного и немодерируемого каталога плагинов и тем оформления. Он отметил, что такая платформа предоставит авторам полную свободу, включая возможность размещать рекламные баннеры в интерфейсе администратора и собирать данные о пользователях.

  • 3 Темы
    6 Сообщения
    kirilljsK

    @Jspi ThnDAVJLlsU.jpg