تغییر نمایش و جابجایی عناصر یک فرم در پیاده سازی تم دروپال

تغییر المان های فرم های دروپال در پیاده سازی تم

معمولا برنامه نویسی و توسعه در چارچوب یک سیستم مدیریت محتوا و یا یک فریم ورک، محدودیت هایی را به همراه می آورد، چون شما مجبور هستید، هر کاری را یا آگاهی از API آنها انجام بدهید. در صورتی که این محدودیت، طوری باشد که شما نتوانید کار مورد نظر خود را در چارچوب های از قبل پیش بینی شده این سیستم ها، انجام دهید با مشکل مواجه می شوید و یا ناچار باشید به تغییر در سورس کد های آن سیستم (patch) دست بزنید.

برای نمونه، در نظر بگیرید که سیستم مدیریت محتوا (CMS)ی مورد نظر شما، یک بلوک لاگین برای اعضا دارد که در آن المان های معمول یک فرم لاگین قرار دارند. ولی طراحی گرافیکی شما به صورتی است که نیاز دارید، در چینش المان های این فرم، یک جابجایی انجام دهید. در صورتی که آن سیستم، در API خود راهی برای این نوع تغییر در نظر نگرفته باشد، با مشکل مواجه می شوید و نمی توانید کار را از طریق نرمال آن انجام دهید.

دروپال، یک فریم ورک مدیریت محتوای بسیار انعطاف پذیر است. تقریباً هیچ تغییری در عملکرد آن، غیر ممکن نیست. برای این کار نیازی به تغییر در کد های هسته دروپال ندارید. به آسانی می توانید با شناختن API دروپال از طریق پیاده سازی hook ها و یا توابع قالب، تغییرات مورد نظر خود را اعمال کنید.

نمونه ای که در اینجا به آن می پردازیم، تغییر در نحوه نمایش فرم موجود در بلوک لاگین، در پیاده سازی تم است. ویژگی مثبت دروپال این است که در سطح پیاده سازی قالب دروپال نیز می توان، از hook ها استفاده کرد. در اینجا از پیاده سازی hook_form_alter استفاده می کنیم.

دروپال از طریق hook_form_alter این امکان را به ماژول ها و تم ها می دهد تا تغییرات مورد نظر خود را در هر فرمی اعمال کنند. به این صورت می توانید بعضی از عناصر فرم ها را حذف کرده و یا تغییر بدهید. همین طور می توانید المان های مورد نظر خود را به آن بیفزائید.

در صورتی که این کار را می خواهید در تم (قالب سایت) انجام دهید، باید پیاده سازی hook را در فایل template.php تم خود بنویسید. یک نمونه از این پیاده سازی به صورت زیر است:

function THEMENAME_form_alter(&$form, &$form_state, $form_id) {

	if($form_id == 'user_login_block') {

		$form['links']['#weight'] =  4;

		$form['actions']['#weight'] =  3;

		$form['pass']['#weight'] =  2;

		$form['name']['#weight'] =  1;

	}

}

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

نمونه تغییر عناصر فرم لاگین در دروپال با در تم

نمونه بالا برای تغییر در عناصر فرم بلاک لاگین نوشته شده است. برای تغییر در هر فرم دیگری در دروپال باید ID آن فرم را در دستور شرطی (if) قرار دهید و درون بدنه دستوری شرطی، تغییرات مورد نظر خود را اعمال کنید. در این باره باید دقت کافی داشته باشید، به این دلیل که وقتی شما hook_form_alter را پیاده سازی می کنید، این تابع برای تمام فرم های سایت صدا زده می شود. بنابراین باید نسبت به تغییر در فرم های دیگر دقت کافی داشته باشید و حتما از FORM ID و دستورات شرطی استفاده کنید مگر اینکه مایل باشید همه فرم های سایت را تغییر بدهید.

مشاهده مقادیر متغیر ها و آرایه ها در برنامه نویسی ماژول دروپال

در صورتی که ID فرم مورد نظر خود را نمی دانید، می توانید در پیاده سازی این تابع مقدار متغیر $form_id یعنی آرگومان سومی که به این تابع ارسال می شود را خارج از دستور های شرطی نمایش دهید. در صورتی که نمی دانید چگونه این مقدار را در صفحه نمایش دهید، مطلب «مشاهده مقادیر متغیر ها و آرایه ها در برنامه نویسی ماژول دروپال» را مطالعه کنید. نکته دیگر اینکه نحوه انجام این کار در دروپال 6 و دروپال 7 یکسان است.

نظرات

مطلب بسیار مفید، و توضیحات بسیار خوبی بود.
ممنون

تصویر admin
ممنون پیام جان که به سایت سر می زنی و مطالب را پیگیری می کنی.

خیلی مطلب مفیدی بود .. ممنون

بسیار عالی و مفید بود
موفق باشید

تصویر admin
جناب ستارزاده گرامی، نظر لطف شما است. ممنون از نظر دلگرم کننده شما

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

ارسال نظر