دیتالایف انجین فارسی

دیتالایف انجین فارسی

پشتیبان رسمی سیستم مدیریت محتوا

نحوه ی نوشتن ماژول

نحوه ی نوشتن ماژول - جلسه 1

برای اینکه لباس این ماژولی که برای قامت دیتالایف انجین دوخته می شه اندازه باشه و با کمترین هزینه دوخته بشه و باعث هدر روی منابع سیستم و سرعت لود سایت نشه بهتره که از توابع داخلی تعبیه شده در خود دیتالایف انجین استفاده بشه . این توابع داخلی معمولا طیف وسیعی از نیازها رو پوشش می ده. به عنوان مثال برای استفاده و کار با بانک اطلاعاتی MySQL یه کلاس قدرتمند در دیتالایف انجین تعبیه شده که به راحتی و بدون نیاز به کد نویسی، بسیاری از نیازهای ما رو پوشش می ده و نیاز نیست خودمون اقدام به تعریف یه کلاس یا توابع بکنیم یا حتی از توابع داخلی خود php برای اتصال به بانک استفاده کنیم که این باعث هدر روی منابع سیستم و کند شدن فرآیند کشش اطلاعات از بانک می شه. به عنوان مثال می شه به راحتی و با استفاده از توابع زیر از بانک استفاده کرد :

$db-> query( "دستورات لازم");
$db->super_query( "دستورات لازم");

تقریبا هر دستوری رو می تونید درون این توابع تعریف کنید. از قبیل insert و delete و update و alter و ... . حتی شما برای استفاده از اشیاء کلاس mysql نیاز به وارد کردن آدرس فایل اون در فایل یا فایل های ماژول خود ندارید. این دوتایع با هم تفاوت دارن. در اولی شما باید خودتون خروجی بانک رو گرفته و مثلا با استفاده از تابع $db->get_row(); داده ها رو به صورت آرایه در یک متغییر مانند $row بریزید و بعد استفاده کنید. البته به صورت زیر می شه در یه حلقه ی while از اون استفاده کرد :

while ( $row = $db->get_row() ) {
.
.
}

اما در تابع دومی دیگر نیازی به این کار نیست و اون خودش به شما ارگومانی از داده ها رو بر اساس نام جداول مثلا به صورت $rows['name'] خواهد داد . استفاده از این تابع برای مواردی که از join برای اتصال دو جدول بانک اطلاعاتی به هم استفاده کردین یا مواردی که می خواین آرگومان خروجی از بانک اطلاعاتی رو در یه حلقه مانند foreach به کار ببرین، به درد می خوره و از این لحاظ کار شما رو خیلی خیلی راحت کرده.
در ادامه لیستی از توابع از پیش تعریف شده مهم در دیتالایف انجین رو براتون توضیح می دم.
ما می تونیم سه مدل ماژول برای دیتالایف انجین بنویسیم (البته این برای اکثر CMSها صادقه). یه مدل ماژول وجود داره که به به بخش مدیریت نیازی ندارن مثل ماژول ساده ی شمارنده ی بازدیدهای سایتیا ماژول آب و هوا یا ماژول تقویم که الان در خود دیتالایف انجین هست و در بخش مدیریت از اونا چیزی نمی بینیم. برای ساخت چنین ماژولی معمولا تنها به یک یا حداکثر دو سه فایل نیاز می شه و مثلا فرض کنید می خوایم ماژولی بنویسیم که به 10 مطلب آخر سایت رو به خروجی بفرسته. برای این کار فقط کافیست فایل با نام مثلا last.php رو آماده کنیم. در اول فایل لازمه که کد زیر رو برای شناسی اون فایل به عنوان اینکه ویروس نیست بذارید :

if(!defined('DATALIFEENGINE'))
{
  die("Hacking attempt!");
}

حالا کافیه با توابعی که در بالا گفته شد به بانک اطلاعاتی وصل بسین و آخرین 10 خبر رو استخراج کنین و توی یه متغییر بریزید. می تونید همونجا اون متغییر که محتواش به شکل دلخواه با XHTML یا CSS یا jscript تزئین شده رو با استفاده از توابع داخلی تعبیه شده برای قالب مانند $tpl->set() با یک تگ دلخواه مثلا {last10} به خروجی ارسال کنید . یا می تونید اون محتوای تزئین شده ی اون متغییر رو در فایل index.php به قالب بشناسونید و به شکل یک تگ دلخواه، مورد استفاده در قالب خروجی دربیارید. برای این کار کافیه آدرس فایل last.php رو که در پوشه ی engine/modules هست رو در فایل index.php اینکلود کنین و بعد در همونجا کد زیر رو بذارید :

include ROOT_DIR.'/engine/modules/last.php';
$tpl->set ( '{last}', $topnews );

فکر می کنم تا اینجا متوجه شدین چطور میشه خروجی مورد نظرتون رو با یک تگ به قالب بفرستید. اگر با smarty کار کردین حتما این چیزا رو خوب بلدین دیگه که من بیشتر روشون مانور نمی دم . برای دیدن نمونه های مشابه می تونید سری به ماژول های 3news.php و calendar.php بزنید. دیدن کدهای اونا به خوبی می تونه راهنمای شما در نوشتم کدهای ماژولی بشه که نیازی به بخش مدیریت نداره.در این مدل ماژول فقط نیازه که شما ماژول رو در فایل index.php اینکلود کنید.
در مدل دوم ماژول ما به ماژولهائی بر می خوریم که خروجیشون رو از محتوای تولید شده در بخش مدیریت می گیرن . این ماژولها از دو قسمت تشکیل شدن . قسمت اول فایلهائی که مربوط به بخش مدیرت می شن و باید در مسیر /engine/inc کپی بشن و قسمت دوم فایلهائی که برای نماش محتوای تولید شده در بخش مدیریت در خروجی هست که در مسیر /engine/modules کپی بشن . البته این حالت کلی هست . حالتهائی وجود داره که می تونه غیر از این باشه که من به اونا نمی پردازم. مثل ماژولهائی که فقط در بخش مدیریت کار می کنن و خروجی ندارن مثل ماژول مدیریت فایل و ... .
برای استفاده از فایلها در بخش مدیریت می تونید اونا رو به شکل زیر در فایل option.php تعریف کنید:

array (
'name' => $lang['opt_user'], // نام اصلی ماژول که البته در فایل  adminpanel.lng  تعریف شده

'url' => "$PHP_SELF?mod=editusers&action=list", //آدرس ماژول هست که باید دقت کنید بعد از mod نام فایلی رو بنویسید که برای بخش مدیریت تولید کردین

'descr' => $lang['opt_userc'], // توضیحات ماژول که زیر نام اصلی قرار می گیره

'image' => "uset.png",   //آیکون ماژول در بخش مدیریت

'access' => "1" // تعیین سطح دسترسی به این ماژول که بر اساس گروههای کاربری است و شما به جای یک می تونید عدد رتبه ی گروه کاربری رو وارد کنید
),

برای این مدل ماژول وقتی اطلاعات و محتوا در بخش مدیریت تولید شد، توسط فایلی که برای نمایش این محتوا در پوشه ی modules کپی کردیم، اطلاعات در خروجی نمایش داده می شه. مثلا فرض کنید که می خوایم یه ماژول مدیریت نمرات دانشجویان رو بنویسیم . ابتدا در بخش مدیریت فرمهائی رو تعبیه می کنیم که اطلاعات دانشجویان رو بگیره و در بانک اطلاعاتی بریزه و بعد توسط فایلی که در سمت بیرونی سایت هست اطلاعات رو بر اساس سیاست های درخواستی با کنترل محدودیت های دلخواه به نمایش می ذاریم . همیشه این اطلاعات در خود سایت به نمایش در نمی یاد بلکه ممکنه بخواید اطلاعات رو ایمیل کنید . برای این کار کافیه اطلاعات رو پس از صحت دسترسی متقاضی اطلاعات از بانک بیرون بکشید و به ایمیل دریافت شده از فرم تعبیه شده ارسال کنید . تمام عملیاتی که در بخش بیرونی سایت و برای کاربران عمومی انجام می شه توسط فایلهائی انجام می شه که در پوشه ی modules کپی شدن و در فایل index.php یا engine/engine.php اینکلود شدن.
حالا می رسیم به معرفی توابع مهم داخلی دیتالایف انجین.


$count = $db->num_rows(); //تعداد سطور جدول در بانک رو بر می گردونه و در متغییر می ریزه

msgbox( $lang['all_info'], $lang['add_err_9'] . "<br /><br /><a href=\"javascript:history.go(-1)\">$lang[all_prev]</a>" ); // برای نمایش پیغام بعد از انجام یک عملیات هستش که می تونه برای تائیید یا نمایش خطا باشه

$dle_login_hash //متغییری عمومی هستش که سشن کاربر رو تو خودش داره و برای حذف ایمن داده ها از بانک اطلاعاتی به کار برده می شه که سشن فعلی کاربر با این سشن معتبر سنجیده میشه و اگر تائید شد ف اجازه عملیات صادر می شه

$db->safesql("مقدار"); //این تابع برای حذف داده های غیر مجاز یک داده هنگام ورود به بانک اطلاعاتی به کار می ره. مناسب برای جلوگیری از Sql Injection

include_once ENGINE_DIR . '/classes/parse.class.php';
$parse = new ParseFilter( Array (), Array (), 1, 1 );
وارد کردن کلاس پردازش متن در ماژول و استفاده از توابع اون مانند توابع زیر :

$parse->BB_Parse("مقدار "); //برای پردازش متنی که در اون بی بی کد به کار رفته مثل متن ارسالی کامنتها

$parse->process("مقدار "); //تابعی که ورودی رو از فیلتر متن می گذرونه و داده های غیر مجاز رو حذف می کنه و کدهای خاص در متن رو ترجمه و مقدار مناسب رو برای اونا جایگزین می کنه

$parse->decodeBBCodes( $row['full_story'], TRUE, $config['allow_site_wysiwyg'] ); // وظیفه ی جایگزین سازی مقادیر استاندارد اچ تی ام ال رو با بی بی کد ها به عهده داره

include_once ENGINE_DIR . '/classes/mail.class.php';
$mail = new dle_mail( $config );
وارد کردن کلاس ایمیل در ماژول و استفاده از توابع اون مانند توابع زیر :

$mail->send( $config['admin_mail'], $lang['mail_news'], $row['template'] ); //این تابع سه آرگومان می گیره و داده ها رو آدرس میل می فرسته

$tpl->load_template( 'addnews.tpl' ); //باعث لود شدن این فایل قالب شده و در حین ادامه ی کد، تگها با مقادیری که می خواید پر می شن و بعد بع خروجی فرستاده می شن

برای استفاده ی کامل از توابع داخلی باید به کلاس های استفاده شده مسلط بشین و بدونین که هر شیء کلاس چه آرگومانهائی می گیره و چطور می شه از اونا استفاده کرد.
ماژولهای نوع سوم ماژولهائی هستن که بخش مدیریت و بخش خروجیشون مجزای از دیتالایف انجین هستش اما به بخش مدیریت و خروجی دیتالایف انجین گره زده می شن و از منابع و امکانات دیتالایف انجین استفاده می کنن. این مبحث جزو مباحث پیشرفته هست که ان شاءالله در موقعیت دیگه و فرصت مقتضی خدمت دوستان عزیز ارائه می کنم . لازم به ذکر هست این مواردی که گفتم تنها بخش کوچکی از دنیای ماژول نویسی بود و برای اینکه بتونه شما رو به سرعت راه بندازه. همین. نباید انتظار داشته باشین که این نوشته معجزه کنه.

مقاله قابل داری نیست اما برای رعایت اخلاق انسانی حقوق مالکیت معنوی این مقاله رو برای نویسنده ی حقیر که خودم هستم رعایت بفرمائید.
ممنونم

نظرات کاربران
EMohammad در 13 فروردین 1388 - 19:06 گفته:
عضو سایتنظرات: 93

به به آقا محمد گل کاشتی loveu
نمدونم چرا هر چی محمد کارش عالیه he

Temp2ni در 13 فروردین 1388 - 19:28 گفته:
عضو سایتنظرات: 51

من هنوز نخوندم. winked
ولی php یه کم (خیلی کم) بلدم و به فکرش افتاده بودم که ماژول نویسی رو از یکی یاد بگیرم و اومدم اینجا و با دیدن این پست حسابی غافل گیر شدم.
ولی فکر نکنم با یه کم php بشه ماژول نوشت. recourse

lord-setarg در 13 فروردین 1388 - 20:23 گفته:
عضو سایتنظرات: 1

emuhammad
منم باحات موافقم:D

Arash Nodinian در 13 فروردین 1388 - 20:30 گفته:
مدیر بازنشستهنظرات: 332

آقا saron نمیاد ، وقتی میاد کولاک میکنه ! donoghted loveu loveu

saron در 13 فروردین 1388 - 20:53 گفته:
مدیر بازنشستهنظرات: 198

همه ی دوستان عزیز لطف دارن. از هموتون ممنونم. loveu flower
امیدوارم که مفید باشه
موفق باشید

محمدرضا یکتامرام در 13 فروردین 1388 - 22:19 گفته:
مدیر کلنظرات: 356

کارت عالیه Saron عزیز worship worship flower

--------------------

M.Reza در 13 فروردین 1388 - 23:25 گفته:
عضو سایتنظرات: 107

ممنونم love

پیام سپرده در 13 فروردین 1388 - 23:51 گفته:
مدیر سایتنظرات: 248

ممنونم . آموزش فوق العاده ای بود ادامه بدی بهتر هم می شود.

--------------------

haray در 14 فروردین 1388 - 02:44 گفته:
عضو سایتنظرات: 79

ممنون آقا saron flower

alifx4 در 14 فروردین 1388 - 11:57 گفته:
عضو سایتنظرات: 298

مرسی


عزیزی

omrdabakhte در 14 فروردین 1388 - 12:36 گفته:
عضو سایتنظرات: 239

wassat خیلی ممنون
یه روزی برای من به درد میخوره
کارت حرف نداره داداش

dlf در 14 فروردین 1388 - 21:12 گفته:
عضو سایتنظرات: 10

حرف نداشت boos

saron در 15 فروردین 1388 - 14:43 گفته:
مدیر بازنشستهنظرات: 198

feudor55,
یه دوست خوب دارم که مطالعات منطقه ای می خونه و حوزه ی تخصصیش حوزه ی اوراسیاس. براشون دوره آموزش زبان روسی گذاشتن. از اون می پرسم که چی مرقوم فرمودین! belay feel heheh

plz write your comment in English. tanx a lot!

SMostafa Moosavi در 16 فروردین 1388 - 18:29 گفته:
عضو سایتنظرات: 260

بهترنی flower
البته بعد از محمد یکتا herher cheshmak

--------------------

volvo_payam در 28 فروردین 1388 - 12:06 گفته:
عضو سایتنظرات: 1

اگه بشه بیشتر توضیح بدین

saron در 31 فروردین 1388 - 14:55 گفته:
مدیر بازنشستهنظرات: 198

volvo_payam,
مثلا چه توضیحی بدم ؟ خود مطلب واضحه.
موفق باشید

hossein72 در 06 خرداد 1388 - 18:22 گفته:
عضو سایتنظرات: 25

خیلی خوبه ولی خوب آدم باید Php بلد باشه دیگه ... دارم یه چیزایی می فهمم. راستی ماژول ویرایش بلوك های سایت هم درست كنید . دستتون دردنكنه راه دوری نمیره بابا من نیازمند این ماژولم... توی انجمن هم تاپیك داره بیاید اونجا

novinsms در 23 مرداد 1388 - 13:00 گفته:
عضو سایتنظرات: 3

happy

سامان رزمجو در 09 شهریور 1388 - 16:24 گفته:
مدیر بازنشستهنظرات: 105

THX


خیلی خوب بود ! flower

--------------------

aksbaz در 14 شهریور 1388 - 16:57 گفته:
عضو سایتنظرات: 2

دمت گرم .......

WOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOW
Www.AKSBAZ.IR
Www.AKSBAZ.IR Www.AKSBAZ.IR

nog در 15 شهریور 1388 - 02:07 گفته:
عضو سایتنظرات: 25

توضیحات و لموزش های مورد نظر خوب بودن ما که پی اچ بلد نیستیم بنویسیم recourse

sheihaky در 25 شهریور 1388 - 22:45 گفته:
عضو سایتنظرات: 5

خیلی خوبه

Iman.r در 01 آبان 1388 - 07:21 گفته:
عضو سایتنظرات: 87

عالیه love

esaman در 15 آذر 1388 - 17:21 گفته:
عضو سایتنظرات: 20

مرسی عالی بود خیلی به کارم امد

sepastian در 28 آذر 1388 - 01:56 گفته:
عضو سایتنظرات: 52

مرسی

hashef در 25 دی 1388 - 00:33 گفته:
عضو سایتنظرات: 1

love دمت گرم

ir110boy در 27 اسفند 1388 - 13:40 گفته:
عضو سایتنظرات: 53

خیلی پیچیده بود

bayat091 در 15 فروردین 1389 - 18:14 گفته:
عضو سایتنظرات: 20

yes

mosi34 در 17 اردیبهشت 1389 - 01:56 گفته:
عضو سایتنظرات: 1

مرسی عالی بود

miniport در 08 آبان 1389 - 14:00 گفته:
عضو سایتنظرات: 1

bahal bood
damet garm
fagat ye soal daram
man mikham be ye seri karbar bade ozviyat user va pasword internet bedam
chetori mitonam in karo bekonam
mikham besorat automatik bashe

ارسال نظر
نام:*
ایمیل:*
متن نظر:
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent
کد را وارد کنید: *
عکس خوانده نمی‌شود؟ کلیک کنید!