مستندات توسعه
-
عمومی
-
توسعه
-
برنامه ها
-
پلاگین ها
-
افزودنی ها
-
-
مبانی فریم ورک
-
گره ها
-
آیتم های محتوا
-
کامنت ها
-
بررسی ها
-
-
اعضا و احراز هویت
-
روش های ورود
-
-
ویژگی های دیگر
-
اعلان ها و ایمیل ها
-
فرم ها
-
فروشگاه
-
API
-
-
Invision Community 4.2
-
Invision Community 4.3
-
Invision Community 4.4
-
Invision Community 4.5
-
Invision Community 4.6
-
Invision Community 4.6.10
-
Legacy Documentation
-
4.2 و پایینتر: IPS اتصال
-
4.2 و پایینتر: کنترل کننده های ورود
-
-
حالت توسعه
فعال کردن حالت توسعه دهنده
قبل از شروع توسعه افزونهها یا برنامههای کاربردی برای انجمن، باید Developer Mode را فعال کنید. حالت برنامهنویس باعث میشود که نرمافزار فایلهای مورد نیاز را مستقیماً از سیستم فایل بارگیری کند، نه نسخههای کش یا از پایگاه داده.
هشدار
حالت برنامهنویس باعث میشود که نرمافزار بسیار کندتر از حد معمول اجرا شود و ممکن است آسیبپذیریهای امنیتی ایجاد کند. فقط در صورتی باید حالت برنامه نویس را فعال کنید که یک توسعه دهنده PHP هستید که قصد توسعه برنامه ها و پلاگین ها را دارید و باید این کار را فقط در یک نصب محلی که از طریق وب قابل دسترسی نیست انجام دهید.
فعال کردن حالت توسعه دهنده
برای فعال کردن حالت برنامهنویس در نصب خود این مراحل را دنبال کنید:
ابزار Developer Tools را دانلود کنید، مطمئن شوید که نسخه صحیح را برای نسخه انجمنی که استفاده میکنید دانلود کردهاید. ابزارهای برنامهنویس برای نسخههای پیش از انتشار ممکن است در دسترس باشند، بنابراین ممکن است لازم باشد نسخه قدیمیتری را از بخش «نسخههای قبلی» دانلود کنید. ابزار توسعه دهنده را از حالت فشرده خارج کنید و آنها را به جایی که انجمن خود را نصب کرده اید منتقل کنید و با فایل های موجود ادغام کنید. یک پوشه "dev" و پوشه های "dev" برای هر برنامه وجود دارد. اگر همه برنامههای انجمن را نصب نکردهاید، باید قبل از کپی کردن، پوشههایی را که به آنها نیاز ندارید از پوشه Developer Tools حذف کنید. وجود Developer Tools برای برنامه های حذف شده ممکن است باعث ایجاد خطا شود. اگر قبلاً یک فایل constants.php در پوشه اصلی نصب خود ندارید، یکی ایجاد کنید.
تیکه کد زیر را به فایل constants.php خود اضافه کنید:
<?php define( 'IN_DEV', TRUE ); برای اطلاعات بیشتر در مورد نحوه استفاده از ابزارهایی که با فعال شدن حالت برنامهنویس در دسترس میشوند و برای اطلاعات بیشتر در مورد توسعه، به مستندات توسعهدهنده مراجعه کنید.
نکته مهم
ابزارهای توسعه دهنده شامل فایل های لازم برای همه برنامه های IPS است. اگر حالت توسعهدهنده را در نصبی فعال میکنید که در آن برنامهها و افزونههای شخص ثالث وجود دارند، باید ابزارهای توسعهدهنده (یعنی پوشه "dev") را نیز برای ابزارهای نویسنده تهیه و اعمال کنید.
توجه داشته باشید که وقتی نصب خود را ارتقا میدهید، باید ابزار Developer Tools بهروز شده را دانلود کنید.
-
استفاده از مرکز توسعه دهنده
استفاده از مرکز توسعه دهنده
مرکز توسعهدهنده برای هر برنامه و پلاگین به گونهای طراحی شده است که ایجاد و بهروزرسانی برنامهها و افزونهها را برای نرمافزار انجمن Invision تسهیل میکند. این می تواند به شما کمک کند به طور خودکار مواردی مانند تنظیمات، تغییرات پایگاه داده، وظایف و موارد دیگر را ردیابی کنید. در حالی که میتوان با تنظیم فایلهای خود مستقیماً روی دیسک، از بسیاری از عملکردهای موجود از طریق مرکز توسعهدهنده عبور کرد، ما قویاً شما را تشویق میکنیم تا در صورت امکان از مرکز توسعهدهنده برای به حداقل رساندن زمان توسعه و همچنین احتمال بروز اشکال در کد شخص ثالث خود استفاده کنید.
از آنجایی که نیازهای یک برنامه کاربردی در مقابل یک افزونه متفاوت است، مرکز توسعه دهنده برای هر یک متفاوت است.
برنامه ها
مرکز توسعهدهنده برای هر برنامه به شما امکان میدهد چندین جنبه از برنامه را مدیریت کنید و ایجاد روالهای ارتقا و مدیریت نسخهها را آسان میکند. ما از طریق هر برگه در مرکز توسعهدهندگان اجرا میکنیم تا کارهایی را که میتوان انجام داد مشخص کنیم.
ماژول ها - فرانت
تب ماژولهای فرانت به شما امکان میدهد ماژولهای فرانت جدیدی ایجاد کنید، که مربوط به پوشههای زیر برنامهها/(Your-application)/modules/front/ هستند. هنگامی که یک ماژول فرانت ایجاد کردید، سپس می توانید یک یا چند کنترلر در زیر آن ایجاد کنید، و می توانید تعریف کنید که کدام ماژول، ماژول فرانت پیش فرض است (یعنی اگر از index.php?app=(برنامه شما) بازدید کنید، کدام ماژول باید بارگذاری شود)، و همچنین اینکه کدام کنترلر پیش فرض در هر ماژول است. همچنین می توانید ماژول ها و کنترلرها را در اینجا ویرایش و حذف کنید.
ماژول ها - ادمین
درست مانند ماژول های فرانت، می توانید ماژول های ادمین خود را از مرکز توسعه دهندگان مدیریت کنید. رفتار این تب بسیار شبیه به تب ماژول های فرانت است، با یک تفاوت کلیدی (و مهم): زمانی که کنترلرها را ایجاد می کنید، می توانید به طور همزمان ورودی های منو، محدودیت های ACP ایجاد کنید و می توانید از یکی از سه الگو برای خود کنترلر استفاده کنید. (یک کنترل کننده معمولی، یک کنترل کننده کمکی جدول، یا یک کنترل کننده گره). اگر کنترلکننده یک کنترلکننده گره باشد (یعنی صفحهای که به شما امکان میدهد دستههایی را که میخواهید از عملکرد Node برای آن استفاده کنید) مدیریت کنید، باید از الگوی کنترل گر گره استفاده کنید. به طور مشابه، اگر قصد خروجی یک جدول از داده ها را دارید (مانند لیست اعضا یا گزارش های سیستم) باید از الگوی کنترلر جدول کمکی استفاده کنید.
تنظیمات
خیلی ساده، تب تنظیمات به شما امکان می دهد تنظیمات جدید را اضافه کنید و مقادیر پیش فرض آنها را تعریف کنید. سپس این تنظیمات در یک فایل settings.json در data/ folder برنامه شما ردیابی میشوند و زمانی که مدیران برنامه شما را نصب میکنند، رکوردهای تنظیمات نیز نصب میشوند. همچنان باید یک یا چند کنترلر برای ارائه تنظیمات به مدیر ایجاد کنید تا مدیر بتواند مقادیر را در صورت لزوم تنظیم کند.
تسک ها
می توانید از برگه تسک ها برای اضافه کردن هر کاری که توسط برنامه شما مورد نیاز است استفاده کنید. شما یک "کلید" را تعریف می کنید که به عنوان نام فایل استفاده می شود، و این کار چند بار باید اجرا شود، و سپس یک فایل اسکلت در پوشه applications/(your-application)/tasks/ به طور خودکار برای شما ایجاد می شود. شما برای تکمیل وظایف شما همچنین در یک فایل tasks.json (در پوشهapplication's data/) ردیابی میشود و پس از نصب برنامه بهطور خودکار در نرمافزار وارد میشود.
نسخه ها
با یک برنامه کاملاً جدید، دو رکورد را به طور خودکار در برگه نسخه ها مشاهده خواهید کرد: install، که نشان دهنده نصب برنامه شما است، و working، که نشان دهنده نسخه منتشر نشده فعلی است (تا زمانی که آماده انتشار برنامه خود نباشید، شماره نسخه را تعریف نمی کنید. ، حتی برای نسخه های به روز رسانی بعدی). به طور معمول، شما نیازی به تعریف هیچ گونه تغییر پایگاه داده در اینجا ندارید. وقتی تغییراتی را در برگه Database Schema ایجاد میکنید (به زیر مراجعه کنید)، تغییرات SQL بهطور خودکار هم برای نصب و هم برای آخرین نسخه ردیابی میشوند. با این حال، اگر برنامه خود را از 3.x به 4.x بهروزرسانی میکنید، ممکن است لازم باشد به صورت دستی پرسوجوهایی را برای اجرا در حین ارتقا تعریف کنید، یا اگر جداول پایگاه داده را خارج از برنامه خود تنظیم میکنید، باید این تغییرات را به صورت دستی در اینجا تعریف کنید.
همچنین میتوانید روالهای ارتقا و درخواستهای دستی نسخههای قدیمیتر را در صورت نیاز از این صفحه اضافه و حذف کنید.
اگر در حال ایجاد نسخه ارتقاء هستید که نیاز به اجرای کد بیشتری نسبت به یک جستجوی ساده پایگاه داده دارد، می توانید روی نماد کد </> برای نسخه "working" کلیک کنید که یک فایل upgrade.php در دایرکتوری راه اندازی/upg_working/ برنامه شما ایجاد می کند. سپس میتوانید این فایل را باز کنید و دستورالعملهای موجود در فایل را دنبال کنید تا مراحل ارتقا را ایجاد کنید که کار بیشتری نسبت به اجرای پرسوجوهای پایگاه داده انجام میدهند.
میتوانید درباره نسخهسازی برای برنامهها در مقاله نسخهها/بهروزرسانی بیشتر بخوانید.
ویجت ها
اگر برنامه شما ویجت های نوار کناری را تعریف می کند، می توانید آنها را از مرکز توسعه دهنده برنامه خود تعریف کنید. هنگامی که ویجت را برای برنامه خود اضافه می کنید، یک کلید ویجت تعریف می کنید و مشخص می کنید که ویجت شما دارای کدام کلاس ویجت است (که عملکردهای خودکار خاصی را ارائه می دهد، مانند ذخیره ویجت بر اساس مجوزها در صورت لزوم). میتوانید مشخص کنید که آیا ویجت شما در نوار کناری و/یا در برنامه صفحات برای استفاده در صفحات موجود باشد، میتوانید تعیین کنید که آیا ویجت شما باید در برنامه شما بهطور پیشفرض در خارج از کادر نمایش داده شود یا خیر، انتخاب کنید که از کدام سبک فرم پیکربندی استفاده شود ( منو یا پنجره بازشو)، و تعیین کنید که آیا ویجت را می توان بیش از یک بار در همان صفحه استفاده کرد. پس از ذخیره فرم، یک الگوی اسکلت روی applications/(برنامه شما)/widgets/ نوشته میشود که باید آن را مطابق مناسب تنظیم کنید و ویجت در /data/widgets.json برای نصب و ارتقاء برنامه شما ردیابی میشود.
هوک ها
برنامهها، مانند افزونهها، میتوانند هوک هایی را تعریف کنند که اساساً راهی برای نادیده گرفتن رفتار کد پیشفرض در Suite هستند. می توانید اطلاعات بیشتری در مورد قلاب کد و قلاب تم در مقالات مربوطه بخوانید.
افزودنی ها
افزودنی ها به شما این امکان را می دهند که بدون نیاز به "قلاب کردن" مستقیم به اجرای کد، اقداماتی را در نقاط خاصی در طول اجرای کد معمولی انجام دهید. انواع مختلفی از برنامه های افزودنی در مجموعه وجود دارد. برای ایجاد یک برنامه افزودنی جدید برای برنامه خود، در زیر تب Extensions، برنامه ای را که افزونه مورد نظر خود را (معمولاً هسته یا Nexus) در خود نگه می دارد، گسترش می دهید و سپس روی نماد + در کنار آن نوع پسوند کلیک می کنید. یک فایل اسکلت در دایرکتوری extensions/(app)/(extension)/ برای شما نوشته می شود.
اسکیمای پایگاه داده
هر زمان که نیاز به افزودن جداول پایگاه داده جدید یا تنظیم جداول پایگاه داده موجود برای برنامه خود داشتید، همیشه باید این کار را در تب Database Schema در مرکز توسعه دهنده برنامه خود انجام دهید. تغییرات شما نه تنها بلافاصله برای شما به صورت خودکار در پایگاه داده شما اجرا می شود، بلکه در حین نصب و ارتقاء برنامه شما ردیابی و به طور خودکار اجرا می شود. میتوانید جداول پایگاه داده، ستونها، فهرستها و درجهای پیشفرض برای این جداول را از این ناحیه از مرکز توسعهدهنده از طریق یک رابط کاربری گرافیکی ساده برای استفاده، اضافه، ویرایش و حذف کنید.
محدودیت های مدیریت CP
این برگه از مرکز توسعهدهنده به شما امکان میدهد محدودیتهای مدیریت CP را تعریف کنید، که سپس میتوانید کد خود را بررسی کنید تا مشخص کنید آیا مدیری که در حال حاضر وارد سیستم شدهاید اجازه انجام عملی را دارد که میخواهد انجام دهد یا خیر. هیچ الزام فنی برای استفاده از محدودیتهای مدیریت CP وجود ندارد، اما به شدت توصیه میشود زمانی که برنامه شما عملکردهای مختلف را ارائه میکند، این کار را انجام دهید. به عنوان مثال، اگر برنامه شما می تواند به مدیران اجازه دهد محتوا اضافه کنند و آمار گزارش را مشاهده کنند، یک وب سایت ممکن است بخواهد به یک گروه از مدیران اجازه انجام همه کارها را بدهد و به گروه دیگری از مدیران فقط اجازه مشاهده آمار را بدهد. شما می توانید با تعریف این محدودیت ها در Developer Center و سپس بررسی محدودیت های موجود در کد خود، این کار را به راحتی انجام دهید.
محدودیت ها به یک ماژول گره خورده است، بنابراین ابتدا باید یک ماژول مدیریت ایجاد کنید (و می توانید به طور خودکار یک محدودیت اساسی در طول این فرآیند ایجاد کنید). اگر ماژول شما مشاهده، افزودن، ویرایش و حذف را در یک ماژول انجام میدهد (به عنوان مثال)، ممکن است بخواهید محدودیتهای اضافی را از زبانه محدودیتهای مدیریت CP ایجاد کنید و سپس کنترلکنندههای خود را تنظیم کنید تا محدودیت مناسب را هنگامی که مدیریت تلاش میکند بررسی کند. آن عمل خاص را انجام دهد.
همچنین توجه داشته باشید که میخواهید برای هر گروه محدودیت و هر محدودیتی که در این صفحه فهرست شده است، رشتههای زبان ایجاد کنید، زیرا رشتههای زبان در ناحیه Admin CP Restrictions AdminCP استفاده میشوند. اگر یک محدودیت "myappview" ایجاد کرده اید، کلید زبانی که می خواهید تنظیم کنید برای گروه "r__myappview" و "r__myappview_manage" (به طور پیش فرض، مگر اینکه این محدودیت را حذف کنید) برای خود محدودیت خواهد بود.
منوی CP مدیریت
تب Admin CP Menu به شما امکان می دهد پیوندهای خود را در منوی AdminCP مدیریت کنید و به فایل data/acpmenu.json برای برنامه شما مربوط می شود. هنگام افزودن ماژولهای مدیریت، ورودیهای جدید AdminCP Menu را بهطور خودکار ایجاد خواهید کرد (اگر این کار را انتخاب کنید)، با این حال میتوانید این فایل را به صورت دستی ویرایش کنید تا در صورت نیاز، منو را بیشتر سفارشی کنید.
اگر می خواهید یک ورودی منو (یا چندین ورودی) را در زیر برگه آمار قرار دهید، باید از برگه سطح بالا "stats" استفاده کنید.
پلاگین ها
تنها برگه Developer Center برای افزونهها که برای برنامهها وجود ندارد، برگه «Information» است که به شما امکان میدهد اطلاعات مربوط به افزونه خود را تنظیم کنید (نویسنده، نام افزونه و غیره). بقیه برگهها با آنهایی که برای برنامهها هستند یکسان هستند و همان هدف را دنبال میکنند. میتوانید در مستندات برنامهنویس افزونهها درباره افزونهها و نحوه استفاده از آنها بیشتر بیاموزید.
-
بارگذاری خودکار کلاس ها
بارگذاری خودکار کلاس ها
کلاسهای انجمن "خودکار" هستند. این بدان معنی است که شما هرگز مجبور نیستید فایل منبع IPS4 را اضافه کنید یا به آن نیاز داشته باشید.
برای مرجع، روش بارگذاری خودکار \IPS\IPS::autoloader() است که در فایل init.php دایرکتوری root قرار دارد.
مکان یابی کلاس ها
کلاس ها باید در مکان صحیح قرار داشته باشند و به درستی نامگذاری شوند تا بارگذار خودکار بتواند آنها را پیدا کند. به طور کلی سه مکان وجود دارد:
کلاس های فریم ورک ساختار نام کلاس: \IPS\Namespace\Class مکان روی دیسک: system/Namespace/Class.php
کلاس های برنامه ساختار نام کلاس: \IPS\app\Namespace\Class (توجه داشته باشید که کلید برنامه کوچک است، اما قسمتهای بعد از آن PascalCase هستند) مکان روی دیسک: Location on disk: applications/app/sources/Namespace/Class.php
پسوندها و ماژول های برنامه ساختار نام کلاس: \IPS\app\modules\front\module\controller (توجه داشته باشید همه قسمتها حروف کوچک هستند)
مکان روی دیسک: applications/app/modules/front/module/controller.php
برای کلاسهای فریم ورک و کلاسهای برنامه، فایل نهایی باید همیشه در یک پوشه باشد (نه در دایرکتوری سیستم). اگر فقط یک سطح عمیق باشد، سیستم به دنبال فایلی در دایرکتوری به همین نام خواهد بود. برای مثال \IPS\Member در system/Member/Member.php قرار دارد در حالی که \IPS\Member\Group در system/Member/Group.php قرار دارد.
Monkey Patching
هنگامی که اعلام می شود، کلاس ها همیشه با یک خط زیر شروع می شوند. به عنوان مثال، در سراسر مجموعه IPS Community، شما با \IPS\Member تماس میگیرید، با این حال، اگر به فایل منبع نگاه کنید، میبینید که به شکل زیر اعلام شده است:
namespace IPS; class _Member { ... این یک ویژگی فنی به نام وصله میمون است که به توسعه دهندگان شخص ثالث اجازه می دهد تا هر کلاس را بدون توجه به کد و به گونه ای که قلاب ها با یکدیگر تضاد ندارند، بارگذاری کنند.
در این مثال، سیستم درست پس از بارگذاری خودکار فایل Member.php، کدی مانند زیر را اجرا می کند:
namespace IPS; class Member extends \IPS\_Member { } اگر یک توسعهدهنده شخص ثالث بخواهد \IPS\Member را بیش از حد بارگذاری کند، سیستم این مورد را در این بین تزریق میکند، بنابراین شما با ساختاری مانند زیر مواجه میشوید:
\IPS\Member گسترش میدهد hook1 hook1 گسترش میدهد \IPS\_Member یا اگر دو قلاب می خواستند \IPS\Member را اضافه بار کنند:
\IPS\Member گسترش میدهد hook1 hook2 گسترش میدهد \IPS\_Member hook1 گسترش میدهد hook2 این بدان معنی است که فریم ورک و هر کد شخص ثالث فقط باید \IPS\Member را فراخوانی کند و سیستم نه تنها به طور خودکار منبع را بارگیری می کند، بلکه زنجیره ای از هر هوکی که می خواهد کلاس را بیش از حد بارگذاری کند ایجاد می کند.
اگر مکانیزم این گیج کننده است (این یک عمل غیر معمول است) - درک کامل آن ضروری نیست. شما فقط باید بدانید که کلاس ها باید با یک زیرخط در هنگام اعلام پیشوند باشند، اما این زیرخط هرگز در هنگام فراخوانی کلاس استفاده نمی شود.
همچنین به این معنی است که به جای فراخوانی "self::" در کلاس، باید "static::" را فراخوانی کنید، بنابراین کلاس overload شده را فراخوانی می کنید، نه اصلی را.
کتابخانه های شخص ثالث
اگر از کامپوزر استفاده میکنید، لطفاً دایرکتوری Vendor ( وابستگی های PHP در پروژه ای که از Composer استفاده بشه، تو فولدر vendor قرار میگیرند) را در فهرست منابع قرار دهید!
اگر میخواهید از یک کتابخانه PHP شخص ثالث بدون استفاده از کامپوزر و بارگذاری خودکار آن استفاده کنید، البته باید به صورت دستی درج شود و نمیتوان آن را اصلاح کرد.
اگر کتابخانه از استاندارد PSR-0 برای نامگذاری پیروی میکند، میتوانید آن را به فضای \IPS\IPS::$PSR0Namespaces مانند این اضافه کنید و بارگذاری خودکار آن را بهطور خودکار بارگیری میکند:
\IPS\IPS::$PSR0Namespaces['Libary'] = \IPS\Application::getRootPath() . '/applications/app/sources/vendor/Library'; در غیر این صورت، باید فایل های منبع را به صورت دستی وارد کنید.