PDA

View Full Version : ماژول نویسی در php



asma69
شنبه 14 آذر 1394, 23:09 عصر
با سلام..
من یک مدیریت محتوا ی کوچیک با php دارم مینویسم ک حاوی بسته نصبی هست و
میخوام به طور رایگان در اختیار تعدادی از مشتری ها قرار بدم...تا این جا ک مشکلی نیست...

اما من با ماژول نویسی هیچ آشنایی ندارم....
اما میخوام در آینده جوری باشه که بتونم امکاناتی رو به عنوان ماژول به مشتریان بفروشم که
روی مدیریت محتوایی ک نوشتم نصب شه و کار کنه.....

مثلا ماژول اس ام اس...ماژول پرداخت آنلاین...ماژول ایمیل یا خیلی ماژول های دیگه
که ممکنه در حین نوشتن مدیریت محتوا اصلا بهشون فکر هم نکنم....
اما بعدا به ذهنم برسه و بخوام ماژولش رو برای مدیریت محتوایی که دارم بنویسم و در اختیار مشتری ها قرار بدم..

مثلا میخوام طوری باشه ک وقتی ماژول اس ام اس نصب شد، ارسال اس ام اس در سایت فعال شه و
تو پنل مدیریت در مدیریت محتوام که قبلا هیچ تنظیماتی واسه اس ام اس نداشت، بخش تنظیمات پنل اس ام اس اضافه و فعال شه..

وباز دوباره با پاک کردن ماژول، امکان ارسال اس ام اس غیرفعال و تنظیمات اس ام اس در مدیریت هم پاک شه و قابل نمایش نباشه...

همینطور واسه همه ماژول ها به همین شکل.....مثل مدیریت محتواهای بزرگ..

ممنون میشم در این مورد راهنماییم کنید و بگین ک آیا ماژول نویسی، شیوه و روش خاصی داره؟؟ من چطوری میتونم واسه برنامه های خودم ماژول بنویسم و در اختیار مشتری ها قرار بدم؟؟

Unique
یک شنبه 15 آذر 1394, 13:42 عصر
آیا ماژول نویسی، شیوه و روش خاصی داره؟؟
نه ! روش خیلی مشخص و خاصی نداره ،‌ شما میتونید سورس کد های وورد پرس ، جوملا ،‌ دروپال و غیره را بررسی کنید و ببینید عموما یک تکنیک استفاده نمیشه اما میشه ازشون ایده گرفت.


من چطوری میتونم واسه برنامه های خودم ماژول بنویسم و در اختیار مشتری ها قرار بدم؟؟
اول باید یک سیستم ماژولار طراحی کنید و بعدش با Load کردن ماژول های مورد نظر این کار را انجام بدین.

us1234
یک شنبه 15 آذر 1394, 15:36 عصر
اغلب cms ها از تکنیک hook برای ماژولار کردن استفاده می کنند ، مثلا برای کلیه عملیاتهای مختلف hook تعریف می کند و در ماژول ها هر جا این hook ها تعریف شده بود عملیات مربوطه انجام میشود .

ولی وردپرس این سیستم را کلا کنار گذاشته و با روش دیگری کار میکند که خیلی کارآمد تر از hook است .

در وردپرس هر فایل php ( با مشخصات خاصی که عمدتا اول فایل به صورت کامنت مشخص شده است ) در فولدر wp-content قرار داشته باشد ، در هنگام باز شدن وردپرس لود میشود . یعنی عملا کلیه کدها داخل این فولدر به وردپرس اضافه میشود و کنترل خیلی عالی به ماژول نویس میدهد .

در جوملا باز شرایط یکم متقاوت است و تا جایی که اطلاع دارم کلیه کدها اضافه به 3 نوع کامپوننت ، افزونه و قالب تفکیک میشود ( با جوملا کار نکردم و آشنایی ندارم ... )

asma69
دوشنبه 07 دی 1394, 14:46 عصر
اگه کسی میتونه بیشتر راهنماییم کنه، ممنون میشم...
چطوری میتونم با php یک سیستم ماژولار طراحی کنم؟؟

asma69
سه شنبه 08 دی 1394, 23:03 عصر
من خودم یکم ی راه هایی به ذهنم میرسه اما نمیدونم تا چ حدیش درست یا اشتباهه....
اینا رو میگم ، خواهش میکنم دوستان اگه نظری دارن بگن تا بتونم راه پیشنهادیم رو تکمیل کنم و به نتیجه برسونم...

1- در مرحله اول به نظرم باید توی دیتابیس یک جدول با نام ماژول در نظر بگیریم ک هر ماژولی ک میخواد نصب شه اطلاعاتش داخل جدول سیو شه........مثل نام ماژول - نام پوشه ماژول و وضعیت نصب ماژول....

2- در مرحله 2 تو پوشه اصلی برنامه یک پوشه به اسم ماژول میسازیم ک پوشه هر ماژول داخل این پوشه قرار می گیرند....مثل پوشه ماژول اس ام اس و یا پوشه ماژول ایمیل....
در این پوشه یک فایل module.php هم قرار می دیم ک تو اون فایل از دیتابیس چک بشه و در صورت وجود ماژول لیست ماژول های موجود رو نمایش بده......که از این صفحه میخوایم توی مدیریت استفاده کنیم....

3- توی مدیریت بخش مدیریت ماژول ها رو اضافه می کنیم.....ک با انتخاب لینک مربوط به این بخش وارد صفحه module.php که در بالا گفته شد می شویم.....که همانطور ک گفتم در صورت وجود ماژول لیست ماژول ها نمایش داده میشه و در صورت نبودن ماژول، پیغامی نمایش داده میشه ک ماژول وجود ندارد...حالا در صورتی ک مثلا ماژول اس ام اس وجود داشته باشه، وارد تنظیمات مدیریتی ماژول اس ام اس می شیم و میتونیم تنظیمات رو انجام بدیم...

4- این جا می مونه یک سری صفحاتی ک از قبل در سایت وجود دارند...مثلا فرض کنید ما صفحه ثبت نام داشتیم.....الان میخوایم واسه بخش ثبت ناممون ماژول اس ام اس فعال کنیم، پس نیاز داریم ک کدهای صفحه ثبت نام کمی تغییرات داشته باشه و در بعضی قسمت ها بگیم در صورت وجود ماژول بیاد ماژول رو فراخونی و بعد از ثبت نام اس ام اس ارسال کنه....پس نیازه ک در موقه نصب ماژول ما یک سری تغییراتی رو هم در فایل هایی ک از قبل در هسته سایت وجود داشته اعمال کنیم.....

اما من خودم ب این مورد شک دارم....چون تا حالا مطالبی ک راجب ماژولار بودن خوندم، اینطور فهمیدم ک ماژول کلا یک قطعه جداست ک رو هسته نصب میشه و نباید کدها و صفحه های قبلی ک در هسته وجود دارد رو شامل تغییرات کنه.....
پس ب نظرتون اینجا باید چکارکنم؟؟

آیا این راه هایی ک من گفتم درسته؟؟تا چ حدش درسته و برای کامل شدنش باید چکار کنم و به چ شکل پیش برم؟؟
ممنون میشم راهنماییم کنید...

asma69
چهارشنبه 09 دی 1394, 12:27 عصر
سلام...
کسی نمیتونه واسه راه هایی ک گفتم راهنماییم کنه تا بدونم تا چ حد درسته؟؟

tuytoosh
چهارشنبه 09 دی 1394, 18:27 عصر
شما باید سیستمتون رو از پایه برپایه ی کامپوننت طراحی کنید. در غیر اینصورت بعد از تحویل پروژه باید به سورس نرم افزار دست زده بشه که اصلا قشنگ نیست

میتونید از cms ها برای کارتون الهام بگیرید

tuytoosh
چهارشنبه 09 دی 1394, 18:28 عصر
من خودم یکم ی راه هایی به ذهنم میرسه اما نمیدونم تا چ حدیش درست یا اشتباهه....
اینا رو میگم ، خواهش میکنم دوستان اگه نظری دارن بگن تا بتونم راه پیشنهادیم رو تکمیل کنم و به نتیجه برسونم...

1- در مرحله اول به نظرم باید توی دیتابیس یک جدول با نام ماژول در نظر بگیریم ک هر ماژولی ک میخواد نصب شه اطلاعاتش داخل جدول سیو شه........مثل نام ماژول - نام پوشه ماژول و وضعیت نصب ماژول....

2- در مرحله 2 تو پوشه اصلی برنامه یک پوشه به اسم ماژول میسازیم ک پوشه هر ماژول داخل این پوشه قرار می گیرند....مثل پوشه ماژول اس ام اس و یا پوشه ماژول ایمیل....
در این پوشه یک فایل module.php هم قرار می دیم ک تو اون فایل از دیتابیس چک بشه و در صورت وجود ماژول لیست ماژول های موجود رو نمایش بده......که از این صفحه میخوایم توی مدیریت استفاده کنیم....

3- توی مدیریت بخش مدیریت ماژول ها رو اضافه می کنیم.....ک با انتخاب لینک مربوط به این بخش وارد صفحه module.php که در بالا گفته شد می شویم.....که همانطور ک گفتم در صورت وجود ماژول لیست ماژول ها نمایش داده میشه و در صورت نبودن ماژول، پیغامی نمایش داده میشه ک ماژول وجود ندارد...حالا در صورتی ک مثلا ماژول اس ام اس وجود داشته باشه، وارد تنظیمات مدیریتی ماژول اس ام اس می شیم و میتونیم تنظیمات رو انجام بدیم...

4- این جا می مونه یک سری صفحاتی ک از قبل در سایت وجود دارند...مثلا فرض کنید ما صفحه ثبت نام داشتیم.....الان میخوایم واسه بخش ثبت ناممون ماژول اس ام اس فعال کنیم، پس نیاز داریم ک کدهای صفحه ثبت نام کمی تغییرات داشته باشه و در بعضی قسمت ها بگیم در صورت وجود ماژول بیاد ماژول رو فراخونی و بعد از ثبت نام اس ام اس ارسال کنه....پس نیازه ک در موقه نصب ماژول ما یک سری تغییراتی رو هم در فایل هایی ک از قبل در هسته سایت وجود داشته اعمال کنیم.....

اما من خودم ب این مورد شک دارم....چون تا حالا مطالبی ک راجب ماژولار بودن خوندم، اینطور فهمیدم ک ماژول کلا یک قطعه جداست ک رو هسته نصب میشه و نباید کدها و صفحه های قبلی ک در هسته وجود دارد رو شامل تغییرات کنه.....
پس ب نظرتون اینجا باید چکارکنم؟؟

آیا این راه هایی ک من گفتم درسته؟؟تا چ حدش درسته و برای کامل شدنش باید چکار کنم و به چ شکل پیش برم؟؟
ممنون میشم راهنماییم کنید...


سیستم شما دو تا ایراد داره
1 - اینکه وقتی ما ماژول رو به کاربر میدیم ، باید بره توی دیتابیس و اسم و سایر مشخصات ماژولی که میخواد رو اضافه کنه به دیتابیس ، که این یک مشکل هست. بهترین راه اینه که فایل module.php لیست ماژول هارو از داخل فایل کانفیگ خود افزونه ها بخونه و هر افزونه ای که استاندارد های لازم برای شناخته شدن بعنوان افزونه رو نداشت به رسمیت نشناسه... (یه چیزی مثل وردپرس) و بعد از فعال کردن و ... هم flag رو در فایل کانفیگ تغییر بده.

2 - تغییر در core سیستم به هیچ وجه پیشنهاد نمیشه... برای حل این مشکل هم میتونید از hook هایی که یکی از دوستان در بالا گفت استفاده کنید. و توی core چک کنید که ماژول ها واسه این هوکی که در حال اجراست آیا عملیاتی دارند یا خیر

در کل همه اینها بستگی به معماری نرم افزار شما داره و بستگی داره که سیستم شما component base طراحی شده یا نه...

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

asma69
چهارشنبه 09 دی 1394, 22:01 عصر
شما باید سیستمتون رو از پایه برپایه ی کامپوننت طراحی کنید. در غیر اینصورت بعد از تحویل پروژه باید به سورس نرم افزار دست زده بشه که اصلا قشنگ نیست

میتونید از cms ها برای کارتون الهام بگیرید


خب چطوری باید سیستم رو بر پایه ی کامپوننت طراحی کنم.....ینی باید چکارکنم؟؟ ینی هسته ای ک مینویسم باید چطوری باشه؟؟ راستش من خیلی حرفه ای نمی تونم برنامه نویسی کنم برای همون از cms هایی ک بررسی کردم زیاد چیزی متوجه نشدم....پیچیده بود....
برای همون اینجا پست گزاشتم ک اگه کسی میتونه بیشتر راهنماییم کنه....

برای مثال الان ک دارم هسته رو مینویسم خب حرفی از ارسال اس ام اس تو بخش ثبت نام نیست....اما بعد میام ماژول اس ام اس مینویسم و میخوام رو بخش ثبت نام فعال شه و کار کنه یا اصلا هر ماژول دیگه ای......خب هسته بخش ثبت نام رو چطوری باید طراحی کنم ک بعد با هر نوع ماژولی بدون تغییر در کدهای بخش ثبت نام کار کنه؟؟

ممنون میشم راهنماییم کنین..این سوال رو من تو این سایت و این تالار سرچ کردم..خیلی ها همین سوال رو داشتند اما جواب همه سوالات نامعلوم بود و از اخر کسی برای تکمیلش جواب نداده بود.....
ان شالله ک تو این پست با پاسخگویی دوستان به جواب واضح و روشنی برسه...
تشکر

asma69
چهارشنبه 09 دی 1394, 22:08 عصر
سیستم شما دو تا ایراد داره
1 - اینکه وقتی ما ماژول رو به کاربر میدیم ، باید بره توی دیتابیس و اسم و سایر مشخصات ماژولی که میخواد رو اضافه کنه به دیتابیس ، که این یک مشکل هست. بهترین راه اینه که فایل module.php لیست ماژول هارو از داخل فایل کانفیگ خود افزونه ها بخونه و هر افزونه ای که استاندارد های لازم برای شناخته شدن بعنوان افزونه رو نداشت به رسمیت نشناسه... (یه چیزی مثل وردپرس) و بعد از فعال کردن و ... هم flag رو در فایل کانفیگ تغییر بده.

2 - تغییر در core سیستم به هیچ وجه پیشنهاد نمیشه... برای حل این مشکل هم میتونید از hook هایی که یکی از دوستان در بالا گفت استفاده کنید. و توی core چک کنید که ماژول ها واسه این هوکی که در حال اجراست آیا عملیاتی دارند یا خیر

در کل همه اینها بستگی به معماری نرم افزار شما داره و بستگی داره که سیستم شما component base طراحی شده یا نه...

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


بازم ممنون از پاسخگوییتون....
در رابطه با حرفایی ک گفتین...
1- اطلاعات ماژول رو کاربر وارد نمیکنه....من برای برنامم یک فایل نصبی دارم ک موقه نصب اطلاعات ماژول خودکار رو دیتابیس نصب میشه....
2- اره چیزی من هم خوندم و شنیدم اینه نباید هسته اصلی تغییر داشته باشه.....
hook رو راستش متوجه نشدم چیه ولی راجبش بیشتر سرچ میکنم.....
در کل هنوز نمیدونم ک هسته برنامه رو چطور ماژولار بنویسم ک نیاز به تغییر تو کد اصلی نباشه....

ممنون میشم راهنماییم کنین....

asma69
جمعه 11 دی 1394, 08:57 صبح
من راجب hook خیلی سرچ کردم و فهمیدم چرا باید از هوک استفاده بشه....
اما دستور استفاده از hook رو در برنامه شخصی خودم نمیدونم چطور باید باشه.......
تمام مثال هایی ک تو نت هست، در رابطه با وورد پرس هست و توضیحی راجب خود هوک و این ک چطوری از ابتدا در برنامه و هسته ای ک خودم دارم ازش استفاده کنم، پیدا نکردم....
همش توابع وورد پرس رو معرفی می کنن و آدم گیج میشه.....
کسی میتونه در این مورد راهنماییم کنه؟؟
ممنون میشم...

Unique
شنبه 12 دی 1394, 02:47 صبح
خوب نگشتی ! از این استفاد کن. (https://github.com/bainternet/PHP-Hooks)

asma69
شنبه 12 دی 1394, 15:35 عصر
خوب نگشتی ! از این استفاد کن. (https://github.com/bainternet/PHP-Hooks)

ممنون از راهنماییتون.....
آخه من راجب استفاده از هوک چیزی نمیدونستم....برای همون دقیق نمیدونستم دنبال چی باید بگردم....
اما با این لینکی ک شما معرفی کردین، متوجه شدم ک این فایل رو باید به پروژم include کنم......فایل رو دانلود کردم.....
درست متوجه شدم یانه؟؟ اگه درسته میشه راهنماییم کنید ک چطوری ازش تو پروژم استفاده کنم؟؟ مثلا تو هسته پروژه چطوری باید هوک گذاری کنم یا هوک تعریف کنم ک هسته سایتم ماژولار بشه.....یا این فایل رو دقیقا کجا باید include کنم؟؟
ممنون میشم بیشتر راهنماییم کنید....

Unique
شنبه 12 دی 1394, 23:54 عصر
ثلا تو هسته پروژه چطوری باید هوک گذاری کنم یا هوک تعریف کنم ک هسته سایتم ماژولار بشه.....یا این فایل رو دقیقا کجا باید include کنم؟؟

اینی که معرفی کردم دقیقا از Wordpress یه جورایی Fork شده و اگه در مورد ماژول نویسی توی Wordpress بخونی و تحقیق کنی و خودت هم براش بنویسی دقیقا متوجه میشی چطور باید پیاده سازی کنی. متاسفانه من نه از Wordpress زیاد سر رشته دارم و نه از Hook. امیدوارم دوستان Wordpress کار راهنمایی کنن. اما بر اساس توضیحاتی که نوشته تقریبا سر راست میشه فهمید باید فایل را توی هسته اصلی که همیشه Load میشه include کنی و بر اساس action هایی که تعریف کردی اون ها را در موقعیت های خودش صدا بزنی .

asma69
یک شنبه 13 دی 1394, 17:25 عصر
اینی که معرفی کردم دقیقا از Wordpress یه جورایی Fork شده و اگه در مورد ماژول نویسی توی Wordpress بخونی و تحقیق کنی و خودت هم براش بنویسی دقیقا متوجه میشی چطور باید پیاده سازی کنی. متاسفانه من نه از Wordpress زیاد سر رشته دارم و نه از Hook. امیدوارم دوستان Wordpress کار راهنمایی کنن. اما بر اساس توضیحاتی که نوشته تقریبا سر راست میشه فهمید باید فایل را توی هسته اصلی که همیشه Load میشه include کنی و بر اساس action هایی که تعریف کردی اون ها را در موقعیت های خودش صدا بزنی .

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