php کاربر نمایه را لمس کرد. حذف ویرایشگر بصری، انتخاب طرح رنگ و سایر جزئیات در قسمت مدیریت وردپرس

من می خواهم این درس را به خلق کردن اختصاص دهم پروفایل شخصیبرای کاربران ثبت نام شده (افزودنی به درس ایجاد ثبت نام کاربر در سایت). اکنون کاربران می توانند آواتار خود را اضافه کنند، نام و نام خانوادگی خود را تغییر دهند، محل زندگی و تاریخ تولد خود را اضافه کنند. برای انجام این کار، در جدول کاربرانبیایید چند فیلد اضافه کنیم:

حالا بیایید یک صفحه پروفایل ایجاد کنیم profile.phpو آن را به صفحه اضافه کنید index.phpبه آن پیوند دهید

اکو"
پروفایل من"؛ حالا کد مربوط به خود صفحه profile.php

مشخصات<?php echo $login; ?>

مشخصات



"؛ پژواک" ".$array["name_user"]." ".$array["نام خانوادگی"]."
"; switch ($array["birthdate_month"])(//تبدیل شماره ماه به نام "1" : $month = "January"; break; case "2" : $month = "February"; break; case " 3 " : $month = " 4 " : $month = "April " ; "June case" : $ماه وقفه "8"; 10" : $month = "اکتبر"؛ ​​شکست؛ مورد "11" : $month = "نوامبر"؛ break; $month = "دسامبر"; echo "تاریخ ثبت: ".$array[" reg_date"]."
"; echo "جنسیت: ".$array["sex"]."
"; echo "Birthday: ".$array["birthdate_day"]." ".$month." ".$array["birthdate_year"]."
"; echo "Country: ".$array["country"]."
"; echo "City: ".$array["city"]."
"; if($_GET["id"] == $id_user)(//فقط مالک می تواند پژواک نمایه را ویرایش کند "ویرایش نمایه"؛ ) )else( print<<ورود:
وارد شدن: کلمه عبور:
ثبت نام بازیابی رمز عبور در اینجا؛ )؟>

طبیعتا با رفتن به این صفحه شاهد یک آواتار استاندارد خواهیم بود noAvatar.jpgو احتمالاً نام و نام خانوادگی، در صورتی که کاربر هنگام ثبت نام آنها را ذکر کرده باشد، موارد باقیمانده خالی خواهد بود. در انتهای این صفحه پیوندی به صفحه ویرایش پروفایل وجود دارد edit.php. کد این صفحه بسیار سبک است و از فرم های ورود اطلاعات تشکیل شده است. با توجه به حجم نسبتاً زیاد، من آن را در اینجا به طور کامل ارائه نمی دهم، اما فقط بخشی از آن را می توان به طور کامل در فایل های منبع دریافت کرد.

همه اشکال دیگر مشابه هستند و به یک کنترل کننده اشاره می کنند save_edit.php، که تغییراتی را در پایگاه داده ایجاد می کند. همچنین کد نسبتاً بزرگی دارد و من آن را در اینجا نیز ارائه نمی‌کنم، اما فقط کمی در مورد آنچه در آن اتفاق می‌افتد به شما می‌گویم (همچنین می‌توانید کد کامل را در فایل‌های منبع پیدا کنید). اول از همه، یک آواتار ایجاد می کنیم، البته اگر کاربر آن را آپلود کرده باشد، در غیر این صورت استاندارد را رها می کنیم. اگر اینطور است، ابتدا آن را در پوشه دانلود می کنیم آواتارها(به هر حال، این پوشه را ایجاد کنید و پس از بررسی با پسوندهای مجاز، مجوز نوشتن 755 را به آن بدهید). سپس یک تصویر جدید با فرمت بسته به حالت انتخاب شده ایجاد می شود: $rezim = 1یک تصویر مربع ایجاد می شود، Rezim $ = 2تصویر متناسب با تصویر اصلی است. همچنین باید عرض تصویر ایجاد شده را تنظیم کنید $wو کیفیت کیفیت دلار. با استفاده از تابع تصویر ایجاد شده را با فرمت jpg ذخیره می کنیم imagejpegو یک نام تصادفی برای آن ایجاد کنید. اکنون باید تصویر قدیمی را حذف کرده و در پایگاه داده با یک تصویر جدید به روز کنید. این همه برای تصاویر است.

تمام موارد دیگر در این فایل برای به روز رسانی داده های شخصی در مورد کاربر در نظر گرفته شده است و عبارت است از پرس و جوهای ساده به پایگاه داده برای به روز رسانی فیلدها. قبل از به روز رسانی، وجود متغیرهای ورودی و ایمنی آنها با استفاده بررسی می شود نوارهای شلاقیو کاراکترهای ویژه html. اگر آپدیت با موفقیت انجام شود، بلافاصله کاربر را به صفحه نمایه هدایت می کنیم.
حالا بیایید مطمئن شویم که کاربر وارد شده می تواند همه کاربران ثبت نام شده دیگر را ببیند. برای این کار بیایید یک صفحه ایجاد کنیم user.php، که همه کاربران را در یک حلقه نمایش می دهد.

قبلاً در مورد کاربران وردپرس نوشتم (به لینک مراجعه کنید). اما مانند هر ابزاری (به جز پتک)، Adminimize ایده آل نیست و نمی تواند همه چیز را به طور کامل حذف کند، اگرچه این فقط به لطف برنامه نویسان وردپرس است.

این پست به طور خود به خود متولد شد، می توانید با تشکر از مهمان Blow. اصل سوال او این بود (بیشتر شبیه به یک سری سوال):

1. نحوه پنهان کردن "انتخاب" طرح رنگی"برای کاربر؟

2. چگونه «کلیدهای داغ» و «ویرایشگر بصری» را در پنل وردپرس مخفی کنیم؟

من مستقیماً می روم سر اصل مطلب. با استفاده از این روش می توانید هر عنصری را برای کاربر در پروفایل خود و سایر صفحات نیز مخفی کنید. ساده ترین راه ویرایش فایل نمایشی است!

برای "نمایه" این یک فایل است user-edit.php، که در پوشه قرار دارد wp-admin.شما باید آن را با دقت ویرایش کنید، در غیر این صورت می توانید به خوبی برای آزمایش های خود "پرداخت" کنید.

راه حل (یکپارچه):

1. فایل را در کامپیوتر خود دانلود کنید و از آن یک کپی تهیه کنید (ایمن...)

2. ما به دنبال کد HTML هستیم که وظیفه نمایش اطلاعات مورد نیاز ما را بر عهده دارد.

3. با دقت در مورد آن نظر دهید و دوباره آن را با جایگزینی «پر کنید».

اکنون تمرین کنید (ویرایش User-edit.php):

راستش یادم نمیاد چه ورژنی از WP رو تو سایت تست دارم ولی قطعا کمتر از 2.8.2 نیست.

ابتدا فایل را در رایانه شخصی خود دانلود کردم و با استفاده از Chrome Code Viewer به کد آن نگاه کردم و کد مورد نیاز را در Notepad++ پیدا کردم.

(دو خط تیره در هر طرف "-")

1. "ویژوال ویرایشگر" را پنهان کنید

تغییر به کد:

—>

ps: این کد را کپی نکنید، بلکه خودتان آن را تغییر دهید - احتمال خطا زیاد است!!!

2. "انتخاب طرح رنگ" را مخفی کنید.

امیدوارم متوجه تفاوت کدها شده باشید - در مجموع 7 کاراکتر اضافه شده است. برای پنهان کردن این مورد ما به دنبال آن هستیم if (count($_wp_admin_css_colors) > 1)و زیر خط تمام کدهای بین را کامنت کنید قبل از

3. "کلیدهای داغ" را پنهان کنید.

در درس دوم دو کلاس دیگر می نویسیم و قسمت داخلی فیلمنامه را به طور کامل تمام می کنیم.

طرح

هدف از این مجموعه آموزشی ایجاد یک اپلیکیشن ساده است که به کاربران امکان ثبت نام، ورود به سیستم، خروج از سیستم و تغییر تنظیمات را می دهد. کلاسی که شامل تمام اطلاعات کاربر خواهد بود User نامیده می شود و در فایل User.class.php تعریف می شود. کلاسی که مسئول ورودی/خروجی خواهد بود UserTools (UserTools.class.php) نامیده می شود.

کمی در مورد نامگذاری کلاس

آداب مناسب این است که فایل هایی را نامگذاری کنید که کلاسی را با همان نام خود کلاس توصیف می کنند. این امر تعیین هدف هر فایل در پوشه کلاس ها را آسان می کند.

همچنین اضافه کردن .class یا .inc به انتهای نام فایل کلاس معمول است. به این ترتیب ما هدف فایل را به وضوح تعریف می کنیم و می توانیم از htaccess. برای محدود کردن دسترسی به این فایل ها استفاده کنیم.

کلاس کاربر (User.class.php)

این کلاس هر کاربر را تعریف می کند. با رشد این نرم افزارممکن است تعریف "کاربر" به طور قابل توجهی تغییر کند. خوشبختانه، برنامه نویسی OOP اضافه کردن ویژگی های کاربر اضافی را آسان می کند.

سازنده

در این کلاس از سازنده استفاده خواهیم کرد - این تابعی است که به طور خودکار هنگام ایجاد کپی بعدی کلاس فراخوانی می شود. این به ما اجازه می دهد تا پس از ایجاد پروژه، برخی از ویژگی ها را به طور خودکار منتشر کنیم. در این کلاس، سازنده یک آرگومان منفرد را می گیرد: یک آرایه انجمنی که شامل یک ردیف از جدول کاربران پایگاه داده ما است.

require_once "DB.class.php"؛ کلاس کاربر ($id عمومی، نام کاربری عمومی، $hashedPassword عمومی، ایمیل عمومی $.
عمومی $joinDate;
//سازنده زمانی فراخوانی می شود که یک شی جدید ایجاد شود//یک آرایه انجمنی را با ردیف DB به عنوان آرگومان می گیرد. تابع __construct($data) ($this->id = (isset($data["id"])) ? $data["id"] : ""؛ $this->username = (isset($data[" نام کاربری"])) ? $data["username"] : ""; $this->hashedPassword = (isset($data["password"])) ? $data["password"] : ""; $this- >email = (isset($data["email"]) $data["email"] : "" $this->joinDate = (isset($data["join_date"]) $data["join_date"; "] : "";)
تابع عمومی save($isNewUser = false) ( //یک شی پایگاه داده جدید ایجاد کنید. $db = new DB(); //اگر کاربر قبلا ثبت نام کرده باشد و ما //فقط اطلاعات او را به روز کنیم. if(!$isNewUser ) (//تنظیم آرایه داده $data = array("username" => ""$this->username"", "password" => """$this->hashedPassword"",
"email" => ""$this->email"");
//به روز رسانی ردیف در پایگاه داده $db->update($data, "users", "id = ".$this->id); )else (//اگر کاربر برای اولین بار ثبت نام می کند. $data = array("username" => ""$this->username"", "password" => """$this->hashedPassword"" , "email" => ""$this->email"", "join_date" => """.date("Y-m-d H:i:s",time())."""); ->insert($data, "users") $this->joinDate = time(); ) ) ?>

توضیح

قسمت اول کد، خارج از منطقه کلاس، اتصال کلاس به پایگاه داده را تضمین می کند (زیرا کلاس User تابعی دارد که به این کلاس نیاز دارد).

به جای متغیرهای کلاس "حفاظت شده" (که در درس اول استفاده می شود)، آنها را به عنوان "عمومی" تعریف می کنیم. این بدان معناست که هر کد خارج از کلاس هنگام کار با شی User به این متغیرها دسترسی دارد.

سازنده آرایه ای می گیرد که در آن ستون های جدول کلید هستند. ما یک متغیر کلاس را با استفاده از $this->variablename تعریف می کنیم. در مثال این کلاس، ابتدا بررسی می کنیم که آیا مقدار یک کلید خاص وجود دارد یا خیر. اگر بله، متغیر کلاس را روی آن مقدار قرار می دهیم. در غیر این صورت، رشته خالی. کد از شکل کوتاه نماد استفاده می کند اگر:

$value = (3 == 4) ? "الف": "ب"؛

که در در این مثالبررسی می کنیم که آیا 3 برابر است با چهار! اگر بله - پس $value = "A"، نه - $value = "B". در مثال ما، نتیجه $value = "B" است.

ما اطلاعات کاربران را در پایگاه داده ذخیره می کنیم

تابع ذخیره برای ایجاد تغییرات در جدول پایگاه داده با مقادیر فعلی در شی User استفاده می شود. این تابع از کلاس DB که در درس اول ساختیم استفاده می کند. با استفاده از متغیرهای کلاس، آرایه $data تنظیم می شود. اگر داده‌های کاربر برای اولین بار ذخیره می‌شوند، $isNewUser به عنوان $true (به طور پیش‌فرض نادرست) ارسال می‌شود. اگر $isNewUser = $true باشد، تابع insert() کلاس DB فراخوانی می شود. در غیر این صورت تابع update() فراخوانی می شود. در هر دو مورد، اطلاعات از شی کاربر در پایگاه داده ذخیره می شود.

کلاس UserTools.class.php

این کلاس حاوی توابعی است که به کاربران مرتبط هستند: login()، logout()، checkUsernameExists() و get(). اما با گسترش این اپلیکیشن، می توانید بسیاری دیگر را اضافه کنید.

//UserTools.class.php require_once "User.class.php"; require_once "DB.class.php"؛
کلاس UserTools (
//کاربر را وارد کنید. ابتدا بررسی می کند که آیا // نام کاربری و رمز عبور با یک ردیف در پایگاه داده مطابقت دارند یا خیر. //در صورت موفقیت آمیز بودن، متغیرهای جلسه // را تنظیم کنید و شی کاربر را در آن ذخیره کنید.
ورود به سیستم عملکرد عمومی ($username، $password)
{
$hashedPassword = md5($password); $result = mysql_query("SELECT * FROM users WHERE username = "$username" AND password = "$hashedPassword""); if(mysql_num_rows($result) == 1) ($_SESSION["user"] = serialize(کاربر جدید(mysql_fetch_assoc($result))); $_SESSION["login_time"] = time(); $_SESSION["logged_in" "] = 1؛ بازگشت true; )else( return false; ))
//کاربر را از سیستم خارج کنید. متغیرهای جلسه را از بین ببرید. عملکرد عمومی logout() ( unset($_SESSION["user"]); unset($_SESSION["login_time"]); unset($_SESSION["logged_in"]); session_destroy(); ) //بررسی کنید ببینید آیا یک نام کاربری وجود دارد //این در هنگام ثبت نام فراخوانی می شود تا مطمئن شود همه نام های کاربری منحصر به فرد هستند. عملکرد عمومی checkUsernameExists($username) ($result = mysql_query("انتخاب شناسه از کاربرانی که username="$username""); if(mysql_num_rows($result) == 0) ( return false; )else( return true; )
}
//دریافت یک کاربر //یک شی User را برمی گرداند. شناسه کاربران را به عنوان یک تابع عمومی ورودی دریافت می کند get($id) ($db = new DB(); $result = $db->select("users", "id = $id")؛ بازگشت کاربر جدید($result ) )
?>

تابع login().

تابع login() با نامش مشخص است. آرگومان های کاربر $username و $password را می گیرد و مطابقت آنها را بررسی می کند. اگر همه چیز مطابقت داشت، یک شی User با تمام اطلاعات ایجاد می کند و آن را در جلسه ذخیره می کند. لطفا توجه داشته باشید که ما فقط از تابع PHP serialize() استفاده می کنیم. این یک نسخه ذخیره شده از شی ایجاد می کند که می تواند به راحتی با استفاده از unserialize () غیر سریال شود. همچنین زمان ورود ذخیره خواهد شد. این می تواند بعداً برای ارائه اطلاعات در مورد مدت اقامت در سایت به کاربران استفاده شود.

همچنین ممکن است متوجه شوید که $_SESSION["logged_in"] را روی 1 تنظیم کرده ایم. این به ما امکان می دهد به راحتی در هر صفحه بررسی کنیم که آیا کاربر وارد شده است یا خیر. کافی است فقط این متغیر را بررسی کنید.

تابع ()logout

همچنین عملکرد ساده. تابع PHP unset () متغیرها را در حافظه پاک می کند، در حالی که session_destroy () جلسه را حذف می کند.

تابع checkUsernameExists().

هر کسی که انگلیسی بلد باشد به راحتی عملکرد را درک خواهد کرد. به سادگی از پایگاه داده می پرسد که آیا از یک ورود مشابه استفاده شده است یا خیر.

تابع get().

این تابع شناسه منحصر به فرد کاربر را می گیرد و با استفاده از کلاس DB، یعنی تابع select() یک پرس و جو در پایگاه داده ایجاد می کند. یک آرایه انجمنی با تعدادی از اطلاعات کاربر می گیرد و یک شی کاربر جدید ایجاد می کند و آرایه را به سازنده ارسال می کند.

کجا می توانم از این استفاده کنم؟ به عنوان مثال، اگر صفحه ای ایجاد می کنید که نیاز به نمایش پروفایل های کاربر خاص دارد، باید این اطلاعات را به صورت پویا واکشی کنید. به این صورت می توانید این کار را انجام دهید: (فرض کنید URL http://www.website.com/profile.php?userID=3 است)

//note: ابتدا باید یک اتصال پایگاه داده را باز کنید. // برای اطلاعات بیشتر در مورد انجام این کار به قسمت 1 مراجعه کنید. //همچنین باید مطمئن شوید که فایل های کلاس را وارد کرده اید.
$tools = new UserTools(); $user = $tools->get($_REQUEST["userID"]); echo "Username: ".$user->username.""; echo "Joined On: ".$user->joinDate."";

به آسانی! آیا حقیقت دارد؟

آخرین لمس در سمت سرور: global.inc.php

global.inc.php برای هر صفحه در سایت مورد نیاز است. چرا؟ به این ترتیب ما تمام عملیات معمولی را که به آن نیاز داریم در صفحه قرار می دهیم. برای مثال، session_start() را شروع می کنیم. اتصال پایگاه داده نیز باز خواهد شد.

require_once "classes/UserTools.class.php";
require_once "classes/DB.class.php";
//اتصال به پایگاه داده $db = new DB(); $db->connect();
//initialize UserTools شی $userTools = new UserTools(); //شروع جلسه
session_start();
//بازخوانی متغیرهای جلسه اگر وارد شده باشید if(isset($_SESSION["logged_in"])) ($user = unserialize($_SESSION["user"]); $_SESSION["user"] = serialize($userTools-> get($user->id) ) ?>

داره چیکار میکنه؟

اینجا چند چیز در جریان است. اول از همه، ما یک اتصال به پایگاه داده را باز می کنیم.

پس از اتصال، تابع session_start() را شروع می کنیم. اگر کاربر قبلاً وارد شده باشد، عملکرد یک جلسه ایجاد می کند یا جلسه فعلی را ادامه می دهد. از آنجایی که برنامه ما برای ورود/خروج کاربران طراحی شده است، این ویژگی در هر صفحه مورد نیاز است.

بعد، بررسی می کنیم که آیا کاربر وارد شده است یا خیر. اگر چنین است، $_SESSION["user"] را به روز می کنیم تا بیشترین بازتاب را داشته باشد آخرین اطلاعاتدر مورد کاربر به عنوان مثال، اگر کاربر ایمیل خود را تغییر دهد، ایمیل قبلی در جلسه ذخیره می شود. اما با به روز رسانی خودکار این اتفاق نمی افتد.

این قسمت دوم را به پایان می رساند! فردا منتظر درس آخر این موضوع باشید.

بهترین ها!

اشتراک گذاری