הוקים, אני לא בטוח שהבנתי מה זה
לפני שאני שואל מה זה hooks, אני אסביר את זה כמו שאני הבנתי.
הוק זה בעצם פוקנציה שחוזרת על עצמה בהרבה מודולים ויש לה מאפיינים קבועים. כאשר אנחנו רוצים להכריז על הפוקנציה במודול חדש, אנחנו רק צריכים לתת לשם הפונקציה הקדמה מתאימה לשם המודול, ולכתוב את הפקודות המתאימות בתוך הפוקנציה. ההוקים נועדו בעצם כדי לחסוך לנו את ה-documentation בהערות שלפני הפוקנציה מכיוון שהמאפיינים של ההוק גם ככה זהים.
קצת קשה לי להסביר את זה. בכל אופן, ככה אני הבנתי את זה. תקנו אותי אם אני טועה ותוסיפו הסבר קצת יותר רחב בבקשה כדי שאני אבין את זה יותר טוב.
תודה.

הרעיון של hooks הוא שאתה יכול
הרעיון של hooks הוא שאתה יכול "להגיד" ל-core לקרוא לפונקציה שלך. למעשה ההוקים הם הדרך "לחבר" את המודול (או ה-theme) שלך לדרופל.
לדוגמה: אתה כותב מודול שבמקום להציג את הכותרת של ה-node כמו שהיא, הופך אותה לשפת הב' (מוסיף ב' אחרי כל הברה, לדוגמה במקום "דף ראשי" רושם "דבף ראבשיב"). אוקיי זה דוגמה ממש גרועה אבל זה מה שעולה לי בראש.
אתה כותב מודול, וכותב את הקוד שהופך כותרת לשפת הב', ועכשיו אתה רוצה לגרום לדרופל לקרוא לקוד שלך לפני שהוא מציג את ה-node. איך עושים את זה?
פשוט, קוראים לפונקציה שלך module_name_prepare. דרופל מזהה אוטומטית שמדובר במימוש של ה-hook בשם prepare, והוא קורא לפונקציה הזאת מתי שנקראים כל ההוקים מסוג prepare, שזה לפני הצגת הדף שמכיל את ה-node.
אני אסביר בתמצות כמו שאני
אני אסביר בתמצות כמו שאני מבין:
דרופל היא אפליקציה וובית ובשל כך היא מופעלת, עולה, רצה וסוגרת את עצמה עם כל HTTP request. חלק מזה קשור בדרך פעולת פרוטוקול HTTP ולא נכנס לכך כרגע (הוא Stateless, by definition).
אז כאמור דרופל רצה ומסיימת פעולתה עם כל request. . בעקרון, דרופל מבצעת את השלבים האלו (רשימה חלקית וסכמטית)עבור כל request:
* Boot
* calculate data for request (logic processing)
* theme/render data fetched earlier
* serve output rendered above
* finishing steps (session closing etc)
הצעדים למעלה הם קבועים וידועים עבור כל request.
הוקס (hooks) הם למעשה הדרך שלך כמפתח דרופל להתממשק לשלבים שתוארו למעלה ולשנות או להשפיע על מהלך הטיפול ב- request. למשל, להוסיף מידע או לשמור אינפורמציה שהתקבלה (בשלב ה- calculate data), או לשנות לגמרי את מהלך הטיפול ב- request ע"י redirection שיעשה בשלב כלשהוא.
Hooks הם הדרך שלך להתממשק אל תוך ה- request lifecycle של דרופל. אתה מגדיר בקוד שלך, לפי קונבנציות מסויימות, איפה אתה רוצה להתממשק, דרופל מזהה את זה ומעבירה לקוד שלך את השליטה במקומות הרלוונטיים.
מקווה שזה עוזר,
בועז
בועז
הסברים נפלאים, תודה. עכשיו
הסברים נפלאים, תודה. עכשיו אני מבין יותר טוב כיצד הליבה של דרופל מצליחה להוציא לפועל פוקנציות.
עוד שאלה בנושא ברשותכם. לפי התיעוד של דרופל 6, חלק מההוקים נמצאים בספריות לא מזוהות. למשל ההוק hook_prepare נמצא בקובץ ובספריה: developer/hooks/node.php
אני לא מוצא ספריה כזאת בשום מקום בקבצים של דרופל 6. לעומת זאת בדרופל 7 אני לא נתקל בבעיה הזאת. כל ספריה שרשומה בתיעוד מופיעה גם בקבצים של דרופל 7.
איך אני מוצא את המקור של ההוקים האלה?
איך אני מוצא את המקור של
אתה לא.
אתה אמור לממש את ה hooks האלה - זו הדרך שלך לשנות את פעולת המערכת.
ברור שאני לא חייב למצוא אותם
ברור שאני לא חייב למצוא אותם בשביל לממש אותם, אבל ההוקים אמורים להיות איפשהו במערכת, נכון? איך זה שאני מצליח למצוא את ההוק prepare בקוד של דרופל 7, אבל בדרופל 6 אני לא מצליח למצוא אותו? יכול להיות שהספריה המוצגת בתיעוד פשוט לא נכונה?
ברור שאני לא חייב למצוא אותם
לא. המערכת רק קוראת להם. אתה מממש אם אתה רוצה. תקרא שוב את ההסברים.
כי בדרופל 7 הוסיפו את התיעוד לתוך הקוד. זה עדיין תיעוד בלבד, ולא קוד שרץ.
עכשיו אני בטוח שהבנתי. תודה.
עכשיו אני בטוח שהבנתי.
תודה.
דרך נוספת להסתכל על הוקים זה
דרך נוספת להסתכל על הוקים זה כאילו היו פוינטרים למתודה, או delegates.
| פרקטיקול - בונים לך אתר דרופל | עזרה מידית בקבוצה שלנו בפייסבוק! | שיעורי דרופל דרך האינטרנט