• Как вывести дочерние категории через событие ajax?

    rc-dm
    @rc-dm
    Full-Stack Web Developer
    Тебе нужно повесить событие изменения (change) на select, затем отправить AJAX к серверному скрипту который вернёт JSON список дочерних категорий для только что выбранной категории.

    Пример для JQuery:
    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title></title>
      </head>
      <body>
    
        <!-- Select родительских категорий -->
        <select name="categoryfilter">
          <option disabled="disabled" selected value="">Выберите категорию</option>
          <option value="1">Категория 1</option>
          <option value="2">Категория 2</option>
        </select>
    
        <!-- Select дочерних категорий -->
        <select name="subcategories"></select>
    
        <!-- Подключение JQuery для примера -->
        <script
            src="https://code.jquery.com/jquery-3.6.0.min.js"
            integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="
            crossorigin="anonymous"></script>
    
        <!-- Логика клиентской части -->
        <script type="text/javascript">
          // Вешаем событие изменения на селект категорий
          $('select[name="categoryfilter"]').on('change', function(){
            let val = $(this).val(); // value только что выбранной категории
            $('select[name="categoryfilter"]').html(''); // Очищаем фильтр дочерних категорий
    
            //Запрашиваем данные
            $.ajax({
              url: '/path/to/file', // Путь к файлу PHP от корня сайта
              type: 'POST', // Отправляем данные методом POST
              dataType: 'json', // Ждём что сервер вернёт JSON
              data: {
                category: val, // Отправляем переменную 'category' со значением 'val'
              },
            })
            .done(function(data) {
              // Когда сервер вернул JSON
              // Перебираем данные циклом
              $.each(data, function(index, item) {
                // Добавляем внутрь select'а дочерних категорий новые опции
                $('select[name="subcategories"]').append('\
                  <option value="' + item.id + '">' + item.name + '</option>\
                ');
              });
            })
            .fail(function() {
              // Любая ошибка
              console.log("error");
            })
            .always(function() {
              // Когда запрос завершился успешно или с ошибкой
              console.log("complete");
            });
          });
        </script>
      </body>
    </html>


    Неполная серверная часть на PHP:
    <?php
    
    	//Тут должна быть логика загрузки нужных дочерних
    	//категорий согласно пришедшему значению 'category' ($_POST['category'])
    
    	$subCategories = [
    		[
    			'id' => 1,
    			'name' => 'Дочерняя категория 1',
    		],
    		[
    			'id' => 2,
    			'name' => 'Дочерняя категория 2',
    		],
    		[
    			'id' => 3,
    			'name' => 'Дочерняя категория 3',
    		],
    	];
    
    	//json_encode превращяет массив PHP в JSON, который ждёт AJAX
    	exit(json_encode($subCategories));
    ?>
    Ответ написан
    Комментировать
  • Как получить нужную часть ответа от API в PHP?

    rc-dm
    @rc-dm
    Full-Stack Web Developer
    Я получаю такую строку : {"day":0,"week":186,"month":186}
    из неё хочу брать только день и число


    <?php
    
        $url = "http://$server/api/?" .http_build_query($request_params);
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        
        //Получаем JSON
        $response = curl_exec($ch);
        curl_close($ch);
    
        //Декодируем JSON в PHP объект
        $data = json_decode($response);
       
        //Выводим только нужные элементы
        echo 'Day: '.$data->day.PHP_EOL;
        echo 'Week: '.$data->week.PHP_EOL;
        echo 'Month: '.$data->month.PHP_EOL;
    
    ?>
    Ответ написан
    Комментировать
  • Как сделать кликабельный никнейм в сообщении от телеграм бота?

    rc-dm
    @rc-dm
    Full-Stack Web Developer
    Смотри объект сообщения и элемент entities

    Telegram обычно автоматически обнаруживает внутренние ссылки.
    Ответ написан
  • Как изменить значение в html селекторе с помощью php?

    rc-dm
    @rc-dm
    Full-Stack Web Developer
    Можно использовать HTML парсер на PHP (Документация)

    <?php
    
    // Создаём DOM из строки
    $html = str_get_html('
      <div id="hello">Hello</div>
      <div id="world">World</div>
    ');
    
    // Ищем элемент 'div' с 'id="hello"' и меняем его содержимое на 'foo'
    $html->find('div[id=hello]', 0)->innertext = 'foo';
    
    // Ищем второй элемент 'div' по порядку и добавляем ему класс 'bar'
    $html->find('div', 1)->class = 'bar';
    
    echo $html; 
    // Результат:
    // <div id="hello">foo</div>
    // <div id="world" class="bar">World</div>
    
    ?>
    Ответ написан
    Комментировать
  • Почему не работает onblur на textarea?

    rc-dm
    @rc-dm
    Full-Stack Web Developer
    Вот решение твоей задачи.
    Дело в том что ты пытаешься повесить событие "onblur" на ещё не существующий элемент.

    <div onclick="transformToTextarea(this);" style="width: 50px; height: 50px; background-color: blue;"></div>

    function transformToTextarea(el) {
      el.outerHTML = '<textarea onblur="transformToDiv(this);">' + el.innerHTML + '</textarea>';
    }
    function transformToDiv(el){
      el.outerHTML = '<div onclick="transformToTextarea(this);">' + el.value + '</div>';
    }

    В данном случае заранее объявлено две функции, а в событии через атрибуты самого элемента указывается их вызов.
    Ответ написан
    5 комментариев
  • Можно ли хранить sitemap.xml в подпапках домена?

    rc-dm
    @rc-dm
    Full-Stack Web Developer
    Ты можешь указать в robots.txt где лежит твой sitemap.
    Кроме того, sitemap может быть несколько.

    Пример robots.txt с указанием адреса sitemap.xml
    User-agent: *
    Allow: /
    Sitemap: https://site.ru/sitemap.xml
    Sitemap: https://site.ru/moscow/sitemap.xml


    Поисковик работает только с одним robots.txt, находящимся в корне сайта
    (https://example.com/robots.txt)

    Какие существуют требования к robots.txt:
    • Размер файла не превышает 500 КБ
    • Это TXT-файл с названием robots.txt
    • Файл должен быть размещен в корневом каталоге сайта
    • Файл должен быть доступен для роботов — сервер, на котором размещен сайт, отвечает HTTP-кодом со статусом 200 OK
    • Можно указать до 500 штук файлов sitemap.xml, до 50 000 ссылок в каждом из них


    Какие существуют требования к sitemap.xml:
    • Файл должен быть в кодировке UTF-8
    • Максимальное количество ссылок — 50 000 (О том как разделить большой sitemap.xml написано выше)
    • Максимальный размер файла в несжатом виде — 50 МБ
    • Указывайте ссылки на страницы только того домена, на котором будет расположен файл
    • Разместите файл на том же домене, что и сайт, для которого он составлен
    • При обращении к файлу сервер должен возвращать HTTP-код 200
    Ответ написан
    5 комментариев
  • Как при скролле создать класс и переместить в него некоторые элементы?

    rc-dm
    @rc-dm
    Full-Stack Web Developer
    Решение

    Исходный HTML
    <h2>Greetings</h2>
    <div class="container">
      <div class="inner">Hello</div>
      <div class="inner">Goodbye</div>
    </div>

    Вставляем элемент "h2" внутрь элемента с классом "container"
    ("prepend" - в начало / "append" - в конец)
    $('.container').append($('h2'));

    Результат
    <div class="container">
      <div class="inner">Hello</div>
      <div class="inner">Goodbye</div>
      <h2>Greetings</h2>
    </div>


    Ты можешь не только использовать это на существующем элементе, но и создать новый налету
    $('.container').prepend('<h1>Hello World!</h1>');

    <h2>Greetings</h2>
    <div class="container">
      <h1>Hello World!</h1>
      <div class="inner">Hello</div>
      <div class="inner">Goodbye</div>
    </div>


    Если я правильно понял, ты хочешь сделать "липкую" панель навигации и у неё есть дополнительные блоки, которые также должны сохранять относительную позицию при прокрутке страницы.

    В вёрстке нет класса "header__menu"
    Можешь прислать скриншот как это выглядит?
    Возможно тебе просто нужно создать родительский блок для всех них и уже к нему применять стиль fixed
    Ответ написан