• Как можно установить чат с поддержкой на сайт?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Как можно установить чат с поддержкой на сайт?

    - Установив плагин (множество бесплатных), онлайн-чаты для WP.
    - Руками, вставив соответствующий код в тему или плагин WP:
    -- Бесплатные: Quickley, Chatra, Бесплатный онлайн-чат для сайта на JS?
    -- Условно бесплатные: Bitrix24 chat, AmoCRM chat, Umnico Live Chat итп.
    -- Платные: JivoChat, Carrot quest, LiveChat итп.
    Ответ написан
    Комментировать
  • Отмена дефолтного поведения?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    tabs

    tabs? Неужели в нем лежит коллекция элементов? Если да, то необходим предварительный перебор коллекции (для выполнения метода preventDefault() для каждого из элементов коллекции), примерно так:
    tabs.forEach((el) => {
        el.addEventListener('click', (e) => {
            e.preventDefault();
        });
    });
    Ответ написан
    Комментировать
  • Как создать Сайт на 3-х языках?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Как создать сайт на 3-х языках?

    Создать подпапки с нужной лакализацией, например:
    - /news/1 (по умолчанию)
    - /en/news/1
    - /de/news/1
    или только создать поддомены en.site.com/ ru.site.com/site.com и создать отдельный сайт на каждом поддомене?

    Поддомены проигрывают в продвижение подпапкам.
    Ответ написан
    Комментировать
  • Как лучше реализовать SEO-описания для страниц в Nuxt 3?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Нормально ли (нужно ли?) для SEO, чтобы обновлялись описания при переходе по вкладкам на странице? Нормально ли (нужно ли, опять же) обновлять SEO для страниц, которые основываются на динамически подгружаемых данных (страница новости, к примеру)?

    1 уникальный url - 1 уникальный контент (текст и желательно, изображения). Динамика индексируется хуже статики, но склейка и санкции со стороны ПС накладываются так же эффективно ;)

    Если под вкладками понимаются табы в рамках одной страницы, то если вкладки не откраваются по якорю, то достаточно иметь уникальный контент на первой вкладке, а вот если открываются по якорю, то здесь момент очень неприятный - по сути, Вы показываете разный контент разным посетителям, а значит пытаетесь манипулировать выдачей.
    Ответ написан
    2 комментария
  • Как поставить лайк на все комментарии видео в тикток?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Ладно, упарываться, так упарываться. Клики + получение новых элементов для кликов + прокрутка + все повторить, но не смешивать. Кликнуть на ролик, вставить и выполнить код в консоль браузера:
    async function clickByElement() {
        let element = document.querySelector('.css-1swe2yf-DivActionContainer.esns4rh0 [aria-pressed="false"]');
        if (!element) return null;
    
        console.log('Клик!')
        element.click();
        while (element.getAttribute('aria-pressed') !== 'true') {
            await new Promise(resolve => setTimeout(resolve, 100));
        }
        
        return true;
    }
    
    async function clickAllElements() {
        let foundClickable = false;
        while (await clickByElement() !== null) {
            foundClickable = true;
        }
        
        return foundClickable;
    }
    
    async function scrollToBottomAndClickAgain() {
        const scrollContainer = document.querySelector('.css-1qp5gj2-DivCommentListContainer.ekjxngi3');
        if (scrollContainer) {
            console.log('Крутим страницу и ждем 10 сек.')
            let lastScrollTop = scrollContainer.scrollTop;
            scrollContainer.scrollTop = scrollContainer.scrollHeight;
            await new Promise(resolve => setTimeout(resolve, 10000));
    
            if (scrollContainer.scrollTop !== lastScrollTop) {
                if (await clickAllElements()) {
                    await scrollToBottomAndClickAgain();
                } else {
                    console.log('Прокрутка выполнена, новые элементы для клика не найдены.');
                }
            } else {
                console.log('Достигли конца прокрутки, больше нечего прокручивать.');
                if (await clickAllElements()) {
                    await scrollToBottomAndClickAgain();
                } else {
                    console.log('Задача окончательно завершена, кликов больше не осталось');
                }
            }
        } else {
            console.error('Контейнер для прокрутки не найден');
        }
    }
    
    async function initiateClicksAndScroll() {
        if (await clickAllElements()) {
            await scrollToBottomAndClickAgain();
        } else {
            console.log('Нет элементов для начальных кликов, проверяем прокрутку');
            await scrollToBottomAndClickAgain();
        }
    }
    
    initiateClicksAndScroll().then(() => console.log('Задача выполнена май генерал!'));
    Ответ написан
  • Как нажать на все блоки с данным классом на странице с помощью JS?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    1. Получаем все элементы методом .querySelectorAll().
    2. Перебираем п1. методом .forEach().
    3. Печатаем элемент и его номер из п1. (для наглядности) + кликаем по элементу п2. методом .click().
    document.querySelectorAll('.CLASSNAME').forEach((el, i) => {
        console.log(`Element №${i}, `, el);
        el.click();
    });

    Пример с ожидаем в 1 секунду, перед сбором и кликом по элементам:
    setTimeout(() => {
        document.querySelectorAll('.CLASSNAME').forEach((el, i) => {
            console.log(`Клик по элементу №${i}, `, el);
            el.click();
        });
    }, 1000);
    Ответ написан
  • Как сформировать маску, используя регулярное выражение?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Нужно получить маску ... по типу 1.1.1.1.1

    ^\d\.\d\.\d\.\d\.\d$
    ^(\d\.){4}\d$ [0]
    Ответ написан
    Комментировать
  • Как увеличить паузу между отправкой запроса и получением результата?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Пишу на Python программу для получения через API сайта информации с помощью requests.get()

    В этой связи вопрос: как можно увеличить эту паузу???

    Никак. requests возвращает исключительно, первый ответ сервера. Попробуйте библиотеку aiohttp или httpx.
    Ответ написан
    5 комментариев
  • Как на asp .net 7 подключить ssl для https протокола?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Как мне сделать так, чтобы мой сервис используя эти файлы запускался на https в контейнере

    Пример Dockerfile конфига (при необходимости, поправить пути и наименования):
    FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
    WORKDIR /app
    EXPOSE 80
    EXPOSE 443
    
    FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
    WORKDIR /src
    COPY ["project.csproj", "."]
    RUN dotnet restore "project.csproj"
    COPY . .
    WORKDIR "/src/."
    RUN dotnet build "project.csproj" -c Release -o /app/publish
    
    FROM build AS publish
    RUN dotnet publish "project.csproj" -c Release -o /app/publish
    
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    COPY ["cert.pem", "key.pem", "/https/"]
    ENTRYPOINT ["dotnet", "project.dll"]

    https://learn.microsoft.com/en-us/aspnet/core/fund...
    Пример Program.cs:
    var builder = WebApplication.CreateBuilder(args);
    
    builder.WebHost.ConfigureKestrel(options =>
    {
        options.ListenAnyIP(443, listenOptions =>
        {
            listenOptions.UseHttps("/https/cert.pem", "/https/key.pem");
        });
    });

    Ну и при использование Nginx (например) в качестве обратного прокси, то придется настроить и его. С другой стороны, если у Вас будет стоять Nginx, то не совсем понятно, для чего гонять защищенный трафик между Nginx и ASPNET, т.к:
    1. Nginx универсальнее и производительнее ASPNET в данном контексте.
    2. Если подлинность трафика уже подтверждена на уровне Nginx, то зачем все тоже самое повторять дальше по цепочке, в ASPNET.
    Ответ написан
    Комментировать
  • Как проскролить страницу в право в определенном фрейме?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Переключиться на этот фрейм, затем в этом контексте выполнять необходимые действия.
    Ответ написан
    Комментировать
  • Как выровнять по высоте заголовки в карточках товаров?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    как можно реализовать выравнивание высоты заголовков с помощью CSS/SCSS

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

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Могу ли я установить ПО или ОС, а лицензию не ставить?

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

    Если под "подводными камнями" имеется ввиду незаконная активация ПО (взлом, кряк итп), то:
    - УК РФ Статья 272. Неправомерный доступ к компьютерной информации.
    - УК РФ Статья 146. Нарушение авторских и смежных прав.

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

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Если я правильно понял задачу (использовать одну общую либу Core для нескольких проектов), то я бы использовал 2 варианта:
    - Создание NuGet пакета (если Core изменяется не часто), затем подключаем его в любом проекте.
    - Или docker multi-stage builds (если Core изменяется часто).

    Пример docker multi-stage builds с авто сборкой Core lib + Api proj (поправить пути и наименования директорий при необходимости):
    # Build Core lib
    FROM mcr.microsoft.com/dotnet/sdk:8.0 AS core-build
    WORKDIR /src
    COPY ["../Core/Core.csproj", "./Core/"]
    RUN dotnet restore "./Core/Core.csproj"
    COPY ["../Core/", "./Core/"]
    RUN dotnet build "./Core/Core.csproj" -c Release -o /app/core
    
    # Build API proj
    FROM mcr.microsoft.com/dotnet/sdk:8.0 AS api-build
    WORKDIR /src
    COPY ["Service/API/API.csproj", "./Service/API/"]
    RUN dotnet restore "./Service/API/API.csproj"
    COPY ["Service/API/", "./Service/API/"]
    COPY --from=core-build /app/core /lib
    RUN dotnet build "./Service/API/API.csproj" -c Release -o /app/service
    
    # Create final image
    FROM mcr.microsoft.com/dotnet/aspnet:8.0
    WORKDIR /app
    COPY --from=api-build /app/service .
    ENTRYPOINT ["dotnet", "API.dll"]
    Ответ написан
    1 комментарий
  • Как создать шаблон вывода записей с произвольным типом?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    'has_archive' => true,

    - Для архивной страницы: /wp-content/themes/ваша-тема/archive-services.php
    - Для отдельной страницы: /wp-content/themes/ваша-тема/single-services.php
    'has_archive' => false,

    /wp-content/themes/ваша-тема/services.php
    Ответ написан
  • Как обновить верстку на NEXT.JS c Wordpress?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Надо смотреть конкретный конфиг некста, но предположу, что никак. Скорее всего, фронт живет отдельной жизнью, используя api wp.
    в файловом менеджере на vps, где файлы самого next я нашел скрипт, который надо поменять, поменял его

    Так нельзя делать, т.к. это итоговая компиляция проекта. Вам необходимо вносить изменения в исходники некст проекта, затем билдить и экспортировать (если старый проект) проект как статику.
    Ответ написан
    7 комментариев
  • Почему сайт отображается некорректно?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Файл закэширован, попробуйте изменить:
    <link rel="stylesheet" href="./app/css/main.css">
    на
    <link rel="stylesheet" href="./app/css/main.css?v=1">
    Ответ написан
    3 комментария
  • После установки обновления phpstorm перестал запускаться. Как исправить?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Гугл подсказывает, что нужно прописать переменные среды. Вроде прописала, но все равно не запускается.
    Не подскажете, в чем может быть проблема?

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

    Перед удаление, не забудьте экспортировать конфиг со всеми настройками, чтобы потом его импортировать в свежую ide.
    Ответ написан
    7 комментариев
  • Каково критическое количество HTTP (ajax) запросов на сервер, как его расчитать?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Могу ли я получить примерное значение максимально-возможного числа запросов и/или пользователей, которых сможет поддерживать мой Django сервер?

    Можете, используйте инструмент по типу яндекс танка. Приблизительные цифры с привязкой к конкретному стенду и приложению только так.

    Если у Вас не асинхронный django, и не используется multiprocessing, то результат будет скромным, очень скромным.
    Ответ написан
  • Как увеличить стоимость товара при помощи чекбоксов?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Использовать woocommerce и вариативный товар.
    Ответ написан
    Комментировать
  • Как сделать ссылку на полное изображение?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Попробуйте так (при необходимости, поправить регулярку и формирования нового тега):
    // functions.php or any plugin
    
    function test($content) {
        // Регулярка для поиска изображений
        $pattern = '/<img[^>]+src="([^"]+)"[^>]+>/';
        
        preg_match_all($pattern, $content, $m);
        if (isset($m[1])) {
            foreach ($m[1] as $i => $url) {
                // Получаем url "полного" изображения
                $full_url = preg_replace('/-\d+x\d+(\.\w+)$/', '$1', $url);
                
                // Изменяем стандартный <img/> на <a><img/></a>
                $r = '<a href="' . $full_url . '" target="_blank">' . $m[0][$i] . '</a>';
                $content = str_replace($m[0][$i], $r, $content);
            }
        }
        return $content;
    }
    
    add_filter('the_content', 'test');
    Ответ написан
    1 комментарий