朱文昊的中文博客--专注技术,向往自由
服务器和网站类
修改主题支持两种菜单并存
2010年06月28日
在本站升级到WordPress 3.0后,浏览了一下许久没有看过的themes目录,发现几个我喜欢的主题,经过一番试用,发现Mystique也就是您现在看到的主题最合我心意,后来才发现这也是digitalnature的作品,good job!
美中不足的是,Mystique配置界面中主菜单只能在无、链接、页面、分类目录和自定义菜单中做单选,我希望能把分类目录和自定义菜单并存,一起显示出来。可惜作者没有设计这样的功能。Hacking的真谛就是要自己动手,当然还有无私分享。下面我就贴出我的做法:
先来看看core.php中相关功能实现函数
View Code PHP
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 | // print the main navigation menu function mystique_navigation() { $navtype = get_mystique_option('navigation'); if($navtype): ?> <div class="shadow-left"> <div class="shadow-right clearfix"> <?php $nav_extra = apply_filters("mystique_navigation_extra", ''); // check for new icons and output if($nav_extra) echo '<p class="nav-extra">'.$nav_extra.'</p>'; ?> <ul id="navigation" class="clearfix"> <?php if((get_option('show_on_front')<>'page') && get_mystique_option('exclude_home')<>'1'): if(is_home() && !is_paged()): ?> <li class="active home"><a class="home active fadeThis" href="<?php echo get_settings('home'); ?>" title="<?php _e('You are Home','mystique'); ?>"><span class="title"><?php _e('Home','mystique'); ?></span><span class="pointer"></span></a></li> <?php else: ?> <li class="home"><a class="home fadeThis" href="<?php echo get_option('home'); ?>" title="<?php _e('Click for Home','mystique'); ?>"><span class="title"><?php _e('Home','mystique'); ?></span><span class="pointer"></span></a></li> <?php endif; endif; ?> <?php if($navtype=='categories'): mystique_list_categories(array('hide_empty' => false, 'exclude' => get_mystique_option('exclude_categories'))); elseif($navtype=='links'): $links = get_bookmarks(array( 'orderby' => 'name', 'order' => 'ASC', 'limit' => -1, 'category' => null, 'category_name' => get_mystique_option('navigation_links'), 'hide_invisible' => true, 'show_updated' => 0, 'include' => null, 'search' => '.')); foreach ($links as $link): if($link->link_target) $target = ' target="'.wp_specialchars($link->link_target).'"'; else $target = ''; if($link->link_rel) $rel = ' rel="'.wp_specialchars($link->link_rel).'"'; else $rel = ''; if($link->link_description) $title = ' title="'.wp_specialchars($link->link_description).'"'; else $title = ''; echo '<li><a class="fadeThis" href="'.$link->link_url.'"'.$target.$rel.$title.'><span class="title">'.$link->link_name.'</span><span class="pointer"></span></a><li>'; endforeach; else: mystique_list_pages(array('exclude' => get_mystique_option('exclude_pages'), 'sort_column' => 'menu_order')); endif; do_action('mystique_navigation'); ?> </ul> </div> </div> <?php endif; } |
可以看出,作者整体设计的时候,就没有想要让用户做复选,在条件判断中使用了连续的if … elseif… 实现。
我采用了一个偷懒的方法仅把
View Code PHP
1 | if($navtype=='categories'): |
注释掉,然后把接下来的
View Code PHP
1 | elseif($navtype=='links'): |
改成
View Code PHP
1 | if($navtype=='links'): |
就可以啦。
自动备份数据库并发送到电子邮箱的脚本
2010年05月11日
将网站数据库备份后留在本地硬盘上,并不是一个可靠的方案。我就把压缩后的文件发送到电子邮件信箱里。Gmail的附件目前最大25兆,QQ邮箱是50兆,所以本方法不适合大型商业网站,个人独立博客比较合适的说。
下面贴出脚本,本方法需要先安装mutt邮件客户端。
请注意,有些老点的文章中给出的示例,在邮件地址前面没有 — 符号,这会造成新版本的mutt提示 No recipients specified. 只要加上 — 符号就可以了。
还有一个注意的地方,如果连续发送很多数据库文件并保存在Sent文件中,很快就会消耗大量的本地硬盘空间。让mutt默认不保存已发送邮件的方法是修改 /etc/Muttrc文件,或者在当前用户home目录下,修改或建立一个隐藏文件 .muttrc (注意这两个M的大小写), 修改或增加这样一行 set record=”/dev/null” (一般默认为 set record=”~/Sent”),就可以让Mutt不保存已发送邮件从而节省空间了。
View Code BASH
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 | #!/bin/sh sendfiletogmail () { FilePath=$1 FileName=$2".bz2" mutt -s "Database Backup File ${FileName}" -a${FilePath}"/"${FileName} -- yourMailBox@gmail.com < "/path/to/emailbody.txt" } backup () { DBName=$@ BackupPath="/path/to/"${DBName} BackupName=${DBName}-`date "+[%z%Z]%Y-%m-%d-%H-%M-%S"`".sql" if [[ -d "${BackupPath}" ]] || mkdir ${BackupPath}; then if mysqldump -uroot -pYourPasswd \ --default-character-set=utf8 --opt --master-data=1 \ --single-transaction --flush-logs \ ${DBName} > ${BackupPath}"/"${BackupName}; then echo ${BackupName}"Backup success!" bzip2 -q -s ${BackupPath}"/"${BackupName}; sendfiletogmail ${BackupPath} ${BackupName} else echo ${BackupName}"Backup Failed@@@@@@@@@@@@@@@@@@@@@@@@" fi fi find ${BackupPath}"/" -ctime +7 -exec rm {} \; } #Call the function to backup database assigned below backup yourDBnamd_db |
name.com的whois隐私注册要收费了!?
2010年04月23日
今天打开name.com的控制面板,发现所有的Whois Privacy都从域名后面的位置另起一行,并且用红色反现.顿时预感不对.搞什么花样?很快就反应过来,肯定是要收费了.
此前免费的Whois Privacy服务一直都是name.com的特色.喜欢上name.com也是因为这个.但是估计是眼红Godaddy靠这个赚钱吧,name.com耐不住寂寞了.现在也开始收费.而且标价很贵,7.99USD/yr,现在有优惠价格为$1.99/yr.
幸好我的域名都续费了好多年,暂时不用管.但是,是不是需要在找个便宜的注册商把域名都转过去呢? 郁闷….
PS: 经过浏览name.com的官方博客,发现他们现在提供一个优惠码“FREEWHOIS”,可以减掉订单中第一年的1.99$费用,到0.00$(不就是免费一年嘛).
转载一下他们的条款原文
- All domains that currently have Private Whois already turned on will continue to receive it for free.
- The new pricing will begin today and will only apply to domains that don’t already have Private Whois enabled and/or new domain registrations.
- We are running a promotional price of just $1.99/domain per year, which is one of the lowest prices available.
- We’ve created a promo code called “FREEWHOIS” that will discount the current special pricing of $1.99 to $0.00, making this service free for the first year for orders using this promo code.
Hello, IPv6!
2010年04月15日
I just moved my sites to a brand new server with IPv6 enabled. You can ping6 zhuwenhao.com or host zhuwenhao.com to test.
My IPv6 address is [2607:f2f8:3340::1eee]
Welcome to my blog via IPv6 network!
如何选择合适的DNS解析服务器?
2010年03月17日
最合适的DNS服务器就是最快的DNS服务器。当然安全性也需要考虑一下。本文的写作完全依赖于http://www.manu-j.com/blog/opendns-alternative-google-dns-rocks/403/ 给出的材料。
首先贴出大牛的脚本 by Stevan Bajić
View Code BASH
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #!/bin/sh isp=$(dig +noall +stats 2>&1 | awk '$2~/^SERVER:$/{split($3,dnsip,"#");print dnsip[1]}'); m="-------------------------------------------------------------------------------"; s=" "; h="+${m:0:25}+${m:0:12}+${m:0:12}+${m:0:12}+${m:0:12}+${m:0:12}+"; header=("Domain${s:0:23}" "Your ISP${s:0:10}" "Google${s:0:10}" "4.2.2.2${s:0:10}" "OpenDNS${s:0:10}" "DNS Adv.${s:0:10}"); echo "${h}"; echo "| ${header[0]:0:23} | ${header[1]:0:10} | ${header[2]:0:10} | ${header[3]:0:10} | ${header[4]:0:10} | ${header[5]:0:10} |"; echo "${h}"; for i in "lifehacker.com" "facebook.com" "manu-j.com" "reddit.com" "tb4.fr" "bbc.co.uk"; do ii="${i}${s:23}"; echo -ne "| ${ii:0:23} |"; for j in "${isp}" "8.8.8.8" "4.2.2.2" "208.67.222.222" "156.154.70.1"; do r="${s:10}$(dig +noall +stats +time=9 @${j} ${i} 2>&1 | awk '$2~/^Query$/{print $4" "$5}')"; echo -ne " ${r:${#r}-10} |"; done echo -ne "\n${h}\n"; done |
保存后chmod 700 ,执行, 然后贴出我的测试结果
View Code BASH
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | zhuwenhao:~ # ./dns-speed-test.sh +-------------------------+------------+------------+------------+------------+------------+ | Domain | Your ISP | Google | 4.2.2.2 | OpenDNS | DNS Adv. | +-------------------------+------------+------------+------------+------------+------------+ | lifehacker.com | 139 msec | 27 msec | 2 msec | 0 msec | 9 msec | +-------------------------+------------+------------+------------+------------+------------+ | facebook.com | 140 msec | 27 msec | 1 msec | 0 msec | 9 msec | +-------------------------+------------+------------+------------+------------+------------+ | manu-j.com | 240 msec | 27 msec | 1 msec | 0 msec | 10 msec | +-------------------------+------------+------------+------------+------------+------------+ | reddit.com | 137 msec | 28 msec | 1 msec | 0 msec | 9 msec | +-------------------------+------------+------------+------------+------------+------------+ | tb4.fr | 177 msec | 27 msec | 2 msec | 0 msec | 9 msec | +-------------------------+------------+------------+------------+------------+------------+ | bbc.co.uk | 145 msec | 27 msec | 1 msec | 0 msec | 9 msec | +-------------------------+------------+------------+------------+------------+------------+ |
比较之下,看来最合适我的DNS就是OpenDNS了。修改配置脚本
/etc/resolv.conf 即可搞定.
View Code BASH
1 2 | nameserver 208.67.222.222 nameserver 208.67.220.220 |


Facebook
Twitter
Picasa
LinkedIn
Youtube
Digg
Buzz