Yangi formatda davom etish uchun: https://uzfor.net/20101-johncms-darslik.html?id=32
JohnCMS Darslik
Xabarlar
Hammaga salom, esingizda bo'lsa HarryAli JohnCMS borasida darslik olib borayotgan edi, lekin oxirigacha bitmadi, nasib qilsa buyog'iga birgalikda olib boramiz, avvalo shu darsliklarni sizlarga taqdim etaman:
#1darslik
Barchangizga salomlar ko'pchilikni taklifiga binoan JohnCMS haqida (ha faqat JohnCMS haqida! Php yoki va hokazo haqida emas!!!) qo'llanma yozishga kirishdim)) Qo'limdan kelganicha bilganimni sizlar bilan o'rtoqlashishga harakat qilaman.
Demak, sizdan talab etiladigan narsalar bu: php va html bo'yicha ko'nikmaga ega bo'lishingiz zarur. Chunki bularni noldan boshlab tushuntirish qo'limdan kelmaydi)) Ingliz tili bo'yicha bilimingiz esa tezroq o'rganishingizga qo'l keladi. Demak, boshladik.
JohnCMS (CMS => Content Managing System) wap-dvijoklar ichida ko'pchilik uchun eng qulayi va eng soddalaridan biri hisoblanadi. Bunga o'zingiz ham amin bo'lasiz.
JohnCMSda ishlashda siz uning bazasidagi jadval (tablitsa) nomlari va undagi ustunlar nomlarini bilishingiz kerak, bilmasangiz, endi bilvolasiz))
Kelinglar, `users` jadvalidan boshlaymiz. MySQL (Structured Query Language) so'rovlarida jadval va undagi ustun nomlarini ikkala tomoniga ham ` belgisi qo'yiladi. `users` jadvalida quyidagi ustunlar mavjud (asosiylarini yozaman): `id` => Bunda foydalanuvchining ID raqamlari yozilib boriladi. `name` => foydalanuvchining "nikneym"i yoziladi. `name_lat` => foydalanuvchining logini. `password` => foydalanuvchu paroli. `rights` => foydalanuvchi mansabi. Oddiy userlarda `rights` 0 (nol)ga teng bo'ladi. O'sib borish tartibi esa quyidagicha:
0 => '',
1 => '(GMod)',
2 => '(CMod)',
3 => '(FMod)',
4 => '(DMod)',
5 => '(LMod)',
6 => '(Smd)',
7 => '(Adm)',
9 => '(SV!)'
Huddi shu tartibda foydalanuvchi mansabi belgilanadi. Agar `rights` 9ga teng bo'lsa, u foydalanuvchi (SV!) (supervayzor) hisoblanadi. Keyingi ustunlar: `imname` => Anketaga kiritiladigan ism. `sex` => jins, bu m (erkak) yoki zh (ayol) ko'rinishida bo'ladi. `komm` => Kommentlari soni, `postforum` => Forumdagi postlari soni, `postguest` => mexmonxonadagi postlari soni. Menimcha hozirchalikka ustunlar yetarli))
Foydalanuvchining o'zini malumotlaridan yuqoridagi ustunlardan birortasini aniqlash uchun $datauser[] ishlatiladi. Masalan userning (biz anketasiga kirib turgan user emas, aynan o'zimizning profil, tushunarli bo'lishi uchun BIZ deb yoziladi endi)) kirish huquqlarini aniqlashtirish uchun $datauser['rights'] yoki kommentlari soni $datauser['komm'] menimcha qolgani shundoq ham tushunarli. Lekin kodlarni hadeb qayta yozavermaslik uchun ayrim malumotlar yadroning o'zidayoq qisqartirilgan, ma'salan $datauser['rights']ni o'rniga $rightsni ishlatish mumkin. Lekin bu jadvaldagi barcha ustunlarga ham tegishli emas, ya'ni $id $komm $postforum kabi kodlar yozib ovora bo'lmang))
Kelinglar, endi bitta php sahifa yaratamiz va kichik tajriba qilamiz. Demak, sayt/papka/ ichiga tajriba.php faylini yaratdik:
<?php
1- qatorni albatta shunaqa boshlashni unutmang, aks holda server buni php sahifa emas deb hisoblab, sahifadagi buyruqlarni bajarmaydi!
define('_IN_JOHNCMS', 1);
Bu narsa konstant deyiladi, biz JohnCMSda ishlayotganimiz uchun ham buni yozib qo'yish kerak, aks holda yadro sizga ma'lumotlarni taqdim etmaydi.
require('../incfiles/core.php');
bu kod orqali sahifamizda yadroni talab (require) qilyapmiz.
require('../incfiles/head.php');
bu kod orqali esa, saytning "shapka"sini talab qilamiz. Shapkasiz sahifada ishlab bo'lmaydi, unutmang))
endi yangi bir kodni o'rganamiz: shart qo'yish. Ya'ni if (agar).
if ($rights == 9)
bu "agar BIZning kirish huquqlari 9 bo'lsa (yani SV bo'lsa) degan shartni qo'yadi.
if ($rights != 9)
Bunisi esa, agar 9 bo'lmasa degan shartni qo'yadi. Bunda 9dan tashqari 0-8 sonlarga amal qilinadi.
if ($rights > 0)
Agar kirish huquqlari noldan baland bo'lsa
if ($rights < 9)
Agar kirish huquqlari 9dan kichik bo'lsa. Hozircha shu oddiy shartlarni o'rganish ham yetadi.
Demak, tepadagi birorta o'zizga maqul shartdan foydalaning, yoki men tanlaganni tanlang))
if ($rights < 9) {
echo functions::display_error('Bu sahifa faqat supervayzorlar uchun!');
require('../incfiles/end.php);
exit;
}
endi taxlil qilamiz: Agar kirish huquqlari 9dan past bo'lsa, "Bu sahifa faqat supervayzorlar uchun!" degan xatolik ekranga kelib chiqadi (functions haqida keyinroq batafsil) va sahifaga saytning pastki qismi (end.php) chaqirilib, sahifa tugallanadi (exit). Shartdagi amal { va } belgilari orasida amal qiladi. Bu belgilar qo'yilmagan taqdirda esa, shartdan keyingi faqat bitta buyruq shartga tegishli deb hisoblanadi.
Yana davom etamiz: endi aks holda (else) buyrug'ini ishlatamiz. Bu buyruq qo'yilgan shartga teskari shartni yuklaydi. Agar kirish huquqlari 9 bo'lmasa xatolik kelib chiqsin, aks holsa, "hush kelibsiz!" degan yozuv chiqsin. Endi shuni sinab ko'ramiz. Oxirgi } belgisi yoniga qo'shimcha qilamiz:
} else {
echo '<div class="gmenu">Hush kelibsiz adminboy!</div>';
}
Ko'rib turganizdek, else ham { } belgilari orasiga buyruq kiritadi.
Endi sahifani tugallab qo'yamiz:
require('../incfiles/end.php');
?>
end.php faylida saytning eng pastki qismidagi onlayn userlar, banner, top-reyting hisoblagichlar, kopiraytlar mavjud bo'ladi. ?> buyrug'i esa php sahifaning yakunlanganini bildiradi. Shunday qilib, hozir tajriba.php faylimiz quyidagicha:
Ushbu faylni saqlab, uni brauzerda ochib ko'ramiz va natijadan zavq olamiz 1-dars tamom.
Sekin asta davomini qo'shib boraman. Hammaga omad.
#1darslik
JohnCMS #1 darslik (+/-)
Barchangizga salomlar ko'pchilikni taklifiga binoan JohnCMS haqida (ha faqat JohnCMS haqida! Php yoki va hokazo haqida emas!!!) qo'llanma yozishga kirishdim)) Qo'limdan kelganicha bilganimni sizlar bilan o'rtoqlashishga harakat qilaman.
Demak, sizdan talab etiladigan narsalar bu: php va html bo'yicha ko'nikmaga ega bo'lishingiz zarur. Chunki bularni noldan boshlab tushuntirish qo'limdan kelmaydi)) Ingliz tili bo'yicha bilimingiz esa tezroq o'rganishingizga qo'l keladi. Demak, boshladik.
JohnCMS (CMS => Content Managing System) wap-dvijoklar ichida ko'pchilik uchun eng qulayi va eng soddalaridan biri hisoblanadi. Bunga o'zingiz ham amin bo'lasiz.
JohnCMSda ishlashda siz uning bazasidagi jadval (tablitsa) nomlari va undagi ustunlar nomlarini bilishingiz kerak, bilmasangiz, endi bilvolasiz))
Kelinglar, `users` jadvalidan boshlaymiz. MySQL (Structured Query Language) so'rovlarida jadval va undagi ustun nomlarini ikkala tomoniga ham ` belgisi qo'yiladi. `users` jadvalida quyidagi ustunlar mavjud (asosiylarini yozaman): `id` => Bunda foydalanuvchining ID raqamlari yozilib boriladi. `name` => foydalanuvchining "nikneym"i yoziladi. `name_lat` => foydalanuvchining logini. `password` => foydalanuvchu paroli. `rights` => foydalanuvchi mansabi. Oddiy userlarda `rights` 0 (nol)ga teng bo'ladi. O'sib borish tartibi esa quyidagicha:
0 => '',
1 => '(GMod)',
2 => '(CMod)',
3 => '(FMod)',
4 => '(DMod)',
5 => '(LMod)',
6 => '(Smd)',
7 => '(Adm)',
9 => '(SV!)'
Huddi shu tartibda foydalanuvchi mansabi belgilanadi. Agar `rights` 9ga teng bo'lsa, u foydalanuvchi (SV!) (supervayzor) hisoblanadi. Keyingi ustunlar: `imname` => Anketaga kiritiladigan ism. `sex` => jins, bu m (erkak) yoki zh (ayol) ko'rinishida bo'ladi. `komm` => Kommentlari soni, `postforum` => Forumdagi postlari soni, `postguest` => mexmonxonadagi postlari soni. Menimcha hozirchalikka ustunlar yetarli))
Foydalanuvchining o'zini malumotlaridan yuqoridagi ustunlardan birortasini aniqlash uchun $datauser[] ishlatiladi. Masalan userning (biz anketasiga kirib turgan user emas, aynan o'zimizning profil, tushunarli bo'lishi uchun BIZ deb yoziladi endi)) kirish huquqlarini aniqlashtirish uchun $datauser['rights'] yoki kommentlari soni $datauser['komm'] menimcha qolgani shundoq ham tushunarli. Lekin kodlarni hadeb qayta yozavermaslik uchun ayrim malumotlar yadroning o'zidayoq qisqartirilgan, ma'salan $datauser['rights']ni o'rniga $rightsni ishlatish mumkin. Lekin bu jadvaldagi barcha ustunlarga ham tegishli emas, ya'ni $id $komm $postforum kabi kodlar yozib ovora bo'lmang))
Kelinglar, endi bitta php sahifa yaratamiz va kichik tajriba qilamiz. Demak, sayt/papka/ ichiga tajriba.php faylini yaratdik:
<?php
1- qatorni albatta shunaqa boshlashni unutmang, aks holda server buni php sahifa emas deb hisoblab, sahifadagi buyruqlarni bajarmaydi!
define('_IN_JOHNCMS', 1);
Bu narsa konstant deyiladi, biz JohnCMSda ishlayotganimiz uchun ham buni yozib qo'yish kerak, aks holda yadro sizga ma'lumotlarni taqdim etmaydi.
require('../incfiles/core.php');
bu kod orqali sahifamizda yadroni talab (require) qilyapmiz.
require('../incfiles/head.php');
bu kod orqali esa, saytning "shapka"sini talab qilamiz. Shapkasiz sahifada ishlab bo'lmaydi, unutmang))
endi yangi bir kodni o'rganamiz: shart qo'yish. Ya'ni if (agar).
if ($rights == 9)
bu "agar BIZning kirish huquqlari 9 bo'lsa (yani SV bo'lsa) degan shartni qo'yadi.
if ($rights != 9)
Bunisi esa, agar 9 bo'lmasa degan shartni qo'yadi. Bunda 9dan tashqari 0-8 sonlarga amal qilinadi.
if ($rights > 0)
Agar kirish huquqlari noldan baland bo'lsa
if ($rights < 9)
Agar kirish huquqlari 9dan kichik bo'lsa. Hozircha shu oddiy shartlarni o'rganish ham yetadi.
Demak, tepadagi birorta o'zizga maqul shartdan foydalaning, yoki men tanlaganni tanlang))
if ($rights < 9) {
echo functions::display_error('Bu sahifa faqat supervayzorlar uchun!');
require('../incfiles/end.php);
exit;
}
endi taxlil qilamiz: Agar kirish huquqlari 9dan past bo'lsa, "Bu sahifa faqat supervayzorlar uchun!" degan xatolik ekranga kelib chiqadi (functions haqida keyinroq batafsil) va sahifaga saytning pastki qismi (end.php) chaqirilib, sahifa tugallanadi (exit). Shartdagi amal { va } belgilari orasida amal qiladi. Bu belgilar qo'yilmagan taqdirda esa, shartdan keyingi faqat bitta buyruq shartga tegishli deb hisoblanadi.
Yana davom etamiz: endi aks holda (else) buyrug'ini ishlatamiz. Bu buyruq qo'yilgan shartga teskari shartni yuklaydi. Agar kirish huquqlari 9 bo'lmasa xatolik kelib chiqsin, aks holsa, "hush kelibsiz!" degan yozuv chiqsin. Endi shuni sinab ko'ramiz. Oxirgi } belgisi yoniga qo'shimcha qilamiz:
} else {
echo '<div class="gmenu">Hush kelibsiz adminboy!</div>';
}
Ko'rib turganizdek, else ham { } belgilari orasiga buyruq kiritadi.
Endi sahifani tugallab qo'yamiz:
require('../incfiles/end.php');
?>
end.php faylida saytning eng pastki qismidagi onlayn userlar, banner, top-reyting hisoblagichlar, kopiraytlar mavjud bo'ladi. ?> buyrug'i esa php sahifaning yakunlanganini bildiradi. Shunday qilib, hozir tajriba.php faylimiz quyidagicha:
<?php require('../incfiles/core.php'); require('../incfiles/head.php'); if ($rights < 9) { echo functions::display_error('Bu sahifa faqat supervayzorlar uchun!'); require('../incfiles/end.php); exit; } else { echo '<div class="gmenu">Hush kelibsiz adminboy!</div>'; } ?>
Ushbu faylni saqlab, uni brauzerda ochib ko'ramiz va natijadan zavq olamiz 1-dars tamom.
Sekin asta davomini qo'shib boraman. Hammaga omad.
+ (1): CHEfan,
Johncms 2-darslik
JohnCMS #2darslik (+/-)
Salom hurmatli foydalanuvchilar JohnCMSni o'rganishda davom etamiz. Bugun sizlar bilan yana bir asosiy boshlang'ich ma'lumotlarni o'rganamiz. Bu: MySQL so'rovlari! SQL => Structured Query Language (Tartiblangan So'rovlar Tili)ning biz uchun ahamiyati juda katta. Har bir xabar qoldirish, ma'lumotni taxrirlash, yoki mana shu kutubxona ma'lumotlarini har biri MySQL orqali amalga oshirilgan. SQL so'rov mysql_query() buyrug'i orqali amalga oshiriladi. Bu buyruq php tiliga tegishli. ( ) belgilari orasiga esa SQL tilida so'rov yoziladi va qavsdan " bilan ajratiladi: mysql_query("SELECT COUNT(*) FROM `users`"); ushbu sql so'rov `users` jadvalidagi qatorlar sonini sanaydi. Shu usul orqali saytda qancha foydalanuvchi bor ekanini bilib olish mumkin. Natijasi haqida batafsil keyinroq. SQL tilida siz uchun hozir bilishingiz kerak bo'lgan buyruqlar quyidagilar: SELECT => tanlash UPDATE => mavjud ma'lumotni yangilash INSERT => Yangi qatorga yangi malumot kiritish DELETE => Tanlangan qator(lar)ni o'chirish SQL so'rovda jadval va ustun nomlari ` ` belgilari orasida bo'ladi, ma'lumot (valuega mos o'zbekcha so'z topolmadim) esa ' ' belgilari orasiga yoziladi. Keling, oddiy sql buyruq yozib ko'ramiz: ID:1dagi userning kirish huquqlarini (`rights`) oddiy user (nol)ga to'g'rilaymiz: mysql_query("UPDATE `users` SET `rights` = '0' WHERE `id` = '1'"); Diqqat qilsangiz, rostdan ham bu tartibga solingan so'rov ekanini anglaysiz. Yuqoridagi so'rovni taxlil qilamiz: `users` jadvali yangilansin: `id` 1ga teng bo'lgan qatorning `rights` ustuni 0ga o'zgartirilsin (SET) Demak, sql buyruqdan keyin birinchi navbatda jadval nomi yozilishi kerak. Yuqoridagi buyruqdan foydalangan holda shu kabi yangilash (UPDATE) buyruqlarini o'zingiz yoza olasiz deb o'ylayman)) Endi keyingi so'rov bilan tanishamiz: o'chirish (DELETE) Kelinglar, forumdan id:28-postni o'chirib tashlaymiz: mysql_query("DELETE FROM `forum` WHERE `id` = '28'"); Taxlil qilamiz: `forum` jadvalidan o'chirilsin: `id` ustuni 28ga teng bo'lgan qator. Menimcha bu ham oz-moz tushunarli bo'ldi. Endi yana bir sql buyruq: yangi qator kiritish (INSERT). Kelinglar, id:7 foydalanuvchiga system xabari yuboramiz. Oldiniga qiynalmaslik uchun xabar matnini o'zgaruvchiga biriktirib olamiz: $xabar = 'Xurmatli foydalanuvchi, saytimizdan foydalanayotganingiz uchun minnatdormiz!'; Endi esa sql buyruq: mysql_query("INSERT INTO `cms_mail` SET `user_id` = '0', `from_id` = '7', `text` = '".$xabar."', `time` = '".time()."', `sys` = '1'"); Taxlil: `cms_mail` jadvaliga yangi qator kiritilsin(INSERT) : `user_id` nol deb, `from_id` 7 deb, `matn` $xabar o'zgaruvchisi deb, `time` hozirgi vaqt deb (time() haqida sal keyin), `sys` 1 deb belgilansin. Menimcha bu ham oz-moz tushunarli bo'ldi. Keling endi time() haqida to'xtalib o'tamiz: serverlarda vaqtni aniq belgilash uchun Unix Time Stamp ishlatiladi. Bu 1970-yil, 1-yanvar soat 00:00 (GMT London vaqti bilan)dan beri shu vaqtgacha o'tgan soniyalar yig'indisiga teng. Misol uchun bir sutkada 86400 soniya borligini bilsak, 1970-yildan beri ehh-hee. . . Bu bilan ishlashni osonlashtirish uchun esa time() tegi qo'llaniladi. Bu avtomatik tarzda unix time stampdagi hozirgi vaqtni (yani soniyalar yig'indisini) kiritadi. Shunday qilib, siz endi MySQL haqida yuzaki ma'lumotga egasiz. Kelinglar endi ozgina ichkariroq kiramiz)) mysql_query("SELECT COUNT(*) FROM `users`"); ushu so'rov endi nimani anglatishini bilasiz, bu `users` jadvalidagi qatorlar sonini sanaydi. Faqat. . . Bu sanaydi holos! Sizga hech qanday ma'lumot taqdim etmaydi! Endi biz bu ma'lumotni brauzerga chiqaramiz: $natija = mysql_result(mysql_query("SELECT COUNT(*) FROM `users`")); echo $natija; Bu holatda server brauzerga qatorlar sonini sanab, javobini (mysql_result) brauzerga yuboradi. Endi keyingi qo'shimcha buyruqqa o'tamiz: mysql_fetch_assoc() Bu buyruq tanlangan qatordagi har bir ustun ma'lumotlarini esda saqlab turadi, foydalanish uchun. Misol uchun, ID:1ning shahsiy malumotlarini olaylik: $sql = mysql_query("SELECT * FROM `users` WHERE `id` = '1'"); Agar qatordagi ustunlardan faqat bittasi emas, hammasi kerak bo'lsa, *ni tanlash orqali erishamiz. $admin = mysql_fetch_assoc($sql); Ko'rib turganingizdek, bu safar sql buyruqni uchuga sql buyruq yozmasdan, boshqacha usulda, o'zgaruvchi ($sql) orqali amalga oshirdim. Lekin hozir qaysi usulni qo'llashni farqi yo'q. Demak, hozirda $admin o'zgaruvchisi `users` jadvalidagi `id` ustuni 1ga teng bo'lgan qatorga teng. Bu qatordan turli ustun malumotlarini olish uchun esa biz o'zgaruvchidan $admin[] ko'rinishida foydalanamiz. Ya'ni: echo 'Ismi: '.$admin['imname']; Yoki: echo 'O\'zi haqida: '.$admin['about']; Menimcha tushunarli bo'ldi. Endi punktuatsiyaga ham to'xtalib o'tsam, phpning o'z imlo qoidalari mavjud bo'lib, bu qoidalarga amal qilinmagan taqdirda server buyruqlarga javob berishdan bosh tortib, brauzerga oppoq sahifani jo'natib yuboradi. Shu sababli ham imlo qoidalariga doim amal qiling: Birinchi navbatda apostrof (') belgisidan ehtiyot bo'ling, agar bu belgi kerakli joyda yozilmay qolsa yoki keraksiz joyda foydalanilsa, bu xatolik degani. O' harfini ifodalashda O\' usulidan foydalaning, chunki apostrof belgisi "value"ning boshlanish va tugash nuqtalarini belgilab beradi. Masalan: echo 'Salom dunyo!'; bu holatda brauzerga yuklanadigan so'zning boslanish va tugash nuqtalari apostrof bilan belgilangan. Lekin agarda: echo 'Dunyo go'zal!'; deb yozsangiz, server boshlanish nuqtasini aniqlab, lekin tugash nuqtasi qaysi biri ekanini anglay olmay qoladi va bu ham xatolik keltirib chiqaradi. Apostrofga olingan "value"ning ichiga php buyruq, o'zgaruvchi va hokazo yozilgan taqdirda uni ikki tomonidan apostrof va nuqta bilan ajratishni unutmang: echo 'Salom, '.$admin['name'].' aka!'; Menimcha bugunga shu ma'lumotlar yetarli. Shu bilan 2-dars ham tamom bo'ldi. Darsga fikr bildirish va baholab borishni unutmang!
+ (1): CHEfan,
mysql_query("SELECT COUNT(*) FROM
`users`"); ushbu sql so'rov `users`
jadvalidagi qatorlar sonini sanaydi.
.
mysql_result(sql buyruq), 0);
bölmasmidi?
`users`"); ushbu sql so'rov `users`
jadvalidagi qatorlar sonini sanaydi.
.
mysql_result(sql buyruq), 0);
bölmasmidi?
+ (1): End,
ATOYAT, # ATOYAT (14.11.2018 / 16:59)
mysql_query("SELECT COUNT(*) FROM
`users`"); ushbu sql so'rov `users`
jadvalidagi qatorlar sonini sanaydi.
.
mysql_result(sql buyruq), 0);
bölmasmidi?
Qatorlar sonini sanaydi
Ma`lumotlarni browzerga yuboradi yani ma`lumotlarni chiqarish uchun!
mysql_query("SELECT COUNT(*) FROM
`users`"); ushbu sql so'rov `users`
jadvalidagi qatorlar sonini sanaydi.
.
mysql_result(sql buyruq), 0);
bölmasmidi?
Qatorlar sonini sanaydi
Ma`lumotlarni browzerga yuboradi yani ma`lumotlarni chiqarish uchun!
+ (1): Tayota,
JohnCMS 3-dars
Bir nimani eslatib o'tsam, bu darslik alish akamiziki
Bir nimani eslatib o'tsam, bu darslik alish akamiziki
JohnCMS #3 dars (+/-)
Salom aziz do'stlar! JohnCMS bo'yicha tajribalarni davom ettiramiz. Bugun userlarning ma'lumotlari bilan ishlashni, aniqrog'i userni "aks ettirish"ni o'rganamiz. Bu ham yadroning funksiyalaridan biri, va bu funksiya ishimizni yahshigina yengillashtirib beradi.
functions::get_user($id)
ushbu funksiyani ishlash prinspi oddiy, belgilangan ID raqamdagi user ma'lumotlari joylashgan qatorni (mysql bazasidagi qatorni) belgilab beradi.
Masalan:
$admin = functions::get_user('1');
echo $admin['name'];
ko'rib turganingizdek bu mysql so'rov yozib vaqt ketkazishga zarurat qoldirmaydi. Bu yo'l bilan `users` jadvalidagi har bir ustun ma'lumotini aks ettirish mumkin. Menimcha bu funksiya shundoq ham tushunarli, endi asosiy funksiya haqida gaplashsak:
functions::display_user($user = 0, $arg = array())
Bu funksiya userning avatari, niki, statusi, IP-adresi va user-agent ma'lumotlarni aks ettirish va bu ma'lumotlarga qo'shimcha ma'lumotlar (masalan: xabarlar)ni biriktirishda ishlatiladi va eng men uchun ham eng kerakli funksiyalardan biri hisoblanadi.
Agar biz admin haqidagi malumotlarni (avatar, nik, status, ON-Off, IP, user-agent) aks ettirmoqchi bo'lsa, quyidagicha yo'l tutamiz:
$admin = functions::get_user('1');
echo functions::display_user($admin);
Ko'rib turganingizdek, bu funksiyaga userning ID raqami kamlik qiladi, unga shu ID joylashgan qatorni to'laligicha biriktirish zarur. Yuqoridagi ikkita funksiya sharofati bilan ortiqcha kodlar "boshog'riq"idan qutulyapmiz.
E'tibor bersangiz, yuqorida array() keltirilgandi, lekin biz uni ishlatmadik. Endi shu arrayni ishlatishni ham o'rganamiz. Avvalo array() nima ekani haqida to'xtalsak: bu bir qancha malumotlarni bitta o'zgaruvchiga biriktirish yo'lidir. Biz bu arrayga quyidagi ma'lumotlarni biriktira olamiz:
'header',
'body',
'sub'
'header'ga kiritilgan ma'lumot userning niki yonida aks ettiriladi. Bunga asosan yozilgan xabarning vaqtini, javob berish tugmalarini kiritsak to'g'ri bo'ladi
'body'ga esa, tana qismi - nik/statuslar va user-agent ma'lumotlari oralig'iga kiritiladigan ma'lumot biriktiriladi. Bunga qoldirilgan xabar matnini kiritish to'g'ri bo'ladi, yoki, masalan statusini (nik ostidagi status emas, klass bosiladigan status) kiritish ham mumkin.
'sub' bunda ostki ma'lumot joylanadi. Sub classda userning user agenti va IP ma'lumotlari kiritiladi. Arrayning sub ma'lumotida esa shu malumot yuqorisida turadi. Bunga misol tariqasida O'chirish | Tahrirlash tugmalarini kiritish mumkin. Demak, tushunchaga ega bo'ldingiz deb o'ylayman, endi buni qo'llashni mashq qilib ko'ramiz.
$user = functions::get_user('7');
$head = '';
$matn = $user['about'];
$sub = '';
$arg = array(
'header' => $head,
'body' => $matn,
'sub' => $sub
);
echo functions::display_user($user, $arg);
Taxlil qilamiz, ma'lumotda [ON] yoki [Off] belgisi yonida ma'lumot chiqishi kerak emas deb hisoblab, headerni bo'sh qoldirdik, yoki NULLga teng o'zgaruvchi biriktirdik. Body qismiga esa userning "O'zi haqida" yoziladigan malumotlarini chiqardik va sub class ham NULL bo'ldi. Bu kod nimani aks ettirishini esa, tajribada sinab bilib olasiz. Endi bu funksiyaga qo'shimcha buyruqlar yuklashni o'rganamiz
$arg = array(
'header' => $head,
'body' => $matn,
'sub' => $sub,
'stshide' => 1
);
'stshide' buyrug'i userning statusini (nik ostidahi status) yashiradi.
$arg = array(
'header' => $head,
'body' => $matn,
'sub' => $sub,
'iphide' => 1
);
'iphide' esa user-agent va IP ma'lumotlarni yashiradi.
core::$user_set['avatar'] = 0;
echo functions::display_user($user, $arg);
yuqoridagi core::$user_set['avatar'] = 0 buyrug'i bilan biz ma'lumotlarda avatar aks etmasligi kerakligini uqtirdik. Ko'rib turganingizdek, bu buyruq array()ga kiritilmaydi.
Shuning bilan bugungi darsni ham tamomlaymiz. O'zingiz mustaqil ravishda yuqoridagi funksiyalarni turli tarzda tajriba qilishdan to'xtamang. Darsni baholash ham esdan chiqmasin e'tiboringiz uchun rahmat
functions::get_user($id)
ushbu funksiyani ishlash prinspi oddiy, belgilangan ID raqamdagi user ma'lumotlari joylashgan qatorni (mysql bazasidagi qatorni) belgilab beradi.
Masalan:
$admin = functions::get_user('1');
echo $admin['name'];
ko'rib turganingizdek bu mysql so'rov yozib vaqt ketkazishga zarurat qoldirmaydi. Bu yo'l bilan `users` jadvalidagi har bir ustun ma'lumotini aks ettirish mumkin. Menimcha bu funksiya shundoq ham tushunarli, endi asosiy funksiya haqida gaplashsak:
functions::display_user($user = 0, $arg = array())
Bu funksiya userning avatari, niki, statusi, IP-adresi va user-agent ma'lumotlarni aks ettirish va bu ma'lumotlarga qo'shimcha ma'lumotlar (masalan: xabarlar)ni biriktirishda ishlatiladi va eng men uchun ham eng kerakli funksiyalardan biri hisoblanadi.
Agar biz admin haqidagi malumotlarni (avatar, nik, status, ON-Off, IP, user-agent) aks ettirmoqchi bo'lsa, quyidagicha yo'l tutamiz:
$admin = functions::get_user('1');
echo functions::display_user($admin);
Ko'rib turganingizdek, bu funksiyaga userning ID raqami kamlik qiladi, unga shu ID joylashgan qatorni to'laligicha biriktirish zarur. Yuqoridagi ikkita funksiya sharofati bilan ortiqcha kodlar "boshog'riq"idan qutulyapmiz.
E'tibor bersangiz, yuqorida array() keltirilgandi, lekin biz uni ishlatmadik. Endi shu arrayni ishlatishni ham o'rganamiz. Avvalo array() nima ekani haqida to'xtalsak: bu bir qancha malumotlarni bitta o'zgaruvchiga biriktirish yo'lidir. Biz bu arrayga quyidagi ma'lumotlarni biriktira olamiz:
'header',
'body',
'sub'
'header'ga kiritilgan ma'lumot userning niki yonida aks ettiriladi. Bunga asosan yozilgan xabarning vaqtini, javob berish tugmalarini kiritsak to'g'ri bo'ladi
'body'ga esa, tana qismi - nik/statuslar va user-agent ma'lumotlari oralig'iga kiritiladigan ma'lumot biriktiriladi. Bunga qoldirilgan xabar matnini kiritish to'g'ri bo'ladi, yoki, masalan statusini (nik ostidagi status emas, klass bosiladigan status) kiritish ham mumkin.
'sub' bunda ostki ma'lumot joylanadi. Sub classda userning user agenti va IP ma'lumotlari kiritiladi. Arrayning sub ma'lumotida esa shu malumot yuqorisida turadi. Bunga misol tariqasida O'chirish | Tahrirlash tugmalarini kiritish mumkin. Demak, tushunchaga ega bo'ldingiz deb o'ylayman, endi buni qo'llashni mashq qilib ko'ramiz.
$user = functions::get_user('7');
$head = '';
$matn = $user['about'];
$sub = '';
$arg = array(
'header' => $head,
'body' => $matn,
'sub' => $sub
);
echo functions::display_user($user, $arg);
Taxlil qilamiz, ma'lumotda [ON] yoki [Off] belgisi yonida ma'lumot chiqishi kerak emas deb hisoblab, headerni bo'sh qoldirdik, yoki NULLga teng o'zgaruvchi biriktirdik. Body qismiga esa userning "O'zi haqida" yoziladigan malumotlarini chiqardik va sub class ham NULL bo'ldi. Bu kod nimani aks ettirishini esa, tajribada sinab bilib olasiz. Endi bu funksiyaga qo'shimcha buyruqlar yuklashni o'rganamiz
$arg = array(
'header' => $head,
'body' => $matn,
'sub' => $sub,
'stshide' => 1
);
'stshide' buyrug'i userning statusini (nik ostidahi status) yashiradi.
$arg = array(
'header' => $head,
'body' => $matn,
'sub' => $sub,
'iphide' => 1
);
'iphide' esa user-agent va IP ma'lumotlarni yashiradi.
core::$user_set['avatar'] = 0;
echo functions::display_user($user, $arg);
yuqoridagi core::$user_set['avatar'] = 0 buyrug'i bilan biz ma'lumotlarda avatar aks etmasligi kerakligini uqtirdik. Ko'rib turganingizdek, bu buyruq array()ga kiritilmaydi.
Shuning bilan bugungi darsni ham tamomlaymiz. O'zingiz mustaqil ravishda yuqoridagi funksiyalarni turli tarzda tajriba qilishdan to'xtamang. Darsni baholash ham esdan chiqmasin e'tiboringiz uchun rahmat
+ (1): CHEfan,
ATOYAT, # ATOYAT (08.05.2018 / 15:12)
Tayyor narsani copy qilib yozish bilan dars tugadiSizni qo'lingizdan shu tayyor narsani copy qib tashash ham kelmadi ku. :-/
Tayyor narsani copy qilib yozish bilan dars tugadiSizni qo'lingizdan shu tayyor narsani copy qib tashash ham kelmadi ku. :-/
- (1): End,
CHEfan, # CHEfan (16.11.2018 / 22:10)
ATOYAT, Sizni qo'lingizdan shu tayyor narsani copy qib tashash ham kelmadi ku. :-/Copy qilish hammani qölidan keladi (mayna qilish shart emas). Aynan manashu maqolani men ham bir vaqtlar qidirgan edim. Mavzuni ochgan odamga xech qanday adovatim yöq! Ammo mavzu töxtab qolgani uchun yozgan edim.))
ATOYAT, Sizni qo'lingizdan shu tayyor narsani copy qib tashash ham kelmadi ku. :-/Copy qilish hammani qölidan keladi (mayna qilish shart emas). Aynan manashu maqolani men ham bir vaqtlar qidirgan edim. Mavzuni ochgan odamga xech qanday adovatim yöq! Ammo mavzu töxtab qolgani uchun yozgan edim.))
+ (1): CHEfan,
JohnCMS 4-Darslik, muallif ashi alish akamiz))
JohnCMS #4darslik (+/-)
Yana bir bor barchaga salom! Mavzuni o'qib hayron bo'lgandirsiz? Bugun php faylni qismlarga bo'lib, har bir qism uchun alohida ish biriktirishni o'rganamiz. Tushuntira oldimmi? Balki ayrom fayllarda index.php?act=*** kabi yozuvlarni ko'rgandirsiz? Bugun biz ham shu ?actni hosil qilishni o'rganamiz. Boshlang'ich ko'nikma uchun menimcha buni ham o'rganish zarur. Demak boshladik.
Avvalo bu ?actlarga bo'lish nega kerak? Bu birgina php faylni o'zida ko'plab amallarni bajarishga, ko'plab bo'limlarga bo'lishga yordam beradi. Qolganini esa keyin bilib olasizlar))
kelinglar, php fayl yaratamiz: tajriba.php
<?php
define('_IN_JOHNCMS', 1);
require('../incfiles/core.php');
require('../incfiles/head.php');
Demak, sahifaga yadro va "shapka"ni yuklab oldik. Bo'limlarga bo'lishda biz switch kodidan foydalanamiz. Bundan keyin esa, qavs ichida switchni nomlaymiz, masalan act yoki o'zizngiz istagan, masalan ali shunda bo'limlar ham tajriba.php?ali=*** bo'lib chiqadi:
switch ($act) {
}
demak, barcha bo'limlar va ularning amallari shu { } belgilari orasiga yoziladi, bulardan tashqarida yozilganlari esa barcha bo'limlarga umumiy ta'sir qiladi. Bo'limlarni chegaralash esa quyidagicha:
case 'bolimnomi':
break;
shu bo'limga yozilishi kerak bo'lgan kodlar, amallar shu oraliqqa yoziladi. Bundan tashqari yana biri ham bor:
default:
break;
default bu tajriba.php qilib kirilganda ochiladigan amallar yoki kodlardir, defaultni ochish uchun ?act=defaultni yozish shart emas. Chunki bu bo'lim sahifa uchun default hisoblanadi. Kelinglar, sinab ko'ramiz:
switch ($act) {
default:
echo '<div class="menu">Salom! Kerakli bo\'limga o\'ting!<br /><a href="tajriba.php?act=bolim1">1-bo\'lim</a><br /><a href="tajriba.php?act=bolim2">2-bo\'lim</a><br /><a href="tajriba.php?act=bolim3">3-bo\'lim</a></div>';
break;
case 'bolim1':
echo '<div class="menu">Salom, buyer 1-bo\'lim!</div>';
break;
case 'bolim2':
echo '<div class="menu">Salom, buyer 2-bo\'lim!</div>';
break;
case 'bolim3':
echo '<div class="menu">Salom, buyer 3-bo\'lim!</div>';
break;
}
Demak, tushunchaga ega bo'lib oldingiz deb o'ylayman. Endi umumiy ta'sir qiladigan kodlar yozib ko'ramiz, yani switchdan oldin yoziladigan kodlar. Masalan aytaylik, bu sahifaga mehmonlarni, ya'ni sayt foydalanuvchisi bo'lmaganlarni kiritishga ta'qiq qo'yamiz. Switchning har bir bo'limi uchun alohida ta'qiq qo'yish albatta noqulaylik qiladi(lekin agar ayrim bo'limlarga mehmonlar uchun ruhsat bermoqchi bo'lsez har bir bo'lim uchun alohida yozasiz). Demak, switchni tepasiga yozamiz:
if (!$user_id) {
echo functions::display_error($lng['access_guest_forbidden']);
require('../incfiles/end.php');
exit();
}
Shu bilan sahifani mehmonlar ochganida xatolik e'lon qilinib, sahifa yopiladi. Shartlarni o'zgartirishni esa 1-darsdan bilsangiz kerak deb o'ylayman. Kelinglar endi bo'limlarni alohida faylga o'rnatishni o'rganamiz. Bunda biz quyidagicha yo'l tutamiz:
$array = array(
'bolim1',
'bolim2',
'bolim3'
);
if ($act && ($key = array_search($act, $array)) !== false && file_exists('includes/' . $array[$key] . '.php')) {
require('includes/' . $array[$key] . '.php');
}
Bu holatda agar ?act=bolim1 qilib kirilsa u holda server brauzerga includes/ papkasi ichidagi bolim1.php faylini uzatadi. Bunda biz bolim1.php fayliga yadro, shapka kodlarini yozishimiz shart bo'lmaydi, barcha umumiy ta'sir doirasidagi kodlar tajriba.php fayliga yozilishi yetarli. Buni qulay tomoni: switchni ichiga kirovchi fayllarni yana switchlarga bo'lish mumkin. Masalan includes/bolim1.php fayliga:
switch ($mod) {
default:
echo '<div class="menu">Salom! Kerakli kategoriyaga o\'ting!<br /><a href="tajriba.php?act=bolim1&mod=cat1">1-kategoriya</a><br /><a href="tajriba.php?act=bolim1&mod=cat2">2-kategoriya</a><br /><a href="tajriba.php?act=bolim1&mod=cat3">3-kategoriya</a></div>';
break;
case 'cat1':
echo '<div class="menu">Salom, buyer 1-kategoriya!</div>';
break;
case 'cat2':
echo '<div class="menu">Salom, buyer 2-kategoriya!</div>';
break;
case 'cat3':
echo '<div class="menu">Salom, buyer 3-kategoriya!</div>';
break;
}
bu holatda ?act=bolim1ning switchlariga ?mod emas, &mod= orqali boramiz. & yozilgani esa bu & belgisining shartli kodi. Url adres yozilayotganida albatta shartli kod orqali kiritilishi zarur (!).
Shu bilan bugungi darsni ham tamomlaymiz. O'rganganlaringiz asosida tajribalar o'tkazishda davom eting!
P/s: iltimos, ushbu qo'llanmani o'z saytingizga ko'chirishda manba sifatida saytimizga link keltirishni unutmang!!!
Avvalo bu ?actlarga bo'lish nega kerak? Bu birgina php faylni o'zida ko'plab amallarni bajarishga, ko'plab bo'limlarga bo'lishga yordam beradi. Qolganini esa keyin bilib olasizlar))
kelinglar, php fayl yaratamiz: tajriba.php
<?php
define('_IN_JOHNCMS', 1);
require('../incfiles/core.php');
require('../incfiles/head.php');
Demak, sahifaga yadro va "shapka"ni yuklab oldik. Bo'limlarga bo'lishda biz switch kodidan foydalanamiz. Bundan keyin esa, qavs ichida switchni nomlaymiz, masalan act yoki o'zizngiz istagan, masalan ali shunda bo'limlar ham tajriba.php?ali=*** bo'lib chiqadi:
switch ($act) {
}
demak, barcha bo'limlar va ularning amallari shu { } belgilari orasiga yoziladi, bulardan tashqarida yozilganlari esa barcha bo'limlarga umumiy ta'sir qiladi. Bo'limlarni chegaralash esa quyidagicha:
case 'bolimnomi':
break;
shu bo'limga yozilishi kerak bo'lgan kodlar, amallar shu oraliqqa yoziladi. Bundan tashqari yana biri ham bor:
default:
break;
default bu tajriba.php qilib kirilganda ochiladigan amallar yoki kodlardir, defaultni ochish uchun ?act=defaultni yozish shart emas. Chunki bu bo'lim sahifa uchun default hisoblanadi. Kelinglar, sinab ko'ramiz:
switch ($act) {
default:
echo '<div class="menu">Salom! Kerakli bo\'limga o\'ting!<br /><a href="tajriba.php?act=bolim1">1-bo\'lim</a><br /><a href="tajriba.php?act=bolim2">2-bo\'lim</a><br /><a href="tajriba.php?act=bolim3">3-bo\'lim</a></div>';
break;
case 'bolim1':
echo '<div class="menu">Salom, buyer 1-bo\'lim!</div>';
break;
case 'bolim2':
echo '<div class="menu">Salom, buyer 2-bo\'lim!</div>';
break;
case 'bolim3':
echo '<div class="menu">Salom, buyer 3-bo\'lim!</div>';
break;
}
Demak, tushunchaga ega bo'lib oldingiz deb o'ylayman. Endi umumiy ta'sir qiladigan kodlar yozib ko'ramiz, yani switchdan oldin yoziladigan kodlar. Masalan aytaylik, bu sahifaga mehmonlarni, ya'ni sayt foydalanuvchisi bo'lmaganlarni kiritishga ta'qiq qo'yamiz. Switchning har bir bo'limi uchun alohida ta'qiq qo'yish albatta noqulaylik qiladi(lekin agar ayrim bo'limlarga mehmonlar uchun ruhsat bermoqchi bo'lsez har bir bo'lim uchun alohida yozasiz). Demak, switchni tepasiga yozamiz:
if (!$user_id) {
echo functions::display_error($lng['access_guest_forbidden']);
require('../incfiles/end.php');
exit();
}
Shu bilan sahifani mehmonlar ochganida xatolik e'lon qilinib, sahifa yopiladi. Shartlarni o'zgartirishni esa 1-darsdan bilsangiz kerak deb o'ylayman. Kelinglar endi bo'limlarni alohida faylga o'rnatishni o'rganamiz. Bunda biz quyidagicha yo'l tutamiz:
$array = array(
'bolim1',
'bolim2',
'bolim3'
);
if ($act && ($key = array_search($act, $array)) !== false && file_exists('includes/' . $array[$key] . '.php')) {
require('includes/' . $array[$key] . '.php');
}
Bu holatda agar ?act=bolim1 qilib kirilsa u holda server brauzerga includes/ papkasi ichidagi bolim1.php faylini uzatadi. Bunda biz bolim1.php fayliga yadro, shapka kodlarini yozishimiz shart bo'lmaydi, barcha umumiy ta'sir doirasidagi kodlar tajriba.php fayliga yozilishi yetarli. Buni qulay tomoni: switchni ichiga kirovchi fayllarni yana switchlarga bo'lish mumkin. Masalan includes/bolim1.php fayliga:
switch ($mod) {
default:
echo '<div class="menu">Salom! Kerakli kategoriyaga o\'ting!<br /><a href="tajriba.php?act=bolim1&mod=cat1">1-kategoriya</a><br /><a href="tajriba.php?act=bolim1&mod=cat2">2-kategoriya</a><br /><a href="tajriba.php?act=bolim1&mod=cat3">3-kategoriya</a></div>';
break;
case 'cat1':
echo '<div class="menu">Salom, buyer 1-kategoriya!</div>';
break;
case 'cat2':
echo '<div class="menu">Salom, buyer 2-kategoriya!</div>';
break;
case 'cat3':
echo '<div class="menu">Salom, buyer 3-kategoriya!</div>';
break;
}
bu holatda ?act=bolim1ning switchlariga ?mod emas, &mod= orqali boramiz. & yozilgani esa bu & belgisining shartli kodi. Url adres yozilayotganida albatta shartli kod orqali kiritilishi zarur (!).
Shu bilan bugungi darsni ham tamomlaymiz. O'rganganlaringiz asosida tajribalar o'tkazishda davom eting!
P/s: iltimos, ushbu qo'llanmani o'z saytingizga ko'chirishda manba sifatida saytimizga link keltirishni unutmang!!!
Php haqida boshlang'ich (junior) darajasidagilar johnda nima qilishni osongina tushunishadi. Sababi johnning o'zida 95% qilsa bo'lagan funksiyalar tayor.
+ (1): We-Pro,
Ha aytgancha g'ildirakni qaytatadan ixtiro qilishni hohlamaganlar uchun ayni mudao
+ (1): AkmyradoffSoft,
Besthakker, # Besthakker (04.03.2020 / 00:40)
Hechkim dars otmayapdimi domilla yuqmu yoMalaka oshirgani ketgan ustoz
Hechkim dars otmayapdimi domilla yuqmu yoMalaka oshirgani ketgan ustoz
+ (1): Fokuschi,
Yangi darslarni kutayapmiz, bilganlarimizni baham ko'raylik axir. Saytda adashmasam 80-90 foiz foydalanuvchi johncms ishlatadiku yo boshqa cms ga o'tib ketdilarmi
Xolmat, # Xolmat (17.04.2020 / 21:59)
Yangi darslarni kutayapmiz, bilganlarimizni baham ko'raylik axir. Saytda adashmasam 80-90 foiz foydalanuvchi johncms ishlatadiku yo boshqa cms ga o'tib ketdilarmiBiladigan va ishlatadiganlar boshqa bilmaydigan narsalini o'rganish bilan bant.
Yangi darslarni kutayapmiz, bilganlarimizni baham ko'raylik axir. Saytda adashmasam 80-90 foiz foydalanuvchi johncms ishlatadiku yo boshqa cms ga o'tib ketdilarmiBiladigan va ishlatadiganlar boshqa bilmaydigan narsalini o'rganish bilan bant.
+ (2): DjHuSo, Besthakker,
Qayerga yozishni bilmadim
natija: yoshi 17
function calc_age($d, $m, $y) { $age--; return $age; } $user_age = calc_age($user['dayb'], $user['monthb'], $user['yearofbirth']); echo "<b>".$user_age." yosh</b><br/>"; }
natija: yoshi 17
+ (1): Akbarali,
Tavsiya etamiz:
- Hoziroq maydonlarni to'ldiring va reklamangizni joylashtiring!
Mavzuga oid xabarlar soni: 19 ta
So'ngi faollik vaqti: 14:04:13, 30 Jul 2020