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

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

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

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

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

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

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

نظرات کاربران
حمید یوسفی در 29 فروردین 1390 - 08:21 گفته:
مدیر بازنشستهنظرات: 35

از اون جایی که گفتم شاید Saron خان بخواد بدونه این دوستمون feudor55 به روسی چی گفته، ترجمه متنش می شه :
مردان دوست دارند اشتباه کنند، مهم تر این است که دوست دارند بر اشتباه خود پافشاری کنند. با احترام - نویسنده

حالا این چه ربطی به مطلب شما داشت، بفرمائید خودشون توضیح بدن verylol

به هر حال دستت درد نکنه، آموزش خیلی بدرد بخوری هستش. love

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

امید آسترکی در 05 تیر 1390 - 12:08 گفته:
عضو سایتنظرات: 62

ممنون سعی میکنم ماژول نوشتن رو شرروع کنم

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

mostafam در 13 تیر 1390 - 22:34 گفته:
عضو سایتنظرات: 4

Amirali در 06 شهریور 1390 - 23:08 گفته:
عضو سایتنظرات: 178

ممنون excisted makhsoosefreeiran

علی آریان در 27 مهر 1390 - 20:20 گفته:
عضو سایتنظرات: 141

belay smile2

ویروس در 01 آبان 1390 - 17:01 گفته:
عضو سایتنظرات: 1

واقعا عالی بود . دستت درد نکنه بابات اطلاعاتتون !

حمید صادقی در 06 خرداد 1391 - 18:13 گفته:
مدیر سایتنظرات: 463

خیلی خوب بود دمت گرم
من خیلی دوست دارم ماژول نویسی یاد بگیرم امیدوارم كه یه روز بتونم مثل شما دوستان چیزهایی رو كه یاد میگیرم یاد بدم
تشكرات فراوان pray

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

farhad3027 در 11 تیر 1391 - 17:23 گفته:
عضو سایتنظرات: 17

عالیییییییییییییییییییییییی بود
اما اگه میشه یه چند تا مثال دیگه هم بذارین

capitan ataei در 22 آذر 1391 - 02:50 گفته:
عضو سایتنظرات: 20

question خب دستورو بنویسم برو مثلا فایل اینجا و برو اونجا یا چیز دیگه؟هه شوخیدم donoghted
خاک تویرک اقا تضعیف روحیه شدم sad
ولی باید یاد بگیرم هنوز 14 سالم وقتی میتونم کلی بقول معروف کرم بریزک تو سایتم و خوشگلش کنم این هارو هم یاد میگیرم غمی نیست


ممنونم ی روزی باز بهش سر میزنم داداشم وقتی کلی چیز دیگه یاد گرفتم what heheh

حمید صادقی در 22 آذر 1391 - 16:53 گفته:
مدیر سایتنظرات: 463

admin abbas,
دوست عزیز مراقب رفتارت باش
و از اصطلاحات بیخود استفاده نكن

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

saeed_rb در 26 مهر 1392 - 20:58 گفته:
عضو سایتنظرات: 1

وقتی می خوام از این توابع برای نوشتن ماژول استفاده کنیم نیاز به اینکلود کردن چیزی نداریم ؟؟؟؟؟؟

IMP در 26 مهر 1392 - 22:06 گفته:
مدیر بازنشستهنظرات: 917

نقل قول: saeed_rb
وقتی می خوام از این توابع برای نوشتن ماژول استفاده کنیم نیاز به اینکلود کردن چیزی نداریم ؟؟؟؟؟؟

بستگی داره که چه ماژولی مینویسد و به چه فانکشن هایی نیاز دارید!

ارسال نظر
نام:*
ایمیل:*
متن نظر:
  • 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
کد را وارد کنید: *
عکس خوانده نمی‌شود؟ کلیک کنید!