Задать вопрос
  • Как установить цель метрики на все партнерские ссылки?

    scoffs
    @scoffs
    Fullstack | C# | Student
    Вам потребуется добавить код, который будет обрабатывать все ссылки с префиксом /go/ и добавлять необходимый JavaScript-код для цели Яндекс Метрики.

    Что-то типа этого:
    function add_yandex_metric_goal() {
        if (is_singular()) {
            global $post;
            $content = $post->post_content;
    
            // Поиск всех ссылок с префиксом /go/
            preg_match_all('/<a href="\/go\/(.*?)"/', $content, $matches);
    
            // Добавление JavaScript-кода для цели Яндекс Метрики к найденным ссылкам
            if (!empty($matches[1])) {
                $goal_code = "ym(83804250, 'reachGoal', 'goshop'); return true;";
                $replacement = '<a href="/go/$1" onclick="' . $goal_code . '"';
                $content = preg_replace('/<a href="\/go\/(.*?)"/', $replacement, $content);
    
                // Обновление контента поста
                $post->post_content = $content;
                wp_update_post($post);
            }
        }
    }
    add_action('wp', 'add_yandex_metric_goal');


    Приведенный код будет искать все ссылки с префиксом `/go/` на страницах постов или страниц WordPress и добавлять необходимый JavaScript-код для цели Яндекс Метрики.

    Убедитесь, что замените 'ym(83804250, 'reachGoal', 'goshop'); return true;' на ваш фактический код цели Яндекс Метрики.

    После добавления этого кода в functions.php и сохранения изменений, все партнерские ссылки с префиксом /go/ на вашем сайте должны быть обработаны и получить нужный JavaScript-код для цели Яндекс Метрики.
    Ответ написан
    3 комментария
  • Что такое Trojan:HTML/Phish.YH!MTB?

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

    Adamos
    @Adamos
    Владимир, вы бы еще архитектуру хелловорлда взялись "понимать".
    Если хотите понять в двух словах, то можно применить такой принцип: бизнес-логика - это то, ЧТО должно выполнять приложение. А логика приложения - то, КАК оно это выполняет. Гругря, "по заказу формируются документы в формате XLSX и PDF" - это бизнес-логика. А вот запрос к БД за данными заказа, разбор шаблона документа, использование библиотек для генерации файлов нужного формата - это логика приложения. Отталкиваясь от такого примитивного понимания, можно разглядеть уровни в коде: где программист размахивает человекопонятными блоками и выполняет техзадание, а где - копается в байтах, соединениях и потоках вывода. Если мы одно от другого отделяем, то оказывается, что низкий уровень для большинства задач один и тот же и его можно опять-таки собрать в библиотеки и практически без изменений использовать там, где понадобилась другая бизнес-логика, но использован тот же технологический стек.
    Ответ написан
    1 комментарий
  • Что можно сделать на ноутбуке, чтобы уменьшить его нагрев?

    yakovlev_13
    @yakovlev_13
    Шаманство, экзорцизм и некромантия.
    Продуёте пыль, смените термоинтерфейсы, проверьте пластину охлада на деформацию... вариантов масса.
    Ответ написан
    Комментировать
  • Как локадизовать сайт на другие языки?

    Создать 1 домен, но указать 10 префикстов типа .com/en, .com/ru и тд. Здесь я вижу плюс в том, что не нужно создавать много доменов. Но минус в том, что SEO будет хорошее только для того языка, какой язык имеется у главной страницы. И что-то мне подсказывает, что через поисковые системы меня другие страны не найдут...

    Всё нормально индексируется и ищется - никакие дополнительные домены не нужны (и в некоторых случаях могут быть даже вредны, тк два разных домена = два разных сайта)
    Главное чтобы корректно были расставлены метаданные на всех страницах.

    Отображать юзерам содержимое исходя из ИП адреса пользователя.

    Вот так вообще не надо делать. Но если у тебя всё ок с метаданными, то ты можешь по первому посещению нового клиента попробовать предложить ему нужный перевод.
    Поисковым роботам предлагать такого не надо.

    Как это сделано у ютуба например, или тиктока

    У них так не сделано.
    Ответ написан
    8 комментариев
  • Не могу найти ошибку почему не приходят письма?

    @MurinSergey Автор вопроса
    что может быть не так
    $(document).ready(function () {
    
    	const namet = document.getElementById('feedback_form_name3');
    	const phonet = document.getElementById('feedback_form_phone3');
    	const feedbackformurl3 = document.getElementById('feedback_form_url3');
    
    	$(".submitButton").click(function () {
    		const nameValuet = namet.value;
    		const phoneValuet = phonet.value;
    		const feedbackformurl5Value = feedbackformurl3.value;
    		// Получение значения checkbox
    		var isChecked = $("#checkboxAgree").is(":checked");
    		// Проверка значения checkbox
    		if (!isChecked) {
    			// Вывод сообщения об ошибке
    			alert("Пожалуйста, примите политику конфиденциальности.");
    			return; // Прерываем выполнение функции
    		}
    
    		if (nameValuet == "" || phoneValuet == "") {
    
    			$("#feedback_form_danger3").css("display", "");
    
    		}
    		else {
    
    			$("#feedback_form_danger3").css("display", "none");
    			$("#feedback_form_success3").css("display", "");
    
    			$.ajax({
    				type: "POST",
    				url: "/local/components/main/send.form/templates/send.form-newdesignPartnersTop/ajax.php",
    				caches: false,
    				data: { NAME: nameValuet, PHONE: phoneValuet, },
    				dataType: "html",
    				beforeSend: function () {
    					$(".submitButton").prop("disabled", true);
    				},
    				success: function (data) {
    					if (!data)
    						alert("Были ошибки, письмо не отправленно!");
    					else
    						$("#form__top").trigger("reset");
    					$(".submitButton").prop("disabled", false);
    				},
    			});
    		}
    
    	});
    });

    <?php
    use PHPMailer\PHPMailer\PHPMailer;
    // Файлы phpmailer
    require 'phpmailer/PHPMailer.php';
    require 'phpmailer/SMTP.php';
    require 'phpmailer/Exception.php';
    
    # проверка, что ошибки нет
    if (!error_get_last()) {
    
        // Переменные, которые отправляет пользователь
        $name = $_POST['name'] ;
        $phone = $_POST['phone'];
    
        // Формирование самого письма
        $title = "Заголовок письма";
        $body = "
        <h2>Новое письмо</h2>
        <b>Имя:</b> $name<br>
        <b>Телефон:</b> $phone<br><br>
        ";
        
        // Настройки PHPMailer
        $mail = new PHPMailer\PHPMailer\PHPMailer();
        
        $mail->isSMTP();   
        $mail->CharSet = "UTF-8";
        $mail->SMTPAuth   = true;
        //$mail->SMTPDebug = 2;
        $mail->Debugoutput = function($str, $level) {$GLOBALS['data']['debug'][] = $str;};
        
        // Настройки вашей почты
        $mail->Host       = 'smtp.mail.ru'; // SMTP сервера вашей почты
        $mail->Username   = 'murin@fredtm.ru'; // Логин на почте
        // $mail->Password   = '=========='; // Пароль на почте
        $mail->Password   = '3p65pdztMft6QFeNmkrm'; // Пароль приложения 
        $mail->SMTPSecure = 'ssl';
        $mail->Port       = 465;
        $mail->setFrom('murin@fredtm.ru', 'Name'); // Адрес самой почты и имя отправителя
        
        // Получатель письма
        $mail->addAddress('vitamin-971@yandex.ru');  
    
    
        // Отправка сообщения
        $mail->isHTML(true);
        $mail->Subject = $title;
        $mail->Body = $body;    
        
        // Проверяем отправленность сообщения
        if ($mail->send()) {
            $data['result'] = "success";
            $data['info'] = "Сообщение успешно отправлено!";
        } else {
            $data['result'] = "error";
            $data['info'] = "Сообщение не было отправлено. Ошибка при отправке письма";
            $data['desc'] = "Причина ошибки: {$mail->ErrorInfo}";
        }
        
    } else {
        $data['result'] = "error";
        $data['info'] = "В коде присутствует ошибка";
        $data['desc'] = error_get_last();
    }
    
    // Отправка результата
    header('Content-Type: application/json');
    echo json_encode($data);
    
    ?>
    Ответ написан
    1 комментарий
  • Нужно ли хорошо разбираться в алгоритмах джуну?

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

    возможно стоит изучать сам язык и рабочие инструменты к нему, а алгоритмами заниматься уже для повышения квалификации

    Совместить. Изучать инструмент + популярные алгоритмы, которые Вы будите применять в ходе разработки в рамках данного инструмента. Больше инструментов > больше алгоритмов.
    Ответ написан
    3 комментария
  • Надо ли что-то еще делать для избежания SQL инъекций?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    (не знаю как называется)
    Называется подготовленные выражения/prepared statements, почитать можно тут.
    Ответ написан
    Комментировать
  • Как работает процесс создания сайта?

    MrDecoy
    @MrDecoy Куратор тега HTML
    Верставший фронтендер
    надо лендинг пейдж
    понадобится CMS

    Достаточно сомнительно. Лендинг - это одностраничный сайт, как правило, заточенный на продажу ограниченного количества позиций из товаров\услуг (как правило 1-3 позиции). Ну либо какая-то информационная страница общего характера. Прикручивать для такого CMS - избыточно.

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

    Фуллстэк фрилансер может сделать всё. Может иметь товарищей с которыми разделит проект.

    Нормальная компания\веб-студия сначала соберёт с заказчика контент, придаст ему сеоподобную форму(что для лендинга как правило малополезно) сделает прототип, нарисует дизайн с согласованным контентом, согласует с заказчиком дизайн, после чего отдаст дизайн на вёрстку и разработку бэкенда. А после зальёт на хостинг, и предложит настройку рекламы для лендинга, т.к. это самый эффективный путь продвижения на старте и для лендинга в принципе. Всё настроит и передаст заказчику исходники.
    Ответ написан
    4 комментария
  • Нужно ли Отключение аккумулятора при апгрейде ноутбука?

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

    Steel_Balls
    @Steel_Balls
    Обычный парсинг с сохранением авторизационных куки
    Ответ написан
    Комментировать
  • Как объединить две локальные сети через OpenVPN?

    Frostealth
    @Frostealth
    Backend Developer
    Не помешают конфиги OpenVPN и таблицы маршрутизации с обоих роутеров.
    Предполагаю, что на роутере1 (кв1) отсутствует маршрут до сети кв2 через VPN.
    Исходный ответ

    Настройка маршрутов в ASUS описана здесь: https://www.asus.com/ru/support/FAQ/1011706/

    Итак, требуется на роутере1 прописать маршрут к роутеру2 для сети кв2.
    Маршрут примерно такой:
    - IP-адрес сети: 192.168.1.0
    - Сетевая маска: 255.255.255.0
    - Шлюз: IP-адрес роутера2 внутри сети VPN, например 10.8.0.2

    И не забыть прописать для роутера2 статический адрес (10.8.0.2) для OpenVPN. Иначе OpenVPN сервер может выдать роутеру2 другой IP.

    Без маршрута, роутер1 не будет понимать на какой порт/интерфейс направлять запросы к сети 192.168.1.0/24.

    Если не заработает, то, вероятно, через сеть VPN в сеть клиента VPN отсутствует NAT. Тогда следует сконфигурировать брандмауэр (firewall) на роутерах, в т.ч. и на роутере1. Настройка брандмауэра в ASUS описана здесь: https://www.asus.com/ru/support/FAQ/1013630/

    Необходимо, чтобы брандмауэр на роутере1 пропускал запросы из сети 192.168.1.0/24 в сеть 192.268.0.0/24. И наоборот, на роутере2 - из сети 192.168.0.0/24 в сеть 192.168.1.0/24. Без этого роутер будет отбрасывать все запросы во внутреннюю сеть из других сетей.


    При решении данного вопроса с автором возникли проблемы с роутерами ASUS. Клиент (роутер2) ни в какую не видел сеть за сервером (возможно упустил какую-то опцию, "route ..", "iroute" и "push 'route ...'" не помогли). Решение с tap не подходило из-за отключения DHCP на роутере2.
    Основная проблема - это невозможность загрузить в роутер целиком файл конфигурации сервером. А документацию консоли роутера (через ssh) найти быстро не удалось.
    Если кто знает решение, прошу описать его в комментариях.

    Аренда VPS (выделенного сервера) с Ubuntu и поднятие OpenVPN сервера уже на нем с последующим подключением двух роутеров в качестве клиента решили проблему.
    Можно поднять и на ПК в сети, конечно. В таком случае нужно будет добавить статический IP для этого ПК и выполнить проброс портов в настройках роутера.

    Установку и основную настройку сервера OpenVPN помог упростить скрипт https://git.io/vpn, который пришлось редактировать для замены зашитой в нем сети 10.8.0.0 на другую в связи с наличием пересечения данной сети с другой на одном из роутеров.

    Итак, установка и конфигурация сервера OpenVPN на Ubuntu для объединения двух сетей роутеров без выхода в интернет через VPN. Для начала необходимо подключиться к серверу по SSH.

    Установка OpenVPN с помощью скрипта через терминал. Скачиваем скрипт и запускаем его командами ниже.
    >>> wget https://git.io/vpn -O openvpn-install.sh
    >>> sudo bash openvpn-install.sh


    Отвечаем на все запросы скрипта, выбираем протокол UDP.
    После завершения установки открываем файл nano /etc/openvpn/server/server.conf, удаляем все строки, начинающиеся на push, и добавляем следующее:
    ifconfig-pool-persist ipp.txt
    client-config-dir /etc/openvpn/server/ccd
    client-to-client
    
    route 192.168.0.0 255.255.255.0
    push 'route 192.168.0.0 255.255.255.0'
    
    route 192.168.1.0 255.255.255.0
    push 'route 192.168.1.0 255.255.255.0'

    Пояснение к конфигу

    ifconfig-pool-persist ipp.txt - будет сохранять соответствия выданных им IP адресов в файл `ipp.txt`. Таким образом, каждый клиент будет всегда получать один и тот же IP.

    client-config-dir /etc/openvpn/server/ccd - указывает серверу директорию с дополнительной конфигурацией для каждого клиента.

    client-to-client - разрешает передачу данных между клиентами.

    route 192.168.0.0 255.255.255.0 - уведомляет сервер о локальной сети (192.168.0.0/24) клиента.

    push 'route 192.168.0.0 255.255.255.0' - сервер будет передавать маршрут к указанной сети всем клиентам.


    Далее создадим указанную в конфиге директорию sudo mkdir /etc/openvpn/server/ccd.
    И добавим в нее файлы, названия которых будут отражать имена наших клиентов (указываются далее). И пропишем в них какая сеть какому клиенту принадлежит.
    /etc/openvpn/server/ccd/router1

    iroute 192.168.0.0 255.255.255.0

    /etc/openvpn/server/ccd/router2

    iroute 192.168.1.0 255.255.255.0


    Запускаем скрипт снова для добавления клиента. Для добавления второго запускаем потом еще раз.
    После запуска скрипта вводим цифру 1, соответствующую опции 1) Add a new client.
    Здесь же и указываем название клиента (router1, router2).
    >>> sudo bash openvpn-install.sh

    Скачиваем файлы конфигурации для клиентов, которые сгенерировал скрипт, и загружаем соответствующий конфиг при создании OpenVPN клиента на роутерах.
    Маршруты на роутерах прописывать не надо, как и правила в брандмауэре. OpenVPN сервер сам отправляет маршруты клиентам, которые мы указали в его конфиге ранее с помощью push 'route ...'.
    Ответ написан
    1 комментарий
  • Как передать трафик локальной сети через интернет?

    CityCat4
    @CityCat4 Куратор тега Сетевое администрирование
    Дома с переломом ноги
    Программа сервер, который устанавливается на пк в локальной сети

    Наоборот можно. Программа-сервер, которая в тырнете и программа-клиент в локалке. И энидеск обычно подключется именно так.
    Ответ написан
    2 комментария
  • Standalone блоги и RSS мертвы? Где лучше вести свой технический блог?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    Правильная стратегия - вести сразу в нескольких местах. Свой сайт, твиттер, медиум, фб и т.д. И везде давать ссылки на альтернативные адреса, чтобы любой пользователь мог подписаться независимо от платформы.

    А еще лучше написать скрипт для автоматической публикации.

    P.S. RSS вообще живее всех живых. Есть прекрасные сайты дающие возможность подписаться на что угодно, зная адрес rss-фида, например https://feedly.com
    Ответ написан
    2 комментария
  • Можно ли постить свои фриланс работы?

    pozZzitiv
    @pozZzitiv
    Дизайнер и перфекционист
    Кратко: можно, если это не было прямо запрещено.

    Если устно или в переписке была озвучена просьба не выкладывать, то чисто по-человечески следует пойти навстречу. Если просят не выкладывать, но очень хочется — ищите компромисс (убрать упоминание фирмы клиента, выложить лишь часть и т.п.).

    Если запрет прописан в договоре, то нельзя выкладывать.

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

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    nmap показывает не открытые порты, а открытые порты, на которых "слушает" какой-то сервис.
    Если порт пустой - кто даст ответ, что он открыт?
    Ответ написан
    Комментировать
  • Как открыть все порты в промежутке?

    @Drno
    открой каждый порт отдельным правилом
    Ответ написан
    1 комментарий
  • Каким ПО лучше организовать резервное копирование информации?

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

    Только стоит учесть, что рейд, в отличие от бэкапа - это не про сохранность, а про скорость.
    Ответ написан
    4 комментария
  • Сделать валидацию формы это задача для джуна или мидла?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Смотря какую валидацию.
    Задать корректные атрибуты в html и простейшие спагетти-проверки в js - это одно.
    Сделать универсальный react-компонент формы, который можно было бы использовать в любом месте проекта, и/или в котором были бы кастомные валидации уровня "проверить, что выбранная дата-время в календаре не пересекается с другими событиями всех участников" - совсем другое.
    Но и то и другое можно назвать валидацией.
    Ответ написан
    Комментировать