אינטרנט ישראל
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
ראשי » פיתוח אינטרנט » פתרונות ומאמרים על פיתוח אינטרנט » להמנע מ-template.php מפלצתי בדרופל

להמנע מ-template.php מפלצתי בדרופל

רן בר-זיק יוני 28, 2011 8:17 am אין תגובות

כך תבצעו קריאה ל-hook_theme מתוך מודול בדרופל.

כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.

אחת הדרכים המובילות בדרופל 6 (ודרופל 7) לבצע שינויים באלמנטים שונים היא להשתמש בפונקצית theme. כך למשל, אם אני רוצה לשנות את הדרך שבה checkbox מוצג באתר אני אקח את פונקצית theme_checkbox שיש בדוקומנטציה, אעתיק אותה ל-template.php ואשנה את השם שלה בהתאם ל-theme שאני משתמש בו וכך אוכל לשנות את הפונקציה ובכל checkbox שמוצג הפונקציה שלי תרוץ.

בעוד שהשיטה הזו לגיטימית, היא בעייתית משתי סיבות עיקריות:
1. זה גורם להתנפחות ה-template.php
2. כאשר אני בונה מודול, אני לא יכול לבקש מהמשתמש להכניס theme.

סעיף 2 יותר חשוב לי, אני אוהב לבנות את המודולים שלי כקופסאות סגורות – גם אם זה מודולים ייעודיים שאני מפתח המיועדים לאתר אחד. אני לא רוצה לסמוך על זה שיש פונקצית theme ב-template.php. מחר בבוקר ירצו לשנות את התמה או לשדרג ואז מה? עדיף שכל מה שקשור למודול יהיה בתוך המודול.

למרבה המזל, קל מאד לקרוא לפונקצית theme באמצעות מודול. לדרופל יש רגי'סטרי – רשימת פונקציות theme, המודול שלי יכנס לרג'יסטרי וישנה את פונקצית ה-theme שרצה לפונקציה קיימת בתוך המודול.

נשמע מסובך? הכל פשוט עם דוגמא. מה שהמודול שלי עושה הוא לשנות את ה-checkbox לצורך כלשהו. אני צריך שהפונקציה שלי תרוץ במקום theme_checkbox.

ראשית, אני אגש לדוקומנטציה ואעתיק את פונקצית theme_checkbox. את הפונקציה אני אדביק במודול שלי ואקרא לה בשם ארביטרארי נוסח MY_MODULE_checkbox. לא לשכוח לשמור את הארגומנטים!

אחרי כן אני אשתמש ב-hook_theme_registry_alter על מנת לשנות את פונקצית ה-theme ל-MY_MODULE_checkbox.

בדיוק כך:


/**
 * Implementation of hook_theme_registry_alter().
 *
 * @param $theme_registry The entire cache of theme registry information, post-processing.
 */

function MY_MODULE_theme_registry_alter(&$theme_registry) {
  if (!empty($theme_registry['checkbox'])) {
    $theme_registry['checkbox']['function'] = 'MY_MODULE_checkbox';
  }
}

/**
 * MY_MODULE implementation of theme_checkbox
 * @param $element the checkbox element
 */
function MY_MODULE_checkbox($element) {
  _form_set_class($element, array('form-checkbox'));
  $checkbox = '<input ';
  $checkbox .= 'type="checkbox" ';
  $checkbox .= 'name="' . $element['#return_value'] . '" ';
  $checkbox .= 'id="' . $element['#id'] . '" ';
  $checkbox .= 'value="' . $element['#return_value'] . '" ';
  $checkbox .= $element['#value'] ? ' checked="checked" ' : ' ';
  $checkbox .= drupal_attributes($element['#attributes']) . ' />';

  if (!is_null($element['#title'])) {
    $checkbox = '<label class="option" for="' . $element['#id'] . '">' . $checkbox . ' ' . $element['#title'] . '</label>';
  }

  unset($element['#title']);
  return theme('form_element', $element, $checkbox);
}

וזה הכל, אל תתביישו לחקור את הרג'יסטרי כדי לראות עוד איזה אלמנטים אפשר לדרוס.

כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.
דרופל

השארת תגובה

ביטול

ללמוד ג'אווהסקריפט בעברית

ללמוד לתכנת ג'אווהסקריפט בעברית שגייס יותר משלוש מאות אלף שקל ולמעלה מ-2000 תומכים - בואו ללמוד עכשיו איך לתכנת.

רשימת הנושאים
  • מדריכים
    • ריאקט
    • טייפסקריפט
    • ECMAScript 6
    • ES20XX
    • Node.js
    • Express
    • רספברי פיי
    • Babel
    • docker
    • MongoDB
    • Git
    • לימוד MySQL
    • SASS
    • jQuery
    • CSS3
    • HTML 5
    • SVN
    • LESS
  • פיתוח אינטרנט
    • פתרונות ומאמרים על פיתוח אינטרנט
    • jQuery Scripts
    • jQuery למתקדמים
    • יסודות בתכנות
    • נגישות אינטרנט
  • חדשות אינטרנט
  • מידע כללי על אינטרנט
    • רשת האינטרנט
    • בניית אתרי אינטרנט
  • rss logo

    לכל המאמרים

    לכל המאמרים שפורסמו באינטרנט ישראל משנת 2008 ועד עכשיו.
  • rss logo

    RSS Feed

    משתמשים בקורא RSS? אם כן, עקבו אחרי אינטרנט ישראל באמצעות פיד ה-RSS!
    מה זה RSS?
  • Twitter logo

    עקבו אחרי בטוויטר

    בחשבון הטוויטר שלי אני מפרסם עדכונים מהירים על חדשות בתחום התכנות והיזמות, התרעות על מצבי חירום ורכילות בוערת על תחום הווב.
    מה זה טוויטר?
  • facebook like image

    ערוץ הטלגרם של אינטרנט ישראל

    בערוץ הטלגרם של אינטרנט ישראל אני מפרסם את הפוסטים של באתר וכן עדכונים טכנולוגיים נוספים.
    מה זה טלגרם?
  • github logo

    הפרויקטים שלי בגיטהאב

    הפרויקטים שאני כותב ושוחררו לציבור ברישיון קוד פתוח נמצאים ברובם בגיטהאב.
חיפוש

כל הזכויות שמורות לרן בר-זיק ולאינטרנט ישראל | מדיניות הפרטיות של אתר אינטרנט ישראל | אתר אינטרנט ישראל נגיש לפי תקן WCAG 2.0 AA | הצהרת הנגישות של האתר | אבטחת מידע ודיווח על בעיית אבטחת מידע

גלילה לראש העמוד