שלום לכם, הבאים והשבים… היום אנחנו בונים ביחד פס חדשות (News Ticker) בעזרת פיד הRSS של YNET אותו נוכל להטמיע בקלות בכל אתר מבוסס PHP.
מדובר על בקשה פופולרית בקרב בוני אתרים אשר מבקשים ליצור פס חדשות בכמה קליקים ובלי לשבור את המקלדת או להכביד על האתר עם המון קוד. הדוגמה נבנתה עבור אתר וורדפרס מבוסס Bootstratp
מה אתם צריכים לדעת?
- ג'אווה סקריפט (ליתר דיוק jQuery) ברמה מאוד בסיסית
- שפת PHP ברמה בסיסית או יכולת להעתיק ולשנות מעט
- הבנה בסיסית של CSS כדי לשנות לעיצוב הרצוי
- ידע איך להטמיע את הקוד המוגמר באתר שלכם
הדוגמה בה אשתמש נועדה ל..
- אני יצרתי את הקוד להטמעה באתר וורדפרס
- אני משתמש בפיד RSS המבזקים של YNET
- האתר עליו אני מדגים נבנה בעזרת Bootstrap
דוגמה של המוצר המוגמר
- גבר נעצר בבוורלי הילס בחשד לפשע שנאה לאחר שתקף זוג בדרכם לבית הכנסת
- עיריית מעלות תרשיחא: זוהו 16 שיגורים לאזור, אין דיווחים על נפילות
- פיקוד העורף ודניאל הגרי בפנים: רשימת המושגים המחופשים ביותר בגוגל ב-2023
- בשל סחף שנגרם מגשם כבד: כביש הערבה נחסם בכמה מוקדים בחלקו הדרומי
- דיווח בלבנון: ישראל דורשת להרחיק את חיזבאללה לעומק של 3 ק"מ מהגבול
- אזעקה במעלות, כפר ורדים ויישובים נוספים בצפון
- התחזית: גשם מקומי בערבה ובדרום הנגב, חשש לשיטפונות
- צה"ל: ניסוי צבאי יתקיים הבוקר באזור הקריות, הדי פיצוצים יישמעו
- טראמפ: לא אעיד השבוע במשפט נגדי – שהוא התערבות מוחלטת בבחירות
- הותרו לפרסום שמותיהם של ארבעה חללי צה"ל
- צעיר נפצע קשה בתאונת דרכים ליד כרמיאל
- דיווח: מטוס F-16 אמריקני התרסק בדרום קוריאה במהלך טיסת אימון
- צבע אדום נוסף בעוטף
- צבע אדום בעוטף
- ישיבת הקבינט הסתיימה, לא התקיימה הצבעה בסוגיית החזרת הפועלים הפלסטינים
- לראשונה מפרוץ המלחמה: היועץ לביטחון לאומי של ארה"ב יגיע לישראל בסוף השבוע
- על רקע חבילת הסיוע שעדיין לא אושרה: זלנסקי וביידן ייפגשו בבית הלבן ביום שלישי
- רעיית ראש הממשלה נפגשה עם אורי מגידיש ששוחררה משבי חמאס
- דיווח: העצרת הכללית של האו"ם תצביע בשלישי על הפסקת אש הומניטרית
- דיווח: התקיפות ה"ישראליות" בסוריה כוונו למפקדות ומחסנים של חיזבאללה
- משרד ההגנה הסורי: יירטנו טילים ישראליים באזור דמשק, נגרם נזק
- במהלך היום: 100 משאיות סיוע נכנסו לרצועה, ביניהן 5 עם דלק וגז בישול
- הקבינט המדיני-ביטחוני מתכנס בקריה
- רה"מ ורעייתו ביקרו את משפחתו של אל"מ אסף חממי, שנפל ב-7 באוקטובר
- רוכב אופניים חשמליים נפגע מרכב באשדוד, מצבו קשה
- דיווח בסוריה: התקיפה ה"ישראלית" כללה 2 סבבים, חלק מהטילים יורטו
- סוריה: ישראל תקפה באזור דמשק
- דיווח בסוריה: פיצוצים נשמעו בבירה דמשק
- האזעקה בגליל המערבי: צה"ל שיגר מיירט לעבר מטרה שחצתה מלבנון
- בשל מזג אוויר קיצוני: מטוס אל על נכנס לשטח לבנון יומיים מפרוץ המלחמה
קוד בן שלושה חלקים
הקוד שלנו מורכב משלושה חלקים, הראשון הוא קוד jQuery אשר אחראי על תצוגה מתוזמנת של פריטים ברשימה, השני הוא קוד CSS שאחראי על עיצוב הפריטים והשלישי הוא קוד PHP אשר יקרא את ההזנת RSS בעזרת cUrl וימיר את הפריטים לרשימת HTMLקוד jQuery
// jQuery Bootstrap News Box v1.0.1 // https://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 = 'https://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.