• Как остановить индексацию не правильных адресов в Битриксе?

    @scooby_doe
    Скорее всего правило Disallow банит не то и его нужно переделать, если уже был рецидив.

    Эти урлы способом своей генерации (если таких страниц конечно нет на сайте) похожи на проделки js либы sourcebuster.js или на какой-то её аналог.
    По этой либе, кажется, есть гайд тут, можно попробовать понять каким образом она билдит такие урлы.

    Банить нужно не по null, а по фрагментам в духе:

    /data/
    /params/
    /utils/
    /helpers/
    /migrations/
    (но это устранение следствия, а не причины и конечно делать это нужно, если таких легальных урлов на сайте нет)

    Из глупого, что пришло в голову, можно на самом сайте создать страницу, которая будет ловить эти "неправильные" урлы, где в head у тебя будет:
    <meta name="robots" content="noindex">
    (но это может быть опасно, если в обработку этого php скрипта попадёт легальная страница)

    Из опыта: поисковые системы находят страницы сайта не только по ссылкам на страницах (a href="url"), но и смотрят куда юзеры заходят и какой урл у них был на сайте - в этом им помогают сервисы аналитики (для Яндекса это метрика, для Гугла это аналитика - после нахождения страницы оно скармливается поисковой системе).
    Ответ написан
    Комментировать
  • Как получать значения только из одной таблицы при join?

    @Miron11
    Пишу sql 20 лет. Срок :)
    У Вас 2 варианта,
    1. использовать отфильтрованный список servers_world
    2 использовать значение typew в контексте выборки ( так же с фильтром )
    1-й подход может, в свою очередь, иметь два подхода, в зависимости от того, какие фишки SQL поддерживает Ваша СУБД.

    1. C(ommon) T(able) E(xpression):

    WITH filtered_servers_world AS (
    SELECT DISTINCT cat_id, typew
    FROM filtered_servers_world
    )
    SELECT `servers_texts`.*
    , `filtered_servers_world`.`typew`
    FROM `servers_texts`
    LEFT JOIN `filtered_servers_world` ON `servers_texts`.`id` = `filtered_servers_world`.`cat_id`
    WHERE `servers_texts`.`premod` = 1
    AND `servers_texts`.`cat_id` = ' 10'
    AND `filtered_servers_world`.`typew` = ' 1'
    ORDER BY `vote` DESC, `servers_texts`.`id` DESC

    2. Sub-Query с алиасом:
    SELECT `servers_texts`.*
    , `filtered_servers_world`.`typew`
    FROM `servers_texts`
    LEFT JOIN (SELECT DISTINCT cat_id
    , typew
    FROM `servers_world`) AS `filtered_servers_world`
    ON `servers_texts`.`id` = `filtered_servers_world`.`cat_id`
    WHERE `servers_texts`.`premod` = 1
    AND `servers_texts`.`cat_id` = ' 10'
    AND `filtered_servers_world`.`typew` = ' 1'
    ORDER BY `vote` DESC, `servers_texts`.`id` DESC

    3. inline используя контекст выборки данных, менее эффективно, но иногда работает лучше подходов 1, 2 в частности, когда СУБД распределенная, поскольку уменьшает количество раз данные копируются между порциями данных разделенных на разные машины

    SELECT *
    FROM (
    SELECT `servers_texts`.*
    , (SELECT MAX(`servers_world`.`typew`) FROM `servers_world` WHERE `servers_world`.`cat_id` = `servers_texts` .`cat_id`) AS `typew`
    FROM `servers_texts`
    WHERE `servers_texts`.`premod` = 1
    AND `servers_texts`.`cat_id` = ' 10'
    ) AS `dt`
    WHERE `typew` = '1'
    AND `premod` = 1
    AND `cat_id` = ' 10'
    ORDER BY `vote` DESC, `servers_texts`.`id` DESC

    4 lateral join или outer apply

    SELECT `servers_texts`.*
    , `filtered_servers_world`.`typew`
    FROM `servers_texts`
    LEFT JOIN LATERAL (
    SELECT `typew`
    FROM `servers_world`
    WHERE `servers_world`.`cat_id` = `servers_texts`.`cat_id`
    ORDER BY `typew` DESC
    LIMIT 1
    ) `filtered_servers_world` ON TRUE
    WHERE `servers_texts`.`premod` = 1
    AND `servers_texts`.`cat_id` = ' 10'
    AND `filtered_servers_world`.`typew` = ' 1'
    ORDER BY `vote` DESC, `servers_texts`.`id` DESC

    Заметьте, я поменял поле на котором servers_texts и servers_world установили родство. В Вашем оригинальном запросе поле servers_texts использует id в JOIN выражении, но глядя на поля предложенные в таблицах cat_id выглядит, как поле, которое больше подходит.
    Возможно я не прав, пожалуйста проверьте.
    В крайнем случае, пожалуйста верните оригинальное поле.

    -- Удачи
    Ответ написан
  • Как в sql прибавить число и сравнить с другим?

    @Zzzz9
    Ответ написан
    Комментировать
  • Как сделать такой магазин в телеграме?

    anatoly_kulikov
    @anatoly_kulikov
    Помог ответ? Отметь решением!
    На самом деле все просто - это Telegram Web Apps
    Ответ написан
    Комментировать
  • Как сделать такой магазин в телеграме?

    Stepashka20
    @Stepashka20
    (☞゚ヮ゚)☞
    Ответ написан
    Комментировать
  • Как вывести метки в порядке числового возрастания?

    @KingAnton
    Можно сформировать массив и отсортировать его средствами php
    $sort_tag = [];
    foreach ($terms as $term) {
        $sort_tag[$term->name] = esc_url(get_term_link($term->term_id));
    }
    ksort($sort_tag, SORT_NATURAL);
    
    foreach ($sort_tag as $tag_name => $tag_url) {
        echo '<li><a href="' . $tag_url . '">' . $tag_name .'</a></li>';
    }
    Ответ написан
    3 комментария
  • Как создать несколько шорткодов в битриксе?

    Советую Вам нанять PHP-разработчика для подобных задач и не мучаться. Из показазанного кода очевидно, что Вы совершенно не понимаете, что он делает.

    Для иллюстрации покажу решение, которое должно работать. ("Должно" - потому что я не стал собирать тестовый стенд). Привожу с минимальными отличиями от Вашего кода ( некоторые конструкции мне не нравятся по стилю).
    result_modifier.php:
    <?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
    <?$this->__component->SetResultCacheKeys(array("CACHED_TPL"));?>

    template.php в самом конце:
    <?
    $this->__component->arResult["CACHED_TPL"] = @ob_get_contents();
    ob_get_clean();
    ?>

    component_epilog.php:
    <?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
    <?
    $content = $arResult["CACHED_TPL"];
    
    $content = preg_replace_callback(
             "/#VOTE_ID_([\d]+)#/is".BX_UTF_PCRE_MODIFIER,
            function ($matches) {
               ob_start();
               /*component 1 here*/
               $returnStr = @ob_get_contents();
               ob_get_clean();
               return $returnStr;
            },
            $content);
    
    $content = preg_replace_callback2(
             "/#VOTE_ID_TWO_([\d]+)#/is".BX_UTF_PCRE_MODIFIER,
            function ($matches2) {
               ob_start();
               /*component 2 here*/
               $returnStr = @ob_get_contents();
               ob_get_clean();
               return $returnStr;
            },
            $content);
    echo $content;
    Ответ написан
    2 комментария
  • Как исправить проблему с кавычками?

    @Everybody_Lies
    // экранируешь кавычки одинарным обратным слешем
    $str = "<a href=\"javascript:void(0)\" onclick=\"hide('div_1')\">";
    $str = '<a href="javascript:void(0)" onclick="hide(\'div_1\')">';
    Ответ написан
    1 комментарий
  • Как сделать рекурсивное, бесконечное меню?

    @alexanderzanin
    Вот пример без запроса к базе
    <?php
    
    $arr = array(
        array('id'=>100, 'parentid'=>0, 'name'=>'a'),
        array('id'=>101, 'parentid'=>100, 'name'=>'a'),
        array('id'=>102, 'parentid'=>101, 'name'=>'a'),
        array('id'=>103, 'parentid'=>101, 'name'=>'a'),
        array('id'=>104, 'parentid'=>103, 'name'=>'a'),
        array('id'=>105, 'parentid'=>103, 'name'=>'a'),
        array('id'=>106, 'parentid'=>0, 'name'=>'a'),
        array('id'=>107, 'parentid'=>106, 'name'=>'a'),
    );
    
    $new = array();
    foreach ($arr as $a){
        $new[$a['parentid']][] = $a;
    }
    $tree = createTree($new, array($arr[0]));
    var_dump($tree);
    
    function createTree(&$list, $parent){
        $tree = array();
        foreach ($parent as $k=>$l){
            if(isset($list[$l['id']])){
                $l['children'] = createTree($list, $list[$l['id']]);
            }
            $tree[] = $l;
        }
        return $tree;
    }
    Ответ написан
    1 комментарий
  • Попадает ли блог под закон о просветительской деятельности?

    HanaK
    @HanaK
    Просто и понятно о финансах и налогах
    ст. 2, Федеральный закон от 29.12.2012 N 273-ФЗ (ред. от 30.04.2021) "Об образовании в Российской Федерации"
    Для целей настоящего Федерального закона применяются следующие основные понятия:
    35) просветительская деятельность - осуществляемая вне рамок образовательных программ деятельность, направленная на распространение знаний, опыта, формирование умений, навыков, ценностных установок, компетенции в целях интеллектуального, духовно-нравственного, творческого, физического и (или) профессионального развития человека, удовлетворения его образовательных потребностей и интересов и затрагивающая отношения, регулируемые настоящим Федеральным законом и иными нормативными правовыми актами Российской Федерации.
    (п. 35 введен Федеральным законом от 05.04.2021 N 85-ФЗ)

    Если строго по закону, то те, кто отвечает на вопросы - тоже типа просветители.
    И разговор в метро в каком магазине лучше картошку покупать - просветительская деятельность.
    И сайт Ваш уж тем более. Вы же собираетесь удовлетворять образовательные потребности, распространять знания и опыт?
    Пока рано говорить о правоприменении закона.
    Проект постановления правительства, реализующий резонансный закон о просветительской деятельности, будет доработан с учетом поступивших после общественного обсуждения предложений, сообщило Минобрнауки России.
    https://www.interfax.ru/russia/765999
    Ответ написан
    2 комментария
  • Как вывести элемент массива основываясь на var_dump?

    @66demon666
    Сетевой админ, АТС-админ
    выведите
    echo "<pre>";
    var_dump($data);
    echo "</pre>";


    И будет всё наглядно видно
    Ответ написан
    5 комментариев
  • Как извлечь данные из function (data)?

    YavaDev
    @YavaDev
    Ну как вариант можно вставить эти два дива в DOM, взять из них нужные данные и потом удалить эти дивы из DOM
    Например
    success: function (data) {
        $('body').append('<div id="temp" style="display: none;">' + data +  '</p>');
        var res = $("#res").text();
        var msg = $("#msg").text();
        $("#temp").remove();
        //Your code
    },
    Ответ написан
    1 комментарий
  • Как получить значение между символами?

    @dzhebrak
    Регулярное выражение:
    "tg:\/\/resolve\?domain=([\w\d_]+)"
    https://regex101.com/r/Pf7Z6V/1

    Пример работы:
    $re = '/"tg:\/\/resolve\?domain=([\w\d_]+)"/m';
    $str = '<a href="tg://resolve?domain=Moron21Centuriesbot" class="tl_main_download_btn">Ссылка</a>,
    <a href="tg://resolve?domain=Moron22bot" class="tl_main_download_btn">Ссылка</a>,
    ';
    
    preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
    
    foreach ($matches as $k => $v) {
    	printf("%s\n", $v[1]);
    }
    Ответ написан
    1 комментарий
  • Как оптимизировать код?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. учить SQL и вместо этого циклического ужаса сделать один запрос
    SELECT hour(time) hour, count(*) count FROM hosts WHERE id_sait = ? 
    AND time BETWEEN unix_timestamp(curdate()) and unix_timestamp()
    GROUP BY hour(time);

    2. комбинированный индекс на id_sait, time
    Ответ написан
    6 комментариев
  • Как в телеграм загружать картинку по ссылке без ссылки?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Сделать скрытую ссылку в начале сообщения
    $msg = "<a href=\"ссылка на картинку\">\u{00a0}</a>\n" . $msg;
    Ответ написан
    1 комментарий
  • Как в яндекс мессенджер сделать автопостинг?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Есть непубличное API которое используется в веб-версии мессенджера и в моб приложении.
    Endpoint https://api.messenger.yandex.ru/api/ , а запросы можно посмотреть в developers tools браузера.
    Всё это естественно серая зона, и любые исследования на свой страх и риск.

    Насчёт публичного api есть такая инфа
    В разговоре с vc.ru глава «Мессенджера» Виктор Тарнавский рассказал:


    Какие есть инструменты ведения каналов? Есть ли API для создания ботов?

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

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    Что-то типа такого
    (function(){
      const buttons = document.querySelectorAll('.js-entity-accept');
      [...buttons].forEach(button => button.click());
    })()
    Ответ написан
    3 комментария
  • Как проверить наличие файла?

    usdglander
    @usdglander Куратор тега PHP
    Yipee-ki-yay
    function UR_exists($url){
       $headers=get_headers($url);
       return stripos($headers[0],"200 OK")?true:false;
    }
    
    if(UR_exists("https://site.com/file.jpg"))
       echo "Файл существует";
    else
       echo "Файл не существует";

    Источник
    Ответ написан
    3 комментария
  • Как проверить наличие файла?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Проверяйте, какой статус вернула fopen и какие заголовки в ответе stream_get_meta_data.
    Ответ написан
    Комментировать
  • Видят ли поисковики контент подгружаемый ajax?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Поисковики видят всё, что отрабатывается до окончания работы window.onload
    Далее - js не обрабатывается.

    Т.е., Ваш вариант - не сработает.
    Используйте для загрузки includeHTML.
    Ответ написан
    Комментировать