Ответы пользователя по тегу PHP
  • Yii2 переопределить exception для изменения формата ответа?

    gogowq
    @gogowq
    Ozh domosh acha ozh
    Создайте свой класс исключения, например, MyHttpException.php:
    <?php
    
    namespace app\components;
    
    use yii\web\HttpException;
    
    class MyHttpException extends HttpException
    {
        public function renderJson()
        {
            $response = \Yii::$app->getResponse();
            $response->data = [
                'message' => $this->getMessage(),
            ];
            $response->send();
        }
    }

    В вашем коде, где вы хотите выбросить исключение с новым форматом ответа, используйте ваш новый класс MyHttpException:

    <?php
    use app\components\MyHttpException;
    
    try {
        // Код, который может вызвать исключение
        throw new MyHttpException('Ваше сообщение об ошибке', 500);
    } catch (MyHttpException $e) {
        $e->renderJson(); // Отправляем ответ в формате {"message": "..."}
    }
    Ответ написан
    Комментировать
  • Почему не передается значение из переменной?

    gogowq
    @gogowq
    Ozh domosh acha ozh
    Вы должны использовать одну переменную для хранения значения и передавать ее между файлами, чтобы убедиться, что она актуальна на всех этапах выполнения кода.

    Чтобы исправить ситуацию, следует убедиться, что переменная $opt['page_id'] передается из файла review обратно в index.php, а затем используется в файле header.

    index.php
    <?php
    // Установка начального значения $PAGE_ID
    $PAGE_ID = 0;
    
    // Включение файла header и передача значения $PAGE_ID
    include 'header.php';
    ?>


    review
    <?php
    // Получение идентификатора статьи
    $art_id = 123; // 
    $opt['page_id'] = $art_id;
    ?>


    header.php
    <?php
    // Получение значения $PAGE_ID из корневого файла
    echo 'Страница ' . $PAGE_ID . '; ';
    
    // Использование значения $PAGE_ID в условии
    if ($PAGE_ID == 19) {
      echo 'Ид страницы == 19';
    } else {
      echo 'Ид страницы != 19';
    }
    ?>
    Ответ написан
  • Как в обработать If-Modified-Since в Joomla?

    gogowq
    @gogowq
    Ozh domosh acha ozh
    В Joomla есть встроенный функционал для обработки If-Modified-Since заголовка
    // Получаем объект текущего ответа
    $response = JFactory::getApplication()->getDocument()->getRenderer('component')->getResponse();
    
    // Проверяем наличие заголовка If-Modified-Since
    if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
        $lastModified = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
    
        // Получаем время последнего изменения страницы/контента
        $modifiedTime = strtotime($yourContentModifiedTime);
    
        // Если контент был изменен после указанной даты If-Modified-Since, отправляем полный ответ
        if ($modifiedTime > $lastModified) {
            // Ваш код для генерации и отправки полного ответа
        } else {
            // Отправляем код 304 Not Modified
            $response->setHeader('HTTP/1.1', '304 Not Modified', true);
            JFactory::getApplication()->close();
        }
    } else {
        // Ваш код для генерации и отправки полного ответа, так как If-Modified-Since заголовок отсутствует
    }
    Ответ написан
  • Как экспортировать/конвертировать docx в pdf без API?

    gogowq
    @gogowq
    Ozh domosh acha ozh
    Использование библиотеки Python , под названием "python-docx2pdf". Она позволяет конвертировать файлы DOCX в PDF, используя только Python.
    Ответ написан
    Комментировать
  • Как написать запрос mysqli php?

    gogowq
    @gogowq
    Ozh domosh acha ozh
    <?php
    // Подключение к базе данных
    $mysqli = new mysqli("хост", "пользователь", "пароль", "имя_базы_данных");
    
    // Проверка соединения на ошибки
    if ($mysqli->connect_errno) {
        echo "Не удалось подключиться к MySQL: " . $mysqli->connect_error;
        exit;
    }
    
    // Получение всех записей из таблицы a1
    $query = "SELECT id, relid FROM a1";
    $result = $mysqli->query($query);
    
    if ($result) {
        // Проходимся по каждой записи в a1
        while ($row = $result->fetch_assoc()) {
            $id = $row['id'];
            $relid = $row['relid'];
    
            // Разбиваем строку relid на массив значений
            $relidArray = explode(",", $relid);
    
            // Создаем пустой массив для новых значений relid
            $newRelidArray = array();
    
            // Проходимся по каждому значению relid
            foreach ($relidArray as $value) {
                // Ищем соответствующую запись в таблице a2 по relidnumber
                $query = "SELECT relidnumber FROM a2 WHERE relidnumber = '$value'";
                $a2Result = $mysqli->query($query);
    
                // Если найдена соответствующая запись, добавляем значение в новый массив
                if ($a2Result && $a2Result->num_rows > 0) {
                    $newRelidArray[] = $value;
                }
            }
    
            // Собираем новое значение relid, объединяя элементы массива через запятую
            $newRelid = implode(",", $newRelidArray);
    
            // Обновляем запись в таблице a1 с новым значением relid
            $query = "UPDATE a1 SET relid = '$newRelid' WHERE id = $id";
            $mysqli->query($query);
        }
    
        // Освобождаем результирующий набор
        $result->free();
    } else {
        echo "Ошибка выполнения запроса: " . $mysqli->error;
    }
    
    // Закрываем соединение с базой данных
    $mysqli->close();
    ?>
    Ответ написан
  • Как сделать так чтобы на почту приходил не текст, а изображение как вложенное?

    gogowq
    @gogowq
    Ozh domosh acha ozh
    Важно enctype="multipart/form-data"
    <form action="your_script.php" method="post" enctype="multipart/form-data">
      <input type="text" name="name" placeholder="Ваше Фамилия Имя Отчество" required>
      <input type="email" name="email" placeholder="Ваш e-mail" required>
      <input type="tel" name="phone" placeholder="Ваш телефон" required>
      <input type="number" name="age" placeholder="Ваш возраст" required>
      <select name="procedure" required>
        <option value="">Выберите процедуру</option>
        <option value="Procedure 1">Procedure 1</option>
        <option value="Procedure 2">Procedure 2</option>
        <option value="Procedure 3">Procedure 3</option>
      </select>
      <input type="file" name="file" id="file" required>
      <button type="submit">Отправить</button>
    </form>


    <?php
    if (isset($_POST['name']) && $_POST['name'] != "") {
      $name = $_POST['name'];
    } else {
      die("Не заполнено поле \"Ваше Фамилия Имя Отчество\"");
    }
    
    if (isset($_POST['email']) && $_POST['email'] != "") {
      $email = $_POST['email'];
    } else {
      die("Не заполнено поле \"Ваш e-mail\"");
    }
    
    // Проверяем, был ли файл загружен
    if (isset($_FILES['file']['tmp_name']) && $_FILES['file']['tmp_name'] != "") {
      // Получаем информацию о загруженном файле
      $file_name = $_FILES['file']['name'];
      $file_tmp = $_FILES['file']['tmp_name'];
      $file_type = $_FILES['file']['type'];
      $file_size = $_FILES['file']['size'];
    
      // Открываем файл и считываем его содержимое
      $file_content = file_get_contents($file_tmp);
    
      // Создаем границу для разделения различных частей письма
      $boundary = "--" . md5(uniqid(time()));
    
      // Создаем заголовок письма с указанием типа контента и границы
      $headers = "MIME-Version: 1.0\r\n";
      $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
      $headers .= "From: $email\r\n";
    
      // Формируем тело письма
      $message = "--$boundary\r\n";
      $message .= "Content-Type: text/plain; charset=UTF-8\r\n";
      $message .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
      $message .= "Фамилия Имя Отчество: $name\r\n";
      $message .= "E-mail: $email\r\n";
      // Остальные поля формы
      $message .= "--$boundary\r\n";
      $message .= "Content-Type: $file_type\r\n";
      $message .= "Content-Transfer-Encoding: base64\r\n";
      $message .= "Content-Disposition: attachment; filename=\"$file_name\"\r\n\r\n";
      $message .= chunk_split(base64_encode($file_content));
      $message .= "--$boundary--";
    
      $subject = 'Анкета модели';
      $address = "ivashnev.nikita@mail.ru";
      $send = mail($address, $subject, $message, $headers);
    
      if ($send) {
        echo "Сообщение отправлено успешно!";
      } else {
        echo "Ошибка, сообщение не отправлено! Возможно, проблемы на сервере";
      }
    } else {
      die("Не заполнено поле \"Ваша фотография проблемной зоны\"");
    }
    ?>
    Ответ написан
    Комментировать
  • Как проверить, оставил ли юзер отзывы на товары?

    gogowq
    @gogowq
    Ozh domosh acha ozh
    add_shortcode( 'customer_products', 'truemisha_products_current_user' );
    
    function truemisha_products_current_user() {
      // ничего не делаем, если не авторизован
      if ( ! is_user_logged_in() ) {
        return;
      }
    
      // получаем все оплаченные заказы пользователя
      $customer_orders = get_posts( array(
        'posts_per_page' => -1,
        'meta_key'    => '_customer_user',
        'meta_value'  => get_current_user_id(),
        'post_type'   => wc_get_order_types(),
        'post_status' => array_keys( wc_get_is_paid_statuses() ),
      ) );
    
      // если заказов не найдено
      if ( ! $customer_orders ) {
        return;
      }
    
      // создаём отдельную переменную для ID товаров и записываем в неё
      $ids = array();
      foreach ( $customer_orders as $customer_order ) {
        $order = wc_get_order( $customer_order->ID );
        $items = $order->get_items();
        foreach ( $items as $item ) {
          $product_id = $item->get_product_id();
          if ( ! has_reviewed_product( $product_id, get_current_user_id() ) ) {
            $ids[] = $product_id;
          }
        }
      }
    
      // если нет товаров без отзывов
      if ( empty( $ids ) ) {
        return;
      }
    
      // возвращаем шорткод
      return do_shortcode( '[products ids="' . join( ",", array_unique( $ids ) ) . '"]' );
    
    }
    Ответ написан
    1 комментарий
  • Wordpress требует много памяти?

    gogowq
    @gogowq
    Ozh domosh acha ozh
    В конфиге что указано в
    define('WP_MEMORY_LIMIT', '???M');
    Попробуйте изменить значение.
    Ответ написан
  • Как назначить имена категориям?

    gogowq
    @gogowq
    Ozh domosh acha ozh
    Ну вы же судя по всему выводите не название категории,а её ID.
    Если в бд нет названий,просто переопределите переменные.

    Логично само собой , создать поля под названия категорий и потом уже обращаться к ним. Ну либо переименовать их в адекватный вид,вместо 1.2.3,если это всё таки названия,а не id
    Ответ написан
    Комментировать
  • Как сделать поиск по меткам товаров Woocommerce?

    gogowq
    @gogowq
    Ozh domosh acha ozh
    function include_tags_in_search( WP_Query $query ): void{
        $search_terms = $query->get( 's' );
    
        if ( $query->is_search() ) {
            global $the_original_paged;
            $the_original_paged = $query->get( 'paged' ) ? $query->get( 'paged' ) : 1;
            if ( ! $search_terms ) {
                 add_action( 'wp', function () use ( $query ) {
                 $query->set_404();
                 status_header( 404 );
                 nocache_headers();
                } );
            }
            $query->set( 'paged', null );
            $query->set( 'post_type', array( 'post', 'product' )  );
            $query->set( 'posts_per_page', SEARCH_GRID_COUNT_ITEMS );
        }
    }
    add_action( 'pre_get_posts', 'include_tags_in_search' );
    
    function add_posts_by_tags( $posts, WP_Query $query ): array {
        if ( $query->is_search() ) {
            global $the_original_paged;
            remove_filter( 'the_posts', 'add_posts_by_tags' );
            $posts_product_cat = new WP_Query( array(
             'posts_per_page' => -1,
             'tax_query' => array(
                  array(
                    'taxonomy' => 'product_tag',
                    'field'    => 'name',
                    'terms'    => explode( ' ', esc_attr( $query->get( 's' ) ) )
                  )
              )
            ) );
            $merged = array_unique( array_merge( $posts, $posts_product_cat->get_posts() ), SORT_REGULAR );
            $posts = array_slice( $merged, ( SEARCH_GRID_COUNT_ITEMS * ( $the_original_paged - 1 ) ), SEARCH_GRID_COUNT_ITEMS );
            $query->found_posts = $posts;
            $query->set( 'paged', $the_original_paged );
            $query->post_count = count( $posts );
            $query->max_num_pages = ceil( count( $merged ) / SEARCH_GRID_COUNT_ITEMS );
            unset( $the_original_paged );
            return $posts;
        }
    
        return $posts;
    }
    add_filter( 'the_posts', 'add_posts_by_tags', 10, 2 );


    Источник
    Ответ написан
    Комментировать
  • Как исправить дублирование заявок c формы Contact Form 7?

    gogowq
    @gogowq
    Ozh domosh acha ozh
    document.addEventListener( 'wpcf7submit', function( event ) {
        var status = event.detail.status;  
        console.log(status);  
        //if( status === 'validation_failed'){
            jQuery('.wpcf7-submit').val("Send");
        //}    
    }, false );
    
    jQuery('.wpcf7-submit').on('click',function(){
        jQuery(this).val("Submitting....");
    });
    Ответ написан
    Комментировать