در خیلی از سایتها کارفرما نیاز دارد که در صفحه داخلی هر محتوا، لیستی از مطالب مرتبط با آن محتوا نمایش داده شود. مثلا پروژه های خبرگذاری که چندتا از خبرهای مرتبط را در انتهای هر خبر لیست میکنند.
خب به نظر شما مبنای کشف ارتباط بین چند خبر چه چیزی میتواند باشد؟ تیتر مشابه؟ دسته بندی مشابه؟ کلیدواژه ها مشابه؟
تیتر مشابه را میتوان با آنالیز واژه های موجود در تیتر خبر و کشف واژه های مشابه با تیتر خبرهای دیگر پیدا کرد.
در دسته بندی مشابه نیز چون دسته بندی های موضوعی بسیار کلان هستند (مثل سیاسی، اقتصادی، ...) نمیتوان زیاد به مشابه بودن خبرهای لیست شده اعتماد کرد.
ما در این مقاله میخواهیم خبرها یا مطالب مشابه را بر مبنای دارا بودن کلیدواژه های مشابه لیست کنیم و این کار را تنها و تنها با استفاده از ماژول قدرتمند Views انجام میدهیم. کاری که با کدنویسی هم میتوان انجام داد.
به نام قدرتمندترین برنامه نویس
در اینجا نوع محتوای ما ویدیو نام دارد و میخواهیم ویدیوهای مشابه که کلیدواژه های مشابه با ویدیوی فعلی دارند را لیست کنیم.
1. یک View دلخواه از نوع محتوا ایجاد کنید و در آن یک بلوک (block) جدید اضافه کنید.
2. یک Contextual Filter (فیلتر زمینه ای) از نوع Content: Nid (محتوا:شماره گره) اضافه کنید. در بخش تنظیمات برای When the filter value is NOT available (وقتی مقدار فیلتر موجود نیست) گزینه Provide default value (ارائه مقدار پیشفرض) را انتخاب کنید و از لیست زیر آن Content ID from URL (شماره گره از URL) را انتخاب کنید.
این فیلتر شماره Node (گره) را به View معرفی میکند.
3. یک Relationship (رابطه) از نوع Content: Taxonomy terms on node (محتوا:واژه های دسته بندی موجود در گره) اضافه کنید و در تنظیمات آن دسته بندی مورد نظر خود (به عنوان مثال: کلیدواژه) را که برمبنای آن مشابهت بررسی میشود انتخاب کنید. یک نام دلخواه نیز برای این رابطه بنویسید.
این رابطه کلیدواژه های موجود در این مطلب را لیست میکند.
4. یک رابطه (Relationship) دیگر از نوع Taxonomy term: Content using vocabulary as specified above (واژه دسته بندی: محتوایی که از واژه های فوق استفاده میکنند) اضافه کنید. یک نام دلخواه نیز برای این رابطه بنویسید.
این رابطه محتواهایی که کلیدواژه های بخش 3 را دارا باشند لیست میکند.
5. گزینه aggregation را از بخش Advanced (پیشرفته) فعال کنید.
6. تنظیمات فیلدهایی که از قبل در بخش فیلدها اضافه نموده بودید را باز کنید و آنها را به رابطه ای که در بخش 4 ساختید اتصال دهید.
این کار موجب میشود ت مثلاافیلد عنوان، از آن محتواهایی که از کلیدواژه های مشابه استخراج کرده اید نمایش داده شود نه عنوان همین مطلب که در آن هستیم.
7. یک Sort criteria (معیار مرتبط سازی) از نوع Content: Nid (محتوا: شماره گره) اضافه کنید. در تنظیمات aggregation مربوط به این گزینه، تابع Count را انتخاب کنید. و سپس sort descending (مرتبط سازی نزولی) را انتخاب کنید.
این کار موجب میشود تا مرتبط سازی بر اساس Nidهایی که بیشتر لیست شده اند انجام شود. یعنی به ازای هر واژه مشابه در یک مطلب Nid یک بار نمایش داده میشود. حالا اگر یک ویدیویی 4 کلیدواژه مشابه با ویدیو فعلی داشته باشد، Nid آن 4 بار در لیست می آید. و با استفاده از تابع Count Nid های مشابه شمارش میشوند و حالا که این تابع در Sort criteria (معیار مرتبط سازی) استفاده شده است بر اساس بیشترین Nid شمارش شده به کمترین Nid شمارش شده (نزولی) مرتبط میشود.
8. مجدد یک Contextual filter (فیلتر زمینه ای) از نوع Content: Nid (محتوا: شماره گره) اضافه کنید و آن را به رابطه ای (Relationship) که در بخش 4 ساختید اتصال دهید. در بخش تنظیمات برای When the filter value is NOT available (وقتی مقدار فیلتر موجود نیست) گزینه Provide default value (ارائه مقدار پیشفرض) را انتخاب کنید و از لیست زیر آن Content ID from URL (شماره گره از URL) را انتخاب کنید. سپس از انتهای بخش تنظیمات گزینه More (بیشتر) را باز کنید و گزینه Exclude (استثناء شدن) را تیک بزنید.
این کار باعث میشود محتوا یا گره ای که در آن هستید، در لیست محتواهای مرتبط نمایش داده نشود.
نظرات