Бид WordPress админ хэсэг дэх харааны засварлагч, өнгөний схемийн сонголт болон бусад мэдээллийг устгадаг. Бид WordPress админ самбар дээрх визуал засварлагч, өнгөний схемийн сонголт болон бусад мэдээллийг устгадаг

Ерөнхий асуудлууд

А:Профайл үүсгэгч нь серверийн үйл ажиллагааг харуулдаг боловч бүх хүсэлт, сешнүүдийг харуулдаггүй.

Х:Сешнүүдийг бичиж эхлэхийн тулд Start товчийг дарахаа бүү мартаарай.

А:Би MySQL-тэй холбогдож чадсан ч сессүүд харагдахгүй байна.

Х: Neor Profile SQL нь прокси серверээр ажилладаг. Энэ нь зөвхөн профайл үүсгэгчээр дамждаг сешнүүдийг харуулах боломжтой гэсэн үг юм. Таны програм (эсвэл вэбсайт) нь ердийн MySQL сервер шиг профайл үүсгэгчтэй холбогдсон байх ёстой. Профайл үүсгэгч нь зөвхөн ирж буй TCP холболтуудыг ашигладаг. Дараа нь та үр дүнг Sessions таб дээрээс харах болно.

А:Яагаад зарим сессүүд тэг хугацаатай хүсэлттэй байдаг вэ?

Х:Тэг цагийн асуулга нь хоцрогдолгүйгээр маш хурдан хийгддэг. Ийм асуулга нь DBMS-ээр хадгалагдах эсвэл маш хурдан гүйцэтгэх боломжтой, жишээлбэл, хэрэв танд хүчирхэг сервер, сайн оновчтой хүснэгтүүд байгаа бол.

А:Хуралдааны цаг, үргэлжлэх хугацаанд % гэдэг нь юу гэсэн үг вэ?

Х:"Time %" нь сессийн гүйцэтгэлийн нийт хугацааны хувь юм. "Үргэлжлэх хугацаа %" нь сесс дэх хамгийн урт хүсэлтийн хувь (хамгийн урт хүсэлттэй харьцуулсан харьцаа) юм.

А:Би JetProfiler ашигладаг бөгөөд үүнийг тохируулах нь илүү хялбар байдаг.

Х: JetProfiler нь мэдээллийг хүлээн авдаг MySQL серверүүд"Show status" командаар дамжуулан серверийн бүх мэдээллийг авч чадахгүй, учир нь энэ нь салангид ажилладаг. Neor Profile SQL нь мэдээллийн баазын бүх асуулгыг харуулдаг. Энэ нь профайл үүсгэгчээр дамжуулан хүсэлтийн урсгалыг чиглүүлэхийн тулд програмаа тохируулахыг шаарддаг.

А: SQL таб дээрх Profile товчлуур нь үр дүнг харуулахгүй

Х: SQL засварлагчийн профайл үүсгэх функц нь 5.0.37 хувилбараас эхлэн MySQL олон нийтийн серверт нэмэгдсэн SHOW PROFILES командын тусламжтайгаар ажилладаг. MySQL серверийн хувилбараа шалгана уу.

А:Профайл үүсгэгчийг консол дээр суурилсан болгох боломжтой юу?

Х:Консолын хувьд DBMS лог болон сүүлний хослол эсвэл тусгай консолын хэрэгслийг ашиглана уу. Neor Profile SQL нь хөгжүүлэгчийн системд байрлуулах зориулалттай цонхтой үйлдлийн системийн програм юм.

А:Профайл үүсгэгч ажиллаж байгаа боловч ямар нэг шалтгааны улмаас үндсэн статистикийн график харагдахгүй байна уу?

Х:Үндсэн график нь үндсэн серверт SHOW STATUS командыг ашигладаг. Танд энэ тушаалыг сервер дээр ажиллуулах зөвшөөрөл байхгүй байж магадгүй. Танд энэ тушаалын зөвшөөрөл байгаа эсэхээ шалгаарай.

А:Суулгагчийг чимээгүй горимд хэрхэн ажиллуулах вэ?

Х: sqlprofiler-4.1.1.exe /S /D:C:Program Files (x86)Neor Profile SQL

Windows

А: Profiler холболтыг хэрхэн шалгах вэ?

Х:Профайл үүсгэгчтэй холбогдохын тулд MySQL консол клиентийг ашиглана уу. Хэрэв та Sessions таб дээрээс сессээ харвал бүх зүйл зөв тохируулагдсан гэсэн үг.
Жишээлбэл:
Дараа нь хий энгийн SQLтушаал:
хүснэгтүүдийг харуулах;
Профайл үүсгэгчийн сесс таб дээрээс юу болсныг хараарай.

Линукс

А:Би localhost-ээр холбогдож чадахгүй байна.

Х:Линукс localhost-ийг сокет холболттой холбохыг оролддог боловч Neor Profile SQL зөвхөн TCP холболттой ажилладаг. Профайл үүсгэгч дэх серверийн хаягийг localhost-ын оронд 127.0.0.1 болгож тохируулна уу. Та аппликешны тохиргооноос ижил зүйлийг хийж болно.
Жишээлбэл:
mysql --host=127.0.0.1 --user=LOGIN --password=PASSWORD --port=4040

А:Би 127.0.0.1-д холбогдож чадахгүй байна.

Х:Програмдаа холболтын төрлийг шалгана уу. Та мөн портын утгыг оруулах шаардлагагүй дотоод залгуурын холболтын төрлийг ашиглаж болно.

А: OpenSUSE дор Neor Profile SQL-г хэрхэн суулгах вэ?

Х:Одоогоор бид зөвхөн Ubuntu, Debian болон нийцтэй програмууд дээр ажилладаг DEB багцыг дэмжиж байна. Линукс түгээлтүүд. Та өөрөө RPM файл үүсгэж, улмаар тусалж чадна.

А:Би яагаад Sysbench хүсэлтийг саатуулж чадахгүй байна вэ?

Х:Профайл үүсгэгч нь зөвхөн ирж буй TCP холболтуудыг ашигладаг. Sysbench-ийг хост болон портын параметрүүдээр ажиллуулна уу:
sysbench --test=oltp --mysql-host=127.0.0.1 --mysql-port=4040--mysql-user=root --mysql-password=нууц үг бэлтгэ

Mac OS X

А:Профайл үүсгэгч MAMP MySQL сервертэй холбогдож чадахгүй байна.

Х:Асуудал сүлжээний холболт MySQL тохиргоонд:

  1. МАМР
    Үнэгүй хувилбар– стандарт MySQL тохиргоог хавтас руу хуулна
    /Applications/MAMP/conf/my.cnf
    Pro хувилбар – нээлттэй цэс FILE – EDIT – MySQL загвар
  2. my.cnf тохиргоонд алгасах сүлжээний мөрийг устгана уу
  3. Profiler Settings дотроос өгөгдлийн сангийн хост хаягийг localhost-оос 127.0.0.1 болгон өөрчил.

Таны скрипт дэх MySQL портыг өөрчлөх

Neor Profile SQL-д өгөгдмөл порт нь 4040 байна. SQL асуулга цуглуулахын тулд та өөрийн скрипт дэх MySQL хост болон 3306 порт руу холбогдох өгөгдмөл утгуудыг өөрчлөх ёстой.

string connStr = " сервер=127.0.0.1;порт=4040;өгөгдлийн сан=ТАНЫ_МЭДЭЭЛЛИЙН БАГА;хэрэглэгч=Таны_хэрэглэгч;нууц үг=Таны_нууц үг;";
http://dev.mysql.com/doc/refman/5.1/en/connector-net-tutorials-intro.html


Алдартай CMS дээрх портыг өөрчлөх

Wordpress

Файл: wp-config.php
Код: тодорхойлох("DB_HOST", "localhost :4040 ");

PrestaShop

Файл: config/settings.inc.php
Код: тодорхойлох("_DB_SERVER_", "localhost :4040 ");

OpenCart

Файл: config.php
Код: тодорхойлох("DB_HOSTNAME", "localhost :4040 ");

Би WordPress хэрэглэгчдийн талаар аль хэдийн бичсэн (холбоосыг үзнэ үү). Гэхдээ аливаа хэрэгслийн нэгэн адил (лантуунаас бусад) Adminimize нь тийм ч тохиромжтой биш бөгөөд бүх зүйлийг бүрэн устгаж чадахгүй, гэхдээ энэ нь зөвхөн WordPress програмистуудын ачаар юм.

Энэ бичлэг аяндаа төрсөн, та Blow зочинд баярлалаа гэж хэлж болно. Түүний асуултын гол агуулга нь энэ байв (цуврал асуулт шиг):

1. "Сонголт"-ыг хэрхэн нуух вэ өнгөний схем"хэрэглэгчийн хувьд?

2. "Холбох товчлуур" болон "Хэрхэн нуух вэ? Визуал засварлагч» WordPress самбар дээр?

Би шууд асуудал руугаа оръё. Энэ аргыг ашигласнаар та түүний профайл болон бусад хуудсан дээрх хэрэглэгчийн аль ч элементийг нуух боломжтой. Хамгийн хялбар арга бол дэлгэцийн файлыг засах явдал юм!

"Профайл"-ын хувьд энэ нь файл юм user-edit.phpхавтас дотор байгаа wp-админ.Та үүнийг маш болгоомжтой засах хэрэгтэй, эс тэгвээс та туршилтынхаа төлөө сайн "төлбөр" хийх боломжтой.

Шийдэл (нэгдсэн):

1. Файлыг компьютер дээрээ татаж аваад хуулбарыг нь аваарай (аюулгүй....)

2. Бидэнд хэрэгтэй мэдээллийг харуулах үүрэгтэй HTML кодыг хайж байна.

3. Үүн дээр анхааралтай тайлбар хийж, орлуулах хүнээр "бөглөх".

Одоо дасгал хий (User-edit.php-г засварлах):

Үнэнийг хэлэхэд, би туршилтын сайт дээр WP-ийн ямар хувилбар байгааг санахгүй байна, гэхдээ энэ нь 2.8.2-оос багагүй байх нь гарцаагүй.

Эхлээд би файлаа компьютер дээрээ татаж аваад Chrome Code Viewer ашиглан кодыг нь хараад Notepad++ дээр шаардлагатай кодыг олсон.

(тал тус бүр дээр хоёр зураас "-")

1. "Visual Editor"-ыг нуух

Код болгон өөрчлөх:

—>

Жич: битгий хуулж ав энэ код, гэхдээ үүнийг өөрөө өөрчил - алдаа гарах магадлал өндөр байна !!!

2. "Өнгөний схем сонгох" гэснийг нуу.

Та кодын ялгааг анзаарсан гэж найдаж байна - нийт 7 тэмдэгт нэмэгдсэн. Энэ зүйлийг нуухын тулд бид хайж байна хэрэв (count($_wp_admin_css_colors) > 1)мөн мөрний доорх бүх кодыг комментоор бичнэ үү өмнө

3. "Hot Keys"-ийг нуу.

Хоёр дахь хичээл дээр бид дахиад хоёр анги бичиж, скриптийн дотоод хэсгийг бүрэн дуусгах болно.

Төлөвлөгөө

Энэхүү цуврал хичээлийн зорилго нь хэрэглэгчдэд бүртгүүлэх, нэвтрэх, гарах, тохиргоог өөрчлөх боломжтой энгийн программ үүсгэх явдал юм. Хэрэглэгчийн талаарх бүх мэдээллийг агуулсан классыг User гэж нэрлэх ба User.class.php файлд тодорхойлогдоно. Оролт/гаралтыг хариуцах классыг UserTools (UserTools.class.php) гэж нэрлэнэ.

Ангийн нэрсийн талаар бага зэрэг

Зохих ёс зүй бол тухайн ангитай ижил нэртэй ангийг дүрсэлсэн файлуудыг нэрлэх явдал юм. Энэ нь classes хавтас дахь файл бүрийн зорилгыг тодорхойлоход хялбар болгодог.

Мөн ангийн файлын нэрний төгсгөлд .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[" хэрэглэгчийн нэр"])) ? $дата["хэрэглэгчийн нэр"] : ""; $this->hashedPassword = (isset($data["нууц үг"])) ? $data["нууц үг"]: ""; $энэ- >email = (isset($data["email"])) ? $data["email"] : "" $this->joinDate = (isset($data["join_date"])) $data[" join_date "] : "";)
public function save($isNewUser = false) ( //Өгөгдлийн сангийн шинэ объект үүсгэх. $db = new DB(); //хэрэв хэрэглэгч аль хэдийн бүртгүүлсэн бөгөөд бид //зүгээр л тэдний мэдээллийг шинэчилж байгаа бол. if(!$isNewUser). ) ( //өгөгдлийн массивыг тохируулах $data = array("хэрэглэгчийн нэр" => ""$this->хэрэглэгчийн нэр"", "нууц үг" => ""$this->hashedPassword"",
"email" => ""$this->имэйл"");
//өгөгдлийн сангийн мөрийг шинэчлэх $db->update($data, "хэрэглэгч", "id = ".$this->id); )else ( //хэрэв хэрэглэгч анх удаа бүртгүүлж байгаа бол. $data = массив("хэрэглэгчийн нэр" => ""$this->хэрэглэгчийн нэр"", "нууц үг" => ""$this->hashedPassword"" , "email" => ""$this->email"", "join_date" => """.date("Y-m-d H:i:s",time()).""" id = $db). ->insert($өгөгдөл, "хэрэглэгч" $this->joinDate = time(); ) ) ?>

Тайлбар

Ангийн бүсээс гадуурх кодын эхний хэсэг нь тухайн анги өгөгдлийн сантай холбогдсон эсэхийг баталгаажуулдаг (User класс нь энэ классыг шаарддаг функцтэй тул).

"Хамгаалагдсан" ангиллын хувьсагчдын оронд (1-р хичээлд ашигласан) бид тэдгээрийг "нийтийн" гэж тодорхойлдог. Энэ нь User объекттой ажиллах үед ангиас гадуурх ямар ч код эдгээр хувьсагчдад хандах эрхтэй гэсэн үг юм.

Зохион байгуулагч нь хүснэгтийн баганууд нь түлхүүрүүд байх массивыг авдаг. Бид $this->variablename ашиглан ангийн хувьсагчийг тодорхойлдог. Энэ ангийн жишээн дээр бид эхлээд тодорхой түлхүүрийн утга байгаа эсэхийг шалгана. Хэрэв тийм бол бид ангийн хувьсагчийг тухайн утгад тохируулна. Үгүй бол хоосон мөр. Код нь дараах тохиолдолд тэмдэглэгээний богино хэлбэрийг ашигладаг.

$утга = (3 == 4)? "A": "B";

Энэ жишээнд бид 3 нь дөрөвтэй тэнцэх эсэхийг шалгаж байна! Хэрэв тийм бол - $ үнэ цэнэ = "A", үгүй ​​- $ үнэ = "B". Бидний жишээн дээр үр дүн нь $ үнэ цэнэ = "B" байна.

Бид мэдээллийн санд хэрэглэгчдийн талаарх мэдээллийг хадгалдаг

Хадгалах функц нь Хэрэглэгчийн объектын одоогийн утгуудын дагуу мэдээллийн сангийн хүснэгтэд өөрчлөлт оруулахад ашиглагддаг. Энэ функц нь бидний эхний хичээл дээр үүсгэсэн өгөгдлийн сангийн ангиллыг ашигладаг. Ангийн хувьсагчдыг ашиглан $өгөгдлийн массивыг тохируулсан. Хэрэв хэрэглэгчийн өгөгдөл анх удаа хадгалагдаж байгаа бол $isNewUser нь $true (өгөгдмөлөөр худал) гэж дамжуулагдана. Хэрэв $isNewUser = $true бол DB ангиллын insert() функц дуудагдана. Үгүй бол update() функц дуудагдана. Аль ч тохиолдолд хэрэглэгчийн объектын мэдээлэл мэдээллийн санд хадгалагдана.

Class UserTools.class.php

Энэ анги нь хэрэглэгчидтэй холбоотой функцуудыг агуулна: login(), logout(), checkUsernameExists() болон get(). Гэхдээ энэ програмыг өргөжүүлснээр та илүү олон зүйлийг нэмж болно.

//UserTools.class.php require_once "User.class.php"; require_once "DB.class.php";
Class UserTools (
//Хэрэглэгч нэвтэрнэ үү. Эхлээд //хэрэглэгчийн нэр болон нууц үг нь мэдээллийн сангийн мөртэй таарч байгаа эсэхийг шалгана. //Хэрэв амжилттай болвол сессийн хувьсагчдыг тохируулж //хэрэглэгчийн объектыг дотор нь хадгална.
нийтийн функцийн нэвтрэлт ($ хэрэглэгчийн нэр, $ нууц үг)
{
$ hasshedPassword = md5 ($ нууц үг); $result = mysql_query("СОНГОХ * ХААНА хэрэглэгчийн нэр = "$хэрэглэгчийн нэр" БА нууц үг = "$hashedPassword""); if(mysql_num_rows($result) == 1) ( $_SESSION["хэрэглэгч"] = цуваа болгох(шинэ хэрэглэгч(mysql_fetch_assoc($үр дүн))); $_SESSION["нэвтрэх_цаг"] = цаг(); $_SESSION["нэвтэрсэн_in) "] = 1; үнэнийг буцаана; )else ( худал буцаана; ) )
//Хэрэглэгчийг гаргана уу. Сеансын хувьсагчдыг устгах. нийтийн функцээс гарах() ( unset($_SESSION["хэрэглэгч"]); тохируулаагүй($_SESSION["login_time"]); тохируулаагүй($_SESSION["logged_in"]); session_destroy(); ) //Үгүй эсэхийг шалгана уу. хэрэглэгчийн нэр байна. //Бүх хэрэглэгчийн нэр давтагдашгүй байгаа эсэхийг шалгахын тулд бүртгэлийн явцад үүнийг дууддаг. нийтийн функц checkUsernameExists($username) ( $үр дүн = mysql_query("хэрэглэгчийн нэрээр "$хэрэглэгчийн нэр""); if(mysql_num_rows($result) == 0) ( буцаах худал; )else( үнэнийг буцаана; )
}
//хэрэглэгч авах //Хэрэглэгчийн объектыг буцаана. Хэрэглэгчийн ID-г оруулах нийтийн функц болгон авна get($id) ( $db = new DB(); $result = $db->select("users", "id = $id"); return new User($result) );
?>

login() функц

login() функц нь нэрээрээ ойлгомжтой. Энэ нь хэрэглэгчийн $username болон $password аргументуудыг авч, тэдгээр нь таарч байгаа эсэхийг шалгана. Хэрэв бүх зүйл таарч байвал бүх мэдээлэл бүхий Хэрэглэгчийн объект үүсгэж, сессэд хадгална. Бид зөвхөн PHP serialize() функцийг ашиглаж байгааг анхаарна уу. Энэ нь unserialize()-г ашиглан сериалгүй болгоход хялбар объектын хадгалагдсан хувилбарыг үүсгэдэг. Мөн нэвтрэх хугацаа хэмнэгдэх болно. Үүнийг дараа нь хэрэглэгчид сайтад байх хугацааны талаарх мэдээллийг өгөхөд ашиглаж болно.

Бид $_SESSION["logged_in"]-г 1 болгож тохируулсныг та анзаарсан байх. Энэ нь хэрэглэгч нэвтэрсэн эсэхийг хуудас бүр дээр хялбархан шалгах боломжийг олгодог. Зөвхөн энэ хувьсагчийг шалгахад хангалттай.

гарах() функц

Мөн энгийн функц. PHP unset() функц нь санах ой дахь хувьсагчдыг устгадаг бол session_destroy() нь сессийг устгана.

checkUsernameExists() функц

Англи хэл мэддэг хүн энэ функцийг хялбархан ойлгох болно. Энэ нь мэдээллийн сангаас ижил төстэй нэвтрэлт ашигласан эсэхийг асуудаг.

get() функц

Энэ функц нь хэрэглэгчийн өвөрмөц id-г авч, DB анги, тухайлбал select() функцийг ашиглан мэдээллийн санд асуулга хийдэг. Энэ нь хэд хэдэн хэрэглэгчийн мэдээлэл бүхий ассоциатив массивыг авч, шинэ Хэрэглэгчийн объектыг үүсгэж, массивыг байгуулагч руу дамжуулна.

Би үүнийг хаана ашиглаж болох вэ? Жишээлбэл, хэрэв та тодорхой хэрэглэгчийн профайлыг харуулах хуудас үүсгэвэл энэ мэдээллийг динамикаар татах шаардлагатай болно. Та үүнийг ингэж хийж болно: (URL нь http://www.website.com/profile.php?userID=3 гэж бодъё)

//тэмдэглэл: та эхлээд өгөгдлийн сангийн холболтыг нээх хэрэгтэй болно. //Үүний талаар нэмэлт мэдээллийг 1-р хэсгийг үзнэ үү. //Та мөн ангийн файлуудыг оруулсан эсэхээ шалгах хэрэгтэй.
$tools = шинэ UserTools(); $user = $tools->get($_REQUEST["userID"]); echo "Хэрэглэгчийн нэр: ".$user->хэрэглэгчийн нэр.""; echo "Нэгдсэн: ".$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->холбох();
//UserTools объектыг эхлүүлэх $userTools = шинэ UserTools(); // сессийг эхлүүлэх
session_start();
//хэрэв нэвтэрсэн бол сешн хувьсагчдыг дахин сэргээнэ үү if(isset($_SESSION["logged_in"])) ( $user = unserialize($_SESSION["user"]); $_SESSION["user"] = serialize($userTools-> get($user->id) ) ?>

Тэр юу хийж байна вэ?

Энд хэд хэдэн зүйл болж байна. Юуны өмнө бид мэдээллийн сантай холболтыг нээнэ.

Холбосны дараа бид session_start() функцийг эхлүүлнэ. Функц нь сесс үүсгэдэг эсвэл хэрэглэгч аль хэдийн нэвтэрсэн бол одоогийн сессийг үргэлжлүүлнэ. Манай аппликейшн нь хэрэглэгчдэд нэвтрэх/гарахад зориулагдсан тул хуудас бүрт энэ функц шаардлагатай.

Дараа нь бид хэрэглэгч нэвтэрсэн эсэхийг шалгана. Хэрэв тийм бол бид хамгийн сүүлийн үеийн хэрэглэгчийн мэдээллийг тусгахын тулд $_SESSION["user"]-г шинэчлэх болно. Жишээлбэл, хэрэв хэрэглэгч имэйлээ өөрчилвөл хуучин нь сессэд хадгалагдах болно. Гэхдээ автоматаар шинэчлэлт хийснээр ийм зүйл болохгүй.

Энэ нь хоёр дахь хэсгийг дуусгаж байна! Маргааш энэ сэдвийн эцсийн хичээлийг хүлээж байгаарай.

Хамгийн сайн сайхныг хүсье!