הפוגה קלה בסדרת הניזלטרים, לטובת עבודה אמתית 🙂
באחד הפרויקטים החדשים שלנו במוודל, החלטנו להשתמש בתבנית essential וליצור לה תבנית בת כדי לבצע התאמות. התבנית essential נבחרה בתהליך שבו מנהלת הפרוייקט יצרה שני מסמכים: מסמך אחד המסכם את התבניות השונות משתי בחינות: הבחינה הראשונה היא הפיצ’רים שלהם אנו זקוקים בפרוייקט ובאיזה מהתבניות קיים כל פיצ’ר; והבחינה השנייה היא איזה פיצ’רים מעניינים מציעה כל תבנית (כאלה שלא בהכרח חשבנו עליהם לפניכן). המסמך השני תמצת רק את הפיצ’רים שלהם הוחלט שנזדקק, ונתן דירוג לכל פיצ’ר – 0 לפיצ’ר שלא קיים כלל; 1 לפיצ’ר שקיים חלקית; ו-2 לפיצ’ר שקיים בצורה מלאה. בטבלה יצרנו התאמה בין פיצ’רים לבין תבניות, וסוכמו הדירוגים. אך זה לא היה סוף הסיפור, כי בסופו של דבר, לא כל הפיצ’רים נבראו שווים. ישנם פיצ’רים אפשר לייבא ו/או לפתח בשלב מאוחר יותר, ויש פיצ’רים קריטיים שבלעדיהם לא נרצה את התבנית. במקרה שלנו, הנושא של תמיכה בעברית היה חשוב מאד. רצינו תבנית שעובדת בצורה מושלמת בעברית, Out of the box. וזה היה רק ל-essential, אז הלכנו עם זה.
היה ל-essential יתרון גם כשבאנו ליצור תבנית בת: נדב סיפר שיוצר התבנית essential עשה שירות ציבורי גדול, ויצר תבנית בת בשם essentials, כדי להקל על מי שירצו לרשת מתבניתו. תבנית הבת הגיעה יחד עם תבנית האב, בתור תת-תיקייה. ברם אולם, בשלב מסוים, התחזוקה של תבנית הבת גזלה ממנו משאבים מרובים מדי, והוא הפסיק לפתח אותה. כך קרה שהחל מגרסה 2.9 של essential, התיקיה essentials כבר לא קיימת. החלטנו שניקח את תת התיקיה מגרסה 2.8 ונבצע מה שצריך כדי שהיא תרוץ עם הגרסה הנוכחית של essential.
- התקנתי את התבנית. איך שנגמרה ההתקנה, קפצה לה השגיאה הראשונה:
Fatal error: Class 'theme_essential_core_renderer' not found in /usr/share/nginx/html/aviv/theme/essentials/renderers/core_renderer.php on line 25
ואכן, ה-class שה-renderer של essentials מסתמך עליו לא קיים כבר בתבנית האב. ניסיתי לבדוק מה יש בִּמקום אבל לא מצאתי בקלות, ואז החלטתי שמכיוון שבינתיים אני בכלל לא צריכה את ה-renderer הזה בתבנית שלי, אמחק אותו (ומאחר שהוא היה היחיד בתיקיית renderers, מחקתי את כל התיקיה) ואת הקריאה אליו מ-renderers.php (ועל אף שהוא הקריאה היחידה בקובץ הזה, לא מחקתי את הקובץ. כזאת אני, לא עקבית ).
- אחרי התיקון הזה יכולתי לשוטט באתר, ולהגיע למסך החלפת תבנית – שלשמה התכנסנו בעצם. החלפתי ל-esseintials ומיד קפצה עלי השגיאה הבאה:
Call to undefined function theme_essential_page_init()
הקריאה לזה נמצאה בקובץ
/theme/essentials/lib.php
בשורה 56. גם כאן לא מצאתי את החלופה הראויה בתבנית האב, ופשוט מחקתי את הפונקציה שקראה לזה –theme_essentials_page_init
. - אז סבבה, החלפתי לתבנית החדשה והכל אחלה. אבל, לתבנית האב יש מלא settings שרצינו להשתמש בהם גם בתבנית הבת. איך עושים זאת? מצאתי תשובה לזה דווקא בבאג שנפתר בתבנית:
- צריך למחוק את
$THEME->parents_exclude_sheets
מ-theme/essentials/config.php
- ולהגדיר את
$usingessentialsettings
כ-true
.
למעשה, כשניגשתי לבצע את המשימות האלה, ראיתי שיש בקוד הרלוונטי תיעוד לזה. אבל אני לא חשבתי לחפש שם מלכתחילה…
מובן שמחיקת כל המטמונים נצרכת אחרי הפעולה הזאת. - צריך למחוק את
- האם הגענו אל המנוחה ואל הנחלה? הלוואי. בפעם הבאה שנכנסתי לאתר קידמה את פני ההודעה הבאה:
Call to undefined method theme_essential\output\core_renderer::get_include_file()
לא הצלחתי למצוא בגוגל איזו פונקציה היא החלופה הראויה לפונקציה הזאת, אז הסתכלתי בתבנית האב, וראיתי שהם מכלילים קבצים בעזרת הפקודה הבאה:
\theme_essential\toolbox::get_tile_file()
החלפתי את הפונקציה הבלתי קיימת בפונקציה מבתנית האב – עשיתי זאת בכל המקומות בתבנית שהיה בה שימוש – ובא לציון גואל.
בינתיים הכל נרגע, והתבנית עובדת בשלום. כמובן אשמח לשמוע אם יש לכם תובנות או טיפים מעניינים בעניין, או סתם אם בא לכם לשתף בדברים דומים או שונים שעשיתם.
אצלנו אחרי מעבר על כמה תבניות העדפנו לבנות תבנית מאפס. זה לא כזה מסובך ונתן לנו בדיוק מה שרצינו.
חלק מקובצי העיצוב אנחנו יורשים מ־base.
ידעתי שיהיה לך מה לתרום!
אתם אף פעם לא צריכים תבנית שמאפשרת דברים יותר מתוחכמים? הלוואי שאצלנו היו למדים להסתפק במועט 😉
יש בה המון דברים מתוחכמים אבל הכול כתבנו בעצמנו. אנחנו ממשיכים לפתח את התבנית (ועוד הרבה חלקים למודל) בלי הפסקה.
אה, תבנית קבועה! מעולה. איזה יופי.
אולי אם אנחנו נתמיד במוודל, גם לנו יהיה כזה בסוף…
התבנית שלכם יושבת באיזשהו מקום ציבורי שאפשר לשזוף בו את עינינו?
אגב, “לשזוף בו את עינינו”…
מה דעתך לתת קישור לתבנית בת החדשה שלך, לאחר כל התיקונים
לרווחת הציבור 🙂