Mavzu: Johncmsni o‘rganamiz! (INTERNET VA DASTURLASH/Skriptlar muhokamasi) MasterLeo (9 Sep 2017 23:32) [i]Salom do‘stlar. Mana bugun xamma o‘rganaman deb ammo o‘rganaolmayapkan mukammal sodda cms "Johncms" ni o‘rganamiz.

P-S: Bu matnni men yozmaganman. Ammo juda foydali narsalar yozilgan. Men xam asosiy bilimlarni shundan olganman.
[/i]
Mualliflik xuquqi buzulmagan!
[b]Harry Ali[/b] ga rahmat.
[Arxivdan]

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:
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;
}

SUHROB (9 Sep 2017 23:35) --Javob-- MasterLeo (9 Sep 2017 23:32): [i]Salom do‘stlar. Mana bugun xamma o‘rganaman deb ammo o‘rganaolmayapkan mukammal sodda cms "Johncms" ni o‘rganamiz.

P-S: Bu matnni men yozmaganman. Ammo juda foydali narsalar yozilgan. Men xam asosiy bilimlarni shundan olganman.
[/i]
Mualliflik xuquqi buzulmagan!
[b]Harry Ali[/b] ga rahmat.
[Arxivdan]

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:
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;
}

---------- MasterLeo, mualif hary alini qayerdan topsam bo'ladi. MasterLeo (9 Sep 2017 23:36) --Javob-- SUHROB (9 Sep 2017 23:35): MasterLeo, mualif hary alini qayerdan topsam bo'ladi. ---------- SUHROB, bilmadim MasterLeo (9 Sep 2017 23:36) [b]Davomi
endi taxlil qilamiz: Agar kirish huquqlari 9dan past bo'lsa, "Bu sahihifa 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 '

Hush kelibsiz adminboy!
';
}

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:
define('_IN_JOHNCMS', 1);
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 '
Hush kelibsiz adminboy!
';
}
require('../incfiles/end.php');
?>


Ushbu faylni saqlab, uni brauzerda ochib ko'ramiz va natijadan zavq olamiz [/b] MasterLeo (17 Sep 2017 15:14) [b]negadir xamma jim [/b] Ashurov (17 Sep 2017 15:24) --Javob-- MasterLeo (17 Sep 2017 15:14): [b]negadir xamma jim [/b] ---------- MasterLeo, Davom eting o'qiyapmiz juda ham aniq yozilyapti :) MasterLeo (17 Sep 2017 15:26) [b]Endi 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'];

[/b] MasterLeo (17 Sep 2017 15:28) [i]Davomi[/i]
[b]...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!';[/b]
KomiLov (17 Sep 2017 15:58) --Javob-- SUHROB (9 Sep 2017 23:35): MasterLeo, mualif hary alini qayerdan topsam bo'ladi. ---------- SUHROB, ok ru da bor shekili modlagan scriptlarida ok ruga link qoygan edi MasterLeo (17 Sep 2017 16:03) Yomon cho‘rtkesar bola edi raxmatli :lol: :-) MasterLeo (17 Sep 2017 16:04) [b][i]Agar mavzu foydali bo‘lsa ''Foydali mavzu" bosib qo‘ying[/b][/i] Ashurov (17 Sep 2017 16:06) --Javob-- MasterLeo (17 Sep 2017 16:04): [b][i]Agar mavzu foydali bo‘lsa ''Foydali mavzu" bosib qo‘ying[/b][/i] ---------- MasterLeo, + uje bosildi :zor: REYXAN (17 Sep 2017 17:48) Yana yozibdimi maqola ubu narsa tuzmaptimi ko'rib o'rganardik ? Z_e_V_e_R (17 Sep 2017 17:58) Klass MasterLeo (17 Sep 2017 19:53) --Javob-- REYXAN (17 Sep 2017 17:48): Yana yozibdimi maqola ubu narsa tuzmaptimi ko'rib o'rganardik ? ---------- REYXAN, bor albatta. Xammasini birdan yozsam charchab qolishadi. Berilgan darslarni amalda sinashga xam vaqt qoldiryapman. xisoblab. :-) MasterLeo (17 Sep 2017 19:58) [b]O'rgangan narsalaringiz bo'yicha tajribalar o'tkazib turishni unutmang! Demak, endigi darsimiz: yadro funksiyalari (functions).


JohnCMS yadrosi incfiles/core.php fayli bo'lib, bu fayl bir qancha "class" fayllarga ega. Bu fayllar esa incfiles/classes/ papkasi ichida joylashgan. Bugun biz shu "class"lardan biri bo'lgan "functions"ni o'rganamiz. Functions bizga ko'plab amallarni qisqartirishda yordam beradi. Bir boshidan boshlaylik.

functions::antiflood()

Bu funksiya user qoldirayotgan xabarlar flood yoki flood emasligini aniqlab beradi. Ya'ni avvalgi posti bilan hozirgi posti oralig'i juda kam emasligini aniqlab beradi. Agar flood qoldirayotgan bo'lsa funksiya javobi TRUE, aks holda FALSE bo'ladi. Ishlatish tartibi esa quyidagicha:

$flood = functions::antiflood();
if ($flood)
$error = $lng['error_flood'] . ' ' . $flood . ' ' . $lng['seconds'];


Ishlash tartibi: $flood o'zgaruvchisi anflood funksiyasiga teng. Agar o'zgaruvchi mavjud holatda (TRUE) qaytsa, u holda $error o'zgaruvchisiga xabar biriktiriladi. (u haqida keyingi darslarda).


Keyingi funksiya:
functions::antilink($var)

Antilink funksiyasi belgilangan matndagi link (ssilka)larni matndan olib tashlaydi/o'zgartirib qo'yadi. Qavs ichi bo'sh emas, $var o'zgaruvchisi borligiga sabab esa, bu funkiya antifloodga o'xshab so'rovga javob yubormaydi, ish bajaradi. $var => bu turli hil belgilardan iborat matn ekanini bilib olsangiz yetarli)) albatta, bu funksiyadan foydalanishda bu o'zgaruvchini yozmaymiz, batafsil tasnifini keyinchalik bilib olasiz. Antilink ishlash tartibi:
$gap = 'Sizlarni http://sayt.uz saytiga taklif qilaman!';
$natija = functions::antilink($gap);
echo $natija;

Bu funksiya brauzerga quyidagicha jumla yuklaydi:
Sizlarni ### saytiga taklif qilaman!

Demak, ishlash tartibi bilan tanishib oldingiz a? Keyingi funksiya:
functions::checking($str)

Buning ham ishlash tartibi antilinkga o'xshash, faqat uslubi boshqacha, bu belgilangan jumladagi UTF-8 kodirovkasiga tegishli bo'lmagan belgilarni olib tashlaydi. Masalan emojilar (messenjerlar smayllari) UTF-8ga begona, demak bu funksiya qo'llanganida bular matndan olib tashlanadi.


Navbatdagi funksiya:
functions::checkout($str, $br = 0, $tags = 0)

Bu funksiya matnni oydinlashtiradi. Ya'ni agar matnda belgilar E ; holda bo'lganida, bularni filtrlab, belgilarning asl holatini (masalan ' ) brauzerga uzatadi. Agar $br=1 qilinsa, r \ n\ tartibida qator tashlashlar yozilgan bo'lsa, shularni filtrlab, r \ n \ larni haqiqiy qator tashlashga o'zgartirib, brauzerga uzatadi. $tags=1 qilinganida esa, matnda bb kodlar ishlashi taminlanadi. Agar $br va $tags o'zgaruvchilari funksiyaga kiritilmasa, default holatda "0" deb olinadi. Ishlatib ko'ramiz:

$matn = 'Salom r \ n \ qaleysan?';
$natija = functions::checkout($matn, $br=1, $tags=0);
echo $natija;

Bu kod brauzerga quyidagicha yuklanadi:
Salom
Qaleysan?

Ko'rib turganingizdek, rn qator tashlashga o'zgartirildi. $tagsni ko'rsatmaganimiz sabab default nol deb hisoblanadi va matnda bb kodlardan foydalanganimizda ham ish bermaydi.

Navbatdagi funksiya:
functions::display_counters()

ushbu funksiya juda oddiy, ko'rsatilgan joyga bazada mavjud hisoblagichlarni (top-reyting hisoblagichlarni demoqchiman) chiqaradi. Ishlatish ham juda oddiy:

functions::display_counters();

[/b] MasterLeo (17 Sep 2017 20:04) [i][b]Davomi[/i][/b]
...[b]
Bu kod esa brauzerga belgilangan tartibdagi top-reyting hisoblagichlari va/yoki bannerlarn chiqaradi. Bular, o'z navbatida, admin paneli orqali qo'shiladi va boshqariladi.

Navbatdagi funksiya:
functions::display_date($var)

Agar shu funksiya bo'lmaganida huddi cho'loqqa o'xshab qolardim)) Bu funksiya vazifasi Unix time stamp formatidagi vaqtni (raqamlarni, bu haqida o'tgan darsda ma'lumot oldingiz) Sana ko'rinishiga, kecha, bugun qo'shimchalari bilan brauzerga uzatadi. Masalan:
$vaqt = time();
echo functions::display_date($vaqt);

Buning natijasi esa, brauzerga quyidagi javobni yuboradi:
Bugun, 17:25

Bu holatda yozilgan xabarlarning vaqti aniq holatda brauzerga uzatiladi. Agar $vaqt kechagi vaqt bo'yicha bo'lsa, u holda javob:
Kecha, 17:25 ko'rinishida bo'ladi. Agar kechadan oldingi bo'lsa, u holda sana to'liq holda yoziladi:
09.02.2015 / 17:25


Navbatdi funksiya:
functions::display_error($error = '', $link = '')


Ushbu funksiyadan xatoliklarni aks ettirishda foydalaniladi. Brauzerda ko'rinishi esa qizil fon ichida xatolik haqida yoziladi va agar link yozilgan bo'lsa, ostiga o'xsha link kiritiladi. Ishlatish:
$matn = 'XATOLIK! Siz so\'rayotgan sahifa mavjud emas!';
$manzil = 'Bosh sahifaga';
echo functions::display_error($error = $matn, $link = $manzil);
yoki:
echo functions::display_error($matn, $manzil);

Yoki qavs ichiga faqat xatolik haqidagi matnni kiritish ham mumkin:

echo functions::display_error('Bnday sahifa mavjud emas!');

Menimcha tushunarli bo'ldi. Qolganini mashqlar jarayonida anglab yetasiz. Biz esa keyingi funksiyaga o'tamiz:

functions::display_pagination($url, $start, $total, $kmess)


Bu funksiya sahifalashda foydalaniladi. Va user sozlamalarida belgilangandan ortiqcha detallar (masalan: postlar, smslar, boshqa ro'yxatlar) esa keyingi sahifaga o'tadi. Bu haqida batafsil keyinroq, vaqti kelganida gaplashamiz))

functions::rus_lat($str) va functions::trans($str)


Bu ikkalasini birga yozganimni sababi, vazifasi deyarli bir xil, faqat bir-biriga teskari amalni bajaradi.

Ushbu funksiyalar belgilangan matnni kirill alifbosidan lotin alifbosiga yoki lotin alifbosidan kirill alifbosiga o'giradi.
$matn = 'Калеслар?';
echo functions::rus_lat($matn);

bu holat brauzerga
Kaleslar?
degan jumlani uzatadi.

$matn = 'Kaleslar?';
echo functions::trans($matn);

Bu holatda esa brauzerga
Калеслар?
Jumlasi uzatiladi.


functions::timecount($var)


Ushbu funksiya vaqtni sanaydi. Ya'ni kiritilgan soniyalar necha kun, soat, daqiqa ekanini brauzerga uzatadi. Bundan misol uchun userning saytda o'tkazga vaqtlarini (`total_on_site`) hisoblashda foydalaniladi


functions::format($name)

Ushbu funksiya belgilangan faylni formatini aniqlab beradi. Masalan:
$file = $home.'/files/file.zip';
echo functions::format($file);

Bu brauzerimizda .zip bo'lib chiqadi.[/b] BlackCat (17 Sep 2017 20:08) :t :joy: MasterLeo (17 Sep 2017 21:47) smilelar t xarfda chiqqan uzur g Tayotabek (26 Sep 2017 22:49) Shu xolosmi??
Davomi böladimi... MasterLeo (2 Jan 2018 11:52) [b]Endi 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.


O'zingiz mustaqil ravishda yuqoridagi funksiyalarni turli tarzda tajriba qilishdan to'xtamang.
[/b] Azamchik (11 Feb 2018 11:01) :zor: zor TADJIKISTANES (11 Feb 2018 11:47) JOHN CMS UN KUTUBXONA SCRIPTI SOTILADI OLUVCHILA BOLSA SH/X GA
NAMUNA : http://humorim.tk
NARXI 150 WMR DjHuSo (11 Feb 2018 11:49) --Javob-- TADJIKISTANES (11 Feb 2018 11:47): JOHN CMS UN KUTUBXONA SCRIPTI SOTILADI OLUVCHILA BOLSA SH/X GA
NAMUNA : http://humorim.tk
NARXI 150 WMR ---------- Doniyortj, savdo saotiq padforumiga yozing off qilmasdan TADJIKISTANES (11 Feb 2018 11:51) --Javob-- DjHuSo (11 Feb 2018 11:49): Doniyortj, savdo saotiq padforumiga yozing off qilmasdan ---------- DjHuSo, OKKKK UZUR Janob_Mashshenik (6 Apr 2018 20:55) bu offtopmi yoki yoqmi bilmadim
saytimdagi quyidagi xatoni qande tog'rilasam bo'ladi Abbos (21 May 2018 22:32) Assalomu alaykum. Yuklama.top saytiga qanaqa rasm yuklasam yoshlik net dgan yozuv chiqyapti shuni qanday tog'rlasam boladi foxmexa (21 May 2018 22:51) admin panilga turib kirmay quyapdi parolni uzgartirsa login parol chiwaypdi vs rasim kodi birdan chiqib xato demoqda qanday tugrlada buladi WaP_MaSTeR (22 May 2018 00:13) --Javob-- Abbos (21 May 2018 22:32): Assalomu alaykum. Yuklama.top saytiga qanaqa rasm yuklasam yoshlik net dgan yozuv chiqyapti shuni qanday tog'rlasam boladi ---------- Abbos, rasmga pechat bosayaptimi? foxmexa (22 May 2018 06:17) admin panilga turib kirmay quyapdi parolni uzgartirsa login parol chiwaypdi vs rasim kodi birdan chiqib xato demoqda qanday tugrlada buladi alijohncmsda Asil4ek (22 May 2018 07:23) --Javob-- foxmexa (22 May 2018 06:17): admin panilga turib kirmay quyapdi parolni uzgartirsa login parol chiwaypdi vs rasim kodi birdan chiqib xato demoqda qanday tugrlada buladi alijohncmsda ---------- foxmexa, bu scriptni ishlatma umuman yaxshi emas foxmexa (22 May 2018 18:07) --Javob-- Asil4ek (22 May 2018 07:23): foxmexa, bu scriptni ishlatma umuman yaxshi emas ---------- Asil4ek, singa ogirligim tushgani yuqmi xayr off bugani uchun uzur ! Abbos (22 May 2018 20:44) --Javob-- WaP_MaSTeR (22 May 2018 00:13): Abbos, rasmga pechat bosayaptimi? ---------- shahzod, xa boldi tog'ri bop ketdi uzidan uzi lekin qayerdan qiladi aytvoraslarmi Asil4ek (22 May 2018 22:23) --Javob-- foxmexa (22 May 2018 18:07): Asil4ek, singa ogirligim tushgani yuqmi xayr off bugani uchun uzur ! ---------- foxmexa, jinni oldin to'g'ri yozishni o'rgan johndan ko'ra
.
Forumda g'itirla ko'payib ketdi buni gapini ko'rdizlarmi BrauZer (5 Aug 2018 23:14) Google dostimdan bitta script ogandim nimagadur installi yoq nima qisam ekan. Ashurov (5 Aug 2018 23:49) [b]BrauZer,[/b] Install toping, forumdoshlardan so'rang... Manba: https://www.uzmasters.ru/forum/6/26/1830/