• Как исправить ошибку двух SEO-плагинов в WordPress?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Имеет ли вообще значение, какой из плагинов генерирует файл sitemap?

    Нет, имеет значение итоговый sitemap на выходе, который соответствует базовым правилам.
    Ответ написан
    Комментировать
  • Как вывести картинки?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    в папке images в папке проекта

    А папка images в яйце, а яйцо в другой папке. Предположу, что речь идет про папку images, которая находится в корне проекта, тогда обычно указывается относительный путь:
    <img src="/images/img.jpg" alt="" width="100px" height="100px"/>
    
    // or
    
    import Image from 'next/image';
    <Image src="/images/img.jpg" alt="" width={100} height={100}/>
    Ответ написан
  • Может ли работодатель запретить сотрудникам использовать личные пк?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Ст. 72 ТК РФ. Если коротко, то работодатель вправе устанавливать правила выполнения трудовых обязанностей работника в трудовом договоре (и любых допниках), при условие, если они не противоречат законам РФ.
    Кто как регламентировал такие моменты?

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

    https://www.9111.ru/questions/11162198/
    https://journal.tinkoff.ru/ask/taina/
    Ответ написан
    3 комментария
  • Какой есть онлайн-сервис, делающий css код кроссбраузерным?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    С натяжкой, можно сказать, что он старается сделать css код более кроссбраузерным + в онлайн варианте: Autoprefixer CSS
    Ответ написан
    Комментировать
  • Как сделать скрин отрывка в Selenium Python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Сохраняем скрин всей страницы, затем вырезаем нужное из этого скрина:
    $ pip install --upgrade webdriver-manager
    $ pip install Pillow

    from selenium import webdriver
    from selenium.webdriver.edge.service import Service
    from PIL import Image
    from webdriver_manager.microsoft import EdgeChromiumDriverManager
    
    driver = webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()))
    driver.get("https://pillow.readthedocs.io/en/stable/installation.html")
    path = "full.png"
    driver.save_screenshot(path)
    driver.quit()
    
    x = 100
    y = 100
    w = 500
    h = 300
    
    image = Image.open(path)
    cropped = image.crop((x, y, x+w, y+h))
    cropped.save("crop.png")

    КартинкО

    65cc62a645be7633087189.png
    65cc62ac23be7654822496.png
    65cc62b0ef884076037417.png

    Но обычно отправляют сразу изображение капчи (оно обычно в html в style как base64 вставлено), ничего не вырезая.
    Ответ написан
    2 комментария
  • Почему обычно 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
    Ответ написан
    Комментировать