• Почему не работает forEach?

    @Smirator
    Привет.
    Проблема была в том, что posts.value в момент вызова forEach ещё не был инициализирован, так как данные загружаются асинхронно через fetch. Вначале posts.value — это undefined, и из-за этого попытка вызвать forEach на нём вызывала ошибку.

    Попробуй такой вариант:
    import { ref, watchEffect } from 'vue'
    
    const posts = ref([])
    const database = ref([])
    
    watchEffect(async () => {
      const response = await fetch('http://localhost:3000/posts')
      posts.value = await response.json()
    
      if (posts.value.length) {
        posts.value.forEach((item) => {
          database.value.push({ id: item.id, name: item.name })
        })
      }
    })
    </script>
    
    <template>
      <div v-for="item in posts" :key="item.id">
        {{ item.name }}
      </div>
    </template>


    Теперь posts и database изначально инициализированы как пустые массивы, и forEach вызывается только после того, как данные загружены. Ошибка не должна появиться.
    Ответ написан
  • Как в WordPress реализовать выдвижное меню?

    @Smirator
    Привет! Разбей задачу по этапно, чтобы понять, что тебе нужно.
    Тут нет привязки к WordPress или другой CMS-системе. Тебе нужно думать в JavaScript.
    Если это JavaScript, то нужно понять, что это за функционал, разбив его на составляющие:
    1) Меню выходит только в случае, если на него навели. Ага, значит, нужен функционал в JS, который отслеживает наведение. Об этом можно почитать тут: https://learn.javascript.ru/mousemove-mouseover-mo...
    2) Отлично, у JS есть из коробки функционал, отслеживающий наведение. Значит, переходим к этапу хранения меню. Тебе нужен какой-то контейнер, в котором будет лежать меню, которое будет находиться за пределами видимости. Навскидку это может быть отрицательный марджин.
    3) Убрав контейнер со своим меню нужно все это дело подружить друг с другом. Пишешь скрипт, который будет отслеживать наведение на область (нужную тебе) и отслеживаешь это. Когда действие происходит ты выдвигаешь меню. Это можно сделать анимированными свойствами в CSS и игрой с уменьшением марджина в JS.

    Собрав такой функционал уже можно задуматься о том, чтобы подружить его с WP.
    Если в код не можешь, то уже это описание можешь попробовать закинуть в нейронку и посмотреть, что она выдает.
    Ответ написан
  • Как в плагине ACF сделать диапазон чисел?

    @Smirator
    Если кто-то еще ищет решение, то возможен такой вариант:
    1. В АСФ заводим два поля под диапазон. Нижняя и верхняя граница.
    2. Отображение ставим на таблицу.
    На скриншотах настройка в ACF и вариант отображения.

    6707c5f6820bf227476009.png
    6707c601a8e41641030343.png
    Ответ написан
    Комментировать
  • Почему не работает пагинация в кастомном типе записи?

    @Smirator Автор вопроса
    Решилось такой конструкцией:
    $paged = (get_query_var('paged')) ? get_query_var('paged') : (get_query_var('page') ? get_query_var('page') : 1);
    Ответ написан
    Комментировать
  • Из-за чего дубли в Ajax подгрузке?

    @Smirator Автор вопроса
    Проблема была из-за того, что использовался не тот метод при получении постов. Решилось использованием WP_Query($args). Проблема была не в Ajax и определил это постепенным возвращением на шаг назад. Сначала просто к пагинации, которая также выводила дубли, а потом уже и к выводу всех постов сразу, так и определил.
    Ответ написан
    Комментировать
  • Как изменить цвет у svg такого плана background-image: url("data:image/svg+xml;?

    @Smirator
    Если кто-то еще ищет:
    1. Открываем через стили нужный SVG.
    2. Ctrl + s (сохраняем).
    3. Открываем через редактор кода, находим fill="".
    4. Пишем свой цвет, сохраняем.
    5. Конвертируем в CSS формат.
    6. Загружаем новый SVG на сайт, перебивая старый вариант специфичностью. Ну или меняем, тут зависит от того, откуда подтягивается иконка.
    Если с бутстрапа, например, в элементе button.accordion-button, то специфичностью.
    Ответ написан
    Комментировать
  • Как разбить строку по знаку?

    @Smirator
    Привет.
    Воспользоваться регулярными выражениями.
    Если правильно понял твою задачу, то в твоем случае должно быть: /,(?!\s*")/

    const string = "a,b",a b,,,,,,,,,,,,,,,,,,,
    const cells = string.split(/,(?!\s*")/);
    console.log(cells);
    ////
    [
      "a,b",
      "a b",
      "",
      "",
      "",
      "",
      "",
      "",
      "",
      "",
      "",
      "",
      "",
      "",
      "",
      "",
      "",
      "",
      "",
      "",
      "",
      ""
    ]
    Ответ написан
  • Как перебить стили bootstrap?

    @Smirator
    Стили вашего сайта должны подключаться после стилей бутстрапа.
    Почитать: https://getbootstrap.ru/articles/2-kak-pereopredel...
    Ответ написан
    Комментировать
  • Есть ли плагин для Wordpress для редиректов с кириллицы на латиницу?

    @Smirator
    Привет. Этот плагин должен отвечать твоим требованиям:
    https://wordpress.org/plugins/cyr2lat/

    А почитать подробнее о нем тут:
    https://www.wordpress-abc.ru/plaginy/kak-perevesti...
    Ответ написан
  • Как правильно написать алгоритм чтобы менять данные в массиве?

    @Smirator
    Привет, не смотря на то, что твой вопрос это не вопрос, а ТЗ, попробуй так:

    function updateBookCounterAndStatus(selectedBookId, booksArray) {
      for (let i = 0; i < booksArray.length; i++) {
        if (booksArray[i].book_id === selectedBookId) {
          if (booksArray[i].counter > 0) {
            booksArray[i].counter--;
            if (booksArray[i].counter === 0) {
              booksArray[i].isBookAccepted = true;
            }
            break; // прекратили перебор
          }
        }
      }
    }
    
    // Вызываем:
    updateBookCounterAndStatus(selectedBook, books);
    console.log(books);
    Ответ написан
    Комментировать
  • Какие спецсимволы могут быть в h1 теге и title?

    @Smirator
    Привет, если четко давать ответ, то - да, внутри тегов и можно использовать эти символы.

    Но всегда стоит помнить о:
    1. Некоторые символы имеют специальное значение в HTML, такие как <, >, &, и другие. Для того чтобы использовать их как обычные символы, их следует экранировать с помощью HTML-сущностей. Например, < должен быть заменен на <, а > на >.

    2. Используя символы в заголовках и , нужно быть уверенным, что это осмысленный подход и он сделает контент более информативным и удобным, как для поисковика, так и для пользователя.

    3. В стоит использовать только символы, допустимые для заголовков и имени веб-страницы. Некоторые символы, такие как #, могут не иметь особого смысла в заголовке и могут быть интерпретированы браузерами и поисковыми системами по-разному.

    4. Потенциальные проблемы с расширенными результатами, если они используются на сайте. Например, ", могут восприниматься как служебные и ломать схему. В таком случае придется писать дополнительное форматирование.
    Ответ написан
    1 комментарий
  • Стоит ли брать SSD Samsung 980 Pro 2TB в игровой ПК в 2023?

    @Smirator
    Кратко, то выше уже дали ответ - Да. Если углубиться, то можно почитать материалы, посвященные выбору SSD, на том же хабре, например: https://habr.com/ru/companies/kingston_technology/....
    Ответ написан
    Комментировать
  • Как словить данные с вебхука из Elementor Pro Form?

    @Smirator
    Привет, я бы попробовал такой вариант

    if ($_SERVER['REQUEST_METHOD'] === 'GET') {
        $deal_tel = isset($_REQUEST['tel']) ? $_REQUEST['tel'] : '';
        $deal_name = isset($_REQUEST['name']) ? $_REQUEST['name'] : '';
        $deal_vopros = isset($_REQUEST['vopros']) ? $_REQUEST['vopros'] : '';
    }
    Ответ написан
  • Как поменять текст элемента внутри блока?

    @Smirator
    Привет. Примерно так:
    // Получаем <span>
    const firstSpan = document.querySelector('.box span:first-of-type');
    
    // Изменяем текст внутри <span>
    firstSpan.textContent = 'Новый текст для Текст 1';
    Ответ написан
    Комментировать
  • Как передать пропсы через роутинг?

    @Smirator
    Привет. Нужно использовать параметры маршрута. В твоем случае selected из Catalog в Bread.
    Я бы попробовал например, так:

    <template>
      <div>
        <!-- Компонент Catalog -->
        <router-link :to="{ name: 'Bread', params: { selected: selected } }">Go to Bread</router-link>
      </div>
    </template>
    
    <script>
    export default {
      data() {
        return {
          selected: 'some_value', // значение selected
        };
      },
    };
    </script>


    В нужном компоненте получил параметры. В твоем случае в Bread.
    <template>
      <div>
        <!-- Компонент Bread -->
        <p>{{ selected }}</p>
      </div>
    </template>
    
    <script>
    export default {
      props: ['selected'],
      mounted() {
        console.log(this.selected); // значение  доступно в этом компоненте через props
      },
    };
    </script>


    Ну и роутинг:
    const routes = [
      {
        path: "/",
        name: "Main",
        component: Main,
        children: [
          {
            path: "",
            component: Section,
          },
          {
            path: "/Catalog",
            name: "Catalog",
            component: Catalog,
            children: [
              {
                path: "/Catalog/Bread",
                name: "Bread",
                component: Bread,
                props: true, // это позволит передать параметры маршрута как props в Bread
              },
            ],
          },
        ],
      },
    ];
    Ответ написан
  • Как проверить, что строка может быть приведена к числу?

    @Smirator
    Привет. Неправильно используешь isNan().
    Попробуй такой вариант:
    let num = Number(prompt('Пожалуйста, введите любое число'));
    
    if (isNaN(num)) {
      alert('Введите число');
    } else {
      if (num % 2 === 0) {
        alert('Число четное');
      } else {
        alert('Число нечетное');
      }
    }


    Cначала проверим, является ли значение числом с помощью isNaN(num). Если значение не число, то выводим "Введите число". Если число, то проверим четность.
    Ответ написан
    Комментировать
  • Можно ли проверить, был ли вызов функции из devtools?

    @Smirator
    Привет. В целом надо понимать, что абсолютно обезопасить свой код от вызова из инструментов разработчика не получится, можно скрыть, но назвать это эффективным подходом тоже нельзя.
    Можно попробовать: IIFE (с пониманием того, что IIFE - это изживший себя способ вызова функций, рекомендую почитать о нем ), он должен скрыть код из глобального контекста и скорее всего достучаться к нему через инструменты будет невозможно.

    (function() {
      // код
      function secretFunction() {
        console.log("Секрет!");
      }
      // код продолжается
    })();
    Ответ написан
    7 комментариев
  • Как решить проблему с кодировкой при чтении Excel файла?

    @Smirator
    Привет. Есть сомнения, но кажется, что кириллица не поддерживается из-за того, что не задана нужная кодировка.
    Как понимаю, в вашем коде за это отвечают: xlsx.write и xlsx.read.

    Я бы попробовал поменять

    const htmlStr = xlsx.write(wb, { type: "binary", bookType: "html", cellStyles: true, });


    на:
    const htmlStr = xlsx.write(wb, { type: "binary", bookType: "html", bookSST: true, cellStyles: { dateNF: 'YYYY-MM-DD HH:mm:ss', }, type: "base64", });


    и
    const wb = xlsx.read(data, { type: "array", });

    на:
    const wb = xlsx.read(data, { type: "array", cellStyles: true, });


    Теперь для кириллических символов должна применятся utf-8. После проверки отпишитесь, пожалуйста. Самому интересно)
    Ответ написан
  • Возможно ли составить подобный WP_User_Query?

    @Smirator
    Привет. Можно

    $args = array(
        'role'     => 'administrator', // Выбрать администраторов
        'meta_query' => array(
            'relation' => 'OR', // Логическое ИЛИ для следующих условий
            array(
                'key'     => 'your_meta_key', // Замените на ключ мета-поля
                'value'   => 'your_desired_value', // Значение мета-поля
                'compare' => '=', // Сравнение: равно
            ),
        ),
    );
    
    $user_query = new WP_Query( $args );
    Ответ написан
  • Где найти бесплатную версию Bitrix CMS?

    @Smirator
    Возможно, кому-то пригодится.
    Есть еще один вариант:

    В файле /bitrix/modules/main/include.php заменить первую из трех константу OLDSITEEXPIREDATE на time()+2592000*1 - теперь всегда будет 30 дней.
    Ответ написан
    Комментировать