寫在前頭,wordpress的文章不能寫入程式碼
所以也就不能直接把Google Apps Script程式碼崁入網站之中
用傳統編輯器寫入,Javescript程式碼會被刪除
用區塊編輯器寫入,可能會無法執行
(只是曾經在預覽的狀態下測試是可行的,但是後來卻不行,不知道是不是我一直在兩種編輯器切換的關係,中間可能有經過怎麼樣的轉換)
因為我還是習慣用傳統編輯器,所以對我來說最方便的方式是使用外掛
之前使用的程式碼片段設定一些全域的JavaSctript的設定
也用過PHPWhere嵌入JavaSctript
這次使用的外掛是Code Embed
可以在文章編輯的自訂欄位設定短代碼,以及程式內容
因為是在文章編輯的情況下直接設定欄位,然後在文章適當位置加入短代碼
流程相對其他兩個外掛而言是方便許多
回到主題,在wordpress結合Google Apps Script建立查詢頁面
程式碼分為兩個部分
GAS後端程式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
function doGet(e) { Logger.log(e); var params = e.parameter; var mailID = params.mailID;// //var mailID = e; //配合 function test() Logger.log(mailID); var Sheet = SpreadsheetApp.openById("**********************************"); var LastRow = Sheet.getLastRow(); var LastColumn = Sheet.getLastColumn(); var data = [];//用來存資料 // 取得全部資料 var listAll = Sheet.getSheetValues(1, 1, LastRow, LastColumn); //存標題 data.push({dataload: listAll[0]}) //第1列是標題,序號由0開始,設定JSON格式{dataload: listAll[0]} for(var i = 1; i < listAll.length; i++){ //第2列才是資料,序號由0開始 if(listAll[i][1] == mailID){ //電子信箱在第2欄,序號由0開始 data.push({dataload: listAll[i]}); //寫入資料 } } //顯示資料 Logger.log(data); //將資料存成JSON格式並回傳 return ContentService.createTextOutput(JSON.stringify(data)).setMimeType(ContentService.MimeType.JSON); } function test() { doGet('[email protected]'); } |
在wordpress呈現查詢頁面的Html 跟 Javascript程式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
<html> <head> <meta charset="UTF-8"></meta> <script type="text/javascript"> var dateReviver = function(key, value) { //將日期字串轉為日期資料型態 //console.log(key); //console.log(value); var a; if (typeof value === 'string') { a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); //console.log(a); if (a) { return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6])); //a[0]是完整字串 } } return value; }; function searchMail(mailID) { var xmlhttp; if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { var result = xmlhttp.responseText; //console.log(result); var obj = JSON.parse(result, dateReviver); //解析json字串為json物件形式,dateReviver將日期字串轉為日期資料型態 //console.log(obj); var html = '<table border=1 width=100%>'; //將資料寫出在Html表格,配合2次迴圈讀取每1筆資料內的所有資料 for (var i = 0; i < obj.length; i++) { //所有筆數的資料跑迴圈 html += '<tr>'; // for (var j = 0; j < obj[i].dataload.length; j++) //每1筆資料內的所有資料,dataload對應回傳的JSON格式 { html += '<td>' + obj[i].dataload[j] + '</td>'; } html += '</tr>'; } html += "</table>"; if (obj.length == 1) { //只有1筆(標題)代表查不到資料 html = "<h3>查無資料<h3>"; document.getElementById("search_status").innerHTML = html; //寫入Html //alert('查無資料'); document.getElementById("mailID").value = ""; } else { document.getElementById("search_status").innerHTML = html; //寫入Html } } } var url = "https://script.google.com/macros/s/**************************************************************************/exec"; xmlhttp.open("get", url + "?mailID=" + mailID, true); xmlhttp.send(); } function cleanAll() { document.getElementById("search_status").innerHTML = ""; document.getElementById("mailID").value = ""; } </script> </head> <body> 測試資料:[email protected]<br /> 輸入電子信箱:<input id="mailID" type="text" /><br /> <input name="search" onclick="searchMail(mailID.value);" type="button" value="送出" /> <input name="clean" onclick="cleanAll();" type="button" value="清除資料" /> <span id="search_status"></span> </body> </html> |
設計概念
從後端接受前端以AJAX方式傳來的查詢字串
搜尋Google試算表中是否有相對應的內容
如果有的話就以JSON格式回傳到前端
前端接受到資料之後,透過JSON.parse解析並處理”變成字串的日期型態資料”
最後將資料串接並顯示在網頁之中
測試資料:[email protected]
輸入電子信箱: