راه اندازی آخرین مطالب منتخب به سبک دروپالیکا با استفاده از ماژول Views

راه اندازی آخرین مطالب منتخب به سبک دروپالیکا با استفاده از ماژول Views

بخش های مختلف سایت دروپالیکا چطور ساخته شده اند؟

سایت دروپالیکا با استفاده از فریم ورک مدیریت محتوای دروپال ساخته شده است. در این سلسله مقالات در مورد نحوه ساخت بعضی از بخش های سایت دروپالیکا می پردازم. در این بین ممکن است نکاتی مطرح شود که برای دروپال کارهای کم تجربه تر مفید باشد. این موضوع پیشنهاد یکی از بازدید کنندگان سایت دروپالیکا است. در این بخش نحوه راه اندازی بلوک آخرین مطالب منتخب به سبک دروپالیکا را بیان می کنم.

این مطلب حاوی نکات جالبی درباره ماژول Views و قدرت آن می باشد که ممکن است خیلی به آنها توجه نشده باشد.

آخرین مطالب منتخب دروپال

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

آخرین مطالب منتخب دروپال

مطالب چه نوع محتواهایی در اینجا قرار می گیرند؟

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

شرط قرار گرفتن محتوا در بلوک منتخب

شرط قرارگیری در این بلوک نیز، فعال شدن گزینه «ارتقا یافته به صفحه اول» یا «Promoted to front page» تعیین شده است. البته می شد فیلد جدیدی ساخت و به همه نوع محتوا های دروپال آن را ضمیمه کرد. ولی با توجه به اینکه از فیلد «ارتقا یافته به صفحه اول» در سایت دروپالیکا استفاده دیگری نمی شد، سعی شد به جای افزودن فیلد جدید و تحمیل فشار اضافی بر روی سایت، از فیلد اطلاعاتی موجود استفاده شود.

فیلد های لازم برای ایجاد این بلوک

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

  • تصویر: با توجه به اینکه تصویر محتوا در این بلوک نمایش داده می شود، باید نوع محتوا های سایت دارای یک فیلد تصویری باشند. چون این بلوک پذیرای محتوا از هر نوع محتوایی است، بنابراین این فیلد باید در همه نوع محتوا مشترک باشد. یعنی از ساختن فیلد های جدید پرهیز شود. بلکه یک فیلد تصویری ساخته شده به همه نوع محتواها ضمیمه شود.
    برای این کار از همان فیلد تصویری استفاده شده است که به صورت پیش فرض با نصب دروپال استاندارد، در سایت ایجاد می شود. نام ماشینی این فیلد، field_image است.
  • محتوا یا بدنه مطلب: البته همه نوع محتوایی که می سازید دارای یک فیلد بدنه مطلب یا body هستند. طبیعتا این فیلد در همه نوع محتواهای دروپالیکا حفظ شده است و حاوی بدنه مقاله مورد نظر است.
  • نام فارسی نویسنده: هر محتوا در دروپال به یک کاربر (user) سایت، تعلق دارد که به عنوان نویسنده یا تولید کننده آن مطلب شناخته می شود. به صورت پیش فرض هر کاربر در دروپال دارای یک شماره یکتا (uid) و یک شناسه الفبایی (نام کاربری username) است. ولی نمایش هر کدام از این دو مورد به عنوان نام نویسنده جالب نیست. بنابراین به اطلاعات user در سایت، یک فیلد نام از نوع متنی نیز اضافه شده است، که نام و نام خانوادگی احتمالا به فارسی نوشته شود.

ساختن View جدید در دروپال برای ایجاد بلوک مطالب منتخب

یک View جدید می سازیم، این view باید محتوای سایت (content) را نمایش بدهد. نوع محتوا نیز اهمیت ندارد. بنابراین در ابتدای ساخت view نیازی به تعیین آن نیست.

با توجه به اینکه می خواهیم یک block ایجاد کنیم، بنابراین چک باکس مربوط به Create a page را غیر فعال و چک باکس مربوط با Create a block را فعال می کنیم. و دکمه Continue & edit را می زنیم تا بتوانیم تنظیماتی بیشتری روی view مورد نظر خود اعمال کنیم.

ساختن View جدید در دروپال برای ایجاد بلوک مطالب منتخب

افزودن فیلد های view

اکنون باید فیلد هایی که در بلوک نمایش داده می شوند را در view اضافه کنیم. می دانید که هر فیلد را در بخش Fields در تنظیمات view، را کلیک بر روی دکمه Add اضافه می کنیم.

افزودن فیلد های view در دروپال

در شکل بالا فیلد هایی که در این view اضافه شده اند، نمایش داده شده است همین طور با یک خط به عنصر نمایشی آن در یک بلوک متصل شده اند تا مشخص شود که هر یک از فیلد ها برای فراهم کردن داده هایی کدام یک از اجزای نمایشی بلوک استفاده شده است.

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

فیلد Content: Type نام نوع محتوایی که نمایش داده می شود را نشان می دهد. برای نمونه در تصویر بالا، محتوا از نوع بلاگ است و نام آن مشخص شده است. در تنظیمات داخلی این فیلد، همانطور که در تصویر زیر مشخص شده است، نام نوع محتوا، به مطلب مورد نظر لینک شده است. این کار با فعال شدن چک باکس Link this field to the original piece of content انجام شده است.

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

فیلد تصویر مطلب با سایز مشخص در view و لینک به مطلب

فیلد Content: Image فیلد بعدی تصویر است که البته ممکن است در سایت دروپالی شما این فیلد با اسامی دیگری نمایش داده شود ولی باید فیلد تصویری که در همه نوع محتواها وجود دارد را در اینجا یافته و اضافه کنید.

در تنظیمات این فیلد، به شکلی که در تصویر زیر مشاهده می کنید عمل شده است. گزینه Formatter همان مقدار پیش فرض Image را گرفته است. در قسمت Image style، نام یکی از استایل های تصویری که به صورت سفارشی برای دروپالیکا درست شده است را انتخاب کرده ام. این Image style که نام آن را ملاحظه می کنید، تصویر را در یک قطعه 206x122 پیکسل در می آورد. در نهایت در گزینه Link image to، مقدار Content انتخاب شده است، که باعث می شود تصویر به صفحه مطلب لینک شود.

فیلد تصویر مطلب با سایز مشخص در view و لینک به مطلب

فیلد عنوان مطلب در view و قرار دادن آن در تگ h3

فیلد Content: Title عنوان مطلب را نمایش می دهد که با آن آشنا هستید. معمولا به صورت پیش فرض هر view را که از نوع content می سازید، این فیلد به آن اضافه شده است.

در تنظیمات این فیلد مشخص شده است که عنوان مطلب به صفحه مطلب، لینک شود. همان طور که می بینید برای این کار چک باکس Link this field to the original piece of content فعال شده است.

یک کار اختیاری نیز در دروپالیکا روی این فیلد انجام شده است. در تصویر می بینید که در گروه Style Settings گزینه Customize field HTML، فعال شده است. این کار برای این انجام شده است که عنوان مطلب درون تگ H3 قرار بگیرد.

فیلد عنوان مطلب در view و قرار دادن آن در تگ h3

فیلد بدنه محتوا در view و بریدن متن با تعداد کاراکتر مشخص

فیلد Content: Body بدنه مطلب معمولا با فیلد body در نوع محتواهای مختلف وجود دارد. بنابراین این فیلد را نیز اضافه می کنیم.

در تنظیمات این فیلد، همانطور که در شکل زیر مشاهده می کنید، در گروه Rewrite results گزینه Trim this field to a maximum length فعال شده است. همانطور که از این نام بر می آید، یک رشته متنی که طولانی تر از تعداد مشخصی کاراکتر باشد را قطع می کند. پس از فعال کردن این گزینه، تعدادی تنظیم دیگر مشاهده می شوند. یک فیلد متنی Maximum length مشاهده می کنید که تعداد حداکثر کاراکتر ها را مشخص می کند. گزینه Trim only on a word boundary مشخص می کند که بُرش متن حتما در مرز کلمات انجام شود. گزینه Add an ellipsis برای افزودن سه نقطه به انتهای متن بریده شده استفاده می شود.

فیلد بدنه محتوا در view و بریدن متن با تعداد کاراکتر مشخص

فیلد تاریخ ارسال مطلب در view و نمایش با فرمت سفارشی

فیلد Content: Post date این فیلد تاریخ ارسال مطلب را نمایش می دهد. برای اینکه نحوه نمایش خاص تاریخ به سبک دروپالیکا، عملی شود، بعضی از تنظیمات این فیلد نیز تغییر کرده است که در تصویر زیر مشاهده می کنید.

از قسمت Date format، مقدار Custom انتخاب شده است. و در فیلد متنی Custom date format بر اساس قوانین PHP برای فرمت نمایشی تاریخ، فرمت j F Y مشخص شده است. نتیجه نمایش آن را در بلوک مطلب منتخب دروپالیکا مشاهده کرده اید.

فیلد تاریخ ارسال مطلب در view و نمایش با فرمت سفارشی

فیلد افزودن نظر در view

فیلد Content: Add comment link: این فیلد نیز برای نمایش لینک افزودن نظر جدید، استفاده می شود.

فیلد نام ارسال کننده مطلب و لینک به صفحه پروفایل کاربر

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

در حالت عادی زمانی که یک View از نوع content است، فقط نام کاربری قابل نمایش است و فیلد های دیگر کاربر برای نمایش مهیا نیست. ولی برای اینکه از فیلد های کاربر نیز در اینجا استفاده کنیم، می توانی از ایجاد رابطه با کاربر یا Relationships استفاده کنیم.

افزودن Relationships  در views در دروپال

در اینجا نیز بین مطلب با کاربر ارسال کننده آن می خواهیم رابطه ایجاد کنیم. برای این کار در تنظیمات view در قسمت Relationships یک رابطه از نوع Content: Author ایجاد می کنیم. نیازی به تنظیم خاصی نیست و اضافه کردن یک رابطه از این نوع کافی است.

سپس فیلد های کاربر نیز به لیست فیلد های موجود اضافه می شود. کافی است آنها را با استفاده از Add مانند روش معمول برای افزودن فیلد ها به view بیفزاییم. در اینجا همانطور که مشاهده می کنید دو فیلد (author) User: نام به همین منظور به لیست فیلد ها اضافه شده است.

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

برای این منظور فیلد (author) User: Uid را که بر اساس ایجاد رابطه در لیست فیلد های موجود مشاهده می شود را نیز Add می کنیم.

فیلد نام ارسال کننده مطلب و لینک به صفحه پروفایل کاربر

تنظیمات این فیلد را در بالا مشاهده می کنید. چک باکس Link this field to its user برای اینکه لینک به صفحه پروفایل کاربر ایجاد شود، فعال کرده ایم. ولی به صورت پیش فرض با این کار شماره uid کاربر را داریم که به صفحه پروفایل کاربر لینک شده است. برای اینکه متن این لینک را عوض کنیم، در گروه Rewrite results گزینه Rewrite the output of this field فعال شده است. همانطور که از این نام بر می آید، خروجی متنی آن را می توانیم تغییر بدهیم. پس از فعال کردن این گزینه، یک فیلد متنی Text ظاهر می شود که متن جایگزین را مشخص می کند.

با توجه به اینکه می خواهیم محتوای فیلد نام کاربر نمایش داده شود و این مقداری ثابت نیست باید از متغیر ها استفاده کنیم. این متغیر ها از طریق الگوهای جایگزینی در Replacement patterns کمی پایینتر از این فیلد مشخص شده اند. این ها همان فیلد هایی هستند که به view اضافه کرده ایم و می توانیم از مقدار آنها به صورت جایگزین در فیلد دیگر استفاده کنیم. بنابراین ما نیز الگوی جایگزینی مربوط به نام کاربر را انتخاب می کنیم و در فیلد متنی Text قرار می دهیم. به این صورت لینکی خواهیم داشت که متن آن، مقدار فیلد نام کاربر است و به پروفایل نیز لینک شده است.

استفاده از الگوهای جایگزینی در Replacement patterns  در views در دروپال

در نهایت برای اینکه فیلد (author) User: نام به صورت تکراری نمایش داده نشود در تنظیمات آن تنظیم می کنیم که در لیست فیلد ها باشد که بتوانیم از مقدار آن استفاده کنیم ولی در نمایش view دیده نشود. برای این کار چک باکس Exclude from display را انتخاب کرده ایم.

تنظیمات فیلد یوزر در Views در دروپال

فیلتر ارتقا یافته به صفحه اول در view

گفته شد که شرط قرارگیری محتوا در این بلوک، فعال شدن گزینه «ارتقا یافته به صفحه اول» یا «Promoted to front page» تعیین شده است. بنابراین برای که فقط مطالبی که این گزینه برای آنها فعال شده است، در این بلوک نمایش داده شوند، باید یک فیلتر به این منظور به View اضافه کنیم.

بنابراین از قسمت Filter criteria، فیلتر Content: Promoted to front page را Add می کنیم و تنظیم Promoted to front page آن را بر روی Yes تنظیم می کنیم.

فیلتر ارتقا یافته به صفحه اول در view - دروپال

نمایش آخرین مطالب منتخب در دروپال با ماژول Views

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

نظرات

سلام
ایول به شما که هر چی دارید به اشتراک میگذارید و اندکی حسادت ندارید کسی از شما جلو بیافته... .
کارتون حرف نداره.

تصویر admin
مهدی خان! از لطف شما تشکر می کنم.

میتونم بپرسم در نظرات چیکار کردید که بجای نام کاربری(admin) نام خانوادگی تون "وحید سبتو" میاد. از چه کدی در قالب استفاده کنیم تا بجای نام کاربری نام خانوادگی رو نشون بده.

تصویر admin
آقا مهدی! حتما در این مورد به زودی مطلبی خواهم نوشت و کد آن را خواهم نوشت ولی مقدمتا باید عرض کنم که این کار در template.php در تم دروپالیکا انجام شده است با پیاده سازی template_preprocess_comment.

ممنونم میشم

تصویر admin
این مطلب را شروع کردم، انشاءالله فرصت تکمیل به دست بیاورم و در سایت منتشر می کنم.

سلا م خسته نباشی د
من سوالی داشتم برای اینکه تاریخ ارسال شده پست رو بشه جداگانه چاپ کرد چه دستوری باید زده بشه تو صفحه template مورد نظر ؟؟؟

تصویر admin
پیمان خان، اگر منظور شما در فایل node.tpl.php است، اگر اشتباه نکنم با استفاده از $node->created می توانید به تاریخ ارسال پست برسید. البته چون این یک عدد است باید آن را با ارسال به تابع format_date به رشته فرمت شده تاریخ تبدیل کرد و سپس پرینت کرد.

باسلام، ای کاش این گروه از مطالب آموزشی رو ادامه میدادین

با سلام و عرض ادب
خواستم تشکر کنم بابت مطالب خوب شما

لطفا به این رویه ادامه بدید و بیشتر مطالب بذارید.

تشکر

ارسال نظر