• Почему обычно React не рендерят прямо в body?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Почему мы не можем в React рендерить прямо в body?

    Не знаю, почему Вы не можете. createRoot().
    Ответ написан
  • Как загружать навбар?

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

    Фактически, 3 варианта:
    1. Динамическая подгрузка пунктов меню, через js. В таком случае, не нужны сборщики, но SEO данного блока будет так себе.
    2. Использование сборщика проектов, например, Webpack + шаблонизатор (EJS или Handlebars).
    3. Использование сборщика проектов, например, Webpack + React/Vue.
    Ответ написан
    4 комментария
  • Как из админки запустить php-скрипт по клику?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Я бы использовал плагин, с личной админкой и кнопкой на панели меню:
    /*
    Plugin Name: Супер плагин
    Description: Невероятный плагин, взламывает пентагон по клику!
    Version: 0.1
    Author: Михаил Р.
    */
    
    function super_plugin_menu() {
        add_menu_page('Супер плагин', 'Супер плагин', 'manage_options', 'custom-php-executor', 'super_plugin');
    }
    
    function super_plugin() {
        if(isset($_POST['custom_php_code'])) {
            $code = stripslashes($_POST['custom_php_code']);
            update_option('super_plugin_custom_code', $code);
        } else {
            $code = get_option('super_plugin_custom_code', '');
        }
    
        ?>
        <div class="wrap">
            <h2>Супер плагин</h2>
            <form method="post">
                <textarea
                    name="custom_php_code"
                    style="width:100%;height:200px;"
                ><?php echo htmlspecialchars($code); ?></textarea>
                <input type="submit" value="Выполнить, как следует!" class="button button-primary">
            </form>
        </div>
    
        <?php
        if(!empty($code)) {
            eval($code);
        }
    }
    
    add_action('admin_menu', 'super_plugin_menu');

    КартинкО

    65ca1aaf1a6e2384036131.png
    65ca1ab6114ec549148365.png
    65ca1abcca92b540993230.png
    65ca1ac2ceaff186880778.png
    Ответ написан
    2 комментария
  • Contact Form 7 как сделать автоматический переход между полями?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Поля формы ограничены по количеству символов

    Т.к. надо угадать, что такое "ограничены по количеству символов", то предположу, что речь о length input.

    Подключить скрипт на сайт, и при необходимости, подкорректировать селектор полей формы:
    document.addEventListener('DOMContentLoaded', () => {
        const elements = document.querySelectorAll('.wpcf7-form input[type="text"], .wpcf7-form textarea');
    
        elements.forEach((el, i) => {
            const maxLength = parseInt(el.getAttribute('maxlength'), 10);
    
            el.addEventListener('input', () => {
                const length = el.value.length;
                if (length >= maxLength) {
                    if (i + 1 < elements.length) {
                        elements[i + 1].focus();
                    }
                }
            });
        });
    });
    Ответ написан
    Комментировать
  • Contact Form 7 как запретить ввод пробелов?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Подключить скрипт на сайт, и при необходимости, подкорректировать селектор полей формы:
    document.addEventListener('DOMContentLoaded', () => {
        const elements = document.querySelectorAll('.wpcf7-form input[type="text"], .wpcf7-form textarea');
    
        elements.forEach((el) => {
            el.addEventListener('input', (e) => {
                e.target.value = e.target.value.replace(/\s+/g, '');
            });
        });
    });

    UPD из комментов, ограничение на ввод в input только цифр (необходимо указать css класс такому input only-numbers):
    document.addEventListener('DOMContentLoaded', () => {
        const elements = document.querySelectorAll('.only-numbers');
    
        elements.forEach((el) => {
            el.addEventListener('input', (e) => {
                e.target.value = e.target.value.replace(/\D/g, '');
            });
        });
    });
    Ответ написан
    3 комментария
  • Как должен выглядеть location подмены картинок?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Можно заюзать алиасы:
    # /resize/422346/asjdhy37772jssh_500x500.webp > /home/bitrix/ext_www/images/resize/422346/asjdhy37772jssh_500x500.webp
    location /resize/ {
       alias /home/bitrix/ext_www/images/resize/;
    }

    А вообще, желательно проверять логи nginx по ~адресу /var/log/nginx/error.log.
    Ответ написан
  • 404 ошибка при переходе на страницу рубрик?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Проблема 404 была при указание rewrite в cpt:
    'rewrite' => array('slug' => '/', 'with_front' => false),

    Проблема 404 была решена так:
    'rewrite' => array('slug' => 'services', 'with_front' => false),
    Ответ написан
    Комментировать
  • Как настроить редирект со всех страниц сайта на эти же страницы его копии на другом домене?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    301 редирект всех запросов со старого домена (http/https), на новый (https).

    .htaccess:
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^old\.ru$ [OR]
    RewriteCond %{HTTP_HOST} ^www\.old\.ru$
    RewriteRule ^(.*)$ https://new.ru/$1 [R=301,L]
    Ответ написан
    Комментировать
  • Как сделать пунктирное подчеркивание ссылок?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Ответ написан
    Комментировать
  • Есть ли способы борьбы со спамными лидами?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    С начала декабря видим увеличение спамных лидов, прогрессия примерно такая: ноябрь 3%, декабрь 10%, январь 20%.

    Среднее поведение.
    В заявках указаны реально существующие номера телефонов, ФИО полностью, но когда менеджеры по ним звонят, то люди либо орут, что их достали уже звонками, а они нигде свои заявки не оставляли, либо вовсе не берут трубку.

    Среднее поведение.
    смотрела по вебвизору - похоже на поведение людей, но странное. вход на страницу, сразу переход к форме

    Простое поведение.
    ввод данных, причем не вставка сразу номера или ФИО, а виден набор (иногда видно, как что-то стирают и вводят вновь)

    Сложное поведение.
    Кто-то уже сталкивался с подобным

    "Сталкивался".
    Контекстологи не понимают в чем дело

    Им это и не нужно понимать, т.к. этим должны заниматься те, кто пишет подобный софт.
    как боролись? какие вообще варианты есть?

    уверяют что нужно ставить проги антифрода, но что-то не верится, что это поможет...

    1. Антифрод поможет, если против Вас боты начального уровня, которые не сильно заморачиваются в маскировку.
    2. Подтверждение заявок через смс, клиент оставляет заявку, Вы просите подтвердить его номер через смс. Таким образом Вы убиваете сразу двух зайцев, боретесь со спамом и можете эффективнее настраивать конверсию из сделок в crm для контекстной рекламы.

    В любом случае, бороться с фродом Вы сможете лишь на своем сайте, т.е. в случае чего, повлиять, например, на скликивание рекламы Вы не сможете.
    Ответ написан
    Комментировать
  • Как организовать закрытие вкладок автоматически по определенному url?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Через какой то скрипт хотя бы подскажите направление. В tampermonkey не нашел ничего подобного.

    По соображениям безопасности, никакой js скрипт или скрипт в tampermonkey (там тоже js) не сможет закрыть вкладку, которую открыл пользователь руками.

    Если же вкладку открыл скрипт, то ее можно закрыть так:
    // открыто
    window.open('youtube.com', '_blank');
    
    // закрыто
    if ('/youtube\.com/'.test(window.location.href)) {
        window.close();
    }
    Ответ написан
  • Как передать собственный класс на метод в качестве параметра по умолчании?

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

    Можно ли такое осуществлять? Или такое не стоит сделать даже если возможно?

    Можно. Не стоит.

    Значение аргументов по умолчанию в функции вычисляется в момент объявления функции, а не в момент обращения к ней.

    Например, экземпляр класса Test, который Вы пытаетесь использовать в качестве значения по умолчанию, будет создан в момент определения метода test, что может быть не тем, что Вы ожидаете и может привести к сложно отлаживаемым ошибкам из за неочевидного разделения состояния между экземплярами.

    Также, Ваш код приведет к ошибке, так как в момент определения метода test класс Test еще не полностью определен, и Вы не можете создать его экземпляр.

    Вместо этого, можно использовать None для аргумента по умолчанию, а внутри метода проверять, был ли передан аргумент, и если нет, то создавать новый экземпляр класса:
    class Test:
        def test(self, x=None):
            if x is None:
                x = Test()
            print(type(x))
    
    x = Test()
    x.test()

    Поделитесь целью использования такой схемы?
    Ответ написан
    4 комментария
  • Как ограничить количество подключений прокси в Pyrogram?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    в Pyrogram документации не нашел подобного

    Все верно, Pyrogram не настолько гибкий по прокси, в сравнение с Telethon. Используйте внешний менеджер подключений/проксей и не будите зависеть от конкретной библиотеки, например:
    import asyncio
    from pyrogram import Client
    from pyrogram.errors import PyrogramError
    
    class ProxyManager:
        def __init__(self, app, max_retries=5, retry_delay=1, proxy=None):
            self.app = app
            self.max_retries = max_retries
            self.retry_delay = retry_delay
            self.proxy = proxy
            self.client = None
    
        async def connect(self):
            for attempt in range(1, self.max_retries + 1):
                try:
                    print(f"Connection attempt #{attempt}")
                    self.client = Client(**self.app, proxy=self.proxy)
                    await self.client.start()
                    print("The connection was established successfully.")
    
                except PyrogramError as e:
                    print(f"Connection error: {e}")
                    if attempt == self.max_retries:
                        print("The maximum number of connection attempts has been reached, stop!")
                        break
    
                    await asyncio.sleep(self.retry_delay)
    
        async def disconnect(self):
            if self.client:
                await self.client.stop()
                print("Connection is closed.")
    
    app = {
        'api_id': 'YOUR_API_ID',
        'api_hash': 'YOUR_API_HASH',
        'session_name': 'your_session_name'
    }
    
    proxy = {
        'scheme': 'http',  # or 'socks5'
        'hostname': 'your.proxy.hostname',
        'port': 1080,
        'username': 'user',
        'password': 'password'
    }
    
    # test run
    async def main():
        manager = ProxyManager(app, max_retries=3, retry_delay=2, proxy=proxy)
        await manager.connect()
        await manager.disconnect()
    
    asyncio.run(main())
    Ответ написан
    1 комментарий
  • Как выровнять шрифт внутри line-height?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    В CSS существует ограниченный набор свойств для непосредственного управления межстрочным интервалом или отступами непосредственно от букв. Либо это line-height, либо возня с отрицательными margin или псевдо элементами.

    Ну вот и у госов теперь все "ровно":
    line-height: 1;

    65c355178a2f0946400951.png
    Ответ написан
  • PHPStorm плагин для комментариев/заметок без фиксирования в git?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Code Note
    Видео

    screenshot_4f5e4091-907d-49bf-b071-495922130fcb
    Ответ написан
    Комментировать
  • Как сделать 301 редирект со всех страниц вида /folder/1-2/p1.php, /folder/1-2/3-4/p1.php и т.д. на /folder/p1/?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    RewriteEngine On
    # /folder/ => /folder/file-name/
    RewriteCond %{REQUEST_URI} ^/folder/.+/(p[0-9]+)\.php$
    RewriteRule ^folder/.+/(p[0-9]+)\.php$ /folder/%1/ [R=301,L]
    Ответ написан
  • Нормально если первый стейт менеджер для react который я буду учить - будет mobx, а не Redux?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Нормально если первый стейт менеджер для react который я буду учить — будет mobx, а не Redux?

    Нормально ли будет если в резюме есть mobx вместо redux?

    Давайте проведем анализ хэхэ на 02.2024:
    - Redux (772 вакансии).
    - Mobx (235 вакансий).
    - Zustand (21 вакансия).

    Резюмируя, Ваш навык Mobx примерно в 3 раза менее ценен на рынке, чем навык Redux. Разумеется, сравнение поверхностное, но какой то вывод можно сделать.
    Ответ написан
    6 комментариев
  • Кто должен делать отправку формы на сайте?

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

    Тот, кто это обязан делать по тз или распоряжению тимлида. Если это нигде не определено, то:
    - front запрашивает у back схему api для отправки данных с формы, и программирует отправку формы с учетом этой схемы.
    - back пишет api, взаимодействует с данными с фронта, проектирует и работает с бд.
    Ответ написан
    Комментировать
  • Как я могу выявить вредоносный код на python?

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

    Своими глазами я вряд ли увижу, то чего стоило бы опасаться.

    Найти того, кто сможет.
    Есть ли какие то инструменты для выявления того, чего не должно быть в коде?

    Антивирус? Но врятли на python пишут вирусы, а все остальное на вирусы не тянет, но данные утащить может.
    Ответ написан
    3 комментария
  • Почему при загрузке сайта на Pages не подключаются стили CSS?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Неверные пути до css и js файлов на странице. Замените все части путей в html с ./libs/ на /lofthouse/libs/.

    https://antcosm.github.io/lofthouse/libs/youtubeLi... теперь доступен, как и другие файлы.
    Ответ написан
    Комментировать