Mandag's Blog

学会生活


  • 首页

  • 归档

  • 搜索

【PHP】mac下部署phpcms环境

发表于 2016-06-26

下载XAMPP搭建本地伺服器

  • 从官网下载xampp mac版本,下载安裝后打开数据库、FTP、apache服务
  • 打开后就可以从【 http://localhost/ 】访问了。

使用PHPMyAdmin进行数据管理

  • 打开【 http://localhost/phpmyadmin/ 】进行管理数据库
  • 点击用户账户管理数据库登录帐号密码等。

安裝PHPCMS

  • 下载phpcms,拷贝install_package下文件到【 /Applications/XAMPP/xamppfiles/htdocs/ 】中,并删除原htdocs中的所有文件
  • 刷新【 http://localhost/ 】页面,显示安装页,安裝成功后,登录进入phpcms后台管理页面。

phpcms

使用PHPCMS模板

  • 把下载好的模板文件添加至指定目录下
  • 登录网站后台 -> 设置 -> 站点管理 -> 修改 -> 选择相应的模板风格,确定
  • 点击【生成首頁】
  • 若存在模型,则添加 内容 -> 模型管理 -> 导入模型
  • 添加相应栏目

phpcms

【JQuery】简单封装JQuery

发表于 2016-06-22
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
base = (function() {
var loader = {
url: '',
api: '',
storage: "localStorage",
log: function(msg) {
console.log(msg);
return;
}
};
var urlQuery = {
urlParam: function(a) {
var reg = new RegExp("(^|&)"+ a +"=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r != null)
return unescape(r[2]);
return null;
},
urlHash: function(a) {
var url = location.hash;
var theRequest = new Object();
if (url.indexOf("?")) {
var str = url.substr(url.indexOf("?") + 1);
var strs = str.split("&");
for (var i = 0; i < strs.length; i++) {
theRequest[strs[i].split("=")[0]] = decodeURI(strs[i].split("=")[1]);
}
}
return theRequest[a];
}
}
// 验证
var validate = {
isNullOrWhiteSpace: function (a) {
return (a === null || (typeof a === 'undefined') || (typeof a === 'string' && a === ''));
},
isString: function (a) {
return typeof a === 'string';
},
isArray: function (a) {
return (typeof a === 'object') && a.constructor == Array;
},
isObject: function (a) {
return (typeof a === 'object') && a.constructor == Object;
},
isNumber: function (a) {
return typeof a === 'number';
},
isBoolean: function (a) {
return typeof a === 'boolean';
},
isFunction: function (a) {
return typeof a === 'function';
},
isIDCard: function (a) {
//身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
return reg.test(a);
},
isPhone: function (a) {
//电话号码正则表达式(支持手机号码,3-4位区号,7-8位直播号码,1-4位分机号)
//var reg = /((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)/;
var reg = /^(0|86|17951)?(13[0-9]|15[012356789]|17[0678]|18[0-9]|14[57])[0-9]{8}$/;
return reg.test(a);
},
isEmail: function (a) {
//var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
var reg = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
return reg.test(a);
},
isJsonString: function (a) {
var reg = /^\{(.+:.+,*){1,}\}$/;
return reg.test(a);
}
};
var convert = {
stringToInt: function (str) {
if (!validate.isNullOrWhiteSpace(str)) {
if (!isNaN(parseInt(str))) {
return parseInt(str);
}
}
return 0;
}
};
var format = {
/**
* 替换字符串
* eg: sprintf('xxx%sxxx',xxx)
**/
sprintf: function (str) {
var args = arguments,
flag = true,
i = 1;
str = str.replace(/%s/g, function () {
var arg = args[i++];
if (typeof arg === 'undefined') {
flag = false;
return '';
}
return arg;
});
return flag ? str : '';
},
/**
* 获取日期时间,可进行加减日期
* @param {date} 日期
* @param {String} 进行加减的类型
* @param {number} 加减日期的数值
* eg: getDateTime(new Date(), 'date', -1)
**/
getDateTime: function (date, type, o) {
var d = date;
if (!validate.isNullOrWhiteSpace(type) && validate.isNumber(o)) {
switch (type) {
case 'date':
d = date.setDate(date.getDate() + o);
break;
case 'month':
d = date.setMonth(date.getMonth() + o);
break;
case 'year':
d = date.setFullYear(date.getFullYear() + o);
break;
default:
break;
}
}
return new Date(d);
},
/**
* http://www.cnblogs.com/zhangpengshou/archive/2012/07/19/2599053.html
* 对Date的扩展,将 Date 转化为指定格式的String
* 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符
* 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
* @param {date} 日期
* @param {String} 格式
* eg: dateToString(new Date(), 'yyyy-MM-dd hh:mm:ss.S')
**/
dateToString: function (date, o) {
if (date instanceof Date) {
var d = {
"M+": date.getMonth() + 1,
"d+": date.getDate(),
"h+": date.getHours(),
"m+": date.getMinutes(),
"s+": date.getSeconds(),
"q+": Math.floor((date.getMonth() + 3) / 3),
"S": date.getMilliseconds()
};
if (/(y+)/.test(o)) o = o.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in d)
if (new RegExp("(" + k + ")").test(o)) o = o.replace(RegExp.$1, (RegExp.$1.length == 1) ? (d[k]) : (("00" + d[k]).substr(("" + d[k]).length)));
}
return o;
}
};
// Document Cookie
var docCookies = {
getItem: function (sKey) {
return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null;
},
setItem: function (sKey, sValue, vEnd, sPath, sDomain, bSecure) {
if (!sKey || /^(?:expires|max\-age|path|domain|secure)$/i.test(sKey)) { return false; }
var sExpires = "";
if (vEnd) {
switch (vEnd.constructor) {
case Number:
sExpires = vEnd === Infinity ? "; expires=Fri, 31 Dec 9999 23:59:59 GMT" : "; max-age=" + vEnd;
break;
case String:
sExpires = "; expires=" + vEnd;
break;
case Date:
sExpires = "; expires=" + vEnd.toUTCString();
break;
}
}
document.cookie = encodeURIComponent(sKey) + "=" + encodeURIComponent(sValue) + sExpires + (sDomain ? "; domain=" + sDomain : "") + (sPath ? "; path=" + sPath : "") + (bSecure ? "; secure" : "");
return true;
},
removeItem: function (sKey, sPath, sDomain) {
if (!sKey || !this.hasItem(sKey)) { return false; }
document.cookie = encodeURIComponent(sKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT" + ( sDomain ? "; domain=" + sDomain : "") + ( sPath ? "; path=" + sPath : "");
return true;
},
hasItem: function (sKey) {
return (new RegExp("(?:^|;\\s*)" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(document.cookie);
},
keys: function () {
var aKeys = document.cookie.replace(/((?:^|\s*;)[^\=]+)(?=;|$)|^\s*|\s*(?:\=[^;]*)?(?:\1|$)/g, "").split(/\s*(?:\=[^;]*)?;\s*/);
for (var nIdx = 0; nIdx < aKeys.length; nIdx++) { aKeys[nIdx] = decodeURIComponent(aKeys[nIdx]); }
return aKeys;
}
};
// HTML5 Cookie
var storage = {
/**
* 浏览器是否支持HTML5客户端存储数据
* localStorage 没有时间限制的数据存储
* sessionStorage 针对一个 session 的数据存储
**/
isStorage: function() {
if(window.localStorage || window.sessionStorage) {
return true;
} else {
return false;
}
},
setItem: function(key, value) {
if(validate.isNullOrWhiteSpace(key))
return false;
if(validate.isNullOrWhiteSpace(value))
return false;
if(loader.storage == 'localStorage') {
localStorage.setItem(key, value);
return true;
} else if(loader.storage == 'sessionStorage') {
sessionStorage.setItem(key, value);
return true;
}
return;
},
getItem: function(key) {
if(validate.isNullOrWhiteSpace(key))
return false;
if(loader.storage == 'localStorage') {
return localStorage.getItem(key);
} else if(loader.storage == 'sessionStorage') {
return sessionStorage.getItem(key);
}
return '';
},
remove: function(key) {
if(loader.storage == 'localStorage') {
localStorage.removeItem(key)
return true;
} else if(loader.storage == 'sessionStorage') {
sessionStorage.removeItem(key);
return true;
}
},
clear: function() {
if(loader.storage == 'localStorage') {
localStorage.clear();
return true;
} else if(loader.storage == 'sessionStorage') {
sessionStorage.clear();
return true;
}
}
};
var ajax = function(o) {
var AJAX = function(ops) {
var fn = {
error: function(XMLHttpRequest, textStatus, errorThrown) {},
success: function(data, textStatus) {},
complete: function(XMLHttpRequest, textStatus) {},
beforeSend: function(XMLHttpRequest, settings) {},
}
if (ops.success)
fn.success = ops.success;
if (ops.error)
fn.error = ops.error;
if (ops.complete)
fn.complete = ops.complete;
if (ops.beforeSend)
fn.beforeSend = ops.beforeSend;
$.ajax({
url : loader.api + ops.url,
type: (ops.type == null || ops.type == "" || typeof(ops.type) == "undefined") ? "get" : ops.type,
dataType: (ops.dataType == null || ops.dataType == "" || typeof(ops.dataType) == "undefined")? "json" : ops.dataType,
data: ops.data,
async: (ops.async == null || ops.async == "" || typeof(ops.async) == "undefined")? "true" : ops.async,
context: ops.context,
timeout: ops.timeout,
beforeSend: function(XMLHttpRequest, settings){
fn.beforeSend(XMLHttpRequest, settings);
},
success: function(data, textStatus) {
if(data != null) {
if(validate.isObject(data)) {
if(data.errcode == 0) {
fn.success(data.data, textStatus);
} else {
loader.log(data.errmsg)
fn.error(data.errmsg, textStatus);
}
} else if(validate.isArray(data)) {
fn.success(data, textStatus);
} else {
loader.log(data)
fn.error(data.errmsg, textStatus);
}
} else {
loader.log("返回的數據是空的!")
}
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
if(XMLHttpRequest.readyState === 0) {
loader.log("未找到數據鏈接!")
} else {
loader.log(XMLHttpRequest.responseText)
}
fn.error(XMLHttpRequest, textStatus, errorThrown);
},
complete: function(XMLHttpRequest, textStatus) {
fn.complete(XMLHttpRequest, textStatus);
}
});
};
return new AJAX(o);
};
var formSubmit = function(o) {
var SUBMIT = function(ops) {
var fn = {
beforeSubmit: function(formData, jqForm, options) {},
success: function(responseText, statusText, xhr, $form) {},
}
if (ops.success)
fn.success = ops.success;
if (ops.beforeSubmit)
fn.beforeSubmit = ops.beforeSubmit;
var options = {
target: (ops.target == null || ops.target == "" || typeof(ops.target) == "undefined") ? null : ops.target,
data: ops.data,
beforeSubmit: function(formData, jqForm, options) {
fn.beforeSubmit(formData, jqForm, options);
},
success: function(responseText, statusText, xhr, $form) {
fn.success(responseText, statusText, xhr, $form);
},
url: loader.api + ops.url,
type: (ops.type == null || ops.type == "" || typeof(ops.type) == "undefined") ? "method" : ops.type,
dataType: (ops.dataType == null || ops.dataType == "" || typeof(ops.dataType) == "undefined")? "json" : ops.dataType,
clearForm: (ops.clearForm == null || ops.clearForm == "" || typeof(ops.clearForm) == "undefined")? true : ops.clearForm,
resetForm: (ops.resetForm == null || ops.resetForm == "" || typeof(ops.resetForm) == "undefined")? true : ops.resetForm,
timeout: (ops.timeout == null || ops.timeout == "" || typeof(ops.timeout) == "undefined")? 3000 : ops.resetForm
};
$(ops.form).ajaxSubmit(options);
}
return new SUBMIT(o);
}
var base = {
loader: loader,
urlQuery: urlQuery,
validate: validate,
convert: convert,
format: format,
docCookies: docCookies,
storage: storage,
ajax: ajax,
submit: formSubmit
};
return base;
})(); // end

【阅读】2016年02月

发表于 2016-02-28

這個月去廣西玩了2星期,看書的時間不多。好吧,藉口也蠻多的。

  • 又來了,愛情:?這本書讀到最後,完全無感。

  • 娛樂致死:又是一本一口氣直接讀完的作品,我們都將失去與快餐文化的時代。

  • 我的孤獨是一座花園:春天不懂得忧伤,我的孤独是一座花园,从孤独的诗集里寻找获得光明的力量。

【阅读】2016年01月

发表于 2016-01-31
  • 推拿:之前沒有看過畢飛宇的書,這本《推拿》,怎麼說的呢,跟我以前看得都不一樣,很~寬厚,卻也帶着潑辣新鮮的味道,文字的描述也很精準。

  • 三體III:如果说前面两部是讲一个理论中宇宙,那么第三部就实战中宇宙生存问题。期待电影~

  • 民主的細節:看了之後,就好想去美國體驗一番的趕腳。

  • 天黑以後:這本書依稀能看出村上春樹強烈個人風格的形成,如之後的1Q84,與現在作家完全不同的寫作風格,每字每句都值得細細的琢磨和對比。書中每一個人的出現都身處困境之中,如瑪麗,愛麗、白川、還有高橋;突破自己方能走出,但是怎麼突破的,其中”阿爾法城”的服務員說靠的是挖掘自己的記憶,通過記憶中的情感來度過難關。

【阅读】2015年12月

发表于 2015-12-31
  • 活着:這次是第二次看了,越看越感到忧郁,生活生活,都只是生而活

  • 三體II黑暗森林:看了這部才發現最大的天才是葉文潔,早早明白了宇宙的叢林法則也就是黑暗森林法則。

【阅读】2015年11月

发表于 2015-11-30
  • 教父II西西里人:吉里安諾就是那个西西里人,英俊,浪漫,勇敢,几乎能包含所有赞美的词语,最后却同时被自己最信任的人背叛,過於理想主義,卻對自己的目標堅定不移。唐最后对迈克尔说:活着不要当英雄,只要活着就行了。所以最後吉里安諾死了,不知道最後他有沒有後悔過。

  • 都是你给我的爱:没有看的价值,完全是浪费之间,书里的字还有双影。

  • 教父III最后的教父:到了第三本結果是一個愛情故事。。

  • 解忧杂货店:太過溫馨的一本書,拯救別人的時候殊不知拯救的也是自己。

【阅读】《摆渡人》讀後感

发表于 2015-10-24

佛語中講:爲善最樂,度人即度己。

讀這本書就如讀蔡崇达老師寫的《皮囊》一書一樣,拿起來了就不會輕易放下,直至讀完方罷休。一千個人心中有一千個哈姆雷特,每個人看到的體會到的都不會相同。
文中前半部份擺渡人崔斯坦帶領着火车事故中唯一的遇難者少女迪倫戰勝惡魔,通過荒原、山丘、湖泊從而到達了彼岸,而這個過程中迪倫戰勝了自己的恐懼,並在生存和愛情中選擇了愛情,而引發了後半部份。如果說前半部份是崔斯坦引領迪倫去尋找光明,name後半部份就是迪倫給崔斯坦信心和力量去引發奇跡。如同佛語中講的一樣,度人即度己。

世人皆說無知者無畏。

有時候知道的多了,那麼膽子就小,然而不知道它究竟有多麼難時,也許往往會有更好的結果。如迪倫步知道回去的路有多兇險所以才會有勇氣往會走,才能在沒人的保護下,通過堅定的信念,逃離惡魔,並帶着崔斯坦回到人世間。

我的MAC使用小記

发表于 2015-10-17

買了MacBook Pro已經快半年的使用,正好部署了BOLG,而且第一篇嘛,寫個簡單好寫的先。
話說購入這台MAC後,我的所有數碼設備都已經升級爲蘋果系列的產品了。
在工作開發爲Windows平臺的情況下,從微軟轉到蘋果果然還是需要勇氣的呀,
不過在使用的這段時間中,我發誓以後決對不會在使用OS X之外的系統(當然工作除外)。
好了,接下來就分享下我使用的一些App和配置情況。

必備

  1. Alfred
    效率工具,鍵盤流的生產力軟件,買了MAC一定一定一定要裝Alfred。
    有了它,鼠標就可以扔掉了,打開應用,瀏覽網頁,操作文件等等。只有想不到沒有做不到的。

  2. iTerm
    命令行工具,在用過這個後,去用Windows的命令CMD,真有一種苦逼的感覺。

  3. CheatSheet
    长按住 ⌘ 键就可以显示当前程序的快捷键列表,恩,就只有OS X支持。

  4. 鼠鬚管
    這個有奇怪名字的軟件是MAC下的輸入法軟件,在Windows下叫小狼毫,在Linux下叫中州韻。
    它最大的優點就是速度快,定製性強。

生產工具

  1. Sublime Text
    支持各平臺的代碼編輯器,目前在Mac中寫簡單的代碼,文檔,博客都用它。

  2. XCODE
    身爲一個開發人員,Windows平臺的,(つД`) 在使用了XCODE後,不得不吐槽一句,真難用。

  3. Dash
    就是一集成各種程序猿API文檔的管理工具。百寶袋,要啥有啥。

  4. GitHub Desktop
    說到這個就想到Windows中的SVN,兩者在版本控制系統這方面來說,Git的上手可能會慢些,而SVN的上手會很快。
    而之後的使用上來說Git會領先SVN很多步。特別是Windows也有了GitHub Desktop後,不用試用下真的會後悔的,
    而且GitHub上開源項目咋麼多。不用用怎麼行。
    哦,對了,這博客是用Jeykll搭建在GitHub Pages上的。

  5. Mou
    Mou是MAC上可以實時預覽的Markdown編輯器。
    在windows平臺的童鞋們可以試試“作業部落”。

  6. MindNode Pro
    繪製思維導圖工具,用來看完書後,加固記憶。

  7. Microsoft OneNote和OmniFocus
    這兩個放一起的原因是前面的用來記錄寫代碼或生活中的一些感悟,後面的是一個時間管理的工具。
    這兩者結合使用,對我來說幫助很大。

  8. Adobe Photoshop CC
    修圖工具,不用介紹了吧。

娛樂工具

  1. Google Chrome
    最愛的瀏覽器,沒有之一。
    對了,若要使用google搜索,修改hosts就可了,具體修改方式,看這。

  2. QQ
    MAC下的QQ才是正宗的聊天工具,Windows下的推薦使用QQ輕聊版的,其他的版本,呵呵。

  3. 網易雲音樂
    網易的良心之作。

  4. Besiege
    策略遊戲吧,玩法很簡單,DIY攻城設備,破壞點城市就可以了。

  5. BombSquad
    多人玩的動作遊戲,可以使用手柄,鍵盤,手機等控制器控制。

系統安全

  1. CleanMyMac
    OS X中不需要什麼所謂的殺毒軟件,它在某意義上來說,百毒不侵的。
    所以只需要一個清理系統的軟件就可以,這裏我推薦CleanMyMac。

  2. 1Password
    密碼管理應用,如名稱一樣,只是密碼。

Hello World!

发表于 2015-10-15

Hey,This is My Blog!

接下来就是国际惯例

1
2
3
4
5
6
#include<iostream.h>
int main
{
printf("Hello, World!");
return 0;
}
12
Mandag

Mandag

动漫,美剧,电影爱好者

19 日志
© 2016 - 2017 Mandag
由 Hexo 强力驱动
主题 - NexT.Muse