
שלום לכם, הבאים והשבים… היום אנחנו בונים ביחד פס חדשות (News Ticker) בעזרת פיד הRSS של YNET אותו נוכל להטמיע בקלות בכל אתר מבוסס PHP.
מדובר על בקשה פופולרית בקרב בוני אתרים אשר מבקשים ליצור פס חדשות בכמה קליקים ובלי לשבור את המקלדת או להכביד על האתר עם המון קוד. הדוגמה נבנתה עבור אתר וורדפרס מבוסס Bootstratp
מה אתם צריכים לדעת?
- ג'אווה סקריפט (ליתר דיוק jQuery) ברמה מאוד בסיסית
- שפת PHP ברמה בסיסית או יכולת להעתיק ולשנות מעט
- הבנה בסיסית של CSS כדי לשנות לעיצוב הרצוי
- ידע איך להטמיע את הקוד המוגמר באתר שלכם
הדוגמה בה אשתמש נועדה ל..
- אני יצרתי את הקוד להטמעה באתר וורדפרס
- אני משתמש בפיד RSS המבזקים של YNET
- האתר עליו אני מדגים נבנה בעזרת Bootstrap
דוגמה של המוצר המוגמר
- צעיר רוכב אופניים נפגע מרכב סמוך להוד השרון, מצבו אנוש
- לראשונה מאז "שומר החומות": יתאפשר ייצוא של תוצרת חקלאית מרצועת עזה
- הבית הלבן: ביידן ייפגש עם נשיא אפגניסטן בהמשך השבוע
- כדורגל מהיורו: שוויץ ניצחה את טורקיה וצפויה לעלות לשמינית הגמר מהמקום השלישי
- כדורגל מהיורו: מאזן מושלם לאיטליה בשלב הבתים, וויילס העפילה לשמינית הגמר
- הטלוויזיה האיראנית: "השבתת חירום" בכור הגרעיני בבושהר
- גרסת מפקד שלדג בחקירה על תוספות השכר: "מתעמרים ביחידה"
- בנט והורוביץ סיכמו: הגדלה משמעותית של מתחם בדיקות הקורונה בנתב"ג
- חוק איחוד המשפחות לא יעלה להצבעה מחר: "מנסים להגיע להסכמות בממשלה"
- אישום: שני תושבי עכו יידו אבנים וירו לעבר שוטרים בהתפרעויות בעיר
- חשד: מורה בבית ספר בחריש איים על תלמידיו
- משבר הדיור: ליברמן ואלקין רוצים תוכנית המשך למחיר למשתכן
- בקואליציה דוחים את טענת הליכוד: "לא מונעים מהאופוזיציה להגיש הצעת אי-אמון"
- שרת הבריאות הפלסטינית: "פועלים לקבל חיסונים שתוקפם יפוג בסוף יולי"
- גנץ: "עלינו למנף את ההישג הצבאי ב'שומר החומות' למהלך מדיני"
- בנט למשפחות השבויים: "נעשה הכל כדי להשיבם, יודע ששנים שמעתם הבטחות"
- בנט במסר לחמאס: "הסבלנות שלנו אזלה"
- רב העיר צפת: "לרכוש תוצרת חקלאית מיהודים ולא מערבים – מצווה"
- ריבלין בטקס האזכרה לחללי צוק איתן: "מחויבים להחזיר את השבויים והנעדרים"
- מ-1 ביולי: תיירים מחוסנים יוכלו להיכנס לארץ
- ההתפרעות בחתונה בדיר אל-אסד: מח"ש החרימה את אקדחי השוטרים
- ארה"ב: "אמירתו של קים על 'דיאלוג או עימות' – סימן מעניין"
- צעירה נהרגה בהתהפכות רכב בצפון
- שריפת קוצים פרצה בעפולה, תושבים פונו מבתיהם
- הליכוד: ממשלת בנט מונעת מהאופוזיציה להגיש הצעות אי-אמון, איראן זה כאן
- שליח האיחוד האירופי לשיחות הגרעין בווינה: "יש התקדמות, אבל אנחנו עוד לא שם"
- נדחה הערעור של העיתונאית שגרמה למות אמה ונידונה למאסר
- צעיר מאשקלון נאשם בביצוע עבירות מין כלפי ילדות במשחק מחשב
- פעוטה נשכחה ברכב בנגב – ומתה
- משרד הבריאות הפלסטיני: נמשיך במו"מ עם ישראל ועם פייזר למימוש הסכם החיסונים
קוד בן שלושה חלקים
הקוד שלנו מורכב משלושה חלקים, הראשון הוא קוד jQuery אשר אחראי על תצוגה מתוזמנת של פריטים ברשימה, השני הוא קוד CSS שאחראי על עיצוב הפריטים והשלישי הוא קוד PHP אשר יקרא את ההזנת RSS בעזרת cUrl וימיר את הפריטים לרשימת HTMLקוד jQuery
// jQuery Bootstrap News Box v1.0.1
// http://www.jqueryscript.net/slider/Responsive-jQuery-News-Ticker-Plugin-with-Bootstrap-3-Bootstrap-News-Box.html
if (typeof Object.create !== "function") { Object.create = function (e) { function t() { } t.prototype = e; return new t } } (function (e, t, n, r) { var i = { init: function (t, n) { var r = this; r.elem = n; r.$elem = e(n); r.newsTagName = r.$elem.find(":first-child").prop("tagName"); r.newsClassName = r.$elem.find(":first-child").attr("class"); r.timer = null; r.resizeTimer = null; r.animationStarted = false; r.isHovered = false; if (typeof t === "string") { if (console) { console.error("String property override is not supported") } throw "String property override is not supported" } else { r.options = e.extend({}, e.fn.bootstrapNews.options, t); r.prepareLayout(); if (r.options.autoplay) { r.animate() } if (r.options.navigation) { r.buildNavigation() } if (typeof r.options.onToDo === "function") { r.options.onToDo.apply(r, arguments) } } }, prepareLayout: function () { var n = this; e(n.elem).find("." + n.newsClassName).on("mouseenter", function () { n.onReset(true) }); e(n.elem).find("." + n.newsClassName).on("mouseout", function () { n.onReset(false) }); e.map(n.$elem.find(n.newsTagName), function (t, r) { if (r > n.options.newsPerPage - 1) { e(t).hide() } else { e(t).show() } }); if (n.$elem.find(n.newsTagName).length < n.options.newsPerPage) { n.options.newsPerPage = n.$elem.find(n.newsTagName).length } var r = 0; e.map(n.$elem.find(n.newsTagName), function (t, i) { if (i < n.options.newsPerPage) { r = parseInt(r) + parseInt(e(t).height()) + 10 } }); e(n.elem).css({ "overflow-y": "hidden", height: r }); e(t).resize(function () { if (n.resizeTimer !== null) { clearTimeout(n.resizeTimer) } n.resizeTimer = setTimeout(function () { n.prepareLayout() }, 200) }) }, findPanelObject: function () { var e = this.$elem; while (e.parent() !== r) { e = e.parent(); if (e.parent().hasClass("panel")) { return e.parent() } } return r }, buildNavigation: function () { var t = this.findPanelObject(); if (t) { var n = '<ul class="pagination pull-right" style="margin: 0px;">' + '<li><a href="#" class="prev"><span class="glyphicon glyphicon-chevron-down"></span></a></li>' + '<li><a href="#" class="next"><span class="glyphicon glyphicon-chevron-up"></span></a></li>' + '</ul><div class="clearfix"></div>'; var r = e(t).find(".panel-footer")[0]; if (r) { e(r).append(n) } else { e(t).append('<div class="panel-footer">' + n + "</div>") } var i = this; e(t).find(".prev").on("click", function (e) { e.preventDefault(); i.onPrev() }); e(t).find(".next").on("click", function (e) { e.preventDefault(); i.onNext() }) } }, onStop: function () { }, onPause: function () { var e = this; e.isHovered = true; if (this.options.autoplay && e.timer) { clearTimeout(e.timer) } }, onReset: function (e) { var t = this; if (t.timer) { clearTimeout(t.timer) } if (t.options.autoplay) { t.isHovered = e; t.animate() } }, animate: function () { var e = this; e.timer = setTimeout(function () { if (!e.options.pauseOnHover) { e.isHovered = false } if (!e.isHovered) { if (e.options.direction === "up") { e.onNext() } else { e.onPrev() } } }, e.options.newsTickerInterval) }, onPrev: function () { var t = this; if (t.animationStarted) { return false } t.animationStarted = true; var n = "<" + t.newsTagName + ' style="display:none;" class="' + t.newsClassName + '">' + e(t.$elem).find(t.newsTagName).last().html() + "</" + t.newsTagName + ">"; e(t.$elem).prepend(n); e(t.$elem).find(t.newsTagName).first().slideDown(t.options.animationSpeed, function () { e(t.$elem).find(t.newsTagName).last().remove() }); e(t.$elem).find(t.newsTagName + ":nth-child(" + parseInt(t.options.newsPerPage + 1) + ")").slideUp(t.options.animationSpeed, function () { t.animationStarted = false; t.onReset(t.isHovered) }); e(t.elem).find("." + t.newsClassName).on("mouseenter", function () { t.onReset(true) }); e(t.elem).find("." + t.newsClassName).on("mouseout", function () { t.onReset(false) }) }, onNext: function () { var t = this; if (t.animationStarted) { return false } t.animationStarted = true; var n = "<" + t.newsTagName + ' style="display:none;" class=' + t.newsClassName + ">" + e(t.$elem).find(t.newsTagName).first().html() + "</" + t.newsTagName + ">"; e(t.$elem).append(n); e(t.$elem).find(t.newsTagName).first().slideUp(t.options.animationSpeed, function () { e(this).remove() }); e(t.$elem).find(t.newsTagName + ":nth-child(" + parseInt(t.options.newsPerPage + 1) + ")").slideDown(t.options.animationSpeed, function () { t.animationStarted = false; t.onReset(t.isHovered) }); e(t.elem).find("." + t.newsClassName).on("mouseenter", function () { t.onReset(true) }); e(t.elem).find("." + t.newsClassName).on("mouseout", function () { t.onReset(false) }) } }; e.fn.bootstrapNews = function (e) { return this.each(function () { var t = Object.create(i); t.init(e, this) }) }; e.fn.bootstrapNews.options = { newsPerPage: 4, navigation: true, autoplay: true, direction: "up", animationSpeed: "normal", newsTickerInterval: 4e3, pauseOnHover: true, onStop: null, onPause: null, onReset: null, onPrev: null, onNext: null, onToDo: null} })(jQuery, window, document)
jQuery(document).ready(function($) {
// NEWS TICKER WIDGET
if($('.newsTicker').length > 0) {
$(".newsTicker").bootstrapNews({
newsPerPage: 1,
autoplay: true,
pauseOnHover: true,
navigation: false,
direction: 'up',
newsTickerInterval: 10000,
onToDo: function () {
//console.log(this);
}
});
}
});
קוד PHP
<?php
$html = '';
$feedUrl = 'http://www.ynet.co.il/Integration/StoryRss1854.xml';
$ch = curl_init();
$timeout = 5; // set to zero for no timeout
curl_setopt ($ch, CURLOPT_URL, $feedUrl);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$rawFeed = curl_exec($ch);
curl_close($ch);
//load the simpleXML object
$xml = new SimpleXmlElement($rawFeed);
//iterate through it and build the list
foreach ($xml->channel->item as $item) {
$html.= '<li class="animated fadeInRight"><a href="'.$item->link.'" title="'.$item->title.'">'.$item->title.'</a></li>';
}
?>
<div class="newTickerBox">
<div class="row">
<div class="col-md-3">
<div class="bg2 ntlabel w100 text-center"><?php _e('Recent News', THEME_NAME); ?>:</div>
</div>
<div class="col-md-9">
<ul class="newsTicker lsnone p0 m0">
<?php echo $html; ?>
</ul>
</div>
</div>
</div>
קוד CSS
/**********************************************
** NEWS TICKER
/*********************************************/
.newTickerBox .col-md-3 {padding-left: 0;}
.newTickerBox .col-md-9 {padding-right: 0;}
.newTickerBox .newsTicker {background: #3F4652;font-size: 16px; height: 24px !important; overflow: hidden; padding-right: 20px !important;}
.newTickerBox .newsTicker a {color: #fff;}
.newTickerBox .ntlabel {font-size: 16px; text-shadow: 1px 1px 1px #2C6576;}
מסתבכים עם ההטמעה?
ההטמעה דיי פשוטה למי שיודע מה עושים… בעיקרון אתם צריכים לכלול את הjQuery בקובץ JS שאתם כבר כוללים אל הדף או ליצור קובץ JS ולוודא שאתם כוללים אותו כהלכה אל הדף.את הCSS יש לצרף אל קובץ הCSS של האתר שלכם ואת קוד הPHP יש להטמיע ישירות במיקום הרצוי כלומר במיקום בו תרצו להציג את פס החדשות.
שימו לב
אני השתמשתי בכל מיני אפקטים של CSS כדי ליצור את אפקט הסלייד שמאלה – אם אתם מתקשים עם זה השתמשו במדור שאלות ותשובות כדי לשאול אותנו על אפקט הCSS הרצוי או איך יוצרים את האפקט הקיים.
טופס התגובות כאן בשבילכם
טופס התגובות כאן, פתוח ומזמין לכל שאלה. אני שמח לעזור (אבל באמת) בתנאי שהשאלה ברורה מספיק – השתמשו בpasteBin כדי להדביק קוד. המון בהצלחה, שגיב SEO.


