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

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

تاریخ انتشار: 13 فروردین 1388
ارسال کننده: saron
برای اینکه لباس این ماژولی که برای قامت دیتالایف انجین دوخته می شه اندازه باشه و با کمترین هزینه دوخته بشه و باعث هدر روی منابع سیستم و سرعت لود سایت نشه بهتره که از توابع داخلی تعبیه شده در خود دیتالایف انجین استفاده بشه . این توابع داخلی معمولا طیف وسیعی از نیازها رو پوشش می ده. به عنوان مثال برای استفاده و کار با بانک اطلاعاتی 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' ); //باعث لود شدن این فایل قالب شده و در حین ادامه ی کد، تگها با مقادیری که می خواید پر می شن و بعد بع خروجی فرستاده می شن

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

مقاله قابل داری نیست اما برای رعایت اخلاق انسانی حقوق مالکیت معنوی این مقاله رو برای نویسنده ی حقیر که خودم هستم رعایت بفرمائید.
ممنونم
    123 نفر (123 کاربر و 0 میهمان) از این مطلب تشکر کرده اند.
    تشکر
    عضو سایت
    13 فروردین 1388 - 19:06
    به به آقا محمد گل کاشتی loveu
    نمدونم چرا هر چی محمد کارش عالیه he
    عضو سایت
    13 فروردین 1388 - 19:28
    من هنوز نخوندم. winked
    ولی php یه کم (خیلی کم) بلدم و به فکرش افتاده بودم که ماژول نویسی رو از یکی یاد بگیرم و اومدم اینجا و با دیدن این پست حسابی غافل گیر شدم.
    ولی فکر نکنم با یه کم php بشه ماژول نوشت. recourse
    عضو سایت
    13 فروردین 1388 - 20:23
    emuhammad
    منم باحات موافقم:D
    مدیر بازنشسته
    13 فروردین 1388 - 20:30
    آقا saron نمیاد ، وقتی میاد کولاک میکنه ! donoghted loveu loveu
    مدیر بازنشسته
    13 فروردین 1388 - 20:53
    همه ی دوستان عزیز لطف دارن. از هموتون ممنونم. loveu flower
    امیدوارم که مفید باشه
    موفق باشید
    مدیر کل
    13 فروردین 1388 - 22:19
    کارت عالیه Saron عزیز worship worship flower

    --------------------
    عضو سایت
    13 فروردین 1388 - 23:25
    ممنونم love
    عضو سایت
    13 فروردین 1388 - 23:51
    ممنونم . آموزش فوق العاده ای بود ادامه بدی بهتر هم می شود.

    --------------------
    عضو سایت
    14 فروردین 1388 - 02:44
    ممنون آقا saron flower
    عضو سایت
    14 فروردین 1388 - 11:57
    مرسی


    عزیزی
    عضو سایت
    14 فروردین 1388 - 12:36
    wassat خیلی ممنون
    یه روزی برای من به درد میخوره
    کارت حرف نداره داداش
    عضو سایت
    14 فروردین 1388 - 21:12
    حرف نداشت boos
    مدیر بازنشسته
    15 فروردین 1388 - 14:43
    feudor55,
    یه دوست خوب دارم که مطالعات منطقه ای می خونه و حوزه ی تخصصیش حوزه ی اوراسیاس. براشون دوره آموزش زبان روسی گذاشتن. از اون می پرسم که چی مرقوم فرمودین! belay feel heheh

    plz write your comment in English. tanx a lot!
    مدیر سایت
    16 فروردین 1388 - 18:29
    بهترنی flower
    البته بعد از محمد یکتا herher cheshmak

    --------------------
    عضو سایت
    28 فروردین 1388 - 12:06
    اگه بشه بیشتر توضیح بدین
    مدیر بازنشسته
    31 فروردین 1388 - 14:55
    volvo_payam,
    مثلا چه توضیحی بدم ؟ خود مطلب واضحه.
    موفق باشید
    عضو سایت
    06 خرداد 1388 - 18:22
    خیلی خوبه ولی خوب آدم باید Php بلد باشه دیگه ... دارم یه چیزایی می فهمم. راستی ماژول ویرایش بلوك های سایت هم درست كنید . دستتون دردنكنه راه دوری نمیره بابا من نیازمند این ماژولم... توی انجمن هم تاپیك داره بیاید اونجا
    عضو سایت
    23 مرداد 1388 - 13:00
    happy
    مدیر بازنشسته
    09 شهریور 1388 - 16:24
    THX


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

    --------------------
    عضو سایت
    14 شهریور 1388 - 16:57
    دمت گرم .......

    WOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOW
    Www.AKSBAZ.IR
    Www.AKSBAZ.IR Www.AKSBAZ.IR
    عضو سایت
    15 شهریور 1388 - 02:07
    توضیحات و لموزش های مورد نظر خوب بودن ما که پی اچ بلد نیستیم بنویسیم recourse
    عضو سایت
    25 شهریور 1388 - 22:45
    خیلی خوبه
    عضو سایت
    01 آبان 1388 - 07:21
    عالیه love
    عضو سایت
    15 آذر 1388 - 17:21
    مرسی عالی بود خیلی به کارم امد
    عضو سایت
    28 آذر 1388 - 01:56
    مرسی
    عضو سایت
    25 دی 1388 - 00:33
    love دمت گرم
    عضو سایت
    27 اسفند 1388 - 13:40
    خیلی پیچیده بود
    عضو سایت
    15 فروردین 1389 - 18:14
    yes
    عضو سایت
    17 اردیبهشت 1389 - 01:56
    مرسی عالی بود
    عضو سایت
    08 آبان 1389 - 14:00
    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
    جهت ارسال نظر، فرم زیر را تکمیل نمائید:
    نام:*
    ایمیل:*
    متن نظر:

     
    پررنگکج خط دارخط دار در وسط|سمت چپوسط سمت راست|قرار دادن شکلکانتخاب رنگ|پنهان کردن متنقراردادن نقل قولتبدیل نوشته ها به زبان روسیقراردادن Spoiler
    کد امنیتی: *