توابع مفید دروپال برای کار با آدرس صفحات در توسعه ماژول

توابع مفید دروپال برای کار با آدرس صفحات در توسعه ماژول

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

مسیر صفحات در دروپال

یک سایت دروپالی صفحات متعددی دارد که هر یک آدرس یکتایی دارند. اگر آدرس اصلی سایت مثلا drupalika.org را جدا کنیم، مسیر صفحه (path) در سایت باقی می ماند. مثلا اگر چنین آدرسی داشته باشیم:

http://drupalika.org/drupalika/form

قسمت drupalika/form در آن مسیر صفحه است.

 گرفتن مسیر جاری در دروپال با تابع current_path

اگر در ماژولی که می نویسیم نیاز داشته باشیم که مسیر صفحه ای که الان در حال نمایش است را استخراج کنیم، می توانیم از تابع current_path برای این منظور استفاده کنیم. برای نمونه در کد زیر ملاحظه کنید:

$current_path = current_path();

در این کد تابع current_path را فراخوانی کرده ایم و مقداری که بر می گرداند را در متغیر دیگری به نام $current_path نگه داری کرده ایم. بنابراین تابع current_path رشته ای حاوی مسیر جاری را باز می گرداند.

وقتی این صفحه از سایت را باز می کنیم:

http://drupalika.org/drupalika/form

در صورتی که در جایی از ماژول های سایت، تابع current_path صدا زده شود، مقدار drupalika/form را بر می گرداند.

فقط مسیر صفحه در دروپال

نکته مثبت این تابع این است که فقط مسیر دروپال را بر می گرداند. مثلا اگر سایت را تنظیم کرده باشیم که چندزبانه باشد و مثلا از path prefix برای تعیین زبان استفاده کرده باشیم، کد زبان را از مسیر حذف می کند. مثلا اگر آدرس زیر را داشته باشیم:

http://drupalika.org/fa/drupalika/form

همانطور که می بینید کد زبان فارسی یعنی fa در ابتدای مسیر قرار دارد. ولی تابع current_path در این حالت نیز فقط مسیر ثبت شده در دروپال یعنی drupalika/form را بر می گرداند.

فقط مسیر اصلی صفحه و نه alias

نکته دیگری که در استفاده از این تابع اهمیت دارد این است که در صورتی که مسیری که برای دسترسی به یک صفحه استفاده می کنیم یک آدرس مستعار (path alias) باشد، تابع current_path مسیر اصلی که در دروپال ثبت شده است را بر می گرداند و نه alias را. مثلاً برای مسیر drupalika/form یک مسیر alias در دروپال ثبت می کنیم به نام forms/test. به این شکل هر دو آدرس

http://drupalika.org/drupalika/form

و

http://drupalika.org/forms/test

به یک صفحه می رسند. ولی تابع current_path در هر صورت مسیر اصلی که در دروپال ثبت شده است یعنی drupalika/form را باز می گرداند.

 

مقایسه مسیر صفحات دروپال با الگوی خاص

یکی از دلایلی که ممکن است آدرس صفحه جاری را (که در بخش قبل روش استخراج آن توضیح داده شد) به دست بیاوریم، این است که آن را با یک رشته یا الگوی خاصی مطابقت دهیم و عملیات خاصی را انجام دهیم. مثلاً یک hook خاص را پیاده سازی می کنیم که در لود تمام صفحات دروپال اجرا می شود ولی می خواهیم در صفحات خاصی عملیاتی را انجام بدهد. به این منظور ضمن اینکه مسیر جاری را مانند بخش قبل می گیریم باید آن را مقایسه کنیم.

معرفی تابع drupal_match_path

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

drupal_match_path($path, $patterns)

این تابع دو ورودی دارد. ورودی اول مسیری است که می خواهیم بررسی شود. ورودی دوم می تواند رشته ای از الگو هایی باشد که می خواهیم مسیر داده شده در ورودی اول با آنها مطابقت داده شود. خروجی این تابع یک مقدار بولی است یعنی یا TRUE و یا FALSE بر می گرداند. در صورتی که مسیر داده شده با الگو ها مطابقت داشته باشد، مقدار TRUE و در غیر این صورت مقدار FALSE از این تابع باز گرداند می شود.

نمونه ای از استفاده این تابع را در کد زیر مشاهده می کنید:

$path = current_path();
$patterns = "drupalika/form";
$result = drupal_match_path($path, $patterns);

در خط اول مسیر جاری را استخراج کرده ایم. در خط دوم الگوی مورد نظر خود را نوشته ایم. در خط سوم مسیر جاری و الگو های تعریف شده را به تابع drupal_match_path ارسال کرده ایم و در نهایت نتیجه را در $result ذخیره کرده ایم.

مقایسه مسیر با الگو های عمومی تر

الگو می تواند حاوی * نیز باشد. زمانی که از * در الگو استفاده می کنیم به این معنی است که بخشی از آدرس را نمی دانیم. مثلا در کد زیر:

$path = current_path();
$patterns = "drupalika/*";
$result = drupal_match_path($path, $patterns);

هر مسیری ک در ابتدای آن drupalika/ باشد، مورد نظر خواهد بود.

ارسال نظر