Google Search Console為網站管理的重要工具,想知如何操作的管理請看這裡

google search console的功能是什麼?

Google Search Console是由Google提供的免費服務,可協助您監控和維護您的網站在Google搜索結果中的展示情況以及排查問題。即使您不註冊Search Console,您的網站也能出現在Google搜索結果中,但Search Console可幫助您了解並改善Google如何看待您的網站。Search Console為以下操作提供了相關工具和報告 :

• 確認Google能夠找到並抓取您的網站。

• 修正索引編制問題並可請求加入新內容或更新後的內容重新編入索引。

• 查看網站在Google搜索中的成果分析及報告。

• 排查網站問題並接收警報。

• 查看網站的流量和搜索分析。

所以當您建立了一個新的網站時,應也要加入Search Console來檢視及管理你的網站。

想了解全文可看這裡

發表於 主機設定及管理 | 發表迴響

API無反應,因php file_open_contents()

最近租了主機動物園的虛擬主機, 但發現沒法開啟api ,
由外部叫用也無用,由內部也無用.
因用的是php ,改採javscript grep測試則可取得,
故檢查php叫用api的作法,其最後以file_open_contents(…) 去送去需求,
一下本地檔案可取, url則不通,
再查cpanel設定方式, 得解!
在php 版本選則下有options選項,進入後勾選allow_url_fopen=true ,達成!

file_open_contents disallow URL wrapp

參考資料:

https://www.cyberciti.biz/faq/file_get_contents-https-wrapper-is-disabled-in-the-server-configuration/

https://chemicloud.com/kb/article/how-to-enable-or-disable-allow_url_fopen-in-cpanel/

發表於 主機設定及管理, 技術與設置 | 發表迴響

所有table行都成有兩色相間的斑馬紋 

CSS:
table{
    tr:nth-child(even) {
      background-color: #f2f2f2;
    }
}

原以為表格要變成斑馬紋很難搞,原來只要加這麼一句就行了, 原來那段表示tr出現的偶數(even)行換背景色就淺灰.
反之,如要奇數行則傳odd取代even.
如要指定特定行則給行數就行了如 p:nth-child(3) {…}
真是夠簡單了.

W3Schools的教學:

https://www.w3schools.com/howto/howto_css_table_zebra.asp

https://www.w3schools.com/cssref/sel_nth-child.asp

發表於 HTML&CSS | 發表迴響

Angular內以rxjs做非同步延遲

Delay的寫法很多,但最近看到一個做法是以rxjs的of加delay()來做非同步程式很簡節所以記錄一下,如下:

of(true).pipe(delay(1000)).subscribe(() => {
     //after delay action.  
});

值得推薦!

發表於 Angular | 已標籤 | 發表迴響

原來Html的表格要出現斑馬紋(zebra)的分行那麼簡單

原以為一個table 的每筆<tr> 要出現不同色的行很難,沒想到只要在css內加一句就可搞定.

tr:nth-child(even) {
  background-color: #f2f2f2;
}
加一句css就有了.

真簡單,記錄一下以免以後忘了.

W3Shool Sample

發表於 Angular | 發表迴響

Angular下動態建立彈出視窗

Angular下要建立彈出窗,如是把程式直接寫在html內的作法雖很簡單,但却會造成該視窗(dialog)會一直保存在那,直到離該其父層元件時才會消除。 可能我們有不少時機會想要彈出一個窗後,在關閉掉時便完成釋放掉該視窗元件,這時便要用到動態建立視窗的方式來進行了。

 const self = this;
const dialgFactory = this.componentFactoryResolver.resolveComponentFactory(DownloadRenameComponent);
        var componentRef=this.downloadDialogContainer.createComponent( dialgFactory);
        componentRef.instance.Lab=this.Lab;

        let sub=componentRef.instance.DialogClose.subscribe(x=>{

          if(x!==-1) {
      //close
          }
          sub.unsubscribe();
          componentRef.destroy();
        });
發表於 Angular | 發表迴響

Angular下載的作法:

一. 以下的作法是以XMLHttpRequest(),並以Get方式來下載.

let urlToSend= this.siteAdminService.GetBaseUrl()+ ‘Export_EditModel/’+params.em_name+’/’+params.em_id+’/’+params.language_id;
var req = new XMLHttpRequest();
req.open(“GET”, urlToSend, true);
req.responseType = “blob”;
req.onload = function (event) {
var blob = req.response;
var fileName = params.em_name+’.xlsx’; //req.getResponseHeader(“fileName”) //if you have the fileName header available
var link=document.createElement(‘a’);
link.href=window.URL.createObjectURL(blob);
link.download=fileName;
link.click();
};

req.send();

二. 另一方式,以jQuery的fileDownload來進行, $.fileDownload

const url = this.url + `DownloadFolioItems`;
$.fileDownload( url, {
httpMethod: “POST”,
data: { data: JSON.stringify(parms)},//
// tslint:disable-next-line:no-shadowed-variable
successCallback: function (url) {
if(successFunc!=null ) {
successFunc();
}
},
failCallback: function ( html, url ) {
var json = JSON.parse( html);
if(failFunc!=null){
failFunc(json);
}
}

}).done( function(e) {
console.log(e);

});

//.net 內寫法如下:
[HttpPost]
[Route(“DownloadFolioItems”)]
public ActionResult DownloadFolioItems()
{
try
{
string json = Request.Form[“data”];
JToken _parm = JsonConvert.DeserializeObject(json);
string showFileName = _parm[“showFileName”].ToString();
List item_ids = new List();
foreach (JValue item_id in _parm[“item_ids”])
{
item_ids.Add(item_id.ToString());
}
byte[] data = _managerFolio_ItemRepository.DownloadFolioItems(item_ids.ToArray(), showFileName);
return File(data, “application/octet-stream”, showFileName + “.zip”);
}
catch (Exception ex)
{
return this.Error(ex.ToString());
}
}

//Repository.cs內則:

public byte[] DownloadFolioItems(string[] item_ids, string showFileName)
{
if (item_ids == null || item_ids.Length == 0)
return null;
string item_id = “‘” + string.Join(“‘,'”, item_ids) + “‘”;
DataTable dataTable = new DataTable();
using (SqlConnection conn = new SqlConnection(cnnString))
{
conn.Open();
SqlCommand dbCommand = conn.CreateCommand();
dbCommand.CommandText = @”select b.item_id,c.remote_path+’\’+ b.item_path+’\’+b.real_filename folio_item_path,b.real_filename from folio a
inner join folio_item b on a.folio_id=b.folio_id
left join managed_location c on c.location_id=a.folio_workspace and c.purpose_type=’Folio_Workspace’ and c.status=’E’
where b.item_id in (” + item_id + “)”;
SqlDataReader dbDataReader = dbCommand.ExecuteReader();
dataTable.Load(dbDataReader);
}
if (dataTable.Rows.Count == 0)
return null;
System.IO.MemoryStream ms = new System.IO.MemoryStream();
string filename_zip = showFileName + “.zip”;
Dictionary dictionarys = new Dictionary();
ArrayList real_filenames = new ArrayList();
foreach (DataRow dataRow in dataTable.Rows)
{
item_id = dataRow[“item_id”].ToString();
string folio_item_path = dataRow[“folio_item_path”].ToString();
string real_filename = dataRow[“real_filename”].ToString();
if (real_filenames.Contains(real_filename))
real_filename += “_” + item_id;
real_filenames.Add(real_filename);
byte[] bytes = File.ReadAllBytes(folio_item_path);
if (bytes != null)
dictionarys.Add(real_filename, new System.IO.MemoryStream(bytes));
}
if (dictionarys.Count == 0)
return null;
string path = AppDomain.CurrentDomain.BaseDirectory + (Environment.Is64BitProcess ? “x64” : “x86”) + Path.DirectorySeparatorChar + “7z.dll”;
SevenZip.SevenZipBase.SetLibraryPath(path);
SevenZipCompressor tmp = new SevenZipCompressor();
// tmp.ArchiveFormat = OutArchiveFormat.Zip;
tmp.CompressStreamDictionary(dictionarys, ms);
byte[] bs = ms.ToArray();
ms.Close();
ms.Dispose();
return bs;
}

發表於 Angular | 發表迴響

WordPress之固定網址更改

  當在網站需更改路徑結構時,往往我們為了要保留網站在搜尋引擎的權重,必需做301轉址(永久轉址)給搜尋引擎知道才不會造成MH原本已有的排名因找不到原網頁我下滑,這點也是SEO工作的重要課題。

  如您的站如WordPress時恭喜您,您可安裝Redirection外掛(Plugin)來處理,而不用自己去改網站根目錄下的.htaccess檔(如是apache web server), 這個外掛可以讓您簡簡單單便能做301或302轉址,來保留原得之不易的權重。

  做法一就是安裝該外掛,這點基本功就不在本文多做說明。僅就Redirection外掛設定來說明,當安裝完後便會如下圖一樣在外掛頁內看到Redirection點其下方的setting鍵進行設定.

進入設定後會自動指到’選項’頁,在此您可自定一些需求,如增加404錯誤的記錄,可由該記錄來自動增加轉址項。

404記錄很有用,可以選擇它,設一天來做測試用。

2.點按上方的[重新導向]頁籤,進行新增。

他的設定很簡單就把你想轉址的網頁輸入來源及目標網址並儲存就可以。但要注意[URL options/Regex]下拉選項要勾選.
不然可能試了沒反應.

而來源網址加'^’這表示在^之後的是路徑開始位置是最前面,而不是路徑之間.

以我的需求來說,我都會勾[V]正則表達式,正則表達式也稱正規表示法,可自行查網進行了解其寫法。

如你像我一樣因原來的永久連結設定的自訂為
/archives/%category%/%postname%/
會出現如下的結構.
https://www.fxinspire.com/archives/category/%E6%A8%82

但用了一段時日後覺得沒必要多個archives字樣,故改成/%category%/%postname%/
如圖:

為了防排名下滑故以Redirection外掛來處理轉址.

當然如你不想安裝外掛,也可自己更改.htaccess檔的內容,但要注意的是自訂義的設定值要加在BEGIN WordPress那行之前,不然當更改永久路徑設定儲存時便會被清除.

BEGIN WordPress

在含有 BEGIN WordPress 及 END WordPress 標記的這兩行間的指示詞內容為動態產生,

且應僅有 WordPress 篩選器能進行修改。對這兩行間任何指示詞內容的變更,

都會遭到系統覆寫。

發表於 Uncategorized, WordPress, 外掛(Plugins), 技術與設置 | 發表迴響

DDNS 動態網域名稱設置

自從有安裝家用上網便申請個DNS指到自己的機器,但又沒有固定IP就一直沒動手,今突然有想到個需求所以不得不來搞一下,, 以DDns來做也可以有個網域名稱來用.

我以noip.com為例向他申請了個帳號

# 在紅框位置輸入值並按下[Sign Up]進行註冊.qy

接著便可開始輸入一些基本資料,並選取你要註冊在那個domain name之下.如hopto,org
下方接著是所要的方案,如要免費則選Free DDNS便行.

接著照他指示輸入相關資料,並下載DUC Setup執行檔,執行管理,及收確認信並認證後,便完成.

完成後,ping 你所建的域名如能正常回應便表示這部份已成功,

剩下的便是如何把分享器上設置DMZ 主機或vs 的部份了.

PS.
試用了一個月此動態DDNS的確很方便,但前天斷線了,到NO-IP一查才知道我的網址被擱置了,原來一個月到期後,要再重新update一次才能再繼續用,不然就是花錢買,原來他們是這樣營運的,如只是玩玩或備用就記得時間到時來再重設一次,不然斷了不光是SEO白做,排名久了會掉光,還可能被罵。

發表於 Uncategorized, 系統設定 | 發表迴響

Google要傳統網頁吃鱉

谷歌為了重視手機上網用戶,準備將更改搜尋排序的運算方式,對於手機上網用戶使用過程較為友善的網頁,在谷歌的搜尋排序將大為提前,舉凡字體太小、網頁不好打開以及不利行動用戶點擊內容的網頁,排序通通要讓給專為手機用戶設計的友善網頁。(http://www.storm.mg/article/46870)

什麼是手機友善的網站.

1,有限的圖或是Flash.(Limited graphics and Flash)

2.頁面是上下移動(Pages scoll up and down )

3.網頁不用向左向右移動 No scrolling left and righ

發表於 Uncategorized | 發表迴響