דוגמאות נוספות לקריאה חוזרת (callback) של רכיב החיפוש

בדף הזה יש מגוון דוגמאות לשימוש בקריאות חוזרות (callback) של רכיב החיפוש. הן משלימות את הדוגמאות שמופיעות בקטע 'התקשרות חזרה' במסמך 'Custom Search Element API'.

חיפוש דוגמאות להתקשרות חזרה

הקריאה החוזרת (callback) בתחילת החיפוש יכולה לשנות את השאילתה לפני שנעשה בה שימוש בחיפוש. אפשר להגדיר את Programmable Search Engine כך שיכלול מונחים שהוגדרו מראש בשאילתה, אבל הקריאה החוזרת הזו יכולה לשנות את השאילתה על סמך כל מידע שזמין לפונקציית הקריאה החוזרת.

כשמפעילים את הקריאה החוזרת (callback) בחיפוש שמתחיל, כל שאילתה מופיעה עם היום הנוכחי של השבוע.

דוגמה לתחילת חיפוש לשיחה חוזרת
<script async
  src="https://cse.google.com/cse.js?cx=000888210889775888983:g9ckaktfipe"></script>
const mySearchStartingCallback = (gname, query) => {
  const dayOfWeek = new Date().getDay();
  console.log(dayOfWeek);
  var days = {
        "0": "Sunday",
        "1": "Monday",
        "2": "Tuesday",
        "3": "Wednesday",
        "4": "Thursday",
        "5": "Friday",
        "6": "Saturday"
    };

    return query + ' ' + days[dayOfWeek];
};
// Install the callback.
window.__gcse || (window.__gcse = {});
  window.__gcse.searchCallbacks = {
    image: {
      starting: mySearchStartingCallback,
    },
    web: {
      starting: mySearchStartingCallback,
    },
};

כוללים את הרכיבים הבאים ב-HTML:

<div class="gcse-searchbox"></div>
<div class="gcse-searchresults"></div>

דוגמאות לקריאה חוזרת (callback) שעובדו

תוצאות הקריאה החוזרת (callback) המעובדות עוזרות לשינוי הדף אחרי שמתבצע בו אכלוס בתוצאות. הוא נועד להקל על שינוי התצוגה של התוצאות, בלי לדרוש קריאה חוזרת (callback) שתיקח אחריות מלאה על הצגת התוצאות.

הדוגמאות הבאות ממחישות שני יישומים של הקריאה החוזרת (callback) שהתקבלו במסגרת פונקציית ההחזרה שאינם פועלים לפי התוצאות.

זיהוי דף התוצאות האחרונות

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

<script async
  src="https://cse.google.com/cse.js?cx=000888210889775888983:y9tkcjel090"></script>
myWebResultsRenderedCallback = function(){
    var searchresults= document.getElementsByClassName("gsc-cursor-page");
    var index= document.getElementsByClassName("gsc-cursor-current-page");
    if(index.item(0).innerHTML == searchresults.length){
       alert("This is the last results page");
    }
};

התקנה של הקריאה החוזרת (callback)

window.__gcse || (window.__gcse = {});
window.__gcse.searchCallbacks = {
  web: {
      // Since the callback is in the global namespace, we can refer to it by name,
      // 'myWebResultsRenderedCallback', or by reference, myWebResultsRenderedCallback.
      rendered: myWebResultsRenderedCallback,
  },
};

כוללים את הרכיבים הבאים ב-HTML:

<div class="gcse-searchbox"></div>
<div class="gcse-searchresults"></div>
הגדלת הגופן של קישורי ה'סמן'

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

גודל הגופן המוגדר כברירת מחדל הוא 12 פיקסלים. כאן נגדיל אותו ל-20 פיקסלים.

<script async
  src="https://cse.google.com/cse.js?cx=000888210889775888983:y9tkcjel090"></script>
myWebResultsRenderedCallback = function(){
   document.getElementsByClassName("gsc-cursor")[0].style.fontSize = '20px';
};

התקנה של הקריאה החוזרת (callback)

window.__gcse || (window.__gcse = {});
window.__gcse.searchCallbacks = {
  web: {
      // Since the callback is in the global namespace, we can refer to it by name,
      // 'myWebResultsRenderedCallback', or by reference, myWebResultsRenderedCallback.
      rendered: myWebResultsRenderedCallback,
  },
};

כוללים את הרכיבים הבאים ב-HTML:

<div class="gcse-searchbox"></div>
<div class="gcse-searchresults"></div>
משתמשים באותיות עבור תוויות של "Cursor"

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

<script async
  src="https://cse.google.com/cse.js?cx=000888210889775888983:y9tkcjel090"></script>
myWebResultsRenderedCallback = function(){
    var arr = document.getElementsByClassName('gsc-cursor-page');
    var alp = ['A','B','C','D','E','F','G','H','I','J','K','L',
      'M','N','O','p','Q','R','S','T','U','V','W','X','Y','Z'];
    for (var i = 0; i < arr.length; i++) {
        arr[i].innerHTML = alp[i];
    }
};

התקנה של הקריאה החוזרת (callback)

window.__gcse || (window.__gcse = {});
window.__gcse.searchCallbacks = {
  web: {
      // Since the callback is in the global namespace, we can refer to it by name,
      // 'myWebResultsRenderedCallback', or by reference, myWebResultsRenderedCallback.
      rendered: myWebResultsRenderedCallback,
  },
};

כוללים את הרכיבים הבאים ב-HTML:

<div class="gcse-searchbox"></div>
<div class="gcse-searchresults"></div>

דוגמאות לקריאה חוזרת (callback) מוכנות

הצגת תוצאות עם רקעים בצבעים מתחלפים

הפורמט של הקריאה החוזרת (callback) שמתקבל מתחלף עם רקעים בהירים וכהים.

<script async
      src="https://cse.google.com/cse.js?cx=000888210889775888983:y9tkcjel090"></script>

הערה: הקוד הזה נכתב ב-JavaScript/ES6. הוא יפעל ברוב הדפדפנים, אבל יהיה עליך להמיר אותו ל-JavaScript/ES5 ב-Internet Explorer ובכמה דפדפנים ישנים יותר.

barredResultsRenderedCallback = function(gname, query, promoElts, resultElts){
  const colors = ['Gainsboro', 'FloralWhite'];
  let colorSelector = 0;
  for (const result of resultElts) {
    result.style.backgroundColor = colors[colorSelector];
    colorSelector = (colorSelector + 1) % colors.length;
  }
};
window.__gcse || (window.__gcse = {});
window.__gcse.searchCallbacks = {
  web: {
    rendered: barredResultsRenderedCallback,
  },
};

כוללים את הרכיבים הבאים ב-HTML:

<div class="gcse-searchbox"></div>
<div class="gcse-searchresults"></div>

ענן מילים

היישום הברור של קריאה חוזרת (callback) תוצאות מוכנות הוא להציג תוצאות חיפוש בפורמט שקשה להגיע אליו באמצעות הקריאה החוזרת לתוצאות עיבוד כדי לשנות את ה-HTML. הקריאה החוזרת (callback) לתוצאות מוכנות מתחילה ב-div ריק. דוגמה אחת במסמך Search Element API הראתה כיצד להשתמש ב-callback כדי לעבד גרסה פשוטה מאוד של תוצאות. דוגמה נוספת הראתה כיצד לשמור את נתוני התוצאות מהקריאה החוזרת התוצאות מוכנות ולהעביר אותם אל הקריאה החוזרת לתוצאות שעובדו, שבה ניתן להשתמש בהם כדי לקשט את תצוגת התוצאות הרגילה.

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

יצירת ענן מילים מתוכן של תוצאות חיפוש
<script async
      src="https://cse.google.com/cse.js?cx=000888210889775888983:y9tkcjel090"></script>
<style>
  #container {
    width: 100%;
    height: 4.5in;
    margin: 0;
    padding: 0;
  }
</style>
<script src="https://cdn.anychart.com/releases/v8/js/anychart-base.min.js"></script>
<script src="https://cdn.anychart.com/releases/v8/js/anychart-tag-cloud.min.js"></script>

הערה: הקוד הזה נכתב ב-JavaScript/ES6. הוא יפעל ברוב הדפדפנים, אבל יהיה עליך להמיר אותו ל-JavaScript/ES5 ב-Internet Explorer ובכמה דפדפנים ישנים נוספים.

const resultsReadyWordCloudCallback = function(
        name, q, promos, results, resultsDiv) {
    const stopWords = new Set()
      .add('a')
      .add('A')
      .add('an')
      .add('An')
      .add('and')
      .add('And')
      .add('the')
      .add('The');

    const words = {};
    const splitter = /["“”,\?\s\.\[\]\{\};:\-\(\)\/!@#\$%\^&*=\+\*]+/;
    if (results) {
        for (const {contentNoFormatting, titleNoFormatting} of results) {
            const wordArray = (contentNoFormatting + ' ' + titleNoFormatting)
              .split(splitter)
              .map(w => w.toLowerCase());
            for (const w of wordArray) {
                if (w && !stopWords.has(w)) {
                    words[w] = (words[w] + 1) || 1;
                }
            }
        }
    }
    const dataForChart = [];
    for (const key in words) {
        const val = words[key];
        dataForChart.push({
            'x': key,
            'value': val,
        });
    }

    const container = document.createElement('div');
    resultsDiv.appendChild(container);
    container.id = 'container';
    // create a tag (word) cloud chart
    const chart = anychart.tagCloud(dataForChart);
    // set a chart title
    chart.title(`Words for query: "${q}"`)
    // set an array of angles at which the words will be laid out
    chart.angles([0, 45, 90, 135])
    // display the word cloud chart
    chart.container(container);
    chart.draw();
    return true; // Don't display normal search results.
};
window.__gcse || (window.__gcse = {});
window.__gcse.searchCallbacks = {
    web: {
        ready: resultsReadyWordCloudCallback,
    },
};

כוללים את הרכיבים הבאים ב-HTML:

<div class="gcse-searchbox"></div>
<div class="gcse-searchresults"></div>

דוגמה לקריאה חוזרת (callback) בשני חלקים

ניתן להשתמש בקריאות חוזרות (callback) מסוג תוצאות מוכנות ותוצאות שעברו עיבוד בשילוב כדי להעביר מידע מהראשון לאחר. לדוגמה, המידע במערך האובייקטים של התוצאות זמין לקריאה חוזרת (callback) מסוג תוצאות מוכנות, אבל לא לקריאה חוזרת (callback) של תוצאות שעובדו. אנחנו שומרים את המידע הזה במערך כחלק מהקריאה החוזרת לתוצאות, כדי שהוא יהיה נגיש לקריאה חוזרת (callback) התוצאות שעובדו.

אחת הדוגמאות לכך היא לעקוף את חלונית התצוגה המקדימה שמוצגת כשלוחצים על תוצאת תמונה. בעזרת קריאה חוזרת (callback) בשני חלקים, אנחנו יכולים לקשר את התוצאות של התמונות ישירות לאתרים המתאימים, במקום להציג תצוגה מקדימה של התמונה כשלוחצים עליה.

עקיפה של תצוגה מקדימה של תמונות
<script async
  src="https://cse.google.com/cse.js?cx=000888210889775888983:g9ckaktfipe"></script>
const makeTwoPartCallback = () => {
  let urls;
  const readyCallback = (name, q, promos, results, resultsDiv) => {
    urls = [];
    for (const result of results) {
      urls.push(result['contextUrl']);
    }
  };
  const renderedCallback = (name, q, promos, results) => {
    const removeEventListeners = element => {
      const clone = element.cloneNode(true);
      element.parentNode.replaceChild(clone, element);
      return clone;
    };
    for (let i = 0; i < results.length; ++i) {
      const element = removeEventListeners(results[i]);
      element.addEventListener('click', () => window.location.href = urls[i]);
    }
  };
  return {readyCallback, renderedCallback};
};
const {
  readyCallback: imageResultsReadyCallback,
  renderedCallback: imageResultsRenderedCallback,
} = makeTwoPartCallback();
window.__gcse || (window.__gcse = {});
window.__gcse.searchCallbacks = {
  image: {
    ready: imageResultsReadyCallback,
    rendered: imageResultsRenderedCallback,
  },
};

כוללים את הרכיבים הבאים ב-HTML:

<div class="gcse-searchbox"></div>
<div class="gcse-searchresults"></div>