بررسی چند تابع مفید taxonomy در برنامه نویسی دروپال (بخش دوم)

بررسی چند تابع مفید taxonomy در برنامه نویسی دروپال (بخش دوم)

در بخش اول مقاله، توضیحاتی درباره سیستم دسته بندی دروپال یا Taxonomy دادیم. همین طور دو تابع مفید برای ذخیره و بازیابی دسته ها (term) معرفی کردیم. گفتیم که تابع taxonomy_term_save برای ذخیره یا به روز رسانی یک دسته در دیتابیس و تابع taxonomy_term_load برای بازیابی اطلاعات یک دسته از دیتابیس به کار می رود.

در این مقاله چند تابع مفید دیگر در کار با دسته بندی دروپال را معرفی می کنیم.

حذف یک دسته با تابع taxonomy_term_delete

از تابع taxonomy_term_delete برای حذف کامل یک دسته (term) از سایت استفاده می شود. این تابع یک عدد می گیرد که شناسه یکتای دسته (tid) است. خروجی این تابع در صورت موافقیت در انجام عملیات حذف، مقدار ثابت SAVED_DELETED است. یعنی برای بررسی موفقیت عملیات می توانید خروجی را با این ثابت مقایسه کنید.

مثلا برای حذف یک دسته با شناسه 4 کد زیر را می نویسیم:

$tid = 4;
taxonomy_term_delete($tid);

یافتن اطلاعات یک دسته در دروپال بر اساس نام آن با تایع taxonomy_get_term_by_name

تابع taxonomy_term_load در بخش اول مقاله معرفی شد و کار آن لود کردن اطلاعات یک term بر اساس tid بود. حال فرض کنید tid را نداریم و بایستی بر اساس نام اطلاعات دسته را بیابیم. این کار با تابع taxonomy_get_term_by_name ممکن است. از آنجا که این امکان وجود دارد که چندین term در سایت با یک نام وجود داشته باشد، این تابع یک آرایه از دسته ها را باز می گرداند. بنابراین خروجی این تابع می تواند یک یا چند دسته باشد که در یک آرایه قرار دارند.

بنابراین به صورت عمده می توان گفت ورودی این تابع یک رشته است. کوچک و بزرگ بودن حروف این رشته برای این تابع اهمیتی ندارد. اما این تابع ورودی دیگری نیز دارد که اختیاری است. ورودی دوم نام ماشین vocabulary است. به این صورت می توان جستجوی دسته ها بر اساس نام را محدود به یک vocabulary خاص کرد.
خط زیر تعریف تابع را به همراه ورودی هایش نشان می دهد:

taxonomy_get_term_by_name($name, $vocabulary = NULL)

به نمونه کد زیر دقت کنید:

$terms = taxonomy_get_term_by_name("Digital");
dpm($terms);

نتیجه به صورت زیر مشاهده می شود:

یافتن اطلاعات یک دسته در دروپال بر اساس نام آن با تایع taxonomy_get_term_by_name

می بینید که خروجی تابع را به dpm داده ایم و در نتیجه می بینید که خروجی تابع یک آرایه است. چون ما فقط یک دسته با نام Digital در سایت داشتیم، این آرایه فقط حاوی یک عضو است.

اگر بخواهیم جستجو را محدود به یک Vocabulary خاص کنیم باید نام ماشینی آن Vocabulary را به ورودی دوم این تابع بدهی مثل نمونه زیر:

$terms = taxonomy_get_term_by_name("Digital", "product_categories");

یافتن والد های یک دسته در دروپال با تابع taxonomy_get_parents

در این باره صحبت کردیم که هر دسته می تواند دارای چند زیر دسته باشد. بنابراین اگر یک دسته، به عنوان زیر دسته یک دسته دیگر شمرده شود، می گوییم دارای یک دسته والد است. هر دسته (term) در دروپال می تواند یک یا چند والد داشته باشد. یافتن والد های یک دسته نیز کاربرد دارد. برای این کار از تابع taxonomy_get_parents استفاده می کنیم. این تابع شناسه عددی یکتای دسته (tid) را در ورودی می گیرد و آرایه ای از آبجکت ها را باز می گرداند. هر آبجکت درون این آرایه حاوی اطلاعات یک دسته والد است.

برای نمونه به کد زیر توجه کنید که با توجه به مثال دسته بندی محصولات در بخش اول مقاله، نوشته شده است:

$tid = 4;
$parent_terms = taxonomy_get_parents($tid);
dpm($parent_terms);

می خواهیم والد دسته با شناسه 4 را بیابیم. خروجی که یک آرایه است را به تابع dpm داده ایم که ببینیم این خروجی دقیقا چه ساختاری دارد. می بینید که $parent_terms که حاوی خروجی تابع است خود یک آرایه است. هر خانه این آرایه یک آبجکت از نوع stdClass است. هر آبجکت نیز حاوی اطلاعات دسته است که در بخش اول مقاله درباره آنها صحبت کرده ایم.

یافتن والد های یک دسته در دروپال با تابع taxonomy_get_parents

یافتن تمام والد های سطح بالاتر یک دسته با تابع taxonomy_get_parents_all

برای دیدن اثر این تابع بهتر است تغییری در دسته بندی محصولات ایجاد کنیم. سلسله مراتب دسته بندی را طوری تغییر می دهیم که دسته ای داشته باشیم که در سطح سوم سلسله مراتب قرار دارد. مثلا دسته Kids زیر دسته Toys است که به نوبه خود زیر دسته Entertainment قرار می گیرد.

دسته بندی سلسله مراتبی در دروپال

در بخش قبلی مقاله گفتیم که تابع taxonomy_get_parents والد های یک دسته را باز می گرداند. اکنون ببینیم اگر شناسه دسته Kids را به این تابع بدهیم چه خروجی دارد. این کد را برای تست می نویسیم:

$tid = 13;
$parent_terms = taxonomy_get_parents($tid);
dpm($parent_terms);

ساختار خروجی آن به این صورت است:

یافتن تمام والد های سطح بالاتر یک دسته با تابع taxonomy_get_parents_all

همانطور که می بینید، تابع taxonomy_get_parents فقط والد های واقعی دسته را بر می گرداند که دقیقا زیر دسته آنهاست. یعنی برای Kids فقط دسته Toys را به ما می دهد ولی Entertainment را نمی دهد.

ولی اگر بخواهیم والد هایی که در سطح بالاتر قرار دارند را نیز به دست بیاوریم باید تابع taxonomy_get_parents_all را به کار ببریم. این تابع نیز در ورودی شناسه عددی یکتای دسته را می گیرد.

به نمونه کد زیر دقت کنید:

$tid = 13;
$parent_terms = taxonomy_get_parents_all($tid);
dpm($parent_terms);

خروجی تابع را در تصویر زیر می بینید. بنابراین خروجی تابع taxonomy_get_parents_all یک آرایه است که حاوی تمام والد های یک دسته چه در اولین سطح و در چه در سطوح بالاتر در سلسله مرابت دسته بندی است. همچنین خود دسته ای که به دنبال والد های آن هستیم نیز در این آرایه قرار دارد.

یافتن تمام والد های سطح بالاتر یک دسته با تابع taxonomy_get_parents_all

ارسال نظر