Задать вопрос
  • Ошибка запуска varnish.service как решить?

    Lakika
    @Lakika Автор вопроса
    Sicario
    Нашел репозиторий, вроде норм
    Ответ написан
    Комментировать
  • Как заблокировать URL на стороне клиента, используя код на сайте?

    Lakika
    @Lakika
    Sicario
    Если ваша цель - просто скрыть иконку Google Translate, а не полностью блокировать функциональность перевода, возможно, вам будет проще использовать CSS для скрытия элемента. Если иконка находится в определенном элементе, вы можете просто применить к нему display: none.

    Например:
    #google-translate-element {
        display: none !important;
    }

    Где #google-translate-element - это id элемента, в котором находится иконка Google Translate. Этот способ будет работать, если вы можете точно идентифицировать элемент, содержащий иконку.

    Если же иконка перевода появляется в результате работы JavaScript, и вы действительно хотите блокировать запросы, ваш подход с переопределением XMLHttpRequest.prototype.open может работать, но важно убедиться, что ваш код выполняется до того, как выполняются запросы. Возможно, вам придется использовать что-то вроде window.onload или document.addEventListener('DOMContentLoaded', ...), чтобы убедиться, что ваш код выполняется в нужное время.

    Также стоит отметить, что переопределение XMLHttpRequest.prototype.open может не работать для всех запросов, особенно если используются новые API для выполнения HTTP-запросов, такие как fetch.
    Ответ написан
  • Какие есть бесплатные Telegram боты для ведения рейтинга пользователей?

    Lakika
    @Lakika
    Sicario
    ChatKeeperBot - это мощный инструмент для модерации и управления группой в Telegram. Он предлагает возможность повышения активности в чате с помощью системы поощрений, которая включает повышение внутренней репутации за активность, помощь и прочее. Кроме того, бот может наказывать участников путем ухудшения репутации, например, за нарушение правил или недостаточную активность. Бот также предлагает бонусную выдачу очков репутации и подключение внутренней реферальной системы​1​.

    Вам следует проверить бота и его функционал, чтобы убедиться, что он подходит под ваши требования.
    Ответ написан
  • Как реализовать боевку в Юнти 3д используя Photon NetWorking?

    Lakika
    @Lakika
    Sicario
    Используйте коллайдеры: У каждого игрока может быть коллайдер (или "триггер зоны"), который будет представлять зону удара. Это может быть, например, коллайдер, прикрепленный к рукам игрока.

    Реализуйте методы OnTriggerEnter и OnTriggerExit: Когда другой игрок входит в эту зону удара, вызывается метод OnTriggerEnter. В этом методе вы можете сохранить ссылку на игрока, который вошел в зону удара. Когда игрок покидает зону удара, вызывается метод OnTriggerExit, и вы можете обнулить эту ссылку.

    При нажатии кнопок атаки проверяйте, есть ли игрок в зоне удара: Когда игрок нажимает кнопку атаки (ПКМ или ЛКМ), вы проверяете, есть ли в данный момент игрок в зоне удара. Если игрок есть, вы наносите ему урон.
    Ответ написан
    Комментировать
  • Как подключить ssl-сертификат к сайту на OpenCart?

    Lakika
    @Lakika
    Sicario
    Измените настройки конфигурации OpenCart: Откройте два файла конфигурации OpenCart, которые находятся в каталогах "config.php" (это два разных файла, один в корневой директории OpenCart, а другой в каталоге "admin"). В этих файлах нужно изменить определения HTTP_SERVER и HTTP_CATALOG на HTTPS_SERVER и HTTPS_CATALOG, соответственно, указав адрес вашего сайта с протоколом "https://".

    Включите SSL в настройках OpenCart: В панели управления OpenCart перейдите в "Настройки" -> "Сервер" и установите "Использовать SSL" в "Да".

    Принудительное использование SSL: В файле .htaccess вашего сайта можно добавить следующие строки для принудительного использования SSL:
    RewriteEngine On 
    RewriteCond %{HTTPS} off 
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    Что касается проблемы с AJAX-запросами, она может быть связана с тем, что AJAX-запросы осуществляются на URL-адреса, которые начинаются с "http://", а не с "https://". Вам нужно будет убедиться, что все AJAX-запросы отправляются на URL-адреса с "https://". В противном случае браузеры блокируют такие запросы в целях безопасности, так как это считается "небезопасным содержимым".
    Ответ написан
    Комментировать
  • Не работает редирект. Как сделать, чтобы категория со старой cms из поиска перекидывала на нужную?

    Lakika
    @Lakika
    Sicario
    RewriteCond %{REQUEST_URI} ^/shop/bandazhi
    RewriteRule ^(.*)$ http://DOMEN.ru/bandazhi [R=301,L]
    Ответ написан
    Комментировать
  • Как программно выполнить загрузку аватара пользователя wp?

    Lakika
    @Lakika
    Sicario
    Чтобы программно установить аватар пользователя в WordPress, вам придется воспользоваться функцией wp_update_user(), которая позволяет обновить данные пользователя, и функцией get_avatar_url(), которая возвращает URL аватара пользователя.

    Вам также потребуется плагин, такой как WP User Avatar, чтобы загружать и управлять аватарами пользователей, так как встроенные функции WordPress не поддерживают загрузку аватаров напрямую.

    Если вы используете WP User Avatar, вы можете использовать функцию wp_handle_upload() для загрузки изображения, а затем функцию wp_insert_attachment() для вставки изображения как вложения в базу данных WordPress. После этого вы можете установить это вложение как аватар пользователя с помощью функции update_user_meta().
    Ответ написан
    1 комментарий
  • Почему seleniumwire выдаёт ошибку OpenSSL.crypto.Error: [('PEM routines', '', 'no start line')]?

    Lakika
    @Lakika
    Sicario
    Ошибка "OpenSSL.crypto.Error: [('PEM routines', '', 'no start line')]" обычно возникает, когда OpenSSL пытается загрузить или обработать файл в формате PEM (Privacy Enhanced Mail), который является одним из форматов для сертификатов и ключей, и не находит ожидаемого начала файла.

    Это может случиться по нескольким причинам:

    Файл сертификата отсутствует или не может быть прочитан из-за проблем с правами доступа.
    Файл сертификата поврежден или не в формате PEM.
    Путь к файлу сертификата неверен или не корректен.
    В контексте seleniumwire, это может быть связано с настройкой прокси-сервера, который используется seleniumwire для перехвата HTTP(S) запросов.

    Seleniumwire создаёт самоподписанные сертификаты для HTTPS-сайтов на лету, но для этого ему нужен корневой сертификат. Если по какой-то причине этот корневой сертификат не создаётся, не сохраняется или не читается корректно, это может вызвать ошибку OpenSSL.

    Без дополнительной информации трудно сказать точную причину ошибки в вашем случае. Но вот несколько вещей, которые вы можете попробовать:

    Убедитесь, что у вас установлена последняя версия seleniumwire.
    Убедитесь, что у вас есть необходимые разрешения на создание и чтение файлов в директории, где работает ваш скрипт.
    Попробуйте явно задать директорию для хранения сертификатов seleniumwire, используя опцию seleniumwire_options при создании драйвера, например:
    from seleniumwire import webdriver
    from webdriver_manager.chrome import ChromeDriverManager
    
    seleniumwire_options = {
        'ca_bundle_cert': '/path/to/your/directory'
    }
    
    driver = webdriver.Chrome(ChromeDriverManager().install(), seleniumwire_options=seleniumwire_options)

    В этом примере /path/to/your/directory - это путь к директории, где seleniumwire будет хранить сертификаты. Убедитесь, что указанный путь существует и доступен для записи.
    Ответ написан
  • Как в htaccess сделать редирект с якоря (текст после #)?

    Lakika
    @Lakika
    Sicario
    RewriteEngine On
    
    # Проверка на наличие якоря в URL
    RewriteCond %{REQUEST_URI} ^(.*)\#(.*)$
    # Выполнение редиректа на URL без якоря
    RewriteRule ^ %1? [R=301,L]


    Эти правила проверяют, содержит ли URL якорь, используя директиву RewriteCond, и, если да, выполняют редирект на URL без якоря, используя директиву RewriteRule.

    Важно учесть, что при перенаправлении с URL, содержащим якорь, на URL без якоря, может быть потеряна часть информации, которая находится после символа "#". Если вам нужно сохранить эту информацию, то вам необходимо изменять правила редиректа в соответствии с вашими требованиями.
    Ответ написан
    1 комментарий
  • Как сделать редирект всех страниц domain.ru/? на domain.ru/ при этом не убив utm метки?

    Lakika
    @Lakika
    Sicario
    RewriteEngine On
    RewriteCond %{QUERY_STRING} ^$
    RewriteRule ^(.*)$ /?utm_source=%{ENV:REDIRECT_STATUS}&utm_medium=redirect&utm_campaign=301 [L,R=301]

    В этом примере мы используем директиву RewriteCond для проверки того, что QUERY_STRING пустой, что означает, что нет utm меток в URL. Если запрос содержит utm метки, они сохранятся при перенаправлении.

    Затем мы используем директиву RewriteRule, чтобы перенаправить все запросы с пустым QUERY_STRING на главную страницу сайта с добавлением utm меток.

    Обратите внимание, что если в URL уже есть utm метки, то они не будут изменяться и сохранятся в URL после перенаправления на главную страницу.
    Ответ написан
    Комментировать
  • При настройке переадресации Htacces отлетает GET, как быть?

    Lakika
    @Lakika
    Sicario
    Для того, чтобы сохранить GET-параметры при переадресации на другую страницу, вам нужно добавить флаг [QSA] (Query String Append) в конце правила переадресации.

    Например, если вы хотите переадресовать запрос с параметром "chpu" и "id" на страницу с URL "/services/{chpu}/{id}", используйте следующее правило:

    RewriteEngine On
    RewriteCond %{REQUEST_URI} /services/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{QUERY_STRING} ^chpu=([^&]+)&id=([^&]+) [NC]
    RewriteRule (.*) /services/%1/%2? [R=301,L,QSA]

    Обратите внимание на флаг [QSA], который сохраняет GET-параметры при переадресации. Теперь, когда пользователь запрашивает страницу с параметрами, они будут сохранены при переадресации и переданы на новую страницу.
    Ответ написан
    Комментировать
  • Как сделать перенаправление в htaccess с ссылки на аналогичную ссылку c добавление .html?

    Lakika
    @Lakika
    Sicario
    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME}.html -f
    RewriteRule ^ru-UA/(.*)$ /ru-UA/$1.html [L,R=301]
    </IfModule>

    Это проверит, существует ли файл с расширением .html для запрошенной страницы, и если да, то сделает редирект на него. Если файл не существует, то будет отображена запрошенная страница без изменений.
    Ответ написан
    Комментировать
  • Как настроить редирект всех изображений?

    Lakika
    @Lakika
    Sicario
    RewriteEngine On
    RewriteCond %{REQUEST_URI} \.(png|jpg)$ [NC]
    RewriteRule ^(.*)$ https://site2.ru/image/2.png [L,R=301]
    Ответ написан
    Комментировать
  • Как настроить htaccess для ридеректа с адреса без слэша в конце, чтобы не терять данные POST запроса?

    Lakika
    @Lakika
    Sicario
    RewriteCond %{REQUEST_METHOD} !POST
    RewriteCond %{REQUEST_URI} !(.*)/$
    RewriteRule ^(.*)$ /$1/ [L,R=301]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ index.php [L]
    Ответ написан
    Комментировать
  • Как объединить правила в htaccess?

    Lakika
    @Lakika
    Sicario
    SetEnv HTTPS on
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule \.(js|css|jpeg|jpg|gif|png|ico|map|webp)(\?|$) /404error.php [L,NC]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    
    # BEGIN YOURLS
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^.*$ /yourls-loader.php [L]
    </IfModule>
    # END YOURLS
    Ответ написан
    Комментировать
  • Как добавить / в конце адреса?

    Lakika
    @Lakika
    Sicario
    Попробуйте добавить следующее правило в конец файла .htaccess:
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*[^/])$ /$1/ [L,R=301]

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

    Lakika
    @Lakika
    Sicario
    # преобразование пути для CSS-файлов
    RewriteRule ^css/(.*)$ /css/$1 [L,R=301]
    
    # преобразование пути для JS-файлов
    RewriteRule ^js/(.*)$ /js/$1 [L,R=301]
    
    # преобразование пути для изображений
    RewriteRule ^images/(.*)$ /images/$1 [L,R=301]


    При этом следует учитывать, что пути к файлам в разметке могут быть заданы с помощью относительных путей, а не абсолютных. В этом случае нужно убедиться, что базовый путь для всех файлов задан правильно. Например, если сайт находится на домене example.com, то базовый путь можно задать следующим образом:
    <base href="https://example.com/">
    Ответ написан
    Комментировать
  • Посоветуете простое решение для вывода альбомов google photos?

    Lakika
    @Lakika
    Sicario
    import React from 'react';
    import { GooglePhotos } from 'react-google-photos';
    
    const AlbumList = () => {
      const handleAlbumClick = (album) => {
        console.log(album.title);
      };
    
      return (
        <GooglePhotos
          clientId={YOUR_CLIENT_ID}
          developerKey={YOUR_DEVELOPER_KEY}
          albumClick={handleAlbumClick}
        />
      );
    };
    
    export default AlbumList;


    В качестве clientId и developerKey нужно использовать ключи, полученные при регистрации приложения в Google Developers Console и включении Google Photos API.

    Надеюсь, это поможет вам решить задачу вывода альбомов Google Photos на React.
    Ответ написан
  • Как правильно объединить данные на форме для передачи в бд?

    Lakika
    @Lakika
    Sicario
    Чтобы организовать связь между шапкой и строками заказа, вы можете использовать следующий подход:

    Создайте таблицу "orders" для хранения информации о заказах, включая уникальный идентификатор заказа (например, order_id).

    Создайте таблицу "order_lines" для хранения информации о строках заказа, включая уникальный идентификатор строки (например, line_id), идентификатор заказа (order_id), а также другие свойства, такие как название товара, количество, цена и т.д.

    На форме создания заказа вы можете использовать элемент выбора (select) для выбора заказа, к которому нужно добавить строки. В качестве значения элемента выбора можно использовать идентификатор заказа.

    При отправке формы на сервер вы можете получить идентификатор заказа и добавить новую строку в таблицу "order_lines" с помощью запроса SQL, используя идентификатор заказа для связи строки с соответствующим заказом.

    Например, в PHP-обработчике формы можно использовать следующий код для добавления новой строки в таблицу "order_lines":

    $order_id = $_POST['order_id'];
    $product_name = $_POST['product_name'];
    $quantity = $_POST['quantity'];
    $price = $_POST['price'];
    
    $sql = "INSERT INTO order_lines (order_id, product_name, quantity, price) VALUES ('$order_id', '$product_name', '$quantity', '$price')";


    Здесь мы используем переменные $order_id, $product_name, $quantity и $price, которые мы получили из формы. Затем мы выполняем запрос SQL для добавления новой строки в таблицу "order_lines" с использованием идентификатора заказа для связи строки с соответствующим заказом.

    Такой подход позволит вам легко связывать строки заказа с соответствующим заказом, используя уникальный идентификатор заказа в таблице "order_lines".
    Ответ написан
    Комментировать
  • Как добавить в корзину вариативный товар через Ajax?

    Lakika
    @Lakika
    Sicario
    <button type="button" class="single_add_to_cart_button button alt<?php echo esc_attr( wc_wp_theme_get_element_class_name( 'button' ) ? ' ' . wc_wp_theme_get_element_class_name( 'button' ) : '' ); ?> add-to-cart-variation">В корзину</button>

    Здесь мы добавили класс "add-to-cart-variation", который будет использоваться для привязки события Ajax.

    JavaScript-код для отправки Ajax-запроса на сервер при нажатии на кнопку "В корзину":

    jQuery(document).ready(function($) {
        $('body').on('click', '.add-to-cart-variation', function() {
            var variation_id = $(this).closest('form.cart').find('.variation_id').val();
            var quantity = $(this).closest('form.cart').find('.quantity').val();
            var product_id = $(this).closest('form.cart').find('input[name="product_id"]').val();
            var data = {
                action: 'add_variation_to_cart',
                product_id: product_id,
                variation_id: variation_id,
                quantity: quantity
            };
            $.ajax({
                type: 'POST',
                url: wc_add_to_cart_params.ajax_url,
                data: data,
                success: function(response) {
                    if (response) {
                        $(document.body).trigger('added_to_cart', [response.fragments, response.cart_hash, $(this)]);
                    }
                },
                dataType: 'json'
            });
            return false;
        });
    });


    Здесь мы добавили класс "add-to-cart-variation", который будет использоваться для привязки события Ajax.
    JavaScript-код для отправки Ajax-запроса на сервер при нажатии на кнопку "В корзину":

    jQuery(document).ready(function($) {
        $('body').on('click', '.add-to-cart-variation', function() {
            var variation_id = $(this).closest('form.cart').find('.variation_id').val();
            var quantity = $(this).closest('form.cart').find('.quantity').val();
            var product_id = $(this).closest('form.cart').find('input[name="product_id"]').val();
            var data = {
                action: 'add_variation_to_cart',
                product_id: product_id,
                variation_id: variation_id,
                quantity: quantity
            };
            $.ajax({
                type: 'POST',
                url: wc_add_to_cart_params.ajax_url,
                data: data,
                success: function(response) {
                    if (response) {
                        $(document.body).trigger('added_to_cart', [response.fragments, response.cart_hash, $(this)]);
                    }
                },
                dataType: 'json'
            });
            return false;
        });
    });


    Здесь мы использовали функцию jQuery ajax() для отправки POST-запроса на сервер WooCommerce с параметрами, такими как идентификатор вариации, количество и идентификатор товара.
    Добавьте PHP-обработчик для Ajax-запроса на сервере WordPress:

    add_action('wp_ajax_add_variation_to_cart', 'add_variation_to_cart');
    add_action('wp_ajax_nopriv_add_variation_to_cart', 'add_variation_to_cart');
    
    function add_variation_to_cart() {
        $product_id = intval($_POST['product_id']);
        $variation_id = intval($_POST['variation_id']);
        $quantity = intval($_POST['quantity']);
        $variation = array(
            'variation_id' => $variation_id,
            'quantity' => $quantity
        );
        WC()->cart->add_to_cart($product_id, $quantity, $variation_id, $variation);
        WC_AJAX::get_refreshed_fragments();
        wp_die();
    }


    Здесь мы определяем две функции действий WordPress для обработки Ajax-запроса на сервере. Функция add_variation_to_cart() получает идентификатор товара, идентификатор вариации и количество, добавляет товар в корзину и возвращает обновленный фрагмент корзины.

    После того как вы добавите все необходимые файлы и код в ваш проект, кнопка "В корзину" для вариативного товара будет работать через Ajax и добавлять товар в корзину без перезагрузки страницы.

    Чтобы убедиться, что код работает корректно, убедитесь, что вы правильно добавили все файлы и код в ваш проект. Кроме того, убедитесь, что у вас установлен и активирован плагин WooCommerce и что ваша тема WordPress поддерживает WooCommerce.
    Ответ написан
    1 комментарий