מודול בדרופל שמוסיף כפתור like

דוגמת קוד למודול פשוט שמוסיף כפתור like בפייסבוק בדרופל 6 ודרופל 7

יש דווקא אחלה מודול דרופלי שמטפל בהוספת כל מני פלאגינים של פייסבוק לדרופל. אם אתם סתם מחפשים דרך לשלב את פייסבוק, תורידו את מודול Social Plugin (אפשר גם עם drush הנהדר כמובן: drush dl fb_social). אם אתם ממשיכים לקרוא מכאן, כנראה שאתם צריכים משהו שונה. או שהמודול הזה לא עובד לכם, או שאתם רוצים ליצור מודול פשוט. המודול שאנו יוצרים הוא מודול פשוט שבפשוטים, הוא פשוט מוסיף בתחתית כל node כפתור like בפייסבוק.

יצירת info

בכל מודול חייב להיות info מסוג כלשהו, שם המודול שלנו הוא: internet_israel_facebook_button ולפיכך אנו ניצור תיקיה בשם הזה תחת sites/module וניצור קובץ בשם: internet_israel_facebook_button.info – התוכן שלו יראה כך:


name = Internet Israel Like Button 
description = Adding Like Button to every node.
package = Internet Israel
core = 6.x
version = "1.0"
core = "6.x"

אתם כמובן יכולים להתפרע כרצונכם ולשנות את שם המודול והתיאור שלו.

יצירת קובץ המודול

ועכשיו, לקובץ שבאמת חשוב internet_israel_facebook_button.module. ראשית, אני אשתמש ב-hook_nodeapi על מנת להפעיל את פונקצית ההוספה ברגע שמישהו רואה את ה-node.


<?php
function internet_israel_facebook_button_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
	switch ($op) {
		case 'view':
		drupal_add_css(drupal_get_path('module', 'internet_israel_facebook_button') .'/internet_israel_facebook_button.css');
		$node->content.=_like_button_facebook_like();
        break;	
	}
}

function _like_button_facebook_like() {
    return '<div class="facebook-like">
    <iframe src="http://www.facebook.com/plugins/like.php?href=' . $_SERVER['HTTP_HOST'] . request_uri() . '
    &layout=standard&show_faces=false&width=400&action=like&font=arial&
    colorscheme=light&height=35" scrolling="no" frameborder="0" style="border:none;
     overflow:hidden; width:400px; height:35px;" allowTransparency="true"></iframe></div>';
}


hook_nodeapi זה hook מאד חביב ושימושי בכל פעם שאני רוצה לעשות משהו עם node, יש תיעוד מפורט עליו ב-Drupal API. כמה חבל שאין אותו בדרופל 7. מה שהוא עושה, הוא מוסיף CSS שאני אצור במודול מאוחר יותר וכן קורא לפונקצית _like_button_facebook_like שמחזירה את הקוד של הכפתור. זה הכל, ואז הכל נצמד לתוכן ופיניטו לה קומדיה.

זה לא עובד

אם המודול לא עובד לכם, 99% שמסיבה מסוימת אתם לא מדפיסים את node->content$. יכול להיות שהתמה שלכם מדפיסה שדות ספציפיים, אם כך, פשוט צריך לשנות את השורה:


		$node->content.=_like_button_facebook_like();

למשהו בתוך ה-node שבאמת מודפס. משהו בסגנון:


$node->field_body[0]['value'].=_like_button_facebook_like();

כדי לדעת בדיוק איזה שדות יש ב-node שלכם, אפשר פשוט לעשות בתוך ה-hook איזה print_r למשתנה node על מנת שיציג לכם את הברדק שהולך שם.

אפשר כמובן להשתמש במודול להציג עוד דברים חוץ מפייסבוק, למשל את כפתור הריטוויט של Topsy למי שלא מכיר. גם לו יש מודול מוצלח לדרופל – אבל אפשר להוסיף אותו באמצעות המודול שלנו, הנה הקוד המלא:


<?php

function internet_israel_facebook_button_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
	switch ($op) {
		case 'view':
		drupal_add_css(drupal_get_path('module', 'internet_israel_facebook_button') .'/internet_israel_facebook_button.css');
		drupal_set_html_head('<script type="text/javascript" src="http://cdn.topsy.com/topsy.js?init=topsyWidgetCreator"></script>');
		$node->content.=_like_button_facebook_like();
		$node->content = _like_button_topsy($node->title).$node->content;
        break;	
	}
}

function _like_button_facebook_like() {
    return '<div class="facebook-like">
    <iframe src="http://www.facebook.com/plugins/like.php?href=' . $_SERVER['HTTP_HOST'] . request_uri() . '
    &layout=standard&show_faces=false&width=400&action=like&font=arial&
    colorscheme=light&height=35" scrolling="no" frameborder="0" style="border:none;
     overflow:hidden; width:400px; height:35px;" allowTransparency="true"></iframe></div>';
}
function _like_button_topsy($nodetitle) {
	return '
	<div class="topsy_widget_data"><!--
    {
        "url": "' . $_SERVER['HTTP_HOST'] . request_uri() . '",
        "title": "'.$nodetitle.'",
        "style": "big",
    }
	--></div>
	';
}


התאמה לדרופל 7

בדרופל 7 (נכון לשורות אלו עדיין בבטא) יש כמה שינויים מהותיים. ראשית, ה-nodeapi משתנה והוא לא מעביר את מצב ה-node כמשתנה op אלא אנו משתמשים במתודות שונות עבור כל מצב. שנית, אנו משתמשים ב-drupal_add_html_head כדי להוסיף את הסקריפט של topsy. הנה הקוד המלא שעובד בדרופל 7:


<?php

function launchpoker_like_button_nodeapi($node, $view_mode, $langcode) {
		drupal_add_css(drupal_get_path('module', 'launchpoker_like_button') .'/launchpoker_like_button.css');
		drupal_add_html_head('<script type="text/javascript" src="http://cdn.topsy.com/topsy.js?init=topsyWidgetCreator"></script>');
		$node->content.=_like_button_facebook_like();
		$node->content = _like_button_topsy($node->title).content;
}

function _like_button_facebook_like() {
    return '<div class="facebook-like">
    <iframe src="http://www.facebook.com/plugins/like.php?href=' . $_SERVER['HTTP_HOST'] . request_uri() . '
    &layout=standard&show_faces=false&width=400&action=like&font=arial&
    colorscheme=light&height=35" scrolling="no" frameborder="0" style="border:none;
     overflow:hidden; width:400px; height:35px;" allowTransparency="true"></iframe></div>';
}

function _like_button_topsy($nodetitle) {
	return '
	<div class="topsy_widget_data"><!--
    {
        "url": "' . $_SERVER['HTTP_HOST'] . request_uri() . '",
        "title": "'.$nodetitle.'",
        "style": "big",
    }
	--></div>
	';
}


קל ופשוט לעבוד עם דרופל – ובדוגמא הזו רואים את זה היטב.

פוסטים נוספים שכדאי לקרוא

פתרונות ומאמרים על פיתוח אינטרנט

יישום של nonce על מנת להגן מפני התקפות injection

בפוסט הקודם הסברתי על hash עם CSP על משאבי inline – שזה נחמד ומעולה אבל פחות ישים בעולם האמיתי שבו בדרך כלל התוכן ה-inline (בין

מיקרו בקרים

בית חכם עם ESPHome ו Home Assistant

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

ESP32 מאפס לילדים

מדריך ל-ESP32 לילדים ולהורים מאפס

אחד הדברים הכי כיפיים בעולם הוא תכנות ותכנות בעולם האמיתי – המפעיל אורות, ציוד אלקטרוני ומכשירים הוא מלהיב ממש. המדריך מיועד להורים שרוצים ללמד את הילדים שלהם לתכנת.

מיקרו בקרים

הפעלת מסך oled קטנטן עם esp32

יצירת מערכת מולטימדיה שלמה בגודל של בול דואר עם מיקרובקר ובעלות של דולרים בודדים. וגם על הדרך נלמד על ת׳רדים

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