🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۶ Ebrahim Radan
قرار گرفتن falsh message در بالای panel
کیوان علی محمدی حل شده توسط کیوان علی محمدی

با سلام خدمت دوستان عزیزم من flash message رو طبق آموزش پیش بردم و کار میکنه ولی flash message در بالای panel قرار میگیره در حالی که در فایل index.php  کد php رو سر جای صحیح قرار دادم . کسی میتونه راهنمایی کنه

 

<div class="col-lg-12">
    <div class="card">
        <div class="card-title">
            <h4>حساب کاربری</h4>
        </div>
        <div class="card-body">
            <div class="row">
                <div class="col-md-12">
                    <div class="basic-form p-10">
                        <?php echo $message; ?>
                        <form action="" method="post">
                            <div class="form-group">
                                <label for="userFullName">نام و نام خانوادگی</label>
                                <input id="userFullName" name="userFullName" type="text"
                                        class="form-control input-default hasPersianPlaceHolder" 
                                        value="<?php echo $current_user->display_name; ?>"
                                >
                            </div>
                            <div class="form-group">
                                <label for="userEmail">آدرس ایمیل</label>
                                <input id="userEmail" name="userEmail" type="text"
                                        class="form-control input-default" disabled autocomplete="off"
                                        value="<?php echo $current_user->user_email; ?>">
                            </div>
                            <div class="form-group">
                                <label for="userPassword">کلمه عبور</label>
                                <input id="userPassword" name="userPassword" type="password"
                                        class="form-control input-default">
                            </div>
                            <div class="form-group m-t-20">
                                <button type="submit" name="saveData" class="btn btn-primary m-b-10 m-l-5">ثبت اطلاعات
                                </button>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

سلام خدمت شما. پیشنهاد میکنم حتما با استفاده از inspect element در گوگل کروم محل دقیق نمایش پیام‌ها رو بررسی کنید و دوباره با کد خودتون مطابقت بدید.

کیوان علی محمدی ۰۳ اردیبهشت ۱۴۰۰، ۰۸:۱۴

سلام ممنون از پاسخ شما ، inspect گرفتم ولی کد اون تیکه کد php کلا خارج از تگ html اجرا میشه  

view page source رو هم پیوست براتون میفرستم . 

فایل‌های js رو هم آدرس هاشو چک کردم درست هستن . 

Ebrahim Radan ۰۳ اردیبهشت ۱۴۰۰، ۰۸:۳۳

بازم بررسی کنید شاید کلاس FlashMessage داره اشتباهی دوبار فرخوانی میشه.

کیوان علی محمدی ۰۳ اردیبهشت ۱۴۰۰، ۰۸:۴۷

فایل ProfileHandler.php

<?php
include "Handler.php";
include UPP_DIR . "panel/flash.class.php";
include UPP_DIR . '/view.class.php';
class ProfileHandler extends Handler
{
    public function __construct()
    {
      parent::__construct();
      add_action('upp_update_profile' , [$this,'update_user_profile']);
    }
    public function index()
    {
      if(isset($_POST['saveData']))
      {
          do_action( 'upp_update_profile');
      }
      $message = FlashMessage::show();
      $params = [
        'current_user' => $this->current_user,
        'message' => $message
      ];
      View::load('panel.profile.index' , $params);
    }
    public function update_user_profile()
    {
        $user_data_for_update = [
          'ID' => $this->current_user->ID,
          'display_name' => apply_filters( 'pre_user_display_name', $_POST['userFullName'])
        ];
        if(!empty($_POST['userPassword'])){
          $user_data_for_update['user_pass'] = apply_filters( 'pre_user_pass', $_POST['userPassword'] );
        }
        $update_result = wp_update_user($user_data_for_update);
        if(!is_wp_error($update_result)){
          FlashMessage::add('اطلاعات کاربری با موفقیت به روز رسانی شد');
        }
    }
}

 

 

فایل flash.class.php

<?php
class FlashMessage
{
    const SUCCESS = 1;
    const ERROR = 2;
    public static function add($message, $type = self::SUCCESS)
    {
        $_SESSION['upp_messages'] = [
        'message' => $message,
        'type' => $type
        ];
    }
    public static function show()
    {
        if (isset($_SESSION['upp_messages'])) {
            $message = $_SESSION['upp_messages'];
            if($message['type'] == self::SUCCESS){
                echo '<div class="alert alert-success"><p>' . $message['message'] . '</p></div>' ; 
            }else{
                echo '<div class="alert alert-danger"><p>' . $message['message'] . '</p></div>';
            }
            self::clear();
        }
    }
    public static function get()
    {
        $message_in_html ='';
        if (isset($_SESSION['upp_messages'])) {
            $message = $_SESSION['upp_messages'];
            if($message['type'] == self::SUCCESS){
                $message_in_html =  '<div class="alert alert-success"><p>'.$message['message'].'</p></div>' ; 
            }else{
                $message_in_html =  '<div class="alert alert-danger"><p>' . $message['message'] . '</p></div>';
            }
            self::clear();
        }
        return $message_in_html;
    }
    public static function clear()
    {
        $_SESSION['upp_messages'] = null ; 
    }
}

جای دیگه ای به کار گرفته نشده و پیغام درست نشون داده میشه فقط جای درستی قرار نمیگیره

 

Ebrahim Radan ۰۳ اردیبهشت ۱۴۰۰، ۰۹:۰۱

به جای این قسمت 

      $message = FlashMessage::show();

 

باید این میشد

      $message = FlashMessage::get();
Ebrahim Radan ۰۳ اردیبهشت ۱۴۰۰، ۰۹:۳۱

توی فایل ProfileHandler.php به جای get از show استفاده کردید.

بهترین پاسخ
کیوان علی محمدی ۰۴ اردیبهشت ۱۴۰۰، ۰۶:۲۲