אני מאד אוהב להשתמש בדרופל. לא רק שאני משתמש בה בעבודה, אני גם משתמש בה בכל פעם שאני צריך להרים משהו שהוא מעבר לאתר. זה לא אומר שהמערכות האחרות כמו וורדפרס או ג'ומלה הן פחות טובות (או פחות 'חזקות', כמו שאנשים שמבינים פחות בתכנות נוטים לומר). כל ה-CMSים טובים, אבל יש דברים שעם דרופל זורמים יותר בקלות.
אחד הפיצ'רים הגאוניים שיש בדרופל וכרגע אין לו מקבילה שוות ערך לא בג'ומלה ולא בוורדפרס היא מערכת ה-views של דרופל. למי שלא מתמצא, מדובר פשוט במערכת ממש פשוטה לבניית שאילתות למסד הנתונים בלי צורך לבנות אותן ממש ב-MySQL ובנוסף זה מגיע עם אפשרויות רבות לשינוי ועיצוב ה-Output ועובר דרך מערכת ה-Themes של דרופל ומערכת ההרשאות שלו.
הרבה פעמים אנחנו רוצים לקחת view מסוים שבנינו בדרופל ולשתול אותו בעמוד אחר. למשל, אם יש לי דף משתמש, אני רוצה להכניס לתוכו טבלה שבה יש את כל התוכן שהמשתמש הגיב אליו או שהוא כתב. איך אני עושה את זה? בקלות. קודם כל אני יוצר view:
ה-view הזה יכול להיות מורכב או מסובך, זה לא משנה. אפשר לראות לפי הדוגמה שלא מדובר ב-view פשוט מאד.
לאחר יצירת ה-view, נזכור את השם שלו ואת הארגומנטים (אם יש לנו כאלו). כאן למשל, יש לי ארגומנט של ה-user id שאותו אני צריך להכניס ל-URL על מנת שה-view ידע את ההודעות של מי להציג.
עכשיו אני אגש ל-template.php. אני כתבתי על הקובץ המאד חשוב הזה, שנמצא בכל תמה, בפוסט קודם וכדאי מאד לקרוא אותו.
ב-template אני צריך לבחור את ה-preprocess הנכון. במקרה שלי, כיוון שאני רוצה להכניס את ה-view הזה לפרופיל של המשתמש, אני אבחר ב-TEMPLATE_preprocess_user_profile. כמובן שיש להחליף את ה-TEMPLATE בשם של התמה שלנו. בתוך ה-preprocess, אני אצור משתנה ואכניס את ה-view לתוכו. איך? בדיוק ככה:
function TEMPLATE_preprocess_user_profile(&$vars) {
$vars['user_messages'] = views_embed_view('users_messages', 'page', arg(1));
}
במה השתמשתי? השתמשתי בפונקצית views_embed_view (והנה קישור לדוקומנטציה שמספרת עליה). הפונקציה הזו כשמה כן היא, פשוט לוקחת view ודואגת שהוא יכנס לתוך התמה שלנו. מה הפונקציה הזו צריכה? באופן עקרוני שני דברים:
1. שם ה-view (כאילו דההה)
2. ה-display (אם יש לכם view פשוט, אז זה page)
אם יש ארגומנטים שצריך להכניס, צריך להכניס אותם לפי הסדר, במקרה שלי הייתי צריך את שם המשתמש שמופיע ב-URL (ואם לא, אגב, קל להשיג אותו ב-preprocess של user_profile) – השתמשתי ב-(arg(1 על מנת להשיג אותו ולהציב אותו ב-views_embed_view.
כל מה שנותר לי לעשות, זה להדפיס את המשתנה שהכנסתי אליו את התוצאות של views_embed_view ב: user-profile.tpl.php וזהו! פיניטו לה קומדיה!
הקוד הזה, אגב, עובד גם בדרופל 6 וגם בדרופל 7.