نصب ماژول

نصب ماژول


به نام خدا

ماژول نویسی دروپال قسمت سوم

Action &trigger

یک هدف مشترک هنگام کار با دروپال برای زمانی است که رویداد خاصی رخ می دهد.

مثلا ما به عنوان مدیر سایت می خواهیم وقتی محتوایی ایجاد شد یک پیغام خاص چاپ شود یا یک کاربر باید مسدود شود اگر کلمات خاصی را در یک نظر ثبت کند شما را با رویداد (Event) و Trigger آشنا میکنم.

برخی از رویدادها در دروپال:

  1. وقتی محتوایی ایجاد میکنیم (Creation of a node )
  2. هنگامی محتوایی را حذف میکنیم (Deletion of a node)
  3. هنگامی که محتوایی را مشاهده میکنیم (Viewing of a node)
  4. هنگامی ایجاد کاربر(Creation of a user account)
  5. هنگام ویرایش اطلاعات کاربر(Updating of a user profile)
  6. ورود کاربر(Login User)
  7. خروج کاربر (Logout User)

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

وقتی ماژول Trigger  رو نصب می کنیم در قسمت پیکربندی خواهیم دید که شامل چند تب system، node, comment, taxonomy,user  است که با مشاهده هر قسمت می توانیم رویداده های مختلف رو ببینیم و Action  مورد نظر خود را تعریف کنیم.

برای نوشتن Action  ها از hook_action_info() استفاده می کنیم Action  ها را به صورت آرایه می باشند.

مراحل نوشتن Action

  1. انتخاب یک نام مناسب برای Action مورد نظر است
  2. انتخاب دسته بندی مناسب است و دسته بندی هایAction  شامل هر یک از مقادیر comment,node,user,system  است که مثلا دسته بندی system  برای اکشن هایی است که کار خاصی را انجام نمیدهند و فقط یک پیغام را چاپ می کنند و برنامه نویسی پیچیده ای ندارند.
  3. انتخاب Label  مناسب برای اکشن مورد نظر
  4. مقدار configurable است که بعضی از action ها تنظیمات خاصی دارند اگر configurable  را true  بزاریم در یک صفحه جداگانه تنظیمات مربوط به اکشن برای ما نمایش داده می شود.
  5. مربوط به triggers  است که میخواهیم اکشن ما بعد از انجام چه رویدادی اتفاق بیفتد مثلا node_insert ,node_delet  و…

الان باهم یک اکشن ساده را می نویسیم فایل .info &.moduleبا نام مورد نظر خود ایجاد کنید.

فایل .info

name= Action

description= My first action

core=7.x

فایل .module

<?php

/*

*Impelement hook_action_info()

*/

function action_action_info() {

    return array(

        ‘beep_action’=> array(

            ‘type’=>’system’,

            ‘label’=>t(‘Beep annoyingly’),

            ‘configurable’=> FALSE,

            ‘triggers’=>array(‘node_insert’,’node_delete’),

        ),

    );

}

function beep_action() {

    drupal_set_message(‘Action done!!!’);

}

چند نکته : نام ماژول من Action  است و به همین دلیل به جای هوک action  یعنی نام ماژول را قرار داده ام.برای نوشتن هوک اکشن یک ارایه برمی گردانیم که آرایه ما شامل کلیدی که نام تابع ما می شود تابع ما خود یک آرایه است و شامل مقادیر بالاست که قبلا در باره آن ها صحبت کرده ایم و مقدار Triggers  ما خود یک آرایه است که در هنگام ایجاد و حذف محتوا از آن میخواهیم که تابع beep_action  را اجرا کند و در تابع ما خواستیم که پیغامی را برای ما چاپ کند.

توجه :beep_action  تابعی است که ما میخواهیم اکشن ما این کار را انجام دهد پس باید تابعی با همین نام بنویسم که کارمدنظر مون انجام بشه.

بعد از پاک کردن کش دروپال ماژول را فعال میکنیم به پیکربندی ماژول triggers می رویم تا ببینیم که action  ما فعال شده و اون رو فعال میکنیم به شکل زیر دقت کنید.

 

ماژول نویسی

ماژول نویسی

همانطور که در شکل می بینید در قسمت اضافه کردن و حذف محتوا اکشن ما فعال شده و در دسته بندی system  هم قرار دارد با فعال کردن آن و همچنین افزودن و یا حذف محتوا میبینیم که پیغام Action done!!! چاپ می شود.

جدول زیر ارتباط بین hook و Triggers  ها رو به ما نشان می دهد.

Hook                                                

Trigger Name
comment_insert                         After saving a new comment
comment_update                      After saving an updated comment
comment_delete                       After deleting a comment
comment_veiw                             When a comment is being viewed by an authenticated user
cronWhen cron runs
node_presave                          When either saving a new post or updating an existing post
node_insert                             After saving a new post
node_update                           After saving an updated post
node_delete                           After deleting a post
node_view                              When content is viewed by an authenticated user
taxonomy_term_insert   After saving a new term to the database
taxonomy_term_delete   After deleting a term
taxonomy_term_update  After saving an updated term to the database
user_insert                          After a user account has been created
user_update After a user’s profile has been updated
user_delete                         After a user has been deleted
user_login                           After a user has logged in
user_logout                      After a user has logged out
user_view                           When a user’s profile is being viewed

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

اگر بخواهیم اکشن ما در تمام Triggers وجود داشته باشد ‘triggers’ => array(‘any’), می گزاریم.

در این مقاله توضیحات مختصری درباره Triggers  وAction  ها دادیم و همانطور که گفتم میتوانیم اکشنی بنویسیم که دارای پیکربندی باشد.و گاهی اوقات ما می توانیم اکشن را بدون اینکه  Triggers  اتفاق بیفته با تابع action_do  انجام دهیم ویا با استفاده از هوک ها میتوانیم Triggers  اختصاصی خود را بنویسیم برای نوشتن Triggers از هوک hook_trigger_info() استفاده میکنیم .

در زیر ساختار چند نمونه از Triggers  را مشاهده میکنید.

 

/**

* Implements hook_trigger_info().

*

* Defines all the triggers that this module implements triggers for.

*/

function trigger_trigger_info() {

return array(

‘node’ => array(

‘node_presave’ => array(

‘label’ => t(‘When either saving new content or updating existing content’),

),

‘node_insert’ => array(

‘label’ => t(‘After saving new content’),

),

‘node_update’ => array(

‘label’ => t(‘After saving updated content’),

),

‘node_delete’ => array(

‘label’ => t(‘After deleting content’),

),

‘node_view’ => array(

‘label’ => t(‘When content is viewed by an authenticated user’),

),

‘comment’ => array(

‘comment_presave’ => array(

‘label’ => t(‘When either saving a new comment or updating an existing comment’),

),

);

}

با ما همراه باشید

آموزش دروپال

اکشن ها در برنامه نویسیتریگرها

امکان ارسال نظر وجود ندارد!