顯示具有 程式設計雜記 標籤的文章。 顯示所有文章
顯示具有 程式設計雜記 標籤的文章。 顯示所有文章

2014年5月7日 星期三

ASP .NET MVC4 WebApi -- OData 使用 與 實作$inlinecount(續) -- C# Model 接取$inlinecount 資料

延續前一篇(ASP .NET MVC4 WebApi -- OData 使用 與 實作$inlinecount)

當C#去接API來的資料,且有設定$inlinecount,資料格式會變更成:
{
  "Items": [
    {
      //資料1
    },
    {
      //資料2
    },
    {
      //資料3
    }
  ],
  "NextPageLink": null,
  "Count": 3
}
Items存放資料,NextPageLink存放下一頁網址,Count存放數量

無法使用一般Model去接資料,因此需要準備一個共用Model
public class ODataByApi<T>
{
    public ICollection<T> Items { get; set; }
    public string NextPageLink { get; set; }
    public int Count { get; set; }
}

用共用Model,並指定資料Model去接資料即可
JsonConvert.DeserializeObject<ODataByApi<ModelName>>(strJson);


參考:
(ASP .NET MVC4 WebApi -- OData 使用 與 實作$inlinecount)

2012年6月29日 星期五

wordpress 不同頁面顯示不同側欄

繼前一篇文章 wordpress 兩欄式改為三欄式 的這個鄉民又發問了,他需要在不同頁面顯示不同的側欄,後來我 google 了一下,大約 10 分鐘就能完成。請大家不要笑他。




1

首先,安裝一個外掛 「Widget logic」。

2

安裝完成並啟用後,每一個模組下方都會出現 Widget Logic 的區塊:

在這個區塊有一些語法可以使用:
  • is_home() - 主頁
  • is_single() - 文章頁
  • is_page() - 頁面
  • is_category() - 文章分類頁
  • is_tag() - 文章標籤頁
  • is_archive() - 文章歸檔頁
  • is_404() - 404頁面
  • is_search() - 搜尋頁面
  • is_feed() - 訂閱頁

當然,也可以用一些「和、或、否」的邏輯判斷來調整,例如:

|| 表示或,&& 表示和,! 表示否。
  • is_home() - 僅主頁顯示
  • !is_home() - 除主頁以外的頁面顯示
  • !is_category(5) - 僅在ID非5的分類顯示
  • is_home() || is_category('baked-goods') - 在主頁或名稱為baked-goods的分類顯示
  • is_page('about') 僅在關於頁顯示


引用 & 參考:
Widget Logic – 让 WordPress 不同页面显示不一样的侧边栏

回首頁

2012年6月28日 星期四

wordpress 兩欄式改為三欄式

昨天有一個鄉民碰到 wordpress 的問題蠻有創意的,就是要將預設主題佈景的欄位配置改為自訂的欄位配置,苦於對 wordpress 不了解,所以就將這個問題問我。

而剛升級為 wordpress 中學等級的我,要教幼稚園等級的他可以順便練練功 ( 不要笑他 )。

回歸主題,要將 wordpress 佈景主題兩欄式改為三欄式的每個動作雖然簡單,但必須要去了解這個動作會影響到哪一塊,不然網站掛掉就不要哭哭,所以在要動哪一個檔案前,先將那個檔案備份起來,這樣比較保險。

要改 wordpress 之前先拍一張正面照:

接下來依照以下的步驟做修改,但還是要依照各佈景主題配置的程式碼做調整。

1

在「後台」,外觀 > 主題編輯器,找尋 function.php ( 佈景函式庫 ) 做編輯,在這個檔案內,搜尋「register_sidebar」字樣,此時必須要針對側欄區做判斷,因為要將側欄區複製一塊再做版面配置。搜尋到側欄區的程式碼如下:
register_sidebar( array(
    'name' => __( 'Main Sidebar', 'twentyeleven' ),
    'id' => 'sidebar-1',
    'before_widget' => '<aside id="%1$s" class="widget %2$s">',
    'after_widget' => "</aside>",
    'before_title' => '<h3 class="widget-title">',
    'after_title' => '</h3>',
) );
把這一段程式碼複製後貼在後面,將 id 改為唯一值,由於版面已經用到 sidebar-5,所以我將新區塊 id 命名為 sidebar-6,命名為 "次主邊欄"。
register_sidebar( array(
    'name' => __( '次主邊欄', 'twentyeleven' ),
    'id' => 'sidebar-6',
    'before_widget' => '<aside id="%1$s" class="widget %2$s">',
    'after_widget' => "</aside>",
    'before_title' => '<h3 class="widget-title">hi',
    'after_title' => '</h3>',
) );
到 外觀 > 模組就會看到 "次主邊欄" 的區塊,並且可以拖曳模組進去,但於頁面上並無太大更動。

2

要讓你所新增的區塊 "次主邊欄" 在頁面上顯示,就要在 外觀 > 主題編輯器 找尋 sidebar.php ( 邊欄 ) 做編輯,其實檔案裡面已經很明顯地說明這一區塊在做 id 為 sidebar-1 的區塊內容,而動作只需要將它的程式碼在複製一份貼在後面,然後 id 命名為 sidebar-6:
<?php
/**
 * The Sidebar containing the main widget area.
 *
 * @package WordPress
 * @subpackage Twenty_Eleven
 * @since Twenty Eleven 1.0
 */

$options = twentyeleven_get_theme_options();
$current_layout = $options['theme_layout'];

if ( 'content' != $current_layout ) :
?>
  <div id="secondary" class="widget-area" role="complementary">
   <?php if ( ! dynamic_sidebar( 'sidebar-1' ) ) : ?>

    <aside id="archives" class="widget">
     <h3 class="widget-title"><?php _e( 'Archives', 'twentyeleven' ); ?></h3>
     <ul>
      <?php wp_get_archives( array( 'type' => 'monthly' ) ); ?>
     </ul>
    </aside>

    <aside id="meta" class="widget">
     <h3 class="widget-title"><?php _e( 'Meta', 'twentyeleven' ); ?></h3>
     <ul>
      <?php wp_register(); ?>
      <li><?php wp_loginout(); ?></li>
      <?php wp_meta(); ?>
     </ul>
    </aside>

   <?php endif; // end sidebar widget area ?>
  </div><!-- #secondary .widget-area -->
<?php endif; ?>
<?php
if ( 'content' != $current_layout ) :
?>
  <div id="third" class="widget-area" role="complementary">
   <?php if ( ! dynamic_sidebar( 'sidebar-6' ) ) : ?>

    <aside id="archives" class="widget">
     <h3 class="widget-title"><?php _e( 'Archives', 'twentyeleven' ); ?></h3>
     <ul>
      <?php wp_get_archives( array( 'type' => 'monthly' ) ); ?>
     </ul>
    </aside>

    <aside id="meta" class="widget">
     <h3 class="widget-title"><?php _e( 'Meta', 'twentyeleven' ); ?></h3>
     <ul>
      <?php wp_register(); ?>
      <li><?php wp_loginout(); ?></li>
      <?php wp_meta(); ?>
     </ul>
    </aside>

   <?php endif; // end sidebar widget area ?>
  </div><!-- #secondary .widget-area -->
<?php endif; ?>

3

最後只需要在 外觀 > 主題編輯器 中,去針對你這幾個區塊的 css 做更動,調整成想要的版型配置,就完成了。


展示一下最後完成的結果:



參考:
wordpress由两栏变三栏


回首頁

2012年6月15日 星期五

wordpress 修改語言檔

wordpress 和 blogger 一樣都是屬於 CMS 類的系統,如果是在 wordpress 官網申請一個空間使用這套系統,那我會覺得它會比 blogger 還不好用,因為它有些功能是需要付費的;但如果是用自己的空間架設 wordpress 的話,那就大不相同了,因為 wordpress 的自製化以及擴充模組和佈景主題實在是太好用了,雖然我曾經有安裝過一個佈景主題把整個網站弄掛,我不清楚是我使用上的問題還是系統的問題,但我相信只要使用者認為正確使用,所有的問題都可以推究系統 ( 似乎好像在很多地方都是這樣 )。

以下圖片是各大 CMS 在美國的使用程度:

圖片來源:WordPress completely dominates top 100 blogs

果然是自己空間架設 wordpress 佔絕大多數,反而是 blogger 只有 2%,也就是說,現在 wordpress 除了方便使用之外,也有很多人在開發方便使用的模組。

我在使用 wordpress 時,碰到一些預設的文字無法在後台修改,就要找 wordpress 的預設語言檔,路徑如以下圖片所示:


內有四個檔案,ms-zh_TW.po、ms-zh_TW.mo、zh_TW.po、zh_TW.mo,我們先要有一個概念,po 檔案等於原始碼,mo 檔案等於編譯過後的執行檔,為一個二進位檔,也就是說,系統語言檔只需要讀取 mo 檔。

編輯 po 有一個方便的軟體可以使用「poedit」,可以到poedit 網站下載,po 檔就會變成以下圖示:


假設要將首頁的連結文字由「首頁」換成「Home」:


可以將 zh_TW.po 檔開啟找尋「首頁」:


接著在此行點擊右鍵再點擊「將原文內容複製到譯文欄位去」



就會將文字「首頁」換成「Home」,然後儲存,它會自動產生一個 mo 檔案,接著再將這兩個檔案覆蓋回去再重新整理網頁,就會如以下圖所示:


回首頁




2012年3月3日 星期六

錯誤碼解法

身為一個程式設計師

在其一生當中或多或少(不可能沒有)在寫程式時遇到錯誤的情況

常常看到"XXXXXX,錯誤碼為:XXXX"之類的情況

很理所當然的就是上網找看看別人遇到一樣的問題怎麼解決

偏偏中文資料少之又少

有中文的偏偏只有講解法卻沒有詳細說明原因

又或者是對你是無解的

像小弟我都是先知道該錯誤碼是什麼問題

再用那個問題去搜索

這樣比較容易找到解法

又或者是將中文註解轉英文去找

找到的資料再轉成中文來看(英文爛也是無解題....)

這邊就來介紹一下幾個方便查詢錯誤碼解法的東西:

錯誤碼查詢工具:Exchange Server Error Code Look-up

下載的是一個自動解壓縮的執行檔
解壓縮後在你指定路徑後有Err.exe
此為指令列執行檔,請由命令提示字元去執行
只要輸入err xxx(xxx為錯誤碼)即可查出此錯誤碼的相關資訊,例如:

如上圖示
編號 1 是 Err.exe 在哪個 Header 檔案中找到錯誤碼的定義
編號 2 是找到的常數定義
編號 3 是對應的註解,而這個註解正是可以幫我們更容易利用 Google 大神找到解答的關鍵!
如果你得到的錯誤碼是 16 進位,也是可以查詢的,例如:err 0xb7
其實有很多查詢格式,提供不同產品或事件檢視器中得到的錯誤碼,如下:
Decorated hex (0x54f)
Implicit hex (54f)
Ambiguous (1359)
Exact string (=ERROR_INTERNAL_ERROR)
Substring (:INTERNAL_ERROR)


VS內建錯誤碼查詢工具:errlook.exe

這是安裝VS就有提供的好用工具
路徑為下:
VS2003
C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\errlook.exe

VS2005
C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\errlook.exe

VS2008
C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\errlook.exe

VS2010
C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools\errlook.exe

errlook是有圖形介面(GUI)的查詢工具,內建於VS中又很方便查詢,只要有安裝VS就可以不必額外安裝,如下圖:
Error Lookup


上面介紹了2個查詢工具
這邊來做一下優缺點分析
(註:若VS安裝的是中文版,而errlook就會是中文介面)
工具名稱優點缺點
Exchange Server
Error Code
Look-up
1.查詢結果相當詳細
2.註解不用翻譯成微軟原文
1.需下載
2.需使用命令提示字元執行
3.英文描述
errlook1.內建免下載
2.GUI介面方便使用
3.中文描述易懂
1.註解需翻譯成微軟原文較易網路上搜索國外解法
2.查詢結果只有描述,無其他詳細資訊

以上介紹了好用的查詢錯誤碼工具,再來我們就需要將查詢到的資訊轉成微軟原文,這樣上網找英文資料時才可以更為正確與快速,下面為連結網址:

微軟語言入口


這邊可以將我們取得的錯誤碼資訊翻譯成各國語言
註:原文若選擇英文以外的語言,則會強制轉成英文,想再轉其他語言,需用轉出來的英文再去轉一次

範例1:
錯誤碼183取得的訊息為"當檔案已存在時,無法建立該檔案。"
轉換後得到結果為:
英文譯文產品
Cannot create a file when that file already exists.當檔案已存在時,無法建立該檔案。Windows Server 2008
Cannot create a file when that file already exists.當檔案已存在時,無法建立該檔案。Windows Vista SP1
Cannot create a file when that file already exists.當檔案已存在時,無法建立該檔案。Windows Server 2003 SP1
Cannot create a file when that file already exists.當檔案已存在時,無法建立該檔案。Windows Vista
Cannot create a file when that file already exists.\r\n當檔案已存在時,無法建立該檔案。\r\nWindows 7

範例2:
建立具有整合式安全性的連接時 SSPI 交握失敗,其錯誤碼為 0x8009030c; 此連接已經關閉。
這是一個SQL Server 連線問題,0x8009030c很明顯的就是一個變數,所以這邊取中文描述就好去搜索就好。
轉換結果:
英文譯文產品
SSPI handshake failed with error code 0x%1!s! while establishing a connection with integrated security; the connection has been closed.%2!s!建立具有整合式安全性的連接時 SSPI 交握失敗,其錯誤碼為 0x%1!s!; 此連接已經關閉。%2!s!SQL Server 2008
SSPI handshake failed with error code 0x%1!s!, state %2!s! while establishing a connection with integrated security; the connection has been closed. Reason: %3!s! %4!s!. \r\n建立具有整合式安全性的連接時 SSPI 交握失敗,錯誤碼為 0x%1!s!,狀態為 %2!s!; 此連接已經關閉。原因: %3!s! %4!s!。\r\nSQL Server 2008 R2

回首頁

2010年11月19日 星期五

XSS 跨站指令碼 ( Cross-Site Scripting )

XSS 為跨站指令碼,針對任何網站出現的安全性漏洞加以攻擊,小從惡作劇大到個人資料外洩,駭客 ( hacker ) 更可能取得管理者的權限,做出一些不可預期的事情。

一般論壇、留言板、...等,都有可能會產生這種情況。假設駭客 ( hacker ) 在某論壇上留了一篇文章並且有一段 script 碼導向到他的網頁,駭客的網頁是分析 cookie 內資訊並且紀錄。而網友甲在打上帳號和密碼登入某論壇,注意了,只要是保持登入狀態就會記錄 cookie。而網友甲瀏覽到駭客的文章並且點擊駭客的連結,此時網友甲的 cookie 會被帶到駭客的網頁,如此一來,網友甲的資料就會被竊取。

其實只要能讓駭客在文章上留下 script 碼,接下來就是等網友點擊,最後駭客所該做的就是分析 cookie 內的資訊,再來只能任他為所欲為了。

回首頁