PDA

View Full Version : سوال: درخواست آموزش فارسی در مورد hook



alifallah
دوشنبه 23 دی 1392, 20:46 عصر
با سلام، من هرچی در مورد hook تو سایت های فارسی سرچ کردم چیزی پیدا نکردم، تو سایت های خارجی مثل stackoverflow خیلی سوال و جواب دیدم ولی چون زبانم اونقدر خوب نیست، نمی تونم دقیقا توضیحاتش رو متوجه بشم.
ممنون میشم اگر کسی لطف کنه و یه توضیح بده :)

abolfazl-z
دوشنبه 23 دی 1392, 20:58 عصر
hook فکر نکنم تو پی اچ پی باشه !

من که توی سایت PHP چیزی ندیدم!

alifallah
دوشنبه 23 دی 1392, 21:02 عصر
فک کنم با این قابلیته که میشه مثل وردپرس و سایر سیستم ها، پلاگین و افزونه نوشت و اجرا کرد.
تو فریمورک Codeigniter این قابلیت هست اما من اصلا درک نمی کنم که طرز کارش چطور هست، اگه کسی باشه که توضیحی بده و یه مثال کوچیک بزنه ممنون میشم :)

metal gear solid 4
دوشنبه 23 دی 1392, 23:41 عصر
انجمن ساز MyBB هم از این روش استفاده میکنه. بسیار هم سادست. این لینک رو مطالعه بفرمایید. (http://yaldaram.com/thread-166-post-4557.html)

metal gear solid 4
دوشنبه 23 دی 1392, 23:52 عصر
در سیستم MyBB ( صرفاً جهت مثال ) پلاگین ها به صورت فایل هایی هستند که در یک مسیر خاص ذخیره میشن.
سینتکسشون هم تنها یک تابع یا کلاس هست.
در واقع شما برای ساخت چنین سیستمی باید تابع قوانین باشید. یا قوانینی رو برای خودتون تعیین کنید و تمامی پلاگین ها از این قوانین پیروی کنن. در سیستم MyBB: تمامی پلاگین ها دارای یک تابع _info هستند که قبل از علامت _ اسم اصلی پلاگین میاد.

مثلاً شما یک پلاگین تعریف میکنید به نام :

function myPlugin_info(){ ... }
این در سیستم مای بی بی به عنوان پلاگینی شناخته میشه که اسم myPlugin داره. به همین سادگی.
حالا این پلاگین شما میخواد بعد از ثبت نام کاربر پیغامی رو نشون بده. من به سینتکس دقیق خود MyBB نمینویسم. در واقع Pseudo Code رو نشون میدم.

تابعی ایجاد میکنید به این اسم داخل فایل پلاگینتون

function myCodeAfterRegister(){ ... }

حالا چطور MyBB میفهمه که قراره این تابع ( myCodeAfterRegister ) رو بعد از ثبت نام کاربر فراخونی کنه. اینجاست که شما باید hook هایی رو تعریف کنید. کاری که MyBB کرده. یعنی توی کدهاتون بعد از ثبت نام کاربر. کدی قرار بدید مثلا

$hook->register_done()

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

$plugins->add_hook("register_done", "myCodeAfterRegister");
این سینتکس دقیق MyBB نیست و مهم هم نیست که باشه یا نه. کد میگه این تابع بعد از هوک register_done اجرا میشه.
به همین سادگی بعد از هر ثبت نام. کدی که شما توی این تابع نوشتید هم از طریق هوک اجرا میشه. :)

saidshp
سه شنبه 24 دی 1392, 00:08 صبح
یه روشش اینه که از الگوی طراحی observer استفاده کنی اینطوری هر ابجکتی که می خوای پلاگین بخوره مثلا کنترلر رو رویدادگرا می کنی و پلاگین در زمان مناسب اجرا میشه. در واقع با این الگو باید یه event manager طراحی کنی.
اینا رو سرچ کن event manager php observer design pattern