2013年9月6日 星期五

使用POST取得JSON資料

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title>
<!--JQUERY UI-->
<script type="text/javascript" src="http://web.systemlead.com/bufferorderweb/scripts/jquery-2.0.1.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<script type="text/javascript">
$(function () {
ShowMenu();
});
//顯示菜單
function ShowMenu() {
var TRANSDT = '2013-09-07';
var BOSTORE_NO = '30001000'
jQuery.ajax({
url: 'http://web.systemlead.com/bufferorderweb/OrderProcess.aspx/ShowMenu',
type: 'post',
contentType: "application/json; charset=utf-8",
data: '{"BOSTORE_NO":"' + BOSTORE_NO + '","TRANSDT":"' + TRANSDT + '"}',
dataType: 'json',
success: BindMenuItem,
error: function () {
alert("error");
}
});
}
function BindMenuItem(response) {
//alert(response.d);
var rList = $.parseJSON(response.d);
var tmp = "";
$.each(rList, function (i, item) {
//alert(item.aVAILABLE_QTYField);
var str1 = "";
if ((item.aVAILABLE_QTYField).toString() != "0") {
str1 = "<input type='button' class='add' />"
+ "<input type='text' placeholder='0' class='align-center' value='0' onkeypress='TextBoxNumCheck_Int();' "
+ "id='txt" + item.mEALNOField + "' alt='" + item.mEAL_PRICEField + "'>"
+ "<input type='button' class='less' />"
+ "<span class='checkNumber'>數量:0</span>";
}
else {
str1 = "<button class='info disabled center'>已售完</button>";
}
tmp = tmp + "<div alt='dishesList _" + item.cAEGORY_NOField + "' id='" + "divMEALKIND" + item.mEALKINDField + "'>"
+ "<h2>" + item.mEALNAField + "</h2>"
+ "<span class='roll' title='" + item.dESCTXTField + "'></span>"
+ "<img src='http://web.systemlead.com/bufferorderweb/show_image.ashx?W=190&H=220&FID=" + item.fIDField + "' "
+ "alt='" + item.mEALNOField + "' title='" + item.dESCTXTField + "' "
+ "id='img" + item.mEALNOField + "' />"
+ "$" + item.mEAL_PRICEField + "元 <span>每日供應" + item.dATE_LIMITField + "份</span>"
+ "<div class='dishesMenu'>"
+ str1
+ "</div></div>";
});
$("#rptMain").children().remove();
$("#rptMain").append(tmp);
}
</script>
</head>
<body>
<form>
<div id='rptMain'></div>
</form>
</body>
</html>
view raw getJson.html hosted with ❤ by GitHub
WebMethod
/// <summary>
/// 繫結菜單
/// </summary>
[System.Web.Services.WebMethod]
public static string ShowMenu(string BOSTORE_NO, string TRANSDT)
{
DateTime dt = Convert.ToDateTime(TRANSDT);
List<BOSMEAL> result = BOSMEAL_SelectDailyMenu(BOSTORE_NO, dt).ToList<BOSMEAL>();
return JsonUtility.ToString<List<BOSMEAL>>(result);
}
view raw ShowMenu.cs hosted with ❤ by GitHub

Google Map API - 地圖標點

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<meta charset="utf-8" />
<title>遞送清單 </title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
<link href="https://developers.google.com/maps/documentation/javascript/examples/default.css"
rel="stylesheet" />
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&language=zh-TW"></script>
<script type="text/javascript" src="http://web.systemlead.com/EasyCartAdmin/Scripts/ELabels3.js"></script>
<style type="text/css">
.site
{
border: solid 1px #000000;
padding-left: 1em;
display: block;
width: 60px;
cursor: pointer;
margin: 5px;
}
div.markerLabel
{ /*markerLabeldisplay: block;*/
text-align: center; /*background-color:white;*/ /*border:1px;*/
width: 32px;
letter-spacing: 0px;
font-size: 16px;
font-family: Arial;
color: white;
}
</style>
<script type="text/javascript">
//<![CDATA[
var geocoder;
var map = null;
function initialize() {
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(22.6253654, 120.36345639999993);
map = new google.maps.Map(document.getElementById('map-canvas'), {
zoom: 13,
center: latlng, //new google.maps.LatLng(25.036772, 121.520269), // 設定地圖中心點
mapTypeId: google.maps.MapTypeId.ROADMAP // HYBRID,ROADMAP,SATELLITE,TERRAIN
});
map.setOptions({ draggable: false,
// zoomControl: false,
scrollwheel: false,
// disableDoubleClickZoom: true,
// streetViewControl: false,//街景
// scaleControl: false,//縮放
// panControl: false //平移功能
disableDefaultUI: true
});
//顯示中心點
ShowCenterPoint();
//顯示外送點
ShowPoint();
}
function ShowPoint() {
try {
$("[id*=address]").filter(function () {
ShowPointByAddr($(this).val(), $(this).attr('alt'));
});
}
catch (err)
{ }
}
var arySite = new Array();
function addSite(map, siteCode, siteDesc, lat, lng, address) {
var pt = new google.maps.LatLng(lat, lng);
var label = new ELabel(map,
pt,
'<div id="arrowCanvas" >' + siteDesc + '<\/div>',
'markerLabel', // null
new google.maps.Size(-15, 9)
);
label.setMap(map);
// 讓圖的圓心在點上
var icon = new google.maps.MarkerImage("http://web.systemlead.com/EasyCartAdmin/App_themes/Red/images/icons/red_circle.png",
new google.maps.Size(32, 32), // 大小
new google.maps.Point(0, 0), // 原點
new google.maps.Point(16, 16) // anchor
);
var marker = new google.maps.Marker({
map: map,
position: pt,
title: siteDesc,
icon: icon
});
}
function addSite2(map, siteCode, siteDesc, lat, lng, address) {
var pt = new google.maps.LatLng(lat, lng);
var label = new ELabel(map,
pt,
'<div id="arrowCanvas" >' + siteDesc + '<\/div>',
'markerLabel', // null
new google.maps.Size(-15, 9)
);
label.setMap(map);
// 讓圖的圓心在點上
var icon = new google.maps.MarkerImage("../../App_themes/Red/images/icons/home.png",
new google.maps.Size(32, 32), // 大小
new google.maps.Point(0, 0), // 原點
new google.maps.Point(16, 16) // anchor
);
var marker = new google.maps.Marker({
map: map,
position: pt,
title: siteDesc,
icon: icon
});
}
function ShowPointByAddr(address, orderid) {
geocoder.geocode({ 'address': address }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var x = results[0].geometry.location.lat();
var y = results[0].geometry.location.lng();
addSite(map, 4, orderid, x, y, address, 0, 0, '懸浮微粒', 0);
} else {
//alert("Geocode was not successful for the following reason: " + status);
}
});
}
function ShowCenterPoint() {
var My_address = $("#txtHome").val();
geocoder.geocode({ 'address': My_address }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var latlng = results[0].geometry.location;
map.setCenter(latlng);
// var marker = new google.maps.Marker({
// map: map,
// position: latlng
// });
addSite2(map, 4, '', latlng.lat(), latlng.lng(), My_address, 0, 0, '懸浮微粒', 0);
} else {
//alert("Geocode was not successful for the following reason: " + status);
}
});
}
$(document).ready(function () { initialize(); });
//]]>
</script>
</head>
<body>
<div class="mapTitle">
<span id="lblTRAINDT">2013/08/03</span><label>
遞送清單</label></div>
<div id="map-canvas" style="width: 650px; height: 500px">
</div>
<div>
<input name="txtHome" type="hidden" id="txtHome" value="高雄市三民區建武路15號" />
<table class="mapList">
<tr>
<td>
1
<input id="address" style="width: 300px" type="hidden" value='高雄市三民區00' alt='1'>
</td>
<td>
* 0 高雄市三民區00<br />
<br />
</td>
<td>
25元
</td>
</tr>
<tr>
<td>
3
<input id="address" style="width: 300px" type="hidden" value='高雄市苓雅區00' alt='3'>
</td>
<td>
* 0 高雄市苓雅區00<br />
1.玉米濃湯, 7 * 1 = 7<br />
</td>
<td>
54元
</td>
</tr>
<tr>
<td>
5
<input id="address" style="width: 300px" type="hidden" value='高雄市苓雅區1' alt='5'>
</td>
<td>
* 0 高雄市苓雅區1<br />
<br />
</td>
<td>
90元
</td>
</tr>
<tr>
<td>
8
<input id="address" style="width: 300px" type="hidden" value='高雄市三民區TEST' alt='8'>
</td>
<td>
TEST TEST 高雄市三民區TEST<br />
1.有機石蓮花纖果, 12 * 1 = 12<br />
</td>
<td>
70元
</td>
</tr>
<tr>
<td>
10
<input id="address" style="width: 300px" type="hidden" value='高雄市三民區大順一路32號' alt='10'>
</td>
<td>
莫須有 7190888 高雄市三民區大順一路32號<br />
1.蕃茄炒蛋, 12 * 8 = 96|2.玉米濃湯, 7 * 4 = 28|3.皮蛋豆腐, 15 * 4 = 60|4.頂級洛神仙楂烏梅汁, 15 * 2 =
30|5.有機石蓮花纖果, 12 * 2 = 24<br />
</td>
<td>
391元
</td>
</tr>
<tr>
<td>
14
<input id="address" style="width: 300px" type="hidden" value='高雄市三民區和順街63-1號6F' alt='14'>
</td>
<td>
李小龍 0987654321 高雄市三民區和順街63-1號6F<br />
1.玉米濃湯, 7 * 2 = 14<br />
</td>
<td>
57元
</td>
</tr>
<tr>
<td>
15
<input id="address" style="width: 300px" type="hidden" value='高雄市三民區建工路' alt='15'>
</td>
<td>
鄭小 0755 高雄市三民區建工路<br />
<br />
</td>
<td>
52元
</td>
</tr>
<tr>
<td>
16
<input id="address" style="width: 300px" type="hidden" value='高雄市三民區建工路' alt='16'>
</td>
<td>
沈 0912345789 高雄市三民區建工路<br />
<br />
</td>
<td>
45元
</td>
</tr>
<tr>
<td>
17
<input id="address" style="width: 300px" type="hidden" value='高雄市三民區建工路一號' alt='17'>
</td>
<td>
cherie 0929456123 高雄市三民區建工路一號<br />
<br />
</td>
<td>
85元
</td>
</tr>
</table>
<div id="results" />
</div>
</body>
</html>

JQuery測試網站

工欲善其事,必先利其器,要學習jquery除了筆記本等工具之外,也有線上版的開發測試工具。
http://jsfiddle.net/
image
左邊選單提供使用者選擇想要使用的javascript lib,如各版本的JQuery、ExtJS等。
雖然介面跟一般所見即所得的編輯器沒什麼太大不同,但左邊選單的功能卻大大的加分。
介面上將HTML、CSS、JavaScript分開,方便使用者更改測試語法。
網站還提供儲存機制十分便利,也方便分享。

補充:http://dotnetfiddle.net/
可以讓使用者線上測試C#的程式碼,並支援MVC架構,
當真是神器。



2013年9月5日 星期四

Google Map API - 計算兩地距離

要估算兩地距離, 使用者只要給Google Map API 兩地的地址, 就可以輕易地取得計算後的距離。
<html>
<head>
<title></title>
</head>
<body>
<link href="https://developers.google.com/maps/documentation/javascript/examples/default.css"
rel="stylesheet" />
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&language=zh-TW"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script type="text/javascript">
$(function () {
Distance();
});
function Distance() {
var start = "高雄市鳳山區光遠路226號";
var end = "屏東市廣東路100號";
var request = {
origin: start,
destination: end,
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
//宣告
var directionsService = new google.maps.DirectionsService();
directionsService.route(request, function (response, status) {
var strTmp = "";
if (status == google.maps.DirectionsStatus.OK) {
var route = response.routes[0];
for (var i = 0; i < route.legs.length; i++) {
var routeSegment = i + 1;
strTmp += route.legs[i].distance.text;
}
//取得距離(正整數,公尺)
var dist = parseInt(parseFloat(strTmp) * 1000).toString();
alert(dist);
}
});
}
</script>
</body>
</html>

2013年7月16日 星期二

ASP.NET 透過ODBC連結MySQL

MySQL ODBC Driver:

安裝完成後,便可在ODBC上查詢到值:

SNAGHTML182edfe

PS:如果不清楚版本,那就32與64都安裝。

程式:

public DataTable GetMyDbList()
{
OdbcConnection conn;
OdbcDataAdapter ap;
DataSet ds = new DataSet();
string constr = "DRIVER={MySQL ODBC 5.2 ANSI Driver};SERVER=localhost;DATABASE=test;UID=root;PWD=;OPTION=3";
conn = new OdbcConnection(constr);
conn.Open();
string cmdstr = "select * from mydb;";
ap = new OdbcDataAdapter(cmdstr, conn);
ap.Fill(ds);
return ds.Table[0];
}
view raw mysqlodbc.cs hosted with ❤ by GitHub

因為DRIVER安裝版本不同,名稱也會有所不同,
DRIVER={MySQL ODBC 5.2 ANSI Driver},紅色部分就是安裝後ODBC上顯示的名稱。

以上圖為例,可表示為:
DRIVER={MySQL ODBC 5.2 ANSI Driver}
DRIVER={MySQL ODBC 5.2 Unicode Driver}

 

部署IIS注意事項:

  • 測試 OS:WIN7或以上(64位元環境)
  • 若是安裝的DRIVER版本為32位元,需要將應用程式集區的[啟用32位元應用程式]屬性改為True;64位元則使用預設值(False)。

SNAGHTML1962e0a

2013年7月5日 星期五

Sitefinity CMS-Part04-使用WCF Webservice

Sitefinity除了提供Library讓使用者開發外,系統還提供wcf webservice。

參考:List of Web Services

以"pagesservice.svc"為例:

網址會回傳json檔,以下實作jquery取得json。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script type="text/javascript" src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<script type="text/javascript">
function GetJsonData(webserviceUrl, inputJson) {
var res;
$.ajax({
type: "Get"
, url: webserviceUrl
, dataType: "json"
, contentType: "application/json;charset-utf-8"
, async: false
/*, data: inputJson*/
, success: function (response) {
res = response;
}
, error: function () { res = "error"; }
});
return res;
}
$(function () {
var webserviceUrl = "http://localhost/SitefinityCMS/Sitefinity/services/pages/pagesservice.svc/";
var inputJson = "";
var res = GetJsonData(webserviceUrl, inputJson);
$.each(res, function (key, item) {
if (key == "Items") {
$.each(item, function (key2, item2) {
if (key2 == "1") {
var str = "";
$.each(item2, function (key3, item3) {
str = str +"<li>"+ key3 + ":" + item3 + "</li>";
});
var obj = $("#main");
$(str).appendTo(obj);
}
});
}
});
/*var data = $.parseJSON(res);*/
/*alert(data);*/
});
</script>
</head>
<body>
<div id="main"></div>
</body>
</html>

結果:

image

Sitefinity CMS-Part03-自訂模組(widget)

參考影片: sitefinity官網

自訂模組的功能需要特定權限才可以進行開發。

在settings中,有自訂模組的功能,定義模組(usercontrol)的路徑。

image

設定好模組後,在頁面設定的功能,Custom下就可以選到自定義的模組。

image

Demo:

image

後臺內容管理:

image

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Sitefinity;
namespace SitefinityWebApp.custom
{
public partial class ucBlog : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
return;
}
protected void btnCreateBlog_Click(object sender, EventArgs e)
{
Telerik.Sitefinity.App.WorkWith().Blog().CreateNew().Do(b => b.Title = "My New Blog").SaveChanges();
}
protected void btnCreatePosts_Click(object sender, EventArgs e)
{
using (var fluent = App.WorkWith())
{
var blog = (from b in fluent.Blogs()
where b.Title == "My New Blog"
select b).First();
for (int i = 0; i < 10; i++)
{
blog.CreateBlogPost().Do(p => p.Title = "Blog Post" + i).SaveChanges();
}
}
}
protected void DisplayPosts_Click(object sender, EventArgs e)
{
var posts = from p in App.WorkWith().BlogPosts()
where p.Parent.Title == "My New Blog"
orderby p.Title
select p;
this.gvList.DataSource = posts.Get();
this.gvList.DataBind();
}
}
}
view raw ucBlog.ascx hosted with ❤ by GitHub

2013年6月26日 星期三

LocalReport - 使用子報表

專案架構如下,專案下產生兩個報表(父報表與子報表)。

image

新增TypedDataSet(Ex:dsReport.xsd),範例定義如下。

image

在myReport.rdlc報表中,設定資料集屬性。

SNAGHTMLf854e7

在myReport.rdlc報表中,新增子報表。

image

在myReport.rdlc報表中,設定[子報表屬性]。

SNAGHTML1016ff6

設定要傳給子報表的參數。

SNAGHTML1022bc6

在mySubReport.rdlc報表中,設定資料集屬性。

SNAGHTML1041846

在mySubReport.rdlc報表中,設定參數,參數名稱要和[子報表參數]設定一致(EX:OrderID)。

image

SNAGHTML1074638

程式部分:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
</div>
<asp:Button ID="btnShowReport" runat="server" Text="顯示報表" onclick="btnShowReport_Click"/>
<rsweb:ReportViewer ID="ReportViewer1" Width="100%"
runat="server">
</rsweb:ReportViewer>
</form>
</body>
</html>
view raw ShowReport.aspx hosted with ❤ by GitHub
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using Microsoft.Reporting.WebForms;
namespace TestSubReport
{
public partial class ShowReport : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (this.IsPostBack)
return;
}
private void ShowReportData()
{
ReportViewer1.Visible = true;
//子報表繫結的事件
ReportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(LocalReport_SubreportProcessing);
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.ProcessingMode = ProcessingMode.Local;
ReportViewer1.LocalReport.ReportPath = HttpContext.Current.Server.MapPath(string.Format("~\\bin\\{0}", "myReport.rdlc"));
DataTable tbl = this.GetMasterData();
ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("myOrders", tbl));
ReportViewer1.LocalReport.Refresh();
}
/// <summary>
/// 繫結子報表
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void LocalReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e)
{
//取得參數
string orderid = e.Parameters["OrderID"].Values[0];
//取得明細資料
DataTable tbl = this.GetDetailData(orderid);
//繫結子報表
e.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("myOrdersDetail", tbl));
}
/// <summary>
/// 點擊[顯示報表]
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnShowReport_Click(object sender, EventArgs e)
{
this.ShowReportData();
}
/// <summary>
/// 取得單頭資料
/// </summary>
/// <returns></returns>
private DataTable GetMasterData()
{
DataTable tbl = new DataTable();
DataColumn col = new DataColumn("OrderID");
tbl.Columns.Add(col);
DataRow row = tbl.NewRow();
row["OrderID"] = "A001";
DataRow row2 = tbl.NewRow();
row2["OrderID"] = "A002";
tbl.Rows.Add(row);
tbl.Rows.Add(row2);
return tbl;
}
/// <summary>
/// 取得明細資料
/// </summary>
/// <param name="OrderID"></param>
/// <returns></returns>
private DataTable GetDetailData(string OrderID)
{
DataTable dtDetail = new DataTable();
DataColumn col = new DataColumn("OrderID");
DataColumn col2 = new DataColumn("Item");
dtDetail.Columns.Add(col);
dtDetail.Columns.Add(col2);
DataRow row = dtDetail.NewRow();
row["OrderID"] = "A001";
row["Item"] = "A001-1";
DataRow row2 = dtDetail.NewRow();
row2["OrderID"] = "A002";
row2["Item"] = "A002-2";
dtDetail.Rows.Add(row);
dtDetail.Rows.Add(row2);
var query = from data in dtDetail.AsEnumerable()
where data.Field<String>("OrderID") == OrderID
select data;
DataTable tbl = query.CopyToDataTable<DataRow>();
return tbl;
}
}
}
view raw ShowReport.cs hosted with ❤ by GitHub

打包:下載

2013年6月18日 星期二

NPOI與RDLC衝突

VS2010在寫報表時,因為有同時使用NPOI。

結果在編輯報表時,加入[資料表]時,整個專案就關掉了。

錯誤是發生在選擇資料集(加入資料表會去選資料集)的時候。

查了一下Google發現有相同的問題

簡易解法:

  • NPOI某版本與RDLC互相衝突,換新版本就會好。
  • 或是Report獨立另外一個專案。

MSSQL 產生Table結構含資料的指令碼

資料庫按右鍵選擇(1)工作(2)產生指令碼。

image

在此勾選你要匯出的table,並點選下一步。

SNAGHTML1cc3980

 

點選[進階],設定要匯出的資訊。

SNAGHTML1d6b295
因為要匯出table的資料與結構的語法,所以選擇"結構描述和資料",按下確定。

SNAGHTML1d5fe93

最後選擇要匯出的位置或方式,再按下一步,即可取得語法。

SNAGHTML1d8ac4e

2013年6月10日 星期一

解決Winform輸入法BUG

WinForm在做輸入法切換時常發生錯誤。

Google了一下

寫個FormBase讓視窗繼承:

    #region 解決輸入法BUG     
//解決輸入法BUG
[DllImport("imm32.dll")]
public static extern IntPtr ImmGetContext(IntPtr hwnd);
[DllImport("imm32.dll")]
public static extern bool ImmSetOpenStatus(IntPtr himc, bool b);

protected override void OnActivated(EventArgs e)
{
base.OnActivated(e);
IntPtr HIme = ImmGetContext(this.Handle);
ImmSetOpenStatus(HIme, true);
}
#endregion

private void InitializeComponent()
{
//停用IMEMODE
this.ImeMode = System.Windows.Forms.ImeMode.Off;

}

2013年6月7日 星期五

Sitefinity CMS-Part02

 

安裝好系統後,進入系統內(http://localhost/SitefinityCMS/Sitefinity/)。

系統會要求輸入帳號密碼(系統安裝時設定的管理者帳號密碼)

image

進入後,先看看Pages上的設定。
因為尚未建立任何頁面,所以畫面上出現了大大的Create a Page字樣。

image

設定Page的資訊。

image

設定頁面的版型。
image

若已建立頁面,則會出現管理清單。

Pages

在Actions功能中,可以設定頁面的相關資訊,如設為首頁,新增子頁等。

image

如建立好子頁,架構會如下圖所示,此時便可點擊view預覽。

image

整個系統的網址定義以Company為例(http://localhost/SitefinityCMS/about/company),
是有階層性的。

在此頁面也可以透過拖曳,來建立階層的關係。

image

進入頁面編輯的介面,左方為編輯區,右方為功能區。

加入widget(模組),可將功能區的widget功能拖曳至編輯區。
image

Layout可以讓使用者定義與更換。

image

內容功能區列表:功能很多,彈性很大。

image

image             

編輯完成,選擇publish發佈。

此時輸入(http://localhost/SitefinityCMS/),便可以瀏覽到頁面。

此時若帳號還在登入的狀態時,頁面上可以看到Tools的功能按鍵,裡面可以設定是否顯示編輯按鈕。
這樣就可以在前台瀏覽時,直接點編輯進入修改,不須進入後台。

SNAGHTML14cc538

在後台頁籤中,Content頁籤主要就是在建立模組的內容,在此以新聞Content為例。

image

建立新聞的內容。

image

建立完成後,在後台加入News模組,就可以簡單的預覽到剛剛建立好的新聞。

image

而新聞模組也可以再設定顯示的條件,設定上面很有彈性。

image

2013年5月29日 星期三

IIS中http 回應標頭設定簡介

IIS中可以依照自己需求設定Http Header,可用來定義meta或是一些設定。

如下圖所示:每個框起來的地方,其實都可以設定自己的http header。

image

繼承設定:

設定http回應標頭時,若由最上層開始設定,子層便會繼承此設定。

以最上層來說,項目類型會寫"本機"。

而以EAP\DEMO為例,項目類型就會顯示"已繼承"。

image

image

移除繼承:

在這邊的子層會繼承父層的設定,但是如果不想繼承設定的話,在右邊有移除的功能,

點擊移除就可以。

image

image

2013年5月27日 星期一

Sitefinity CMS - Part01

What is CMS?

想安裝CMS來玩,如何開始?

  • 以Sitefinity CMS 為例:
    使用Web Platform Installer,在應用程式頁籤(1)中,可以看到CMS的選單(2)。
    點擊進去後,就會看到常見的一些CMS的列表,接著選擇新增(3)系統。SNAGHTMLdea029
  • 接著按下安裝
    SNAGHTMLe169be
  • 系統協助你安裝需要裝的相關資訊
    SNAGHTMLe36c0fSNAGHTMLe3e7c3SNAGHTMLe44c21[6]SNAGHTML110171d
  • 安裝完成後會開啟設定網頁。
    • 要求輸入license。
      image
    • 系統會在App_data\Sitefinity下面產生檔案(須設定此目錄的權限)image
    • 設定資料庫
      image
    • 設定管理者帳號
      image
    • 安裝完成。