מודול בדרופל שמוסיף כפתור 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>
	';
}


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

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

פיתוח ב-JavaScript

Axios interceptors

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

למפתחי ובוני אתרי אינטרנט

מדריך לשאילתות יעילות ל Chat GPT

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

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